c# - Webdriver 等到 Ajax 加载器完成加载

标签 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)"));

但是我明白了

"Failed: OpenQA.Selenium.WebDriverTimeoutException : Timed out after 60 seconds"

最佳答案

等待加载器的最简单方法可能是等待加载器出现然后消失,而不是等待后台页面函数。您可能需要等待几个元素,但这是您提供的 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));

您想等待加载器出现然后消失,因为如果脚本运行得太快(或页面运行缓慢),等待隐身可能会在加载器出现之前触发并成功。

关于c# - Webdriver 等到 Ajax 加载器完成加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51820634/

相关文章:

c# - 使用 System.Diagnostics.Process.Start() 启动程序时遇到问题

c# - 将 JS 转换为 C#

c# - 在 selenium c# 的下拉列表中截取选项的屏幕截图

java - driver.close() 关闭子窗口后切换到父窗口抛出异常

c# - "Flatten"List<Tuple<<T>,<T>>> 到 List<T>

c# - asp.net-core 2.0 preview2 IdentityServiceOptions 不再存在

java - 将 Java 变量传递给 jQuery 函数的 JavascriptExecutor 参数

selenium - 如何防止 Gradle 作业在 TFS 代理的后台运行

java - 即使输入新值后,文本框的值属性仍保留旧值

java - ChromeDriver - 在 Selenium WebDriver 自动化上弹出禁用开发者模式扩展