相关疑难解决方法(0)

Selenium WebDriver:Fluent等待按预期工作,但隐式等待没有

我是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);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

但是,我宁愿使用隐式等待而不是这样.我的网页驱动程序配置如下:

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
Run Code Online (Sandbox Code Playgroud)

这没有解决问题,我得到一个NoSuchElementException.另外,我没有注意到10秒的暂停 - 它只是立即出错.我已经验证了代码中的这一行是用调试器命中的.我究竟做错了什么?为什么implicitlyWait不等待元素出现,但FluentWait呢?

注意:正如我所提到的,我已经有了解决方法,我真的只想知道为什么隐式等待不能解决我的问题.谢谢.

selenium webdriver

27
推荐指数
1
解决办法
5万
查看次数

标签 统计

selenium ×1

webdriver ×1