微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ajax – 量角器 – $http调用后在转发器中选择元素

我开始对我的sails.js / AngularJS app进行量角器测试.简化,我的 HTML中有以下类型的ng-repeat:

<div ng-repeat="book in books">
  book.name
</div>

我的测试单击一个按钮,该按钮向服务器发送$http POST调用,创建另一本书,并在成功时将另一本书添加到$scope.books.问题是测试失败,因为当测试检查它的存在时,还没有创建该书.我知道我的定位器/过滤器工作,因为再次运行测试(=在发送呼叫之前存在该书)测试成功.

测试:

element.all(by.buttonText('Save')).
        filter(function(elem) {return elem.isdisplayed();}).
        first().
        click();

    browser.sleep(500); // even this doesn't work :(

    element.all(by.repeater('book in books')).filter(function(elem,index) {
        return elem.getText().then(function(text) {
            return text === "nameOfBook";
        });
    })
    .then(function(books) {
        expect(books[0].isPresent()).toEqual(true);
    });

到目前为止,我遇到的答案似乎表明量角器应该在继续之前自动等待$http调用完成,但在我的情况下它似乎并非如此.

我甚至尝试过4000毫秒左右的睡眠时间,我已经可以看到转发器中的新元素,但测试仍然看到书籍[0]未定义.再次运行测试时的工作原因所以问题不应该在过滤器中,而应该在其他地方.

有关此事的任何见解?

解决方法

您可以在07,000中将新书名称存在于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);
});

(未测试)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐