Tom*_*ijs 11 angularjs selenium-webdriver protractor
我一直在Protractor开发自动化测试很长一段时间,就像很多人一样,我遇到了只能与browser.sleep()-bridge 交叉的空白.我不喜欢硬编码这样的东西,但如果它是必要的,我会的.
我开发的测试让我发现每个browser.sleep(1000)都对我的运行时产生重大影响.这些测试目前正在测试不同帐户的权限(确切地说是128个),这涉及登录和退出,同时检查每个帐户的访问权限和访问权限.
我正在测试的网站是一个纯粹的AngularJS应用程序,在我看来,它应该是browser.sleep()一个弃用的方法,因为有一种browser.waitForAngular()方法可以准确地等待页面完全加载,相比之下browser.sleep()等待一段时间,如果你的网站是在那个时间内(它发生)加载,你将有一个不一致的测试(没有人喜欢不一致).
研究让我相信browser.waitForAngular()没有考虑动画和相关的耗时功能,因为它们不是AngularJS相关的,但我们的网站没有实现.也waitForAngular()基本上等待$digest,$http和$timeout.
我要问的是,这是一个被认为是可接受的损失的东西,因为量角器总体上很棒或者有什么我在这里俯瞰?
TL; DR:那里有解决办法让我们不满足于此browser.sleep()吗?
来源:量角器超时文档, Timeout-spec.js(量角器文档), Issue909,Issue279,Issue92,StackQuestion1
Mic*_*mza 11
如果您可以设计某种测试来确定您所等待的内容是否已完成,则可以使用browser.wait.从http://docsplendid.com/archives/209获取想法,您可以传递一个函数,该函数返回一个解析为的promise true或者false,例如使用的promiseisPresent
browser.wait(function() {
return element(by.id('some-element')).isPresent();
}, 1000);
Run Code Online (Sandbox Code Playgroud)
或者如果你有一些更复杂的条件,你可以使用promise chaining:
browser.wait(function() {
return element(by.id('some-element')).isPresent().then(function(isPresent) {
return !isPresent;
});
}, 1000);
Run Code Online (Sandbox Code Playgroud)
并且命令流将等待,重复调用传递给的函数wait,直到它返回的promise解析为true.
| 归档时间: |
|
| 查看次数: |
13676 次 |
| 最近记录: |