我是 Selenium WebDriver 的新手,正在尝试了解“等待”元素出现的正确方法。
我正在测试一个页面,其中包含一堆带有单选按钮答案的问题。当您选择答案时,Javascript 可能会启用/禁用页面上的一些问题。
问题似乎是 Selenium '点击太快'并且没有等待 Javascript 完成。我尝试以两种方式解决这个问题 - 显式等待解决了这个问题。具体来说,这有效,并解决了我的问题:
private static WebElement findElement(final WebDriver driver, final By locator, final int timeoutSeconds) {
FluentWait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(timeoutSeconds, TimeUnit.SECONDS)
.pollingEvery(500, TimeUnit.MILLISECONDS)
.ignoring(NoSuchElementException.class);
return wait.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver webDriver) {
return driver.findElement(locator);
}
});
}
但是,我更喜欢使用隐式等待而不是这个。我的网络驱动程序配置如下:
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
这并不能解决问题,我得到了 NoSuchElementException。此外,我没有注意到 10 秒的暂停——它只是立即出错。我已经验证了代码中的这一行正在被调试器击中。我究竟做错了什么?为什么implicitlyWait 不等待元素出现,但FluentWait 会?
注意:正如我提到的,我已经有一个解决方法,我真的只是想知道为什么隐式等待不能解决我的问题。谢谢。