我正在使用 Protractor 和 selenium 来测试我的 Angular 页面。
在某些随机点,它只是停止执行,因为 XHR 请求仍处于“待处理”状态(在 Chrome 开发工具中)。
当我复制请求 URL(这是一个简单的 GET 请求)并在新选项卡中打开它时,它会立即返回数据(JSON,约 200 个字符长)。
执行 E2E 测试时,请求保持“待处理”状态,并且在调用 GET-URL 的 10 次中,可能会失败 1 次。
Selenium 打印以下错误:“从渲染器接收消息超时:298.388”。
有任何想法吗?
Edit:
- Chrome 版本 71.0.3578.98
- Chromedriver 版本 2.45
- Selenium 服务器版本 3.141.59(独立)
- AngularJS v1.6.4
作为最后的手段, 你可以执行JS http://www.protractortest.org/#/api?view=webdriver.WebDriver.prototype.executeScript:
waitForAngular(function(browser, timeOut){
pendingReq = browser.executeScript("var injector = window.angular.element('body').injector(); var $http = injector.get('$http'); return ($http.pendingRequests.length === 0);"
if (timeOut >= 0){
timeOut -= 1;
if ( pendingReq ){
return
};
else {
waitForAngular(browser, timeOut)
};
};
else {
console.log("did not load in time");
};
});
这不是一种干净的编码方式,但我发现它可以帮助我处理请求仍待处理的 Angular 应用程序...
希望您觉得这有帮助!
EDIT:
上面的函数应该可以工作,它可能需要一些重构我没有测试它......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)