如何等待显示ng-repeat的所有元素

时间:2016-06-07 20:34:10

标签: javascript angularjs testing angularjs-ng-repeat protractor

Panel Property Page:

this.IncList = element.all(by.repeater('list in $ctrl.all track by list.guid'));

等待列表显示的功能:

exports.WaitUntilListDisplaye = function(){
    browser.wait(function(){
        Panel.IncList.isDisplayed();
    },10000);
};

如果我在测试中使用此功能等待列表的所有项目显示,则每次都超时。有没有办法等到显示ng-repeat的所有元素。

2 个答案:

答案 0 :(得分:2)

不会从等待函数中返回任何内容 - 因此条件总是“假的”并且你得到超时异常:

exports.WaitUntilListDisplayed = function(){
    browser.wait(function() {
        return Panel.List.isDisplayed();
    }, 10000);
};

请注意,您显示的页面对象字段名为IncList,但您在预期条件内使用List

此外,您可以使用by.exactRepeater并省略“track by”部分:

this.IncList = element.all(by.exactRepeater('list in $ctrl.all'));

答案 1 :(得分:1)

由于Panel.List返回多个元素,您需要返回一个Promise,评估false返回的数组中没有isDisplayed()

browser.wait(function(){
  return Panel.List.isDisplayed().then(results => results.indexOf(false) == -1);
}, 5000, "some elements are not visible");