Webdriver等待Ajax加载程序完成加载

时间:2018-08-13 10:50:52

标签: c# selenium selenium-webdriver

enter image description here

我正在使用以下内容等待ajax加载器完成加载

var wait = new WebDriverWait(BrowserFactory.Driver, TimeSpan.FromSeconds(60));
wait.Until(d => (bool) (d as IJavaScriptExecutor).ExecuteScript(
            "return (window.jQuery != undefined) && (jQuery.active == 0)"));

但我知道

  

“失败:OpenQA.Selenium.WebDriverTimeoutException:之后超时   60秒”

2 个答案:

答案 0 :(得分:2)

等待加载程序的最简单方法可能是等待加载程序出现然后消失,而不是等待后台页面功能。您可能需要等待几个元素,但这是您提供的HTML中的一个。

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
By loaderLocator = By.CssSelector("img[src$='ajax-loader.gif']");
wait.Until(ExpectedConditions.ElementIsVisible(loaderLocator));
wait.Until(ExpectedConditions.InvisibilityOfElementLocated(loaderLocator));

您要等待加载程序出现然后消失,因为如果脚本运行得太快(或页面速度很慢),可能会触发等待隐身并且成功,甚至在加载程序出现之前。

答案 1 :(得分:0)

尝试以下js:

var result = true; try { result = (typeof jQuery != 'undefined') ? jQuery.active == 0 : true } catch (e) {}; return result;

这是Java代码,但逻辑相同:

WebDriver驱动程序= WebDriverRunner.getWebDriver();

new WebDriverWait(driver, 20).until(d ->
{
    try{
        return (boolean) ((JavascriptExecutor) d).executeScript("var result = true; try { result = (typeof jQuery != 'undefined') ? jQuery.active == 0 : true } catch (e) {}; return result;"));
    }
    catch (Exception e) {
        System.out.println("Error: " + e.getMessage());
    }
});