我使用了implicitlyWait方法来全局设置等待时间以在selenium中查找DOM元素。我等了100秒钟。但在某些情况下,司机还没有找到该元素。即使DOM元素在10秒内成功加载也完全等待100秒,100秒后它显示为“未找到元素”错误。仅在极少数情况下发生此错误。如果我再次运行该项目,它工作正常。有没有办法在全球范围内处理这个问题?
hiddenlyWait的代码
driver.manage().timeouts().implicitlyWait(100, TimeUnit.SECONDS).pageLoadTimeOut(100, TimeUnit.SECONDS);
查找元素的代码
driver.findElement(By.id("btnSearch")).click();
特定按钮的Html代码
<input id="btnSearch" class="searchStyle"/>
注意:我使用的是InternetExplorer驱动程序
此致 Sunil Prabakar C
答案 0 :(得分:0)
我只对非常静态的网站使用implicitWait。只要有像动画,AJAX调用等类似的视觉效果,我就可以使用FluentWait获得更好的效果。我仍然使用Selenium 2.x,我基本上想出的是这个例程:
private void findElement(int timeout) throws Exception {
element = null;
if (by != null) {
try {
WebDriver tempDriver = getDriver();
FluentWait<WebDriver> wait = new FluentWait<>(tempDriver)
.withTimeout(timeout, TimeUnit.SECONDS)
.pollingEvery(1, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class);
element = wait.until(new Function<WebDriver, WebElement>() {
@Override
public WebElement apply(WebDriver driver) {
List<WebElement> temp = driver.findElements(by);
if ((temp == null) || (temp.size() == 0)) {
return null;
}
return temp.get(0);
}
});
} catch (TimeoutException e) {
logger.debug("Time Out!");
}
}
}
by 的类型为org.openqa.selenium.By和元素是我使用此方法的类的字段。