在量角器测试用例中无法单击转发器中的匹配行按钮?

时间:2015-06-26 10:38:38

标签: angularjs angularjs-ng-repeat protractor

这是我的测试代码,当我运行测试时,它总是单击最后一行按钮,无法单击匹配的行按钮。

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测试用例的初学者。

1 个答案:

答案 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();