这里 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/