隐含地等不行

时间:2017-02-27 09:26:45

标签: java selenium selenium-webdriver automation

我使用了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

1 个答案:

答案 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和元素是我使用此方法的类的字段。