有没有办法,如何等待页面重新加载?例如,当我在页面上时localhost:9000/web
,我再次指示 webdriver 导航到localhost:9000/web
. 我不想或不能通过等待某些元素来指示重新加载。
问问题
17497 次
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 回答