Travis-CI上的Chromedriver

时间:2013-12-04 00:45:02

标签: google-chrome selenium-chromedriver travis-ci

我在为我的项目knockout-secure-binding工作的Travis-CI上遇到chromedriver时遇到了麻烦。我试图使用WebdriverJS至少自动化Chrome测试。

I noted在Travis-CI上似乎存在chromedriver的一些问题,包括:

这个问题似乎是" Chrome无法访问"的变体,而且从我可以收集到的内容中,需要谷歌上游参与修复它。

错误的详细信息为available through the Travis build log

虽然有一条评论使用--no-sandbox提及,但没有明显的解决方法,但目前尚不清楚在WebdriverJS中使用它的地点或方式。

对此的任何想法都将深表感谢。

- 编辑 -

感兴趣的是我使用Sauce Labs代替Chromedriver。

3 个答案:

答案 0 :(得分:7)

在Travis CI上启动Chrome更简单的方法,只需在addons / apt / sources中指定google-chrome,在addons / apt / packages中指定google-chrome-package。

这是我的示例配置,以便更好地理解:

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

答案 1 :(得分:4)

我认为Travis确实支持chrome驱动程序,如果你在travis.yml中添加它们,提取正确的chromedriver并将其解压缩到一个已知的位置,以便你以后可以追踪它。

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 

另外,当您调用selenium或任何测试自动化库时,您需要添加此代码,此处的代码位于Python,但这也可以在JavaRuby中完成。

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)

答案 2 :(得分:1)

编辑:截至2018年10月,Travis CI逐渐远离容器(请参阅official announcement)。因此,可以省略 <script src="/socket.io/socket.io.js"></script> <script> var socket = io(); socket.on('message', function(data){document.write(data)}); </script> ,但是给定的ChromeDriver设置仍然有效。

如果您想使用container-based环境(启动时间短但没有sudo: false),您也可以按照以下步骤进行操作(包括sudo和依此类推):

language

然后,正如您已经提到的,将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 & 添加到您的Chrome浏览器选项中(从此gist中获取):

--no-sandbox

这是由于Travis CI中的issue引起的。但是,如果仍然需要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(); 或运行很长时间,而基于容器的环境只具有有限的意义,则还可以设置sudo并省略添加sudo: true

其他资源: