我维护一个复杂的 Angular (1.5.x) 应用程序,正在使用 Protractor (2.5.x) 对其进行 E2E 测试。我在使用这种方法时遇到了一个问题,主要表现为测试看起来不稳定。在一个拉取请求中运行良好的测试在另一拉取请求中失败。这涉及简单的定位器,例如 by.linkTest(...)。我调试了失败的测试,并且应用程序位于正确的页面上,链接存在且可访问。
还有其他人遇到过这些一致性问题吗?知道原因或解决方法吗?
对更多的端到端测试说不! http://googletesting.blogspot.com/2015/04/just-say-no-to-more-end-to-end-tests.html
也就是说,您可以采取以下几项措施来应对我们共同的无情“脆弱”敌人:
- 更新到最新量角器 https://github.com/angular/protractor/blob/master/CHANGELOG.md(目前4.0.0)这也带来了最新的
selenium
and chromedriver
with it
- 关闭角度动画 https://stackoverflow.com/questions/26584451/how-to-disable-animations-in-protractor-for-angular-js-application
-
使用龙browser.wait() http://www.protractortest.org/#/api?view=webdriver.WebDriver.prototype.wait与一组内置或自定义预期条件 http://www.protractortest.org/#/api?view=ProtractorExpectedConditions。这可能是迄今为止解决该问题最可靠的方法。不幸的是,这是特定于用例和问题的,您需要在有问题的地方修改实际测试。例如,如果您需要单击某个元素,请等待它可单击:
var EC = protractor.ExpectedConditions;
var elm = $("#myid");
browser.wait(EC.elementToBeClickable(elm), 5000);
elm.click();
-
最大化浏览器窗口(以避免随机元素不可见或不可点击的错误)。把这个放到onPrepare()
:
browser.driver.manage().window().maximize();
- 增加量角器和 Jasmine 超时 http://www.protractortest.org/#/timeouts
-
减慢量角器速度 https://stackoverflow.com/questions/24960290/can-protractor-be-made-to-run-slowly通过调整控制流 http://www.protractortest.org/#/control-flow(不确定4.0.0是否有效,请测试)
- 手动调用
browser.waitForAngular();
在有问题的地方。我不确定为什么这会有所帮助,但我看过一些报告,其中它确实有助于修复不稳定的测试。
- use the jasmine done()打回来 http://jasmine.github.io/2.0/introduction.html#section-Asynchronous_Support在你的规格中。例如,这可能有助于不启动
it()
阻塞直到done
被叫进beforeEach()
-
返回一个承诺onPrepare()功能 https://stackoverflow.com/questions/34482583/force-protractors-onprepare-to-wait-for-async-http-request。这通常有助于确保为测试运行做好准备
- use protractor-flake package https://www.npmjs.com/package/protractor-flake那会自动重新运行失败的测试。更像是解决问题的快速方法
还有其他针对特定问题的“技巧”,例如在文本框中输入速度缓慢 https://stackoverflow.com/q/38187514/771848,点击通过 JavaScript https://stackoverflow.com/questions/34562061/webdriver-click-vs-javascript-click etc.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)