我们正在使用 Karma & Jasmine 为我们的前端 Node.js 应用程序从 PhantomJS 迁移到 ChromeHeadless。在本地,只需要替换字段即可
browsers: ['PhantomJS'],
与
browsers: ['ChromeHeadless'],
并在 package.json 中添加条目:
"karma-chrome-launcher": "x.y.z",
然后 npm 构建将采用本地安装的 chrome 浏览器实例来运行 Jasmine 测试。这工作正常。
在我们的 jenkins 构建服务器(在 Debian Jessie 上运行)上,没有安装 chrome,因此无法执行测试。
现在问题:
- 是否有一个 chrome 的 NPM 包 ,我可以安装它,这样我就不必直接在 debian 机器上安装它了? (类似于phantomjs-prebuilt,在运行实际测试用例之前安装当前的PhantomJS实例)
更新:是的,有 NPM 包 puppeteer,请参阅: https://github.com/GoogleChrome/puppeteer .这将根据当前构建机器获取 chrome 版本。因此,必须添加新条目 package.json 文件(或通过 npm install puppeteer -D 安装):
"puppeteer": "x.y.z",
和 karma.conf:
process.env.CHROME_BIN = require('puppeteer').executablePath();
browsers: ['HeadlessChrome'],
customLaunchers: {
HeadlessChrome: {
base: 'ChromeHeadless',
flags: ['--no-sandbox']
}
},
请注意,对于 Debian,有时必须安装缺少的依赖项。请参阅:https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md
最佳答案
有比随处捆绑 Chrome 更好的方法来做到这一点。 您可以设置环境变量来告诉 Puppeteer 安装或不安装 Chromium。 所以在本地,继续安装 chromium,但在 CI 服务器上将 env 变量设置为不安装 chromium。
然后您可以获得无浏览器图像并为 CI 服务器 chrome 运行它。 这要好得多的原因是你需要在服务器上安装大量的依赖项才能让 Chromium 工作。使用 Docker 镜像是更好的方法。
请参阅此处的文档: https://docs.browserless.io/docs/docker-quickstart.html
引用本question中的答案!有关如何使用 Selenium Chrome 图像执行此操作的 karma 配置
关于node.js - 在 Jenkins CI 和 Debian 上使用 ChromeHeadless 的 Karma,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48923462/