有没有办法,如何等待页面重新加载?例如,当我在页面localhost:9000/web
上时,我再次指示webdriver导航到localhost:9000/web
。我不希望或不能通过等待某些元素来指示重新加载。
答案 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)
这已经过时了,但我也想要一个解决方案,并且偶然发现了这个问题。
感谢发布的答案,我通过结合html过期的预期条件和@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");
}