我正在使用Selenium WebDriver和FirefoxDriver来自动化旧网站。该网站使用纯JavaScript构建。它使用XMLHttpRequest
来执行Ajax请求。我想编写一个应该等待Ajax请求完成的函数WaitForAjax()
。目前,我正在使用Explicit Wait(Thread.Sleep
)来完成它。任何人都可以帮助我用Implicit Wait完成同样的事情吗?
protected void WaitForAjax() {
/*
while (true) {
var ajaxIsComplete = (bool)(_driver as IJavaScriptExecutor).ExecuteScript("return jQuery.active == 0");
if (ajaxIsComplete)
break;
}
*/
//I am using Explicit Waits of 3 second.
Thread.Sleep(TimeSpan.FromSeconds(3));
}
除非没有别的事情要做,否则永远不要使用Thread.sleep()。在大多数情况下,还有一些事情要做:)您可以尝试这样的脚本:
public void waitForAjax() {
ExpectedCondition<Boolean> pageLoadCondition = driver -> "complete".equals(((JavascriptExecutor) driver).executeScript("return document.readyState"));
WebDriverWait wait = new WebDriverWait(webDriver, 30);
wait.until(pageLoadCondition);
}