javascript - 将元素数组转换为 promise 并将其返回

标签 javascript asynchronous promise protractor

这里 actualLevels 数组在期望行中抛出空数组。我需要填充 actualLevels 并仅在数组完全填充后才返回断言

代码:

var expected = ['Level 2', 'Level 3', 'Level 4'];
var actualLevels=[];

element.all(by.css('somecssid')).each(function(elm) {
    elm.getText().then(function (textValue) {
        console.log(textValue);  // prints texts of the css i.e.Level1
        actualLevels.push(textValue);
    })
}
expect(actualLevels).toBe(expected);  // jasmine expect assertion

最佳答案

您可以直接在 ElementFinderArray 上调用 getText():

expect(element.all(by.css('somecssid')).getText()).toEqual(expected);

请注意,无需手动解决 promise ,Protractor expect() 已修补以隐式理解和解决 promise 。

注意 2:toBe 将检查两个变量是否指向同一个对象 - 你需要 toEqual


仅供引用,each() 不是一个好的选择,map()会更合适:

var expected = ['Level 2', 'Level 3', 'Level 4'];
var actualLevels = element.all(by.css('somecssid')).map(function(elm) {
    return elm.getText();
});
expect(actualLevels).toEqual(expected);  // jasmine expect assertion

如果你想在控制台上额外记录文本,解析getText():

var actualLevels = element.all(by.css('somecssid')).map(function(elm) {
    return elm.getText().then(function (text) {
        console.log(text);
        return text;
    });
});

仅供引用 2:您可以用快捷方式替换 element.all(by.css('somecssid')):

$$('somecssid')

关于javascript - 将元素数组转换为 promise 并将其返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35007223/

相关文章:

c++ - 异步完成处理

javascript - Node.js 中的模块

javascript - 是否可以自定义 Chrome 或其他浏览器以在所有打开的选项卡上运行本地 JavaScript 文件?

javascript - 等待/异步匿名函数

javascript - pouchdb 事件处理程序的等待语法是什么?

javascript - redux-observable 和 rxjs。将 promise 转换为 Observable - epic 只被调用一次

typescript - "TypeError: Cannot read property ' then' of undefined

javascript - 如何有条件地从头开始重新启动 promise 链?

javascript - 为什么在连接到 indexedDB 时有时会在 onupgradeneeded 之前调用 onsuccess?

javascript - 使用 jquery 修改文本区域的撤消/重做行为