【问题标题】:implicitlyWait not working隐式等待不起作用
【发布时间】:2017-07-17 20:19:21
【问题描述】:

我使用了implicitlyWait 方法来全局设置等待时间以在selenium 中查找DOM 元素。我给了100秒的等待时间。但在某些情况下,驱动程序没有找到该元素。即使 DOM 元素在 10 秒内成功加载,它也会完全等待 100 秒,100 秒后它显示为“找不到元素”错误。此错误仅在极少数情况下发生。如果我再次运行该项目,它工作正常。有什么办法可以在全球范围内处理这个问题?

隐式等待的代码

driver.manage().timeouts().implicitlyWait(100, TimeUnit.SECONDS).pageLoadTimeOut(100, TimeUnit.SECONDS);

查找元素的代码

driver.findElement(By.id("btnSearch")).click();

特定按钮的 HTML 代码

<input id="btnSearch" class="searchStyle"/>

注意:我正在使用 InternetExplorer 驱动程序

问候, 苏尼尔·普拉巴卡尔 C

【问题讨论】:

  • 我怀疑人们有足够的数据来帮助你。如果只是为了确保每次都确实应该找到它,那么您找不到的按钮的 HTML(和/或 JS)代码会很好。
  • 离题...但是为什么要使用隐式等待?您在测试中增加了不必要的执行时间。
  • 我正在使用隐式等待,因为有时我的网页需要一些加载时间。在那种情况下,驱动程序无法找到元素。为了避免这些类型的问题,我正在使用隐式等待。
  • 如果它是间歇性的,我会在 try/catch 块中包围调用,记录错误消息并在 catch 内,我会尝试使用 JavascriptExecutor 运行它。有时Selenium 不会评估元素是否“准备好”执行某些操作,并且可以通过 javascript 实现。只是猜测。

标签: java selenium selenium-webdriver automation


【解决方案1】:

我只会对非常静态的网站使用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 类型,element 是我使用此方法的类的字段。

【讨论】:

    猜你喜欢
    • 2018-08-05
    • 1970-01-01
    • 2020-01-20
    • 2022-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多