【发布时间】:2016-03-06 02:28:25
【问题描述】:
不一致是这里的主题。我有一个大型 Selenium 测试套件,它在 Mac 上给我带来了问题。我的同事使用 Windows,他们没有遇到任何问题。本质上,当我使用 TestNG 运行整个套件时,测试的行为与单独运行时不同。单独地,测试完成没有任何问题。当作为一个整体运行时,目前大约有十个测试,要执行的第三个测试总是挂在完全相同的位置。它试图找到一个元素并且永远不会从 Selenium API 中出来。下面用XXX标记了不归路。
driver.manage().timeouts().pageLoadTimeout(20000, TimeUnit.MILLISECONDS);
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
try {
element = driver.findElement(By.xpath(xpathLocator)); // XXX
} catch (NoSuchElementException | org.openqa.selenium.TimeoutException e)
套件未并行运行。 Chrome、Firefox 和 Safari 中也发生了相同的行为,尽管当程序挂起时正在寻找的元素在浏览器之间确实发生了变化。我目前正在使用 Mac 10.10.6 和最新版本的 Selenium、Eclipse 和 TestNG。同样的行为也发生在不同的 Mac 机器上。无论我是在 Eclipse 中还是从命令行运行 TestNG 套件,其行为也是相同的。当通过-log someFile 在节点上启用日志记录或当节点在远程机器上(即非本地)运行时,整个套件的执行没有任何问题。该套件相当大,因此如果我可以在此处发布任何其他有助于诊断问题的代码,请告诉我。任何可以为我指明正确方向的想法都会非常有帮助。
【问题讨论】:
-
您是否尝试过将其关闭再打开?听起来像这样的东西实际上可以提供帮助。
-
我会试试这个:1)在查找元素之前插入一个记录器(保存视口屏幕截图和原始 html)2)单独运行测试 3)运行整个套件 4)比较成功和失败之间的屏幕截图和原始 html同一测试的测试结果。 5)弄清楚发生了什么;-)
-
技巧:使用 firebug add on 运行并在调试模式下运行您的套件。就在找到元素之前停在那里并在萤火虫中检查元素是否存在?如果该元素与您正在使用的定位器一起出现(我怀疑),那么问题是别的,否则您发现了问题:)
-
...although the element that is being sought when the program hangs does change between browsers你能详细说明一下吗,只是为了清楚。 -
@nullpointer 假设我们只在 Chrome 中运行该套件。某个页面上有一个锚元素。该锚元素的 XPath 是在执行挂起时传递到
findElement()的内容。杀死程序,在 Chrome 中再次运行它。执行再次挂起。当程序挂起时,同一个锚点就是传递给findElement()的内容。杀死程序,在 Firefox 上运行该套件。它仍然会挂在findElement(),但传入的 XPath 将与我们在 Chrome 中的锚标记不同。
标签: java selenium selenium-webdriver testng