Selenium WebDriverWait 超时

Selenium WebDriverWait timeout

步骤:1

WebDriver wd = new FirefoxDriver();
//Removed this code after Whosebug suggestion in comments
//wd.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
wd.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS);
wd.get("http:\some url");

步骤:2

(new WebDriverWait(wd, 5)).until(ExpectedConditions.
                presenceOfElementLocated(By.name("some name")));

步数:3

Some code going on......

我调试了上面的代码,到了第2步。但是在任何情况下,在给定超时 5 秒后都不会到达第 3 步。在页面完全加载之前,它会被阻止。

By.name("some name") 位于页面源代码的开头。

但是,如果我在 15 秒内手动停止浏览器加载,则将到达第 3 步。那么这里如何使用超时 5 秒。有没有办法在不手动停止或页面完全加载之前到达第 3 步?

我正在使用 selenium 2.46.0 库和 firefox 28。 并且还检查了 firefox 版本 35,36 & 37

在我使用的互联网连接中 url 至少需要 4 分钟才能完全加载

如果需要任何其他详细信息,请告诉我。

提前致谢。

@Jeet - 我遇到了同样的问题。解决我正在分享的问题,这对我来说真的很有效

可行的解决方案:

static void waitForPageLoad(WebDriver wdriver) {
    WebDriverWait wait = new WebDriverWait(wdriver, 60);

    Predicate<WebDriver> pageLoaded = new Predicate<WebDriver>() {

        @Override
        public boolean apply(WebDriver input) {
            return ((JavascriptExecutor) input).executeScript("return document.readyState").equals("complete");
        }

    };
    wait.until(pageLoaded);
}