为什么我的Selenium Automation测试套件会间歇性地失败?

时间:2016-08-11 09:58:44

标签: selenium-webdriver selenium-chromedriver

我的测试套件间歇性地失败,因为找不到元素'即使在进行了所有类型的等待(waitForPageLoad,Thread.sleep和显式等待元素加载到页面中)之后,它也会间歇性地失败。

当运行相同的测试用例时,单独运行良好,有时还有n个测试用例,它工作正常。当我尝试运行由30到40组成的完整自动化测试套件时,测试用例无法保持一致性测试用例。

任何人都可以帮我找到相同的根本原因。

我在后续阶段通过maven运行测试套件:

<executions><execution>         
 <phase>site</phase>            
   <goals>              
      <goal>send-mail</goal>            
   </goals>     
</execution> </executions>

Maven阶段的运行是否有任何关系?

1 个答案:

答案 0 :(得分:0)

我不了解Maven,但您正在等待页面加载,但这并不一定意味着您想要的元素已加载。

我认为您需要确定您想要的元素实际存在,如果存在,则是互动的。

你说你正在使用Thread.sleep()但是这只会等待一段特定的时间,而没有关于页面上元素存在的任何情报。

您应该做的是轮询元素以变得可用。尝试查看明确等待http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp

在这里,您将两个元素WebDriverWait和ExpectedCondition结合起来,这样您就可以等到元素可点击最多30秒然后失败。

另外你说测试在隔离状态下运行良好但在运行中运行不佳。这告诉我你没有将你的环境重置为一个众所周知的状态。一个简单的例子是在每次测试后关闭浏览器,更好的方法是为每个测试用例启动一个不可变的VM(或docker容器),这样你就可以一遍又一遍地得到同样的东西。

虽然有些情况下你不想这样做,看看你的测试如何处理浸泡。

获得稳定和可重复性应该是您的主要关注点。查看测试失败的时间并确认您想要的元素在该特定时间实际可用。内存泄漏等......可以减慢浏览器的速度,让你的睡眠时间缩短3秒。如果你要等到覆盖缺陷,请使用大量睡眠(记住民意调查更好)来覆盖它并让你在缺陷时保持稳定正在努力。