![](/img/trans.png)
[英]Selenium Eclipse Test Suite tests fail in the suite, but are successful when run individually
[英]A Selenium test passes when run individually, hangs when run in a suite, and amazingly passes in the suite when logging is enabled or run remotely
不一致是这里的主题。 我有一个大的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套件还是从命令行运行TestNG套件,行为也是一样的。 通过-log someFile
在节点上启用日志记录时,或者当节点在远程计算机上运行时(即不在本地),执行整个套件时没有任何问题。 该套件相当大,所以如果有任何其他代码,我可以在这里发布,这将有助于诊断问题,请告诉我。 任何指向正确方向的想法都会非常有帮助。
放置超时和等待本质上是主观的,因为页面加载的时间可能不同。 您可以做的最好的事情是将它放在while循环中,但是包含一个大的超时来强制代码退出while循环,或者如果找不到该元素则抛出错误,因为它毕竟是一个测试。
int i = 0;
while (!driver.findElement(By.xpath(xpathLocator))
{
//timeout goes here
i++;
if (i == 10) throw new exception
}
这样的事情应该可以解决问题
我认为你应该从'0'隐式增加等待。
我听说Mac中存在一些HTML加载问题。 通过增加时间值,它将解决DOM加载问题。
Selenium Document说这是关于隐含的等等。
隐式等待隐式等待是指在尝试查找一个或多个元素(如果它们不能立即可用)时,让WebDriver轮询DOM一段时间。 默认设置为0.设置后,将为WebDriver对象instanc的生命周期设置隐式等待
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.