Невозможно запустить транспортир - 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.
Мое исправление
- Обновите узел до последней версии (в моем случае v7.0.0)
Следуйте инструкциям, приведенным здесь /questions/30698652/obnovite-nodejs-do-poslednej-versii-v-mac-os/30698662#30698662
- Установите последнюю версию транспортира (4.0.10 в моем случае), используя:
npm установить -g транспортир
- Откройте другой терминал и выполните эти команды:
обновление webdriver-менеджера
запуск webdriver-менеджера
- Запустите тесты в другом терминале, используя:
транспортир 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 я выполнил следующие шаги:
- Бежать
VBoxManage.exe modifyvm default --memory 8192
(с помощью специального сценария оболочки) перед запуском docker-machine (с помощью сценария Docker Quickstart, который эквивалентенdocker-machine start
). (Благодаря такому ответу). - Изменение сценария оболочки для запуска контейнера по умолчанию, добавление
--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.