等待 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 請求必須完成時。