Невозможно запустить транспортир - ECONNREFUSED подключить ECONNREFUSED

Я пытаюсь выучить AngularJS. В рамках этого я хочу научиться использовать сквозное тестирование. В настоящее время у меня есть структура каталогов, как это:

node_modules
  .bin
  ...
  protractor
    ...
    node_modules
       .bin
       adam-zip
       glob
       minijasminenode
       optimist
       saucelabs
       selenium-webdriver
protractor
  config.js
src
  tests
    test.e2e.js

Мой файл config.js выглядит следующим образом:

exports.config = {
    seleniumAddress: 'http://localhost:4444/wd/hub',

    capabilities: {
        'browserName': 'chrome'
    },

    specs: [
        '../src/tests/test.e2e.js'
    ],

    jasmineNodeOpts: {
        showColors: true,
        defaultTimeoutInterval: 30000
    }
};

test.e2e.js выглядит следующим образом:

'use strict';

describe('My Sample', function () {
    driver = protractor.getInstance();

    beforeEach(function () {
        driver.get('#/');
    });

    it('My First Test', function () {
        message = "Hello.";
        expect(message).toEqual('World.');
    });
});

Когда я пытаюсь выполнить свои сквозные тесты с помощью транспортира, я запускаю следующую команду из командной строки:

node_modules\.bin\protractor protractor\config.js

Когда я запускаю эту команду, я получаю следующую ошибку:

C:\Src\MyProject\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:1542
      throw error;
            ^
Error: ECONNREFUSED connect ECONNREFUSED
    at ClientRequest.<anonymous> (C:\Src\MyProject\node_modules\protractor\node_modules\selenium-webdriver\http\index.js:12
7:16)
    at ClientRequest.EventEmitter.emit (events.js:95:17)
    at Socket.socketErrorListener (http.js:1528:9)
    at Socket.EventEmitter.emit (events.js:95:17)
    at net.js:441:14
    at process._tickCallback (node.js:415:13)
==== async task ====
WebDriver.createSession()
    at Function.webdriver.WebDriver.acquireSession_ (C:\Src\MyProject\node_modules\protractor\node_modules\selenium-webdriv
er\lib\webdriver\webdriver.js:130:49)
    at Function.webdriver.WebDriver.createSession (C:\Src\MyProject\node_modules\protractor\node_modules\selenium-webdriver
\lib\webdriver\webdriver.js:110:30)
    at Builder.build (C:\Src\MyProject\node_modules\protractor\node_modules\selenium-webdriver\builder.js:105:20)
    at runJasmineTests (C:\Src\MyProject\node_modules\protractor\lib\runner.js:191:45)
    at C:\Src\MyProject\node_modules\protractor\lib\runner.js:255:5
    at C:\Src\MyProject\node_modules\protractor\node_modules\selenium-webdriver\lib\goog\base.js:1178:15
    at webdriver.promise.ControlFlow.runInNewFrame_ (C:\Src\MyProject\node_modules\protractor\node_modules\selenium-webdriv
er\lib\webdriver\promise.js:1438:20)
    at notify (C:\Src\MyProject\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:328:12)
    at then (C:\Src\MyProject\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:377:7)

Что я делаю неправильно?

12 ответов

Решение

Я решил это с флагом --standalone:

webdriver-manager start --standalone

Я заработал, удалив следующую строку из моего config.js

seleniumAddress: 'http://localhost:4444/wd/hub',

Вы работаете на сервере селена? Git README утверждает следующее:

WebdriverJS изначально не содержит сервер селена - вы должны запустить автономный сервер селена. Все, что вам нужно, это последний автономный сервер селен.

источник: https://github.com/angular/protractor

Сообщение об ошибке связано со следующим:

[ECONNREFUSED] Попытка подключения была проигнорирована (поскольку цель не прослушивает подключения) или была явно отклонена.

Проверьте URL-адрес менеджера Webdriver. URL по умолчанию:

http://localhost:4444/wd/hub

Используйте фоновый процесс для запуска webdriver-manager, затем запустите protractor:

Start-Process webdriver-manager start -passthru
protractor conf.js

Это запустит Selenium Server и выведет кучу информационных журналов. Тест Protractor отправит запросы на этот сервер для управления локальным браузером. Оставьте этот сервер работающим

Рекомендации

Для меня это произошло из-за несовместимых версий Node и Protractor.

Мое исправление

  1. Обновите узел до последней версии (в моем случае v7.0.0)

Следуйте инструкциям, приведенным здесь /questions/30698652/obnovite-nodejs-do-poslednej-versii-v-mac-os/30698662#30698662

  1. Установите последнюю версию транспортира (4.0.10 в моем случае), используя:

npm установить -g транспортир

  1. Откройте другой терминал и выполните эти команды:

обновление webdriver-менеджера

запуск webdriver-менеджера

  1. Запустите тесты в другом терминале, используя:

транспортир conf.js

Если вы используете плагин npm protractor-webdriver grunt ( https://www.npmjs.org/package/grunt-protractor-webdriver), вы можете устранить такую ​​же ошибку. Это связано с прекращением работы веб-драйвера непосредственно перед завершением теста. Тест проходит успешно, и затем у вас появляется сообщение вроде:

Session deleted: Going to shut down the Selenium server
Shutting down Selenium server: http://127.0.0.1:4444
Shut down Selenium server: http://127.0.0.1:4444 (OKOK)

d:\Projets\Clouderial\nodeProjects\cld-apps\node_modules\grunt-protractor-runner\node_modules\protractor\node_modules\selenium-webdriver\http\index.js:145
      callback(new Error(message));
               ^
Error: ECONNREFUSED connect ECONNREFUSED
    at ClientRequest.<anonymous> (d:\Projets\Clouderial\nodeProjects\cld-apps\node_modules\grunt-protractor-runner\node_modules\protractor\node_modules\selenium-webdriver\http\index.js:145:16)
    at ClientRequest.EventEmitter.emit (events.js:95:17)
    at Socket.socketErrorListener (http.js:1547:9)
    at Socket.EventEmitter.emit (events.js:95:17)
    at net.js:440:14
    at process._tickCallback (node.js:419:13)

Я решаю это с помощью опции keepAlive в плагине grunt.

Вот мой конфиг Gruntfile.js:

protractor_webdriver: {
        options: {
            keepAlive : true   // True to keep the webdriver alive
        },
        start: {
        },
    },
...

Надеюсь, это кому-нибудь поможет.

JM.

Я также столкнулся с той же проблемой, уловка, которая работала для меня, состоит в том, чтобы использовать два окна cmd, оставляя одно открытое после ввода webdriver-manager start и без нажатия клавиши ввода(если нажата клавиша ввода, сервер селен выключен, не знаю почему), откройте другое окно cmd и вызовите свои тесты.

@Alexandros Spyropoulos, мне потребовалось довольно много времени, чтобы понять, как управлять транспортиром, и я думаю, что у нас была та же проблема. Вы должны открыть одну вкладку терминала и запустить запуск webdriver-manager --standalone. Затем откройте другой тег терминала и запустите транспортир ***. Conf.js

В надежде, что это может кому-то помочь: у меня была такая же проблема - я столкнулся с ECONNREFUSED, используя grunt-protractor-runner, Нюанс моего случая заключается в том, что я запускал всю свою среду E2E (тестовые файлы, веб-приложение и весь бэкэнд) в контейнере Docker.

Я пытался запустить транспортир

  • с и без дополнительных grunt-protractor-webdriver задача настроить и запустить вебдрайвер вручную (без разницы);
  • с включением и без directConnect а также keepAlive настройки (в обход Selenium и приводящие к сбоям, связанным с Chromedriver, один из которых был описан здесь).

Решение было довольно простым: увеличить объем памяти, выделенной для контейнера. На моем компьютере с Windows 10 я выполнил следующие шаги:

  1. Бежать VBoxManage.exe modifyvm default --memory 8192 (с помощью специального сценария оболочки) перед запуском docker-machine (с помощью сценария Docker Quickstart, который эквивалентен docker-machine start). (Благодаря такому ответу).
  2. Изменение сценария оболочки для запуска контейнера по умолчанию, добавление --shm-size=4G аргумент моей docker run команда. ( См. Документы)
    • Вы можете проверить, сработало ли это, запустив df -h в вашей гостевой машине, проверяя объем памяти, установленной на /dev/shm,

В результате у меня больше нет, казалось бы, необъяснимых ошибок, таких как ECONNREFUSED.

Если вы запустите предоставленную демонстрационную версию транспортира, попробуйте запустить конфигурацию транспортира в той же командной строке, что и селен. Попробуйте запустить и сервер селен, и транспортир отдельно.

Убедитесь, что первый селен запускается с помощью следующей команды.

webdriver-manager start --standalone

И запустить транспортир в отдельном командном окне.

protractor conf.js

(В моем случае conf.js был конфигурационным файлом)

запуск webdriver-manager ----- не помог, но помог ниже

запуск webdriver-manager --standalone

Я столкнулся с проблемой, похожей на ту, с которой @David Remie столкнулся с сеткой / автономной системой Selenium Docker. При минимальной оперативной памяти / процессоре тесты начнутся до запуска веб-драйвера. Менее ресурсоемкий подход - это подождать несколько секунд перед тестированием (запустить "сон 5" или что-то в этом роде).

Иногда для решения этой проблемы достаточно было увеличить ОЗУ, но реальная проблема заключалась в том, что CMD Selenium (/opt/bin/entry_point.sh запускает супервизор, который запускает веб-драйвер) из образа на основе https://hub.docker.com/r/selenium/node-base/dockerfile с запуском веб-драйвера Selenium.

Другие вопросы по тегам