我维护了一个复杂的 Angular (1.5.x) 应用程序,该应用程序正在使用 Protractor (2.5.x) 进行 E2E 测试。我在使用这种方法时遇到了一个问题,主要表现为测试看起来不稳定。在一个拉取请求中运行良好的测试在另一个请求中失败。这涉及简单的定位器,例如 by.linkTest(...)。我调试了失败的测试,应用程序位于正确的页面上,链接存在且可访问。
有没有其他人遇到过这些一致性问题?知道原因或解决方法吗?
最佳答案
Just Say No to More End-to-End Tests!
也就是说,您可以采取以下几项措施来解决我们共同的无情“脆弱”敌人:
selenium
和 chromedriver
browser.wait()
与一组 built-in or custom Expected Conditions 一起使用。这可能是迄今为止最可靠的解决问题的方法。不幸的是,这是特定于用例和问题的,您需要在有问题的地方修改您的实际测试。例如,如果您需要单击一个元素,请等待它可单击:var EC = protractor.ExpectedConditions;
var elm = $("#myid");
browser.wait(EC.elementToBeClickable(elm), 5000);
elm.click();
onPrepare()
:browser.driver.manage().window().maximize();
browser.waitForAngular();
。我不确定为什么这会有所帮助,但我看过报告,其中肯定有助于修复不稳定的测试。 done()
callback。例如,这可能有助于在 it()
done
之前不启动 beforeEach()
块onPrepare()
function 。这通常有助于确保为测试运行做好准备protractor-flake
package 会自动重新运行失败的测试。更像是问题的快速解决方法 还有其他特定于问题的“技巧”,例如 slow typing into the text box 、单击 via JavaScript 等。
关于selenium - Protractor 片状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38586581/