量角器/ Selenium XHR保持“待定”状态

时间:2018-12-27 11:17:14

标签: selenium testing xmlhttprequest protractor

我正在使用带有硒的量角器来测试我的Angular页面。

在某些随机点上,它只是停止执行,因为XHR-Request仍在“挂起”状态(在Chrome开发工具中)。

当我复制请求URL(这是一个简单的GET请求)并在新标签页中打开它时,它将立即返回数据(JSON,长约200个字符)。

执行E2E测试时,请求保持“待处理”状态,在所说的GET-URL被调用的10次中,失败了1次。

Selenium打印以下错误:“超时从渲染器接收消息:298.388”。

有什么想法吗?

编辑:

  • Chrome版本71.0.3578.98
  • Chromedriver版本2.45
  • 硒服务器版本3.141.59(独立)
  • AngularJS v1.6.4

2 个答案:

答案 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


如果这不能解决您的问题,则主要是由于某些插件或第三方广告。

引用: https://sqa.stackexchange.com/questions/9007/how-to-handle-time-out-receiving-message-from-the-renderer-in-chrome-driver/9140#9140