Protractor tests failing randomly - screenshot error : WebDriverError: chrome not reachable

Protractor tests failing randomly - screenshot error : WebDriverError: chrome not reachable

我在 Ubuntu 16.04 中 运行 无头 chrome 量角器测试。测试正常 运行 超过 3 个月,但突然测试开始失败并出现以下错误 -

npm run e2e console - Chrome not reachable error from the very beginning of the test

Chrome not reachable error after successfully running few tests

Protractor configuration - 
    // Protractor configuration file, see link for more information
    // 


  https://github.com/angular/protractor/blob/master/docs/referenceConf.js

/*global jasmine */

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

exports.config = {
  allScriptsTimeout: 60000,
  baseUrl: 'http://localhost:4200/',
  suites: {
    V3_Sanity: [
      './e2e/Flows/Sanity/**/analytics_dashboard.e2e-spec.ts',
      './e2e/Flows/Sanity/**/executive_dashboard.e2e-spec.ts',
      './e2e/Flows/Sanity/**/my_views.e2e-spec.ts',
      './e2e/Flows/Sanity/**/question_analysis.e2e-spec.ts',
      './e2e/Flows/Sanity/**/responses.e2e-spec.ts',
      './e2e/Flows/Sanity/**/login_page.e2e-spec.ts'
    ],
    V3_e2e: [
      './e2e/Flows/E2E/**/flow1.e2e-spec.ts',
      './e2e/Flows/E2E/**/flow2.e2e-spec.ts',
      './e2e/Flows/E2E/**/flow3.e2e-spec.ts',
      './e2e/Flows/E2E/**/flow4.e2e-spec.ts',
      './e2e/Flows/E2E/**/flow5.e2e-spec.ts',
      './e2e/Flows/E2E/**/flow6.e2e-spec.ts'
    ],
    QB_Sanity: [
      './e2e/Flows/QB Sanity/**/question_config.e2e-spec.ts',
      './e2e/Flows/QB Sanity/**/right_panel.e2e-spec.ts',
      './e2e/Flows/QB Sanity/**/question_types.e2e-spec.ts'
    ],
    CT_Sanity: [
      './e2e/Flows/Contingency Table Sanity/**/CT_load_test.e2e-spec.ts'
    ],
    Response_Filter: [
      './e2e/Flows/ResponsesFilter/responses_filter.e2e-spec.ts'
    ],
    DropOff: [
      './e2e/Flows/Response DropOff/response_drop_off.e2e-spec.ts'
    ],
    Trend_Notification: [
      './e2e/Flows/Trend Based Notification/trend_sanity.e2e-spec.ts'
    ],
    Response_Filter: [
      './e2e/Flows/ResponsesFilter/responses_filter_analytics.e2e-spec.ts',
      './e2e/Flows/ResponsesFilter/responses_filter_responses.e2e-spec.ts'
    ]
  },
  capabilities: {
    browserName: 'chrome',
    chromeOptions: {
      args: ["--headless", "--disable-gpu", "--window-size=1440x900", "--no-sandbox"]
    }
  },
  directConnect: true,
  framework: 'jasmine',
  jasmineNodeOpts: {
    showColors: true,
    defaultTimeoutInterval: 60000,
    print: function () { }
  },
  useAllAngular2AppRoots: true,

  beforeLaunch: function () {
    require('ts-node').register({
      project: 'e2e'
    });
  },

  onPrepare: function () {
    browser.manage().window().maximize();
    require('ts-node').register({ project: 'e2e' });
    var fs = require('fs-extra');

    fs.emptyDir('./e2e/target/screenshots/', function (err) {
      console.log(err);
    });

    jasmine.getEnv().addReporter({
      specDone: function (result) {
        if (result.status == 'failed') {
          browser.getCapabilities().then(function (caps) {
            var browserName = caps.get('browserName');

            browser.takeScreenshot().then(function (png) {
              console.log("taken")
              var stream = fs.createWriteStream('e2e/target/screenshots/' + browserName + '-' + result.fullName + '.png');
              stream.write(new Buffer(png, 'base64'));
              stream.end();
            }, (err) => {
              console.log("screenshot error : " + err)
            });
          });
        }
      }
    });

    // jasmine.getEnv().addReporter(reporter);
    jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({
      consolidateAll: true,
      savePath: './e2e/target/screenshots',
      filePrefix: 'xmlresults'
    }));
  },

  afterLaunch: function (exitCode) {
  },

  //HTMLReport called once tests are finished
  onComplete: function () {

    //save browser logs
    browser.manage().logs()
      .get('browser').then(function (browserLog) {
        console.log('log :' +
          require('util').inspect(browserLog));
      });

    var browserName, browserVersion;
    var capsPromise = browser.getCapabilities();

    capsPromise.then(function (caps) {
      browserName = caps.get('browserName');
      browserVersion = caps.get('version');

      var HTMLReport = require('protractor-html-reporter');

      testConfig = {
        reportTitle: 'Test Execution Report',
        outputPath: 'e2e/target/screenshots',
        screenshotPath: '.',
        testBrowser: browserName,
        browserVersion: browserVersion,
        modifiedSuiteName: false,
        screenshotsOnlyOnFailure: true
      };
      new HTMLReport().from('e2e/target/screenshots/xmlresults.xml', testConfig);
    });
  }
};

随机是指,有时整个测试运行成功,但有时在测试开始时或在 运行 几个测试套件后失败,并显示错误消息 "screenshot error : WebDriverError: chrome not reachable"。

我在我的云 ubuntu 16.04 服务器中遇到了这个问题。直到最近才 运行 正确,但突然开始失败。

另一点需要注意的是,它运行成功的测试次数较少 suits.Also 这些测试在我的本地 Ubuntu 16.04 机器上 运行 正确并且从未遇到过这个问题而 运行 无头。

我也试过重新安装 chrome,但没有用。

我也检查了内存使用情况,但是 运行 测试是否有足够的可用内存。

我提到了其他 Whosebug 问题,但它们都与量角器配置问题有关。这对我来说似乎很好。

我在 Ubuntu 上遇到了同样的问题,发现我必须做两件事:

1) 在 PATH 和网络驱动程序环境变量中包含 Chrome 驱动程序的路径:

export webdriver.chrome.driver="/usr/bin/chromedriver"
export PATH=$webdriver.chrome.driver:$PATH

2) 在 Chrome 选项中添加 Chrome 浏览器二进制文件(实际的浏览器,而不是驱动程序)文件的路径。 运行 headless 时需要这个。

capabilities: {
  'browserName': 'chrome',
  "chromeOptions": {
    binary: '/path/to/chrome/binary',
    args: ["--headless", "--disable-gpu", "--window-size=1440x900", "--no-sandbox"]
  }   
}

在我的 Ubuntu 上,二进制路径是 /usr/bin/google-chrome(通过 .deb 包安装后)

看看这是否对你有帮助。