web-dev-qa-db-fra.com

Exécution de sélénium-chromedriver en utilisant Protractor sur Linux

J'utilise un rapporteur pour exécuter des tests sur une application Angular. Ils fonctionnent sur mon environnement OSX mais pas sur Linux où TeamCity tente de l'exécuter.

Lorsque j'exécute cette commande sur mon environnement OSX local, cela fonctionne (testé également sur la machine de mes collègues):

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

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

Lorsque j'exécute ceci sur une machine Linux, ou qu'un travail TeamCity essaie de l'exécuter, cela échoue:

./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)

Tentatives pour résoudre:

J'ai examiné ce problème , mais un serveur WebDriver autonome n'est pas une solution.

J'ai regardé ce problème mais ma version de Selenium-wedriver est 2.42.1, donc pas le même bogue.

Versions:

$ 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

Mise à jour en cours:

Essayer d'obtenir la version de chrome-webdriver expose un problème:

$ ./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

De cela, j'ai conclu qu'il y avait un problème de dépendance et j'ai constaté que Selenium requiert Chrome . (plus) .

J'ai installé Chrome sur la machine Linux en utilisant comme ceci :

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

Cela ne fonctionnait pas exactement comme ça, mais après quelques allers et retours avec des dépendances et Sudo apt-get install, je pense que j'ai installé Chrome:

$ google-chrome --version
Google Chrome 36.0.1985.143 

Cela a permis à la version chromedriver de fonctionner:

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

Cependant, exécuter Protractor ne fonctionne toujours pas:

$ ./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)
14
SimplGy

Vous devez être capable d’exécuter Chrome ou Firefox sans tête et pour cela, vous devrez entre autres configurer Xvfb, sinon Chrome ne pourra pas se lancer sans un $ DISPLAY approprié.

Vous pouvez également utiliser PhantomJS mais, à mon humble avis, à quoi cela sert-il de tester e2e puisque ce n’est pas un vrai navigateur?.

C’est ce que j’utilise avec succès pour les tests continus: https://github.com/elgalu/docker-Selenium

8
Leo Gallucci

J'ai eu le même problème et il a été résolu juste après l'installation de l'unité-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

j'espère que ça aide

1
Inforedaster