我正在开发一个需要--disable-web-security
进行测试的项目。我将Karma用于以下设置:
browsers: [
"ch"
],
customLaunchers: {
"ch": {
"base": "Chrome",
"flags": ["--disable-web-security"]
}
},
和
if (process.env.TRAVIS)
options.customLaunchers.ch.flags.push("--no-sandbox");
这在使用Chrome v69.0.3497.100 win7 x64的localhost上正常运行。
我正在尝试使用以下yml在Travis上运行相同的代码(通过将更改推送到GitHub):
language: node_js
node_js:
- "9"
before_install:
- export CHROME_BIN=chromium-browser
- export DISPLAY=:99.0
- sh -e /etc/init.d/xvfb start
- sleep 5
自Chromium != Chrome
起,我猜我们在这里谈论的是使用相同引擎的2种不同的浏览器,但我不确定。无论如何,我尝试在Travis上构建时收到一条错误消息:
Blocked a frame with origin "http://localhost:9876" from accessing a cross-origin frame.
这清楚地表明已启用网络安全性。有什么方法可以在Travis上禁用网络安全性吗?
在真实的Chrome中使用Trusty解决了该问题:
language: node_js
node_js:
- "9"
dist: trusty
addons:
chrome: stable
before_install:
- export DISPLAY=:99.0
- sh -e /etc/init.d/xvfb start
- sleep 5
答案 0 :(得分:1)
根据this documentation,您可以通过在.travis.yml
配置文件中写入以下内容来无头运行Chrome
dist: trusty
addons:
chrome: stable
before_install:
- # start your web application and listen on `localhost`
- google-chrome-stable --headless --disable-gpu --remote-debugging-port=9222 http://localhost &
关于您的Karma配置文件,请选中this page。它表明您必须再添加一个标志。
出于安全考虑,当Google Chrome在基于容器的环境中运行时,无法提供沙箱功能。
要在基于容器的环境中使用Chrome,请将--no-sandbox标志传递给chrome可执行文件。
module.exports = function(config) {
config.set({
browsers: ['Chrome', 'ChromeHeadless', 'ChromeHeadlessNoSandbox'],
// you can define custom flags
customLaunchers: {
ChromeHeadlessNoSandbox: {
base: 'ChromeHeadless',
flags: ['--no-sandbox']
}
}
})
}
请注意,我以前 从未 进行过此操作。我只是为您指出正确的文档。