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