in Microsoft.Dynamics365.UIAutomation.Browser/Extensions/SeleniumExtensions.cs [283:336]
public static bool WaitForPageToLoad(this IWebDriver driver, TimeSpan? timeout = null)
{
string state = string.Empty;
try
{
WebDriverWait wait = new WebDriverWait(driver, timeout ?? Constants.DefaultTimeout);
//Checks every 500 ms whether predicate returns true if returns exit otherwise keep trying till it returns ture
wait.Until(d =>
{
try
{
state = ((IJavaScriptExecutor) driver).ExecuteScript(@"return document.readyState").ToString();
}
catch (InvalidOperationException)
{
//Ignore
}
catch (NoSuchWindowException)
{
//when popup is closed, switch to last windows
driver.LastWindow();
}
//In IE7 there are chances we may get state as loaded instead of complete
return (state.Equals("complete", StringComparison.InvariantCultureIgnoreCase));
});
}
catch (TimeoutException)
{
//sometimes Page remains in Interactive mode and never becomes Complete, then we can still try to access the controls
if (!state.Equals("interactive", StringComparison.InvariantCultureIgnoreCase))
throw;
}
catch (NullReferenceException)
{
//sometimes Page remains in Interactive mode and never becomes Complete, then we can still try to access the controls
if (!state.Equals("interactive", StringComparison.InvariantCultureIgnoreCase))
throw;
}
catch (WebDriverException)
{
if (driver.WindowHandles.Count == 1)
{
driver.SwitchTo().Window(driver.WindowHandles[0]);
}
state = ((IJavaScriptExecutor) driver).ExecuteScript(@"return document.readyState").ToString();
if (!(state.Equals("complete", StringComparison.InvariantCultureIgnoreCase) || state.Equals("loaded", StringComparison.InvariantCultureIgnoreCase)))
throw;
}
return true;
}