Created
May 29, 2015 23:08
-
-
Save npbenjohnson/2ca45e54bd656337caa3 to your computer and use it in GitHub Desktop.
Selenium wait script that will wait for: page load, jquery.ajax and $http requests to resolve, angular digest/render to finish
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* C# Example | |
// var pageLoadWait = new WebDriverWait(WebDriver, TimeSpan.FromSeconds(timeout)); | |
pageLoadWait.Until<bool>( | |
(driver) => | |
{ | |
return (bool)JS.ExecuteScript( | |
@"*/ | |
try { | |
if (document.readyState !== 'complete') { | |
return false; // Page not loaded yet | |
} | |
if (window.jQuery) { | |
if (window.jQuery.active) { | |
return false; | |
} else if (window.jQuery.ajax && window.jQuery.ajax.active) { | |
return false; | |
} | |
} | |
if (window.angular) { | |
if (!window.qa) { | |
// Used to track the render cycle finish after loading is complete | |
window.qa = { | |
doneRendering: false | |
}; | |
} | |
// Get the angular injector for this app (change element if necessary) | |
var injector = window.angular.element('body').injector(); | |
// Store providers to use for these checks | |
var $rootScope = injector.get('$rootScope'); | |
var $http = injector.get('$http'); | |
var $timeout = injector.get('$timeout'); | |
// Check if digest | |
if ($rootScope.$$phase === '$apply' || $rootScope.$$phase === '$digest' || $http.pendingRequests.length !== 0) { | |
window.qa.doneRendering = false; | |
return false; // Angular digesting or loading data | |
} | |
if (!window.qa.doneRendering) { | |
// Set timeout to mark angular rendering as finished | |
$timeout(function () { | |
window.qa.doneRendering = true; | |
}, 0); | |
return false; | |
} | |
} | |
return true; | |
} catch (ex) { | |
return false; | |
} | |
/*"); | |
});*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment