Wait for an Ajax call to complete with Selenium 2 WebDriver Wait for an Ajax call to complete with Selenium 2 WebDriver selenium selenium

Wait for an Ajax call to complete with Selenium 2 WebDriver


If you're using jQuery for your ajax requests, you can wait until the jQuery.active property is zero. Other libraries might have similar options.

public void WaitForAjax(){    while (true) // Handle timeout somewhere    {        var ajaxIsComplete = (bool)(driver as IJavaScriptExecutor).ExecuteScript("return jQuery.active == 0");        if (ajaxIsComplete)            break;        Thread.Sleep(100);    }}


You could also use the Selenium explicit wait here. Then you don't need to handle timeout yourself

public void WaitForAjax(){    var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(15));    wait.Until(d => (bool)(d as IJavaScriptExecutor).ExecuteScript("return jQuery.active == 0"));}


var wait = new WebDriverWait(d, TimeSpan.FromSeconds(5));var element = wait.Until(driver => driver.FindElement(By.Id("Hobbies")));