public function waitForAjax()
{
try
{
//Wait for Angular
if($this->getSession()->evaluateScript("return (typeof angular != 'undefined')"))
{
$angular = 'angular.getTestability(document.body).whenStable(function() {
window.__testable = true;
})';
$this->getSession()->evaluateScript($angular);
$this->getSession()->wait(5000, 'window.__testable == true');
}
//Wait for jQuery
if($this->getSession()->evaluateScript("return (typeof jQuery != 'undefined')"))
{
$this->getSession()->wait(5000, '(0 === jQuery.active && 0 === jQuery(\':animated\').length)');
}
}catch(Exception $e)
{
}
}
ICAgIHB1YmxpYyBmdW5jdGlvbiB3YWl0Rm9yQWpheCgpCiAgICB7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICAvL1dhaXQgZm9yIEFuZ3VsYXIKICAgICAgICAgICAgaWYoJHRoaXMtPmdldFNlc3Npb24oKS0+ZXZhbHVhdGVTY3JpcHQoInJldHVybiAodHlwZW9mIGFuZ3VsYXIgIT0gJ3VuZGVmaW5lZCcpIikpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRhbmd1bGFyID0gJ2FuZ3VsYXIuZ2V0VGVzdGFiaWxpdHkoZG9jdW1lbnQuYm9keSkud2hlblN0YWJsZShmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cuX190ZXN0YWJsZSA9IHRydWU7CiAgICAgICAgICAgICAgICB9KSc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Z2V0U2Vzc2lvbigpLT5ldmFsdWF0ZVNjcmlwdCgkYW5ndWxhcik7CiAgICAgICAgICAgICAgICAkdGhpcy0+Z2V0U2Vzc2lvbigpLT53YWl0KDUwMDAsICd3aW5kb3cuX190ZXN0YWJsZSA9PSB0cnVlJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vV2FpdCBmb3IgalF1ZXJ5CiAgICAgICAgICAgIGlmKCR0aGlzLT5nZXRTZXNzaW9uKCktPmV2YWx1YXRlU2NyaXB0KCJyZXR1cm4gKHR5cGVvZiBqUXVlcnkgIT0gJ3VuZGVmaW5lZCcpIikpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICR0aGlzLT5nZXRTZXNzaW9uKCktPndhaXQoNTAwMCwgJygwID09PSBqUXVlcnkuYWN0aXZlICYmIDAgPT09IGpRdWVyeShcJzphbmltYXRlZFwnKS5sZW5ndGgpJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiAkZSkKICAgICAgICB7CgogICAgICAgIH0KICAgIH0=