加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 02:50:24 所属栏目:百科 来源:网络整理
导读:我开始对我的sails.js / AngularJS app进行量角器测试.简化,我的 HTML中有以下类型的ng-repeat: div ng-repeat="book in books" book.name/div 我的测试单击一个按钮,该按钮向服务器发送$http POST调用,创建另一本书,并在成功时将另一本书添加到$scope.book
我开始对我的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);
});

(未测试)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读