2015-05-31 2 views
5

Мне удалось получить тесты Protractor, выполняющиеся на задаче построения Jenkins на сервере CI, но у меня возникла проблема: при запуске webdriver-manager start он берет навсегда до запуска сервера Selenium.Проталкиватель webdriver-manager берет навсегда начало Selenium

В конце концов он начинает и консоль показывает:

INFO - Started SocketListener on 0.0.0.0:4444

, но иногда это занимает около 5 минут, в то время как при попытке то же самое на Бродячей VM начинается немедленно.

Я бегу без проколов Протракторные испытания, поэтому я использую xvfb-run для запуска webdriver-manager start.

Вот сценарий оболочки я использую:

#!/bin/sh 
export DISPLAY=:1 

Xvfb $DISPLAY -ac -screen 0 1280x1024x8 & 
sleep 1 

xvfb-run webdriver-manager start --standalone 

Это немедленно запускает сервер Selenium на Бродячей VM, но это занимает много времени на сервере CI. Вот вывод скрипта на сервере CI:

[email protected]:~/workspace/cms$ ./runWebdriver 
Initializing built-in extension Generic Event Extension 
Initializing built-in extension SHAPE 
Initializing built-in extension MIT-SHM 
Initializing built-in extension XInputExtension 
Initializing built-in extension XTEST 
Initializing built-in extension BIG-REQUESTS 
Initializing built-in extension SYNC 
Initializing built-in extension XKEYBOARD 
Initializing built-in extension XC-MISC 
Initializing built-in extension SECURITY 
Initializing built-in extension XINERAMA 
Initializing built-in extension XFIXES 
Initializing built-in extension RENDER 
Initializing built-in extension RANDR 
Initializing built-in extension COMPOSITE 
Initializing built-in extension DAMAGE 
Initializing built-in extension MIT-SCREEN-SAVER 
Initializing built-in extension DOUBLE-BUFFER 
Initializing built-in extension RECORD 
Initializing built-in extension DPMS 
Initializing built-in extension Present 
Initializing built-in extension DRI3 
Initializing built-in extension X-Resource 
Initializing built-in extension XVideo 
Initializing built-in extension XVideo-MotionCompensation 
Initializing built-in extension SELinux 
Initializing built-in extension GLX 
[email protected]:~/workspace/cms$ seleniumProcess.pid: 27952 
21:21:21.633 INFO - Launching a standalone server 
Setting system property webdriver.chrome.driver to /var/lib/jenkins/.nvm/versions/io.js/v2.0.2/lib/node_modules/protractor/selenium/chromedriver 
21:21:21.760 INFO - Java: Oracle Corporation 24.79-b02 
21:21:21.760 INFO - OS: Linux 3.13.0-53-generic amd64 
21:21:21.810 INFO - v2.45.0, with Core v2.45.0. Built from revision 5017cb8 
21:21:21.960 INFO - Default driver org.openqa.selenium.ie.InternetExplorerDriver registration is skipped: registration capabilities Capabilities [{platform=WINDOWS, ensureCleanSession=true, browserName=internet explorer, version=}] does not match with current platform: LINUX 
21:21:22.108 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub 
21:21:22.109 INFO - Version Jetty/5.1.x 
21:21:22.111 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver] 
21:21:22.112 INFO - Started HttpContext[/selenium-server,/selenium-server] 
21:21:22.112 INFO - Started HttpContext[/,/] <-- this is where it hangs 

Через несколько минут он, наконец, бежит, и я могу выполнить тесты транспортир, но это очень раздражает и не подходит для выполнения тестов на сервере CI.

На Бродячей VM сервер Selenium начинается немедленно и выход идентичен до этого момента:

19:47:08.507 INFO - Java: Oracle Corporation 24.65-b04 
19:47:08.509 INFO - OS: Linux 3.13.0-44-generic amd64 
19:47:08.536 INFO - v2.45.0, with Core v2.45.0. Built from revision 5017cb8 
19:47:08.663 INFO - Default driver org.openqa.selenium.ie.InternetExplorerDriver registration is skipped: registration capabilities Capabilities [{platform=WINDOWS, ensureCleanSession=true, browserName=internet explorer, version=}] does not match with current platform: LINUX 
19:47:08.760 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub 
19:47:08.762 INFO - Version Jetty/5.1.x 
19:47:08.763 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver] 
19:47:08.764 INFO - Started HttpContext[/selenium-server,/selenium-server] 
19:47:08.765 INFO - Started HttpContext[/,/] 
19:47:08.800 INFO - Started [email protected] 
19:47:08.801 INFO - Started HttpContext[/wd,/wd] 
19:47:08.807 INFO - Started SocketListener on 0.0.0.0:4444 
19:47:08.808 INFO - Started [email protected] 

Обе машины работают в Ubuntu 14.04, но версии ядра и версии Java слегка отличается (см выход) , Версия Protractor на сервере CI равна 2.1.0, на VM 1.8.0.

Может быть, это проблема или я что-то упустил?

+0

Привет, Дэнни, вы решили это, я пробую то же самое, но я не был успешным. вы можете помочь, разместив то, что вы сделали для работы. Я бы очень признателен. – Nick

+0

@Nick: Я еще не пробовал, но сейчас я снова работаю над тестами, поэтому буду размещать здесь как можно скорее. –

ответ

6

Проблема, похоже, связана с источником случайности, который использует Селен.

Больше информации здесь: https://code.google.com/p/selenium/issues/detail?id=1301

TL; DR решение: добавить -Djava.security.egd=file:///dev/urandom к java команде, запускающей селеном. Возможно, вам придется отредактировать конфигурацию webdriver-manager.

+0

Спасибо вам большое! Я не уверен, где я должен добавить это, поскольку я не использую параметр seleniumServerJar в файле protractor.conf.js, но seleniumAddress. Должен ли я добавить его в этот файл или другой? –

+0

В файле 'webdriver-manager' найдите раздел с' case 'start': 'и добавьте строку' args.push ('-Djava.security.egd = file: ///dev/./urandom'); 'над строкой' var seleniumProcess = spawnCommand ('java', args); ' – martin770

2

Для тех, кто использует глоток-транспортир. Вы можете передать java.security.egd в свойстве seleniumArgs.

seleniumArgs: ['--proxy=http://xxx:8080', '-Djava.security.egd=file:///dev/urandom'] 

Для того, чтобы заставить Chrome работать на докере, мне пришлось работать в привилегированном режиме. В докере составляют:

privileged: true