Selenium驱动程序 - 等待页面重新加载

时间:2013-10-23 21:18:17

标签: selenium

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

5 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:3)

这已经过时了,但我也想要一个解决方案,并且偶然发现了这个问题。

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

这样的事情:

@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"));
}

答案 2 :(得分:1)

如果您使用的是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”

答案 3 :(得分:0)

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

在Selenium RC中,我们可以使用

实现这一目标
new Selenium().waitForPagetoLoad()

答案 4 :(得分:0)

我们可以设置pageLoadTimeout,一旦设置它就会通过webdriver会话,并且如果由于超时而抛出异常,那么我们无法恢复相同的会话,因此需要创建新的实例。

        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");
        }