我在编写我的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帖子,但没有一个有帮助。关于我在这里做错了什么想法?
答案 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能够弄清楚它应该等待它。