我在为我的项目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。
答案 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
,但这也可以在Java
和Ruby
中完成。
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
。
其他资源: