如何让selenium等待基于XMLHttpRequest的请求的ajax响应

问题描述 投票:2回答:1

我正在使用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));
}
c# selenium-webdriver
1个回答
0
投票

除非没有别的事情要做,否则永远不要使用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);
}
© www.soinside.com 2019 - 2024. All rights reserved.