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