等待 Ajax 请求完成
C#
using OpenQA.Selenium
using OpenQA.Selenium.Chrome;
using System.Threading;
namespace WebDriver Tests
{
class WebDriverWaits
{
static void Main()
{
IWebDriver driver = new ChromeDriver(@"C:\WebDriver");
driver.Navigate().GoToUrl("page with ajax requests");
CheckPageIsLoaded(driver);
// Now the page is fully loaded, you can continue with further tests.
}
private void CheckPageIsLoaded(IWebDriver driver)
{
while (true)
{
bool ajaxIsComplete = (bool)(driver as IJavaScriptExecutor).ExecuteScript("return jQuery.active == 0");
if (ajaxIsComplete)
return;
Thread.Sleep(100);
}
}
}
}
此示例对于发出 ajax 请求的页面很有用,这里我们使用 IJavaScriptExecutor
来运行我们自己的 JavaScript 代码。由于它位于 while
循环内,它将继续运行直到 ajaxIsComplete == true
,因此执行 return 语句。
我们通过确认 jQuery.active
等于 0
来检查所有 ajax 请求是否完整。这是有效的,因为每次发出新的 ajax 请求时 jQuery.active
都会递增,每次请求补充它都会递减,由此我们可以推断出当 jQuery.active == 0
所有 ajax 请求必须完成时。