【问题标题】:Protractor / Selenium XHR stays in status "pending"Protractor / Selenium XHR 保持“待定”状态
【发布时间】:2019-05-25 10:22:16
【问题描述】:

我正在使用 Protractor 和 selenium 来测试我的 Angular 页面。

在某些随机点,它只是停止执行,因为 XHR 请求仍处于“待处理”状态(在 Chrome 开发工具中)。

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

在执行 E2E 测试时,请求保持“待处理”状态,并且在 10 次中,所述 GET-URL 被调用它可能失败 1 次。

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

有什么想法吗?

编辑:

  • Chrome 版本 71.0.3578.98
  • Chrome 驱动程序 2.45 版
  • Selenium 服务器版本 3.141.59(独立)
  • AngularJS v1.6.4

【问题讨论】:

  • 请提供您的量角器版本、镀铬、镀铬驱动和角度
  • 对不起,我已经添加了缺失的信息:)
  • 现在,代码在每个 http 请求上都失败了,还是只有一个特定的?如果是这样,您能否提供您的 angularjs 代码和相应的量角器测试套件?
  • 否 - 它在随机请求时失败。这不是后端问题:/
  • 好吧,老实说,到目前为止我还不知道问题出在哪里,但是让我建议将您的项目更新到最新的 angularjs 1.7.x 和最新的量角器版本,我刚开始写量角器测试,我没有这样的问题

标签: selenium testing xmlhttprequest protractor


【解决方案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...

希望对您有所帮助!

编辑:

上面的功能应该可以工作它可能需要一些重构我没有测试它...

【讨论】:

  • 谢谢!脚本是什么?
  • 它使用injector()$http 上运行,如果挂起的请求为0,则返回...
  • 在浏览器的控制台中试一试...window.angular.element('body').injector().get('$http').pendingRequests.length === 0
  • 是的,但这并不能解决问题,不是吗?我知道有一个挂起的请求阻止页面加载/阻止量角器执行。我看不出“true”或“false”的返回值如何解决这个问题?
  • 对不起...我打算添加一个带刹车点的 while 循环,看看我的编辑需要几分钟...
【解决方案2】:

您的测试未按时执行。因此,您可以增加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

【讨论】:

  • 这是+1的好方法!我认为如果这不起作用,您应该尝试我的答案...
猜你喜欢
  • 1970-01-01
  • 2013-06-30
  • 2018-04-21
  • 2021-01-04
  • 1970-01-01
  • 2012-12-09
  • 1970-01-01
  • 2018-11-28
  • 2012-03-09
相关资源
最近更新 更多