2016-03-17 3 views
2

У меня возникли проблемы с написанием сценария npm для запуска тестов моего транспортира. После документации https://github.com/angular/protractor/blob/master/docs/server-setup.md кажется, что сначала я должен запуститьЗапуск транспортира при запуске webdriver-manager

webdriver-manager start 

и оставить ее работать, пока я начинаю фактические испытания

./node_modules/.bin/protractor test/integration/conf.js 

Я хочу, чтобы эти два шага, чтобы выполнить внутри одного НПМ сценария, так что я бы в конечном итоге с чем-то вроде этого:

"scripts": { 
    "protractor-update": "./node_modules/.bin/webdriver-manager update", 
    "protractor-start": "./node_modules/.bin/webdriver-manager start", 
    "protractor-init": "npm run protractor-update && npm run protractor-start", 
    "test-protractor": "npm run protractor-start && ./node_modules/.bin/protractor test/integration/conf.js", 
}, 

Теперь, очевидно, проблема заключается в том ./node_modules/.bin/webdriver-manager start не возвращает экс это код, поэтому он никогда не переходит к следующей команде.

Что было бы правильным способом достижения этого?

ответ

0

Ответ лежит в основах сценариев оболочки.

Положите WebDriver в фоновом режиме с &

Так, например

webdriver-manager start & 

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

Вам нужно будет убить webdriver-manager после того, как тесты пройдут через какой-либо механизм, например kill %1 или pkill webdriver-manager. В противном случае вы, в конце концов, будете иметь десятки неиспользуемых процессов webdriver, работающих ...

+1

Вы предполагаете, что сервер селена будет, когда и возвращает управление в оболочку и работает следующую команду. Что, если нет, тесты потерпят неудачу, правильно? –

+1

Говоря о «основах сценариев оболочки», я бы порекомендовал вам убить процесс с помощью PID, а затем выбрать первое задание из списка заданий. Вы можете сохранить PID процесса, недавно отправленного в фоновый режим с помощью 'foo & FOO_PID = $!' –

3

У меня была такая же проблема, как и вы. Это решение, которое я нашел после просмотра на StackOverflow и с помощью моего коллеги.

В package.json:

"scripts": { 
    "e2e": "bash run-e2e-tests.sh" 
} 

Файл Баша:

# Start selenium server and trash the verbose error messages from webdriver 
webdriver-manager start 2>/dev/null & 
# Wait 3 seconds for port 4444 to be listening connections 
while ! nc -z 127.0.0.1 4444; do sleep 3; done 
# run protractor 
protractor test/e2e/conf.js 
Смежные вопросы