Ajax 量角器-在$http调用后选择中继器中的元素

Ajax 量角器-在$http调用后选择中继器中的元素,ajax,angularjs,selenium,sails.js,protractor,Ajax,Angularjs,Selenium,Sails.js,Protractor,我开始对我的sails.js/AngularJS应用程序进行量角器测试。简而言之,我的HTML中有以下类型的ng重复: <div ng-repeat="book in books"> book.name </div> 到目前为止,我遇到的答案似乎表明,量角器应该在继续之前自动等待$http调用完成,但在我的例子中,情况似乎并非如此 我甚至尝试了4000毫秒左右的睡眠时间,在这段时间里我已经可以看到中继器中的新元素,但测试仍然将书籍[0]视为未定义的。当再次运行测试时

我开始对我的sails.js/AngularJS应用程序进行量角器测试。简而言之,我的HTML中有以下类型的ng重复:

<div ng-repeat="book in books">
  book.name
</div>
到目前为止,我遇到的答案似乎表明,量角器应该在继续之前自动等待$http调用完成,但在我的例子中,情况似乎并非如此

我甚至尝试了4000毫秒左右的睡眠时间,在这段时间里我已经可以看到中继器中的新元素,但测试仍然将
书籍[0]
视为
未定义的
。当再次运行测试时,该选项起作用,因此问题不应出现在筛选器中,而应出现在其他地方

对这件事有什么见解吗

您可以在DOM中显示新书名称:

var EC = protractor.ExpectedConditions;

var elm = element(by.xpath("//div[. = 'nameOfBook']"));
browser.wait(EC.presenceOf(elm), 10000);

您还可以等待中继器中的元素计数增加:

var countOfElementsToBe = function(elms, expectedValue) {
  return elms.count().then(function (actualValue) {
      return expectedValue === actualValue;
  });
};

var books = element.all(by.repeater('book in books'));
books.count().then(function (booksCount) {
    browser.wait(countOfElementsToBe(books, booksCount + 1), 10000);
});

(未测试)

这些似乎是绕过问题的好方法。谢谢
var countOfElementsToBe = function(elms, expectedValue) {
  return elms.count().then(function (actualValue) {
      return expectedValue === actualValue;
  });
};

var books = element.all(by.repeater('book in books'));
books.count().then(function (booksCount) {
    browser.wait(countOfElementsToBe(books, booksCount + 1), 10000);
});