Тесты транспортира случайным образом терпят неудачу - ошибка скриншота: WebDriverError: chrome недоступен

Я запускаю тесты транспортира на хром без головы в Ubuntu 16.04. Тесты работали нормально более 3 месяцев, но затем внезапно тесты начали давать сбой с ошибкой ниже:

npm run e2e console — Chrome недоступен с самого начала теста

Ошибка Chrome недоступен после успешного выполнения нескольких тестов

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);
    });
  }
};

Случайно я имею в виду, что иногда весь тест проходит успешно, но иногда он терпит неудачу в самом начале теста или после запуска нескольких наборов тестов с сообщением об ошибке «Ошибка снимка экрана: WebDriverError: chrome недоступен».

Я столкнулся с этой проблемой на своем облачном сервере Ubuntu 16.04. Который работал нормально до недавнего времени, но вдруг он начал давать сбой.

Еще один момент, который следует отметить, заключается в том, что он успешно работает для меньшего количества тестовых наборов. Кроме того, эти тесты работают правильно на моем локальном компьютере с Ubuntu 16.04, и у меня никогда не возникало этой проблемы при работе в безголовом режиме.

Я также пробовал переустановить хром, но это не помогло.

Я также проверил использование памяти, но для запуска тестов памяти достаточно.

Я упомянул другие проблемы с переполнением стека, но все они связаны с проблемами конфигурации транспортира. Что, кажется, хорошо для меня.


person Chhaya Kashyap    schedule 13.12.2017    source источник


Ответы (1)


У меня была такая же проблема в Ubuntu, и я обнаружил, что мне нужно сделать две вещи:

1) Включите путь к вашему ChromeDriver в PATH и переменную env webdriver:

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

2) Добавьте путь к двоичному файлу браузера Chrome (фактического браузера, а не драйвера) в ChromeOptions. Это необходимо при беге без головы.

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

В моей Ubuntu двоичный путь — /usr/bin/google-chrome (после его установки через пакет .deb)

Посмотрите, поможет ли это вам.

person dma    schedule 13.12.2017
comment
Я попробовал это. Он успешно работает некоторое время. Но я снова получаю ту же проблему. - person Chhaya Kashyap; 13.12.2017
comment
После обновления nodejs и npm теперь все работает нормально. - person Chhaya Kashyap; 18.12.2017
comment
Это великолепно. Рад слышать. - person dma; 19.12.2017