"Соединение отказано! Сервер селен запущен?"ошибка в тестах VueJS Nightwatch E2E с использованием ChromeDriver и Chrome - PullRequest
1 голос
/ 23 мая 2019

У меня есть приложение VueJS, которое имеет стандартные тесты Nightwatch E2E. Я просто потратил некоторое время на получение учетных записей и настройку аутентификации. После этого, когда я пытаюсь запустить свои тесты E2E, они таинственным образом терпят неудачу. Вот вывод командной строки, который я получаю:

code/premium-poker-tools [master●] » npm run e2e

> premium-poker-tools@1.0.0 e2e /Users/adamzerner/code/premium-poker-tools
> node test/e2e/runner.js

> Starting dev server...

Starting to optimize CSS...
> Listening at http://localhost:8080

Starting selenium server... started - PID:  58502
[BABEL] Note: The code generator has deoptimised the styling of "/Users/adamzerner/code/premium-poker-tools/test/e2e/specs/hit-calculator.js" as it exceeds the max of "500KB".


  player
1
2
3
    1) "before all" hook

  0 passing (2s)
  1 failing

  1) player "before all" hook:
     Connection refused! Is selenium server started?





npm ERR! code ELIFECYCLE
npm ERR! errno 10
npm ERR! premium-poker-tools@1.0.0 e2e: `node test/e2e/runner.js`
npm ERR! Exit status 10
npm ERR!
npm ERR! Failed at the premium-poker-tools@1.0.0 e2e script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/adamzerner/.npm/_logs/2019-05-23T19_47_08_016Z-debug.log
code/premium-poker-tools [master●] »

А вот и /Users/adamzerner/.npm/_logs/2019-05-27T17_44_07_557Z-debug.log:

0 info it worked if it ends with ok
1 verbose cli [ '/usr/local/Cellar/node/11.11.0/bin/node',
1 verbose cli   '/usr/local/bin/npm',
1 verbose cli   'run',
1 verbose cli   'e2e' ]
2 info using npm@6.9.0
3 info using node@v11.11.0
4 verbose run-script [ 'pree2e', 'e2e', 'poste2e' ]
5 info lifecycle premium-poker-tools@1.0.0~pree2e: premium-poker-tools@1.0.0
6 info lifecycle premium-poker-tools@1.0.0~e2e: premium-poker-tools@1.0.0
7 verbose lifecycle premium-poker-tools@1.0.0~e2e: unsafe-perm in lifecycle true
8 verbose lifecycle premium-poker-tools@1.0.0~e2e: PATH: /usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/Users/adamzerner/code/premium-poker-tools/node_modules/.bin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/adamzerner/.rvm/bin
9 verbose lifecycle premium-poker-tools@1.0.0~e2e: CWD: /Users/adamzerner/code/premium-poker-tools
10 silly lifecycle premium-poker-tools@1.0.0~e2e: Args: [ '-c', 'node test/e2e/runner.js' ]
11 silly lifecycle premium-poker-tools@1.0.0~e2e: Returned: code: 10  signal: null
12 info lifecycle premium-poker-tools@1.0.0~e2e: Failed to exec e2e script
13 verbose stack Error: premium-poker-tools@1.0.0 e2e: `node test/e2e/runner.js`
13 verbose stack Exit status 10
13 verbose stack     at EventEmitter.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/index.js:301:16)
13 verbose stack     at EventEmitter.emit (events.js:197:13)
13 verbose stack     at ChildProcess.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:55:14)
13 verbose stack     at ChildProcess.emit (events.js:197:13)
13 verbose stack     at maybeClose (internal/child_process.js:984:16)
13 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:265:5)
14 verbose pkgid premium-poker-tools@1.0.0
15 verbose cwd /Users/adamzerner/code/premium-poker-tools
16 verbose Darwin 18.6.0
17 verbose argv "/usr/local/Cellar/node/11.11.0/bin/node" "/usr/local/bin/npm" "run" "e2e"
18 verbose node v11.11.0
19 verbose npm  v6.9.0
20 error code ELIFECYCLE
21 error errno 10
22 error premium-poker-tools@1.0.0 e2e: `node test/e2e/runner.js`
22 error Exit status 10
23 error Failed at the premium-poker-tools@1.0.0 e2e script.
23 error This is probably not a problem with npm. There is likely additional logging output above.
24 verbose exit [ 10, true ]

Например, ошибка Connection refused! Is selenium server started? кажется неправильной. Над ним написано Starting selenium server... started - PID: 58502, и я вижу, что браузер Chrome всплывает очень быстро, а затем сразу же закрывается.

Вот код для рассматриваемого блока before:

before(function (browser, done) {
  console.log(1);
  equityCalculator = browser.page['equity-calculator']();
  console.log(2);
  equityCalculator.navigate();
  console.log(3);
  browser.pause(20000);
  equityCalculator
    .waitForElementVisible('@app', 50000, function () {
      console.log(4);
      browser.resizeWindow(1440, 852, function () {
        console.log(5);
        done();
      });
    })
  ;
});

Я пытался определить, где проблема возникает, но у меня много проблем. 1, 2 и 3 выходят из системы, но не 4 или 5, так что это помогает. Но если 3 выходит из системы, почему browser.pause(20000) не работает?

Я также пытался покопаться в моем реальном коде, чтобы увидеть, в чем проблема. Я попытался alert утверждений в main.js, чтобы попытаться определить проблему:

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
alert(1);

window.$ = require('jquery');
require('bootstrap');

alert(2);

import Vue from 'vue';
import store from '@/store';
import App from './App';
import router from './router';
import monkeyPatches from '@/services/monkey-patches';
import axios from 'axios';
import VueAxios from 'vue-axios';

alert(3);

Vue.config.productionTip = false
Vue.use(VueAxios, axios);
axios.interceptors.request.use(
  function(config) {
    config.withCredentials = true;
    return config;
  },
  function(error) {
    return Promise.reject(error);
  }
);


/* eslint-disable no-new */
new Vue({
  el: '#app',
  router: router,
  store: store,
  template: '<App/>',
  components: { App }
});

$(function () {
  $('[data-toggle="popover"]').popover();
});

// if (navigator.serviceWorker) {
//   navigator.serviceWorker.register('/service-worker.js').catch(function() {
//     console.log('Service worker registration failed.');
//   });
// }

Но странно, alert(1) даже не работает. Поэтому я чувствую себя в растерянности. Из того, что я понимаю, вершина main.js является «началом» приложения Vue, и если оно даже не достигает этой точки, что происходит? equityCalculator = browser.page['equity-calculator'](); и equityCalculator.navigate(); кажутся довольно стандартными. Вот фрагмент объекта страницы:

module.exports = {
  url: 'http://localhost:8080/equity-calculator',
  elements: {
    'app': '#app',

Когда я запускаю свой dev-сервер и захожу на этот URL, он полностью работает. И все мои тесты E2E работали отлично до того, как я реализовал учетные записи пользователей и аутентификацию, я не менял этот файл, и все же теперь у меня проблема.

Я не уверен, куда я могу пойти отсюда. Помогите!


Обновление:

Выдержка из package.json:

{
  ...
  "dependencies": {
    ...
    "chromedriver": "^2.45.0",
    "cross-spawn": "^6.0.5",
    "nightwatch": "^0.9.21",
    "selenium-server": "^3.141.59",
  },
}

Вот nightwatch.conf.js:

require('babel-register')
let config = require('../../config')

// http://nightwatchjs.org/gettingstarted#settings-file
module.exports = {
  src_folders: ['test/e2e/specs'],
  output_folder: 'test/e2e/reports',
  custom_assertions_path: ['test/e2e/custom-assertions'],
  page_objects_path: 'test/e2e/page-objects',
  globals_path: 'test/e2e/globals.js',
  test_runner : 'mocha',

  selenium: {
    start_process: true,
    server_path: require('selenium-server').path,
    host: '127.0.0.1',
    port: 4444,
    cli_args: {
      'webdriver.chrome.driver': require('chromedriver').path
    }
  },

  test_settings: {
    default: {
      selenium_port: 4444,
      selenium_host: 'localhost',
      silent: true,
      globals: {
        devServerURL: 'http://localhost:' + (process.env.PORT || config.dev.port),
        handStrings: [
          'aa', 'aks', 'aqs', 'ajs', 'ats', 'a9s', 'a8s', 'a7s', 'a6s', 'a5s', 'a4s', 'a3s', 'a2s',
          'ako', 'kk', 'kqs', 'kjs', 'kts', 'k9s', 'k8s', 'k7s', 'k6s', 'k5s', 'k4s', 'k3s', 'k2s',
          'aqo', 'kqo', 'qq', 'qjs', 'qts', 'q9s', 'q8s', 'q7s', 'q6s', 'q5s', 'q4s', 'q3s', 'q2s',
          'ajo', 'kjo', 'qjo', 'jj', 'jts', 'j9s', 'j8s', 'j7s', 'j6s', 'j5s', 'j4s', 'j3s', 'j2s',
          'ato', 'kto', 'qto', 'jto', 'tt', 't9s', 't8s', 't7s', 't6s', 't5s', 't4s', 't3s', 't2s',
          'a9o', 'k9o', 'q9o', 'j9o', 't9o', '99', '98s', '97s', '96s', '95s', '94s', '93s', '92s',
          'a8o', 'k8o', 'q8o', 'j8o', 't8o', '98o', '88', '87s', '86s', '85s', '84s', '83s', '82s',
          'a7o', 'k7o', 'q7o', 'j7o', 't7o', '97o', '87o', '77', '76s', '75s', '74s', '73s', '72s',
          'a6o', 'k6o', 'q6o', 'j6o', 't6o', '96o', '86o', '76o', '66', '65s', '64s', '63s', '62s',
          'a5o', 'k5o', 'q5o', 'j5o', 't5o', '95o', '85o', '75o', '65o', '55', '54s', '53s', '52s',
          'a4o', 'k4o', 'q4o', 'j4o', 't4o', '94o', '84o', '74o', '64o', '54o', '44', '43s', '42s',
          'a3o', 'k3o', 'q3o', 'j3o', 't3o', '93o', '83o', '73o', '63o', '53o', '43o', '33', '32s',
          'a2o', 'k2o', 'q2o', 'j2o', 't2o', '92o', '82o', '72o', '62o', '52o', '42o', '32o', '22',
        ],
      }
    },

    chrome: {
      desiredCapabilities: {
        browserName: 'chrome',
        javascriptEnabled: true,
        acceptSslCerts: true
      }
    },

    firefox: {
      desiredCapabilities: {
        browserName: 'firefox',
        javascriptEnabled: true,
        acceptSslCerts: true
      }
    }
  }
}

А для Java / JDK:

code/premium-poker-tools-api [master] » java --version
java 9.0.4
Java(TM) SE Runtime Environment (build 9.0.4+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode)

Когда я заглядываю в панель управления Java, она говорит, что я в курсе.

Я не уверен, как выяснить, какую версию Selenium или Chrome я использую. Для Chrome, если я открою Chrome и перейду к «О Google Chrome», там будет написано 74.0.3729.169, последняя версия, и я предполагаю, что мои тесты используют ту же версию.

1 Ответ

1 голос
/ 28 мая 2019

Это сообщение журнала ...

Starting selenium server... started - PID:  58502

и последующее сообщение об ошибке ...

Connection refused! Is selenium server started?

... означает, что экземпляр WebDriver , т.е. ChromeDriver хотя и инициирован, но не может связаться с WebBrowsing т.е. Chrome сеанс.


Некоторые дополнительные сведения о:

  • Версия Selenium .
  • JDK версия.
  • Selenium Server * Режим 1030 * (Автономный / Сетка)).
  • ChromeDriver версия.
  • Chrome версия.

Помогла бы нам отладить проблему влучший способ.Однако, как вы упомянули, "1, 2 и 3 выходят из системы, а не 4 или 5" , возможно, проблема связана с следующим блоком кода:

equityCalculator
  .waitForElementVisible('@app', 50000, function () {
    console.log(4);
    browser.resizeWindow(1440, 852, function () {
      console.log(5);
      done();
    });
  })

Причина

Согласно обсуждению Соединение отказано!Запущен ли сервер Selen Nightwatch на грани Ваша основная проблема - несовместимость между версиями используемых вами двоичных файлов.


Решение

  • Обновление JDK до последних уровней JDK 8u212 .
  • Обновление Selenium до текущих уровней Версия 3.141.59 .
  • Обновление ChromeDriver до Уровень ChromeDriver v74.0 .
  • Обновление Chrome версия до Chrome v74 уровни.( согласно примечаниям к выпуску ChromeDriver v74.0 )
  • Очистить ваше Рабочее пространство проекта через IDE и Перестройте ваш проект только с необходимыми зависимостями.
  • Если ваша базовая версия Web Client устарела, удалите ее и установите последнюю версию GA и выпущенную версию WebКлиент .
  • Выполните перезагрузку системы .
  • Выполните @Test.
  • Всегда вызывайте driver.quit() в методе tearDown(){}закрыть и уничтожить WebDriver и Web Client экземпляров изящно.

Outro

'Соединение отказано!Запущен ли сервер селен? \ N 'во время выполнения тестов Nightwatch.js для Selenium Grid


Разрешение

updating npm решило проблему (согласно комментариям ОП)

npm update
...