提问者:小点点

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


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


共3个答案

匿名用户

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

匿名用户

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

多亏了张贴的答案,我创建了自己的解决方案,结合了html过时的预期条件和@mfsi_sitamjpost中的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"));
}

匿名用户

如果你使用的是SeleniumRC,那么它就是waitForPageToLoad()方法。

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

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

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

此外,请确保将"超文本传输协议://"放在开头。Selenium可能无法解析"localhost:9000"