FluentWait忽略不按预期工作

时间:2014-06-24 20:29:13

标签: java selenium selenium-webdriver

我有一个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

除了隐含的等待之外,有没有人想过更优雅的方式处理这个问题?

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。 @Karna和@Axl帮助我搞清楚了。我使用import java.util.NoSuchElementException;代替import org.openqa.selenium.NoSuchElementException;