5

有没有办法,如何等待页面重新加载?例如,当我在页面上时localhost:9000/web,我再次指示 webdriver 导航到localhost:9000/web. 我不想或不能通过等待某些元素来指示重新加载。

4

5 回答 5

5

在 Selenium WebDriver 中,我们可以使用以下代码片段实现 waitForPageToLoad:

public void waitForPageToLoad(WebDriver driver) {
    ExpectedCondition < Boolean > pageLoad = new
    ExpectedCondition < Boolean > () {
        public Boolean apply(WebDriver driver) {
            return ((JavascriptExecutor) driver).executeScript("return document.readyState").equals("complete");
        }
    };

    Wait < WebDriver > wait = new WebDriverWait(driver, 60);
    try {
        wait.until(pageLoad);
    } catch (Throwable pageLoadWaitError) {
        assertFalse("Timeout during page load", true);
    }
}
于 2013-10-26T16:51:54.227 回答
3

这很旧,但我也想要一个解决方案,并偶然发现了这个问题。

感谢发布的答案,我通过结合 html 的预期陈旧条件和waitForPageToLoad@mfsi_sitamj 帖子中的函数创建了自己的解决方案。

像这样的东西:

@CacheLookup
@FindBy(tagName = "html")
private WebElement __document;

public void waitForReload() {
    Wait<WebDriver> wait = new WebDriverWait(driver, 10);
    wait.until(ExpectedConditions.stalenessOf(this.__document));
    wait.until((ExpectedCondition<Boolean>) wd ->
        ((JavascriptExecutor) wd).executeScript("return document.readyState").equals("complete"));
}
于 2016-03-15T03:56:47.753 回答
0

Webdriver 方法,如 get()、navigate.to()、navigate.refresh()、navigate.forward()、navigate.backward() 会自动等待直到下一页完全加载。

在 Selenium RC 中,我们可以使用

new Selenium().waitForPagetoLoad()
于 2013-10-24T18:50:04.290 回答
0

如果您使用的是 Selenium RC,那么这就是waitForPageToLoad()方法。

selenium.waitForPagetoLoad() // it might be waitForLoad() - can't remember.

如果您使用 Selenium WebDriver,那么所有导航都由 API 处理,并且它将隐式等待,直到浏览器完成导航。

driver.navigate().to().url("http://localhost:9000/web");

另外,请确保您将“http://”放在开头。Selenium 可能无法解析“localhost:9000”

于 2013-10-23T23:03:38.100 回答
0

我们可以设置 pageLoadTimeout,一旦设置它就会通过 webdriver session 出现,如果由于超时引发异常,那么我们无法恢复相同的 session,所以需要创建新的实例。

        WebDriver driver = new FirefoxDriver();

        //waits 10 seconds for page to load
        driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
        try {
            driver.get("https://yourdomain.com");
        } catch (TimeoutException e) {
            driver.close();
            driver.quit();

            //create new instance of webdriver
            driver = new FirefoxDriver();

            //waits 5 minutes for page to load
            driver.manage().timeouts().pageLoadTimeout(300, TimeUnit.SECONDS);
            driver.get("https://yourdomain.com");
        }
于 2017-07-07T19:43:36.167 回答