我正在使用以下内容等待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秒”
答案 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());
}
});