量角器等待超时

时间:2015-04-18 21:23:46

标签: angularjs ionic-framework protractor bdd

我在编写我的angularjs e2e测试时遇到了Protractor的问题。

对于以下代码,它抛出的错误是Failed: Wait timed out after 1025ms。此测试专门针对Ionic Modal,因此它的转换持续时间不到1000毫秒。

it('should close the modal on button click', function () {
    expect(modal.isPresent()).toBeTruthy();
    element(by.css(merchantInfoClose)).click();        
    // wait for close animation to complete
    browser.driver.wait(function() {
        return !browser.isElementPresent(modal);
    }, 1000).then(function() {
        expect(modal.isPresent).toBeFalsy();
    });
});

我非常关注如何解决这个问题,并阅读了很多关于量角器超时问题的SO帖子,但没有一个有帮助。关于我在这里做错了什么想法?

2 个答案:

答案 0 :(得分:3)

由于我们无法重现问题,我们只能假设并提出可能的解决方案。我会尝试使用stalenessOf expected condition

  

期望检查元素是否未附加到页面的DOM。

var EC = protractor.ExpectedConditions;
browser.wait(EC.stalenessOf(modal), 1000);

答案 1 :(得分:3)

可能是模态始终存在,但其可见性是否已切换? 然后,我怀疑你应该检查可见的元素而不是 present

expect(modal.isDisplayed()).toBeTruthy();

另见How to use protractor to check if an element is visible?

然后,您可以使用ExpectedConditions.visibilityOf使用@alecxe建议的预期条件。

我也觉得click()承诺后面跟then有点怀疑。以下工作如何?

element(by.css(merchantInfoClose)).click().then(function() {
  expect(modal.isDisplayed()).toBeFalsy();
}

这将假设模态在准备好动画时通知Angular,并且Protractor能够弄清楚它应该等待它。