Google Chrome

Google Chrome 附加组件允许 Travis CI 构建在运行时安装 Google Chrome。

此附加组件支持 Linux 和 macOS 构建环境

对于 Linux,您必须在 Ubuntu Xenial 16.04 或更高版本的构建环境上运行。

选择 Chrome 版本 #

您可以安装 stablebeta 版本的 Chrome,但不能选择特定的数字版本。

addons:
  chrome: stable

请注意,当 Google 更新 stablebeta 版本时,底层 Chrome 版本可能会在一次构建到另一次构建之间发生变化。

无头模式 #

您可以在 无头模式 下使用 Google Chrome。

沙盒 #

出于安全原因,Google Chrome 在 基于容器的环境 中运行时无法提供沙盒功能。

在这种情况下,您可能会看到类似以下错误消息

30 11 2017 13:35:42.245:ERROR [launcher]: Cannot start Chrome
  [4315:4315:1130/133541.781662:FATAL:setuid_sandbox_host.cc(157)] The SUID sandbox helper binary was found, but is not configured correctly. Rather than run without sandboxing I'm aborting now. You need to make sure that /opt/google/chrome/chrome-sandbox is owned by root and has mode 4755.

或类似以下消息

Selenium::WebDriver::Error::UnknownError:
  unknown error: Chrome failed to start: crashed
    (Driver info: chromedriver=2.38.552522 (437e6fbedfa8762dec75e2c5b3ddb86763dc9dcb),platform=Linux 4.14.12-041412-generic x86_64)

要在基于容器的环境中使用 Chrome,请将 --no-sandbox 标志传递给 chrome 可执行文件。

实现此方法的方式因测试框架而异。以下是一些示例。有关如何添加 --no-sandbox 标志的更多详细信息,请咨询您工具的文档。

Karma Chrome 启动器 #

使用 Karma 的自定义启动器插件,您需要将其添加到 flags 数组中

module.exports = function(config) {
  config.set({
    browsers: ['Chrome', 'ChromeHeadless', 'ChromeHeadlessNoSandbox'],

    // you can define custom flags
    customLaunchers: {
      ChromeHeadlessNoSandbox: {
        base: 'ChromeHeadless',
        flags: ['--no-sandbox']
      }
    }
  })
}

Capybara #

使用 Ruby 与 Capybara 时,您需要使用适当的标志设置自定义驱动程序

require 'capybara'
Capybara.register_driver :chrome do |app|
	options = Selenium::WebDriver::Chrome::Options.new(args: %w[no-sandbox headless disable-gpu])

	Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
end

Capybara.javascript_driver = :chrome

Behat #

使用 Behat 时,您应该将选项传递给 selenium2 chrome 配置

default:
  extensions:
    Behat\MinkExtension:
      selenium2:
        # This will probably be the same always, if you follow the guide for browsers below.
        wd_host: http://localhost:8643/wd/hub
        capabilities:
          chrome:
            switches:
              - "--headless"
              - "--disable-gpu"
              - "--no-sandbox"
      javascript_session: selenium2
      browser_name: chrome