java - FluentWait 忽略不按预期工作

标签 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: Unable to locate element: {"method":"class name","selector":"next"} Command duration or timeout: 1.33 seconds For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html Build info: version: '2.41.0', revision: '3192d8a', time: '2014-03-27 17:17:32' System info: host: '7rzrgv1.bsolver.local', ip: '10.0.3.103', os.name: 'Linux', os.arch: 'amd64', os.version: '2.6.32-431.el6.x86_64', java.version: '1.7.0_60' Session ID: 56c5a752-68fd-4cdb-ae57-2fcefc930f6f Driver info: org.openqa.selenium.firefox.FirefoxDriver Capabilities [{platform=LINUX, acceptSslCerts=true, javascriptEnabled=true, cssSelectorsEnabled=true, databaseEnabled=true, browserName=firefox, handlesAlerts=true, browserConnectionEnabled=true, webStorageEnabled=true, nativeEvents=false, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=24.6.0}]

如果我用 Thread.sleep(5000) 替换 fluentWait.until 调用,click() 每次都有效。

一个有趣的注意事项……只有在 Xvfb 之上运行 Firefox 的 headless 机器上运行测试时才会出现这种情况。当存在实际的 GUI 时,它不会发生。

那么,有几个问题:

为什么 FluentWait 没有忽略 NoSuchElementException

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

最佳答案

我遇到了同样的问题。 @Karna 和@Axl 帮我弄明白了。我使用的是 import java.util.NoSuchElementException; 而不是 import org.openqa.selenium.NoSuchElementException;

关于java - FluentWait 忽略不按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24395700/

相关文章:

java - 如何最大化 Selenium 屏

java - 选择不起作用时如何从 DropDownList 中选择选项

java - 这是什么类型的窗口,我该如何使用 Selenium 处理它?自动化?

python - 如何使用带有 Python 的 Selenium WebDriver 获取找到的元素数量?

java - Netbeans 无法打开项目或任何东西

java - 哪个 Java 数据结构移动最后检索到的元素的位置?

java - 在非 Activity 类中创建警报对话框

java - 从外部获取网站内容的最佳方式

java - [严重]通过Java调用selenium的driver.get()方法时出现: Timed out receiving message from renderer: 298. 674

python - send_keys(Keys.RETURN) 抛出错误