我有一个Selenium WebDriver测试在解除模态窗口然后等待元素后失败。具体来说,它无法在FluentWait
调用中查找元素。我已经尝试了各种不同的方式来设置等待,但没有一种方法可行。以下是我认为应该有效的方法:
失败的测试代码:
driver.findElement(By.className("dismiss")).click(); // this dismisses a modal window
driver.switchTo().defaultContent();
FluentWait<WebDriver> fluentWait = new FluentWait<WebDriver>(driver)
.withTimeout(30, TimeUnit.SECONDS)
.pollingEvery(500, TimeUnit.MILLISECONDS)
.ignoring(NoSuchElementException.class);
fluentWait.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.className("next"))));
driver.findElement(By.className("next")).click();
这里发生故障,在等待呼叫中寻找元素:
org.openqa.selenium.NoSuchElementException:无法找到元素: {&#34;方法&#34;:&#34;类名&#34;,&#34;选择器&#34;:&#34; next&#34;}命令持续时间或超时: 1.33秒有关此错误的文档,请访问:http://seleniumhq.org/exceptions/no_such_element.html构建信息: 版本:&#39; 2.41.0&#39;,修订版:&#39; 3192d8a&#39;,时间:&#39; 2014-03-27 17:17:32&#39; 系统信息:主持人:&#39; 7rzrgv1.bsolver.local&#39;,ip:&#39; 10.0.3.103&#39;,os.name: &#39; Linux&#39;,os.arch:&#39; amd64&#39;,os.version:&#39; 2.6.32-431.el6.x86_64&#39;, java.version:&#39; 1.7.0_60&#39;会话ID: 56c5a752-68fd-4cdb-ae57-2fcefc930f6f驱动程序信息: org.openqa.selenium.firefox.FirefoxDriver功能 [{platform = LINUX,acceptSslCerts = true,javascriptEnabled = true, cssSelectorsEnabled = true,databaseEnabled = true,browserName = firefox, handlesAlerts = true,browserConnectionEnabled = true, webStorageEnabled = true,nativeEvents = false,rotate = false, locationContextEnabled = true,applicationCacheEnabled = true, takesScreenshot = true,version = 24.6.0}]
如果我用fluentWait.until
替换Thread.sleep(5000)
来电,click()
每次都有效。
一个有趣的说明......只有在Xvfb上运行Firefox的无头机器上运行测试时才会出现这种情况。当存在实际的GUI时,它不会发生。
所以,有几个问题:
为什么FluentWait
不会忽略NoSuchElementException
?
除了隐含的等待之外,有没有人想过更优雅的方式处理这个问题?
答案 0 :(得分:1)
我遇到了同样的问题。 @Karna和@Axl帮助我搞清楚了。我使用import java.util.NoSuchElementException;
代替import org.openqa.selenium.NoSuchElementException;
。