Ion*_*chy 12 selenium automation jasmine protractor jasmine2.0
我维护一个复杂的Angular(1.5.x)应用程序,使用Protractor(2.5.x)进行E2E测试.我遇到了这种方法的问题,主要表现在测试看起来很脆弱的方式.在一个拉取请求中完美运行的测试在另一个拉取请求中失败.这涉及简单的定位器,例如by.linkTest(...).我调试了失败的测试,应用程序位于正确的页面上,链接存在且可访问.
有没有其他人遇到这些一致性问题?了解原因或解决方法?
ale*_*cxe 13
也就是说,这里有一些你可以做的事情来解决我们共同无情的"片状"敌人:
selenium和chromedriver它用龙 browser.wait()一组内置或自定义的预期条件.这可能是迄今为止解决问题的最可靠方法.不幸的是,这是用例和特定问题,您需要在有问题的地方修改您的实际测试.例如,如果需要单击元素,请等待它可单击:
var EC = protractor.ExpectedConditions;
var elm = $("#myid");
browser.wait(EC.elementToBeClickable(elm), 5000);
elm.click();
Run Code Online (Sandbox Code Playgroud)最大化浏览器窗口(以避免随机元素不可见或不可点击的错误).把它放到onPrepare():
browser.driver.manage().window().maximize();
Run Code Online (Sandbox Code Playgroud)browser.waitForAngular();有问题的地方.我不确定为什么这会有所帮助,但我已经看到报告肯定有助于修复一个片状测试.done()回调.例如,这可能有助于在调用it()之前不启动块donebeforeEach()onPrepare()函数返回一个promise.这通常有助于确保为测试运行做好准备protractor-flake包将自动重新运行失败的测试.更像是对问题的快速解决方法还有其他特定于问题的"技巧",如在文本框中慢速输入,通过JavaScript点击等.
是的,我想我们所有人都经历过这样的不稳定问题。
事实上,对于任何浏览器自动化工具来说,不稳定都是很常见的问题。然而,在 Protractor 的情况下,这种情况应该会更少,因为 Protractor 具有内置的等待考虑,仅在正确加载 dom 后才执行操作。但是,在少数情况下,如果您看到间歇性故障,您可能必须使用一些显式等待。
我更喜欢使用一些智能等待方法,例如:
function waitForElementToClickable(locator) {
var domElement = element(by.css(locator)),
isClickable = protractor.ExpectedConditions.elementToBeClickable(domElement);
return browser.wait(isClickable, 2000)
.then(function () {
return domElement;
});
}
Run Code Online (Sandbox Code Playgroud)
browser.sleep()如果使用 2000 毫秒作为超时,您可以使用变量对其进行配置。有时,当我的智能等待不起作用时,我也会这样做。
| 归档时间: |
|
| 查看次数: |
2730 次 |
| 最近记录: |