这是我的测试代码,当我运行测试时,它总是单击最后一行按钮,无法单击匹配的行按钮。
it('repeater element check',function(){
browser.get('http://test.worker.mondaz.com/#/Company/Select');
browser.sleep(1000);
var result = element.all(by.repeater('co in CoList'));
result.then(function(arr) {
for (var i = 0; i < arr.length; ++i) {
arr[i].element(by.binding('co.Nm')).getText().then(function(text) {
if(text=="Monday Ventures Private Limited") {
console.log(text);
console.log("Mathced");
console.log(i);//this is always giving my total row count
element(by.repeater('coCoList').row(i)).element(by.name('customRadio')).click();
}
});
}
});
}
我是Angular Protractor测试用例的初学者。
答案 0 :(得分:1)
您应该使用element.all(locator).filter(filterFn)过滤掉“Monday”元素,而不是在element.all
返回的承诺数组上使用for循环。
如果我正确理解你现在的代码,它将首先遍历promises数组而不等待它们的完成。因此i
将等于总行数。只有这样才能执行实际匹配的行function (text) { ... }
,但是你没有预料到i
的值。
编辑:包括基于此答案的工作代码,取自@ chandru-yadhav的评论:
var items = element.all(by.repeater('co in CoList')).filter(function(item) {
return item.element(by.binding('co.Nm')).getText().then(function(label) {
return label === 'Monday Ventures Private Limited';
});
});
items.get(0).element(by.name('customRadio')).click();