browser.findElements(protractor.By.repeater('cat in cats')).then(function(rows) {
for (i = 0; i < rows.length; i++) { //which is always 3
var tmp = element(by.repeater('cat in cats').row(i)).element(by.binding('cat.name')).getText();
tmp.then(function(text) {
console.log('text is : ' + text);
console.log('iteration number is: ' + i);
if (text == 'someText') {
element(by.repeater('cat in cats').row(i)).element(by.binding('cat.action')).click();
}
});
}
在这种情况下,&#39; i&#39;函数内部总是返回3。 我得到了文本,然后检查文本是否是我想要的,然后单击一个元素。
&#39; i&#39;的价值在&#39;如果&#39;声明总是返回3.与承诺有关,但我不确定。 任何有关修改代码的帮助都非常感谢。
谢谢!
答案 0 :(得分:4)
不要多次致电by.repeater()
;相反,使用map()
和&#34;链&#34;这样的承诺:
element.all(By.repeater('cat in cats')).map(function(elm) {
return {
text: elm.element(by.binding('cat.name')).getText(),
action: elm.element(by.binding('cat.action'))
};
}).then(function(arr) {
for (var i = 0; i < arr.length; i++) {
if (arr[i].text == 'someText') {
return arr[i].action;
}
}
throw new Error('Text not found');
}).then(function(elm) {
elm.click();
});
所有学分都转到@Andres,获取此处提供的解决方案:
另见: