【问题标题】:gulp-protractor error with chrome v54 / web driver v2.25chrome v54 / web 驱动程序 v2.25 的 gulp-protractor 错误
【发布时间】:2016-10-27 23:16:18
【问题描述】:

由于 chrome (v54) 的最新更新,我们注意到我们的量角器测试失败。我们尝试更新到最新版本的 gulp-protractor (v3.0.0),然后下载最新的网络驱动程序 (v2.25) 来解决问题,但不幸的是出现了一个我们无法解决的新错误。

在 chrome 更新之前一切正常。

我们的量角器配置如下:

exports.config = {
  // Capabilities to be passed to the webdriver instance.
  capabilities: {
    'browserName': 'chrome'
  },

  onPrepare: function () {
      var fs = require('fs');
      var testDir = 'testresults/';
      if (!fs.existsSync(testDir)) {
          fs.mkdirSync(testDir);
      }

      var jasmineReporters = require('jasmine-reporters');

      // returning the promise makes protractor wait for the reporter config before executing tests
      return browser.getProcessedConfig().then(function () {
          // you could use other properties here if you want, such as platform and version

          var browserName = 'browser';
          browser.getCapabilities().then(function (caps) {
              browserName = caps.caps_.browserName.replace(/ /g, "_");

              var junitReporter = new jasmineReporters.JUnitXmlReporter({
                  consolidateAll: true,
                  savePath: testDir,
                  // this will produce distinct xml files for each capability
                  filePrefix: 'test-protractor-' + browserName,
                  modifySuiteName: function (generatedSuiteName) {
                      // this will produce distinct suite names for each capability,
                      // e.g. 'firefox.login tests' and 'chrome.login tests'
                      return 'test-protractor-' + browserName + '.' + generatedSuiteName;
                  }
              });
              jasmine.getEnv().addReporter(junitReporter);
          });
      });
  },

  baseUrl: 'http://localhost:3000',

  // Spec patterns are relative to the current working directory when
  // protractor is called.
  specs: [paths.e2e + '/**/*.js'],

  // Options to be passed to Jasmine-node.
  jasmineNodeOpts: {
    showColors: true,
    defaultTimeoutInterval: 30000
  }
};

错误是:

[13:27:13] E/launcher - Error: Error
    at C:\ws\node_modules\protractor\built\util.js:55:37
    at _rejected (C:\ws\node_modules\q\q.js:844:24)
    at C:\ws\node_modules\q\q.js:870:30
    at Promise.when (C:\ws\node_modules\q\q.js:1122:31)
    at Promise.promise.promiseDispatch (C:\ws\node_modules\q\q.js:788:41)
    at C:\ws\node_modules\q\q.js:604:44
    at runSingle (C:\ws\node_modules\q\q.js:137:13)
    at flush (C:\ws\node_modules\q\q.js:125:13)
    at nextTickCallbackWith0Args (node.js:420:9)
    at process._tickCallback (node.js:349:13)
[13:27:13] E/launcher - Process exited with error code 100

【问题讨论】:

    标签: google-chrome gulp protractor chrome-web-driver gulp-protractor


    【解决方案1】:

    onPrepare 正在 runFilenameOrFn_ 函数中的 built/util.js 中进行评估。不幸的是,堆栈跟踪没有帮助,但这意味着onPrepare 有错误。查看您的 onPrepare 方法,从浏览器功能分配 browserName 时出错。在您的代码中,caps.caps_ 实际上是未定义的。因为caps.caps_ 未定义,所以caps.caps_.browserName 会引发错误。应按以下方式访问功能对象:

    browser.getCapabilities().then(capabilities => {
      let browserName = capabilities.browserName.replace(/ /g, "_");
    

    【讨论】:

    • 虽然您的代码没有立即解决我的问题,但它清楚地引起了对这个问题的关注——显然在最近的 chrome webdriver 更新中,访问私有属性“caps_”变得不再可能。可能无论如何都不应该使用它,所以解决方案是:browserName = capabilities.get('browserName').replace(/ /g, "_"); Here 也是与该问题的其他人的链接。非常感谢你的帮助!我从来没有想过 onPrepare 函数会导致如此模糊的错误。
    • 没问题。 runFilenameOrFn_ 错误消息没有帮助。这最终会得到改进。
    猜你喜欢
    • 2022-01-28
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 2021-10-02
    • 1970-01-01
    • 2018-04-19
    相关资源
    最近更新 更多