我正在使用带有硒的量角器来测试我的Angular页面。
在某些随机点上,它只是停止执行,因为XHR-Request仍在“挂起”状态(在Chrome开发工具中)。
当我复制请求URL(这是一个简单的GET请求)并在新标签页中打开它时,它将立即返回数据(JSON,长约200个字符)。
执行E2E测试时,请求保持“待处理”状态,在所说的GET-URL被调用的10次中,失败了1次。
Selenium打印以下错误:“超时从渲染器接收消息:298.388”。
有什么想法吗?
编辑:
答案 0 :(得分:1)
万不得已,您可以execute JS:
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 App处理仍未解决的请求...
希望这对您有所帮助!
编辑:
上面的功能应该可以工作,可能需要重构,而我没有测试过...
答案 1 :(得分:1)
您的测试未按时执行。因此,您可以增加protractor.conf.js
文件中的超时时间。
jasmineNodeOpts: {
...
/**
* Default time to wait in ms before a test fails.
*/
defaultTimeoutInterval: 50000,
...
},
在下面的链接中,您可以找到各种超时参数,可以在protractor.conf.js
中进行配置:
https://github.com/angular/protractor/blob/master/lib/config.ts
如果这不能解决您的问题,则主要是由于某些插件或第三方广告。