Ответ 1
Я решил это с помощью стандартного флага:
webdriver-manager start --standalone
Я пытаюсь изучить 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)
Что я делаю неправильно?
Я решил это с помощью стандартного флага:
webdriver-manager start --standalone
Я получил его работу, удалив следующую строку из моего config.js
seleniumAddress: 'http://localhost:4444/wd/hub',
Вы используете сервер selenium? В модуле git README указано следующее:
WebdriverJS не включает в себя сервер selenium - вы должны запустить автономный сервер selenium. Все, что вам нужно - это последний сервер selenium-server-standalone.
источник: https://github.com/angular/protractor
Сообщение об ошибке связано со следующим:
[ECONNREFUSED] Попытка подключения игнорировалась (поскольку объект не прослушивает подключения) или явно отклонен.
Проверьте URL-адрес менеджера Webdriver. URL-адрес по умолчанию:
http://localhost:4444/wd/hub
Используйте фоновый процесс для запуска webdriver-manager, затем запустите транспортир:
Start-Process webdriver-manager start -passthru
protractor conf.js
Это запустит сервер Selenium и выведет кучу информационных журналов. Тест Protractor отправит запросы на этот сервер для управления локальным браузером. Оставьте этот сервер запущенным
Ссылки
Для меня это произошло из-за несовместимых версий Node и Protractor.
Мое исправление -
Выполните шаги, приведенные здесь fooobar.com/questions/18098/...
npm install -g транспортир
Обновление webdriver-manager
запуск webdriver-manager
protractor conf.js
Я также столкнулся с той же проблемой, трюк, который сработал у меня, - использовать два cmd-окна, оставив один открытым после ввода webdriver-manager start
и без нажатия клавиши введите (если нажать клавишу ввода сервер селена выключен, не знаю, почему) откройте другое окно cmd и вызовите ваши тесты.
Если вы используете плагин grunt для протранграфа-webdriver в формате npm (https://www.npmjs.org/package/grunt-protractor-webdriver), вы можете обнаружить такую же ошибку. Это происходит из-за завершения 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.
@Alexandros Spyropoulos, мне потребовалось некоторое время, чтобы понять, как запустить транспортир, и я думаю, что у нас была такая же проблема. Вы должны открыть одну вкладку терминала и запустить webdriver-manager start --standalone. Затем откройте другой тег терминала и запустите транспортир ***. Conf.js
В надежде, что это может помочь кому-то: у меня была та же проблема - столкнулся с ECONNREFUSED с помощью grunt-protractor-runner
. Нюансом для моего случая является то, что я запускал всю среду E2E (тестовые файлы, веб-приложение и весь бэкэнд) в контейнере Docker.
Я попытался запустить транспортир
grunt-protractor-webdriver
и без нее, чтобы запустить и запустить webdriver "вручную" (без разницы);directConnect
и keepAlive
и без них (в обход селена и в результате сбоев, связанных с Chromedriver, один из которых был описан здесь).Решение было довольно простым: увеличьте объем памяти, выделенной для контейнера. На моем компьютере с Windows 10 я выполнил следующие шаги:
VBoxManage.exe modifyvm default --memory 8192
(через пользовательскую оболочку script) перед запуском докер-машины (через Docker Quickstart script, что эквивалентно docker-machine start
). (Спасибо этот ответ SO).--shm-size=4G
к моей команде docker run
. (См. документы)
df -h
на гостевой машине, проверив объем памяти, установленный на /dev/shm
.В результате у меня больше нет необъяснимых ошибок, таких как ECONNREFUSED.
Если вы запустите предоставленную демонстрационную версию транспортиратора, попробуйте запустить конфигурацию транспортира в той же командной строке, что и селен. Попробуйте запустить как сервер селена, так и транспортир отдельно.
Сделать первый первый селен выполняется следующей командой.
webdriver-manager start --standalone
И запустите транспортир в отдельном окне команд.
protractor conf.js
(В моем случае conf.js был конфигурационным файлом)
Я столкнулся с проблемой, подобной той, с которой @David Remie столкнулся с сеткой/автономным модулем Selenium Docker. При минимальном объеме ОЗУ/ЦП тесты начнутся до того, как будет запущен веб-драйвер. Менее ресурсоемкий подход - это подождать несколько секунд перед тестированием (запустить "sleep 5" или что-то в этом роде).
Иногда для решения этой проблемы достаточно было увеличить объем ОЗУ, но реальная проблема заключалась в том, что CMD Selenium (/opt/bin/entry_point.sh запускает супервизор, который запускает веб-драйвер) из образа на основе https://hub. docker.com/r/selenium/node-base/dockerfile не торопился с запуском веб-драйвера Selenium.