Подтвердить что ты не робот

Запуск селен-хромированного ребра с помощью Protractor on linux

Я использую protractor для запуска тестов с помощью приложения Angular. Они работают в моей среде OSX, но не в Linux, где TeamCity пытается ее запустить.

Когда я запускаю эту команду в локальной локальной среде OSX, она работает (тоже проверяется на моей машине):

./node_modules/protractor/bin/protractor protractor.conf.js

Using ChromeDriver directly...
..
Finished in 5.55 seconds
2 tests, 2 assertions, 0 failures

Когда я запускаю это на машине linux, или задание TeamCity пытается запустить его, оно терпит неудачу:

./node_modules/protractor/bin/protractor protractor.conf.js

Using ChromeDriver directly...

/usr/share/TeamCity/buildAgent/work/57bd89f9c9abb5d5/webapp/node_modules/protractor/node_modules/selenium-webdriver/http/util.js:87
          Error('Timed out waiting for the WebDriver server at ' + url));
          ^
Error: Timed out waiting for the WebDriver server at http://127.0.0.1:52959/
    at Error (<anonymous>)
    at onResponse (/usr/share/TeamCity/buildAgent/work/57bd89f9c9abb5d5/webapp/node_modules/protractor/node_modules/selenium-webdriver/http/util.js:87:11)
    at /usr/share/TeamCity/buildAgent/work/57bd89f9c9abb5d5/webapp/node_modules/protractor/node_modules/selenium-webdriver/http/util.js:42:21
    at /usr/share/TeamCity/buildAgent/work/57bd89f9c9abb5d5/webapp/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/http/http.js:96:5
    at ClientRequest.<anonymous> (/usr/share/TeamCity/buildAgent/work/57bd89f9c9abb5d5/webapp/node_modules/protractor/node_modules/selenium-webdriver/http/index.js:136:7)
    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:415:13)
==== async task ====
WebDriver.createSession()
    at Function.webdriver.WebDriver.acquireSession_ (/usr/share/TeamCity/buildAgent/work/57bd89f9c9abb5d5/webapp/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:131:49)
    at Function.webdriver.WebDriver.createSession (/usr/share/TeamCity/buildAgent/work/57bd89f9c9abb5d5/webapp/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:111:30)

Попытки разрешить:

Я рассмотрел эту проблему, но автономный сервер webdriver не является решением.

Я рассмотрел эту проблему, но моя версия selenium-wedriver 2.42.1, поэтому, не такая же ошибка.

Версия:

$ node --version
v0.10.26

$ ./node_modules/protractor/bin/protractor --version
Version 1.0.0

$ uname -mrs
Linux 3.11.0-15-generic x86_64

Обновление процесса:

Попытка получить версию chrome-webdriver выявила проблему:

$ ./node_modules/protractor/selenium/chromedriver --version
./node_modules/protractor/selenium/chromedriver: error while loading shared libraries: libnss3.so: cannot open shared object file: No such file or directory

Из этого я пришел к выводу, что существует проблема зависимости, и обнаружил, что Selenium требует Chrome. (подробнее).

Я установил Chrome в ящик Linux с помощью шагов, подобных этому:

sudo apt-get install libxss1 libappindicator1 libindicator7
sudo wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome*.deb

Это не работает точно так, но после нескольких назад и вперед с зависимостями и sudo apt-get install я думаю, что у меня установлен Chrome:

$ google-chrome --version
Google Chrome 36.0.1985.143 

Это сделало версию хромирования:

$ ./node_modules/protractor/selenium/chromedriver --version
ChromeDriver 2.10.267518

Однако запуск Protractor по-прежнему не работает:

$ ./node_modules/protractor/bin/protractor protractor.conf.js
Using ChromeDriver directly...

/usr/share/TeamCity/buildAgent/work/57bd89f9c9abb5d5/webapp/node_modules/protractor/node_modules/selenium-webdriver/lib/atoms/error.js:109
  var template = new Error(this.message);
                 ^
UnknownError: unknown error: Chrome failed to start: exited abnormally
  (Driver info: chromedriver=2.10.267518,platform=Linux 3.11.0-15-generic x86_64)
    at new bot.Error (/usr/share/TeamCity/buildAgent/work/57bd89f9c9abb5d5/webapp/node_modules/protractor/node_modules/selenium-webdriver/lib/atoms/error.js:109:18)
    at Object.bot.response.checkResponse (/usr/share/TeamCity/buildAgent/work/57bd89f9c9abb5d5/webapp/node_modules/protractor/node_modules/selenium-webdriver/lib/atoms/response.js:106:9)
4b9b3361

Ответ 1

Вам нужно иметь возможность запускать Chrome или Firefox без головы, и для этого вам нужно будет настроить Xvfb между прочим, иначе Chrome не будет запускаться без правильного $DISPLAY.

Вы также можете использовать PhantomJS, но IMHO, что хорошо делает это для тестирования e2e, поскольку это не настоящий браузер.

Это то, что я успешно использую для непрерывного тестирования: https://github.com/elgalu/docker-selenium

Ответ 2

У меня была такая же проблема, и она разрешилась сразу после установки единства-gtk3-module!!

yum install unity-gtk3-module

Installing:
 PackageKit-gtk3-module                                      
 Updating:                                                          
Installing for dependencies:
 PackageKit-glib                                                 
 adwaita-cursor-theme                                          
 adwaita-icon-theme                                             
 at-spi2-atk                                                   
 at-spi2-core                                                   
 cairo-gobject                                                  
 colord-libs                                                    
 gtk3                                                            
 json-glib                                                       
 libXevie                                                       
 libgusb                                                  
 rest                                                           
 Updating for dependencies:
 glib2

Надеюсь, это поможет