本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>
提问:如何使Selenium 可以等待页面加载?
您如何使Selenium 2.0等待页面加载?
回答1:
您可以使用以下代码检查页面加载
IWait<IWebDriver> wait = new OpenQA.Selenium.Support.UI.WebDriverWait(driver, TimeSpan.FromSeconds(30.00));
wait.Until(driver1 => ((IJavaScriptExecutor)driver).ExecuteScript("return document.readyState").Equals("complete"));
评论区指正:这真的一直都有效吗?也许我在您的代码中遗漏了一些东西,但是您的dom正在等待处于就绪状态。请考虑一下,如果您的代码执行得太快,则前一页可能尚未卸载,即使您仍在旧页面上,它也将返回true。您需要做的是等待当前页面卸载,然后调用上面的代码。
回答2:
使用类WebDriverWait
您可以期望显示一些元素。类似于C#:
WebDriver _driver = new WebDriver();
WebDriverWait _wait = new WebDriverWait(_driver, new TimeSpan(0, 1, 0));
_wait.Until(d => d.FindElement(By.Id("Id_Your_UIElement"));
回答3:
您可以删除我写的那些System.out行。它是为调试目的而添加的。
WebDriver driver_;
public void waitForPageLoad() {
Wait<WebDriver> wait = new WebDriverWait(driver_, 30);
wait.until(new Function<WebDriver, Boolean>() {
public Boolean apply(WebDriver driver) {
System.out.println("Current Window State : "
+ String.valueOf(((JavascriptExecutor) driver).executeScript("return document.readyState")));
return String
.valueOf(((JavascriptExecutor) driver).executeScript("return document.readyState"))
.equals("complete");
}
});
}
回答4:
通常,对于Selenium 2.0,Web驱动程序仅在确定页面已加载后才应将控制权返回给调用代码。如果没有,您可以调用waitforelemement,它会循环调用,直到findelement找到它或超时(可以设置超时)为止。