如何报告量角器超时的角度待定请求?

时间:2015-03-12 13:40:04

标签: javascript angularjs protractor e2e-testing

我最近一直在进行一些量角器测试,有时我的一些测试会随机失败并出现以下错误:

DEBUG - WebDriver session successfully started with capabilities { caps_: 
   { platform: 'LINUX',
     acceptSslCerts: true,
     javascriptEnabled: true,
     browserName: 'chrome',
     chrome: { userDataDir: '/tmp/.com.google.Chrome.czw4dR' },
     rotatable: false,
     locationContextEnabled: true,
     mobileEmulationEnabled: false,
     'webdriver.remote.sessionid': '3afc09d9-d06d-4c99-a788-d1118093c08d',
     version: '40.0.2214.111',
     takesHeapSnapshot: true,
     cssSelectorsEnabled: true,
     databaseEnabled: false,
     handlesAlerts: true,
     browserConnectionEnabled: false,
     nativeEvents: true,
     webStorageEnabled: true,
     applicationCacheEnabled: false,
     takesScreenshot: true } }
Started
token: a62e88d34991f4eef0894102e004e92032857700
.F...........................

Failures:
1) login form filled should fail on wrong credentials
  Message:
    Failed: Timed out waiting for Protractor to synchronize with the page after 11 seconds. Please see https://github.com/angular/protractor/blob/master/docs/faq.md

查看量角器文档时,如果存在待处理的$http请求或我正在使用$ timeout来发生此错误,则通常会发生此错误。我已经尝试为我的测试设置更长的超时(分钟),但它没有帮助。我最近的想法是报告哪些请求正在等待,所以我做了以下Jasmine Reporter:

var AngulaRequestsReporter = function(dir){

  dir = (dir || '/tmp/protractors/');

  this.requests  = function(testDescription) {
    var fname = testDescription.replace(/\s/g, '_') + '.pending_requests';
    mkdirp(dir);
    browser.executeScript(function(){
      try{
        var $http = angular.injector(["ng"]).get("$http");
        return $http.pendingRequests;
      }catch(e){
        return [];
      }
    }).then(function(pendingRequests){
      var stream = fs.createWriteStream(path.join(dir, fname));
      stream.write(util.inspect(pendingRequests, {showHidden: false, depth: null}));
      stream.end();
    });
  };

  return this;
};
  // takes screenshot on each failed spec (including timeout)
AngulaRequestsReporter.prototype = {
  specDone: function(result) {
    if (result.status !== 'passed') {
      this.requests(result.description );
    }
  }
};

但结果始终为空[]。你们之前有过这个问题,如果是这样,你是如何解决的?另外,我有什么可以改进这位记者的吗?

0 个答案:

没有答案