Chromedriver sur Travis-CI
j'ai de la difficulté à obtenir chromedriver sur Travis-CI travaille pour mon projet knock-out-secure-binding . J'essaie d'utiliser WebdriverJS pour automatiser les tests avec Chrome, au moins.
j'ai noté qu'il semble y avoir quelques problèmes avec chromedriver sur Travis-CI, y compris:
- http://github.com/travis-ci/travis-ci/issues/938
- http://github.com/travis-ci/travis-ci/issues/272
- https://code.google.com/p/chromedriver/issues/detail?id=308
le problème semble être une variante de" chrome inaccessible", et de ce que je peux comprendre il nécessite un engagement en amont par Google pour le corriger.
les détails de l'erreur sont disponible à travers le journal de construction Travis .
aucune solution de rechange n'est apparente, bien qu'un commentaire ait mentionné l'utilisation de --no-sandbox
, mais il n'est pas clair où et comment on emploierait ceci dans WebdriverJS.
toute réflexion à ce sujet serait sincèrement appréciée.
-- Edit --
comme question d'intérêt, j'utilise Sauce Labs au lieu de Chromedriver.
3 réponses
il y a un moyen plus simple de lancer Chrome sur Travis CI, il suffit de spécifier google-chrome dans addons/apt/sources et google-chrome-package dans addons/apt/packages.
Voici mon exemple de configuration pour une meilleure compréhension:
sudo: required
dist: trusty
addons:
apt:
sources:
- google-chrome
packages:
- google-chrome-stable
language: node_js
node_js:
- "6"
cache:
directories: node_modules
branches:
only: master
before_script:
- export DISPLAY=:99.0
- sh -e /etc/init.d/xvfb start
- npm i -g npm@^3
- sleep 3
je pense que Travis prend en charge chrome driver, Si vous ajoutez ceux-ci dans votre travis.YML, extrayez le bon chromedriver et décompressez-le à un endroit connu, de sorte que vous puissiez le tracer plus tard.
before_script:
- wget http://chromedriver.storage.googleapis.com/2.10/chromedriver_linux64.zip
- unzip chromedriver_linux64.zip -d /home/travis/virtualenv/python2.7.9/
- export CHROME_BIN=chromium-browser
- "export DISPLAY=:99.0"
- "sh -e /etc/init.d/xvfb start"
- sleep 3
Plus lorsque vous appelez selenium ou n'importe quelle bibliothèque d'automation de test, vous devriez ajouter ceci le code ici est dans Python
mais cela peut être fait dans Java
et Ruby
aussi bien.
options = webdriver.ChromeOptions()
options.binary_location = '/usr/bin/chromium-browser'
#All the arguments added for chromium to work on selenium
options.add_argument("--no-sandbox") #This make Chromium reachable
options.add_argument("--no-default-browser-check") #Overrides default choices
options.add_argument("--no-first-run")
options.add_argument("--disable-default-apps")
driver = webdriver.Chrome('/home/travis/virtualenv/python2.7.9 /chromedriver',chrome_options=options)
si vous souhaitez utiliser un container-based Environnement (temps de démarrage rapide mais pas sudo
), vous pouvez également le faire comme suit (inclure language
et ainsi de suite):
dist: trusty
sudo: false
addons:
chrome: stable
apt:
packages:
- chromium-chromedriver
before_script:
# include ChromeDriver in PATH
- ln --symbolic /usr/lib/chromium-browser/chromedriver "${HOME}/bin/chromedriver"
# start Chrome and listen on localhost
- google-chrome-stable --headless --disable-gpu --remote-debugging-port=9222 http://localhost &
ensuite, comme vous l'avez déjà mentionné, ajouter --no-sandbox
à vos options Chrome (tiré de ce gist ):
var webdriver = require('selenium-webdriver');
var chromeOptions = {
'args': ['--no-sandbox']
};
var chromeCapabilities = webdriver.Capabilities.chrome();
chromeCapabilities.set('chromeOptions', chromeOptions);
var driver = new webdriver.Builder().withCapabilities(chromeCapabilities).build();
Cela est dû à un problème Travis CI. Cependant, si vous avez besoin de sudo
de toute façon ou si vous avez une construction de longue durée dans laquelle un environnement basé sur un conteneur n'a qu'un sens limité, vous pouvez aussi définir sudo: true
et omettre d'ajouter --no-sandbox
.
ressources supplémentaires: