使 Selenium 测试稳定

Posted

技术标签:

【中文标题】使 Selenium 测试稳定【英文标题】:Making Selenium Tests Stable 【发布时间】:2016-01-25 11:47:14 【问题描述】:

我对自动化有一个问题。我不同意它绝对是测试应用程序的最佳方法,但从某种意义上说,实现稳定性非常困难。你们如何使测试稳定?当然,我添加了显式等待和偶尔的thread.sleep(),但它们从来都不是 100% 稳定的。这个线程的重点是发布一些你们发现的对自动化测试产生影响的提示和技巧

【问题讨论】:

如果您只关心“等待”,请访问***.com/questions/12858972/… 等待不是我唯一关心的问题。还有其他方法可以使测试更稳定,这就是我想要找出的 稳定是什么意思?哪些事情破坏了您的测试? 通常是元素不可点击,这是一个未知错误。我已经尝试过 javascript 执行程序,它适用于某些人。等待确实是我用来帮助稳定它们的唯一方法。稳定我的意思是让你绝对确定地运行你的测试,唯一会导致你的测试失败的是缺陷。有时我的测试运行得很好,其他时候就没那么好了 【参考方案1】:

我建议您查看Selenide,因为如果您不想努力弄清楚如何使自己的框架稳定,您可以使用 Selenide 框架让自己开始,然后您就不需要不用再担心等待了。

当然,创建自己的框架是有一定价值的,尤其是在您进行测试驱动开发并希望对 Sonar 代码覆盖的框架进行单元测试时。但是,如果您没有达到这个水平,我建议您使用 Selenide,因为它对您的成功影响最大。

【讨论】:

【参考方案2】:

你应该尽量避免使用 thread.sleep(),原因是当你到了拥有大型测试套件的地步时,你会浪费你的时间在等待上。而是学习如何使用Explicit and Implicit Waits。

社区专家建议更频繁地使用显式等待,它可以让您等待特定操作发生,一旦发生,WebDriver 将继续工作而不会浪费任何时间。

尽管 Mark Collin 在Mastering Selenium WebDriver book 中写了一些更高级的提示和技巧

有时您可以故意使测试失败并捕获异常然后根据它做出决定,学习如何使用“try catch”,我认为这不是一个好习惯,但我见过测试工程师(包括我自己)经常使用它。

【讨论】:

以上信息非常正确。经常使用显式等待。 Try/catch 在正确使用时非常有用,但是您的大部分期望/实际结果检查都可以并且(在我看来)应该通过 if/else 语句和创造性地使用 fail() 方法来完成。

以上是关于使 Selenium 测试稳定的主要内容,如果未能解决你的问题,请参考以下文章

Selenium:如何使 Web 驱动程序在执行另一个测试之前等待页面刷新

selenium元素单击不稳定解决方法

初始Selenium

初始Selenium

初始Selenium

初始Selenium