How to finally use headless Chrome to power your automated tests
Google Chrome version 59 will ship with the headless
option. This means you can test your web applications using chrome without needing xvfb. One problem: the latest chromedriver (version 2.29) doesn't support versions of Chrome higher than 58.
The solution is to build the latest chromedriver that supports the latest chrome/chromium. Google does not make nightly builds of chromedriver public, you have to download the chromium source and build
chromedriver yourself.
How all the pieces work together
Cucumber uses the capybara gem to send commands to selenium-webdriver. Selenium-webdriver in turn starts up your local copy of chromedriver, which then starts up chrome and controls the browser through a special debug port.
To get the latest chromium, I used a tool on GitHub that downloads the latest snapshot compiled for Linux.
To get the latest chromedriver, I followed the
build instructions.
Configuring the tests
When configuring capybara, you need to tell selenium-webdriver the path to your custom chromium binary and send the --headless
flag, along with other flags
you'll likely need in a CI build node environment.
For running in docker:
Capybara.register_driver :headless_chromium do |app|
caps = Selenium::WebDriver::Remote::Capabilities.chrome(
"chromeOptions" => {
'binary' => "/chromium-latest-linux/466395/chrome-linux/chrome",
'args' => %w{headless no-sandbox disable-gpu}
}
)
driver = Capybara::Selenium::Driver.new(
app,
browser: :chrome,
desired_capabilities: caps
)
end
Capybara.default_driver = :headless_chromium
Now, capybara will drive a headless chromium!