首页 > 解决方案 > 硒随机失效

问题描述

在 Selenium 中,我最初进行了 30 次测试,它成功通过了所有测试。现在我有 130 次测试,每次运行时,它都会通过一些随机测试,或者如果我幸运的话,它会全部通过。有人在 Selenium 中遇到过这种不稳定性吗?

标签: seleniumselenium-webdriver

解决方案


是的,很糟糕

尤其是如果你的测试是针对一个公共网站并在各种浏览器上运行的,那么时间就会有很大的不同,而且各种 Web 驱动程序的质量程度也大不相同。即使在受控环境中,Selenium 测试也不是很确定。某些 Web 驱动程序/浏览器组合特别容易出错。(以我个人的经验,Safari 是迄今为止最糟糕的,比 IE 11 差得多。)

什么是失败?

我们的政策是仅在测试失败 3 次时才计算失败。我们运行所有测试,重新运行失败,然后再次重新运行剩余的失败。然后我们开始调查。

稳步提升

如果您保留测试结果历史记录(并且您应该!),那么您可以不时检查在第一次运行时最常失败的测试,看看您是否可以做出改进。我们有一个定期的 flaky-test 会议,我们尝试在不影响测试完整性的情况下改进至少一项测试。作为一个例子,这是我们用来让 Safari 变得不那么脆弱的 (Java) 代码:

public void click(boolean useSafariWorkaround) {
    if (useSafariWorkaround && driver.isSafari()) {
        driver.executeScript("arguments[0].click();", webElement);
    }
    else {
        webElement.click();
    }
}

如果我们不对 Safari 进行特殊处理,它通常会在点击时失败。但是,如果我们在任何地方都使用这种解决方法很多地方都会失败,否则会失败。所以我们默认是false当我们调用它的时候,并且只在 Safari 容易失败的地方才将其更改为 true。

等待,但不是永远

当然,您应该在大多数地方使用隐式等待,在这些地方您轮询页面上的某些内容长达 5 或 10 秒,并且只有在这段时间内找不到它时才会失败。确保您使用 Selenium 提供的等待方法(例如WebDriverWait),这样您就不会等待超过您必须等待的时间。Selenium 测试足够慢,无需在每个选择器上等待 5 或 10 秒。


推荐阅读