Skip to content

Instantly share code, notes, and snippets.

@jaxn
Last active September 19, 2017 17:14
Show Gist options
  • Save jaxn/e1d968b6c2b48e969bd630fc22dcd198 to your computer and use it in GitHub Desktop.
Save jaxn/e1d968b6c2b48e969bd630fc22dcd198 to your computer and use it in GitHub Desktop.
Migrate to chromedriver from capybara-webkit for Rails with WSL support
require 'test_helper'
# Capybara driver chosen based on the value of ENV['TEST_WITH_CHROME']
# - `false` - use capybara-webkit
# - `headless` - chromedriver in headless mode
# - `true` (or any other value) - chromedriver in a Window
class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
if ENV['TEST_WITH_CHROME'] && ENV['TEST_WITH_CHROME'] != 'false'
require "selenium/webdriver"
require 'chromedriver_patch'
Capybara.register_driver :chrome do |app|
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
takesScreenshot: true,
chromeOptions: { args: ["--window-size=1024,768", "disable-gpu"]}
)
Capybara::Selenium::Driver.new(app, browser: :chrome, desired_capabilities: capabilities)
end
if ENV['TEST_WITH_CHROME'] == 'headless'
Capybara.register_driver :headless_chrome do |app|
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
takesScreenshoot: true,
chromeOptions: { args: ["--window-size=1024,768", "disable-gpu", "headless"] }
)
Capybara::Selenium::Driver.new(app, browser: :chrome, desired_capabilities: capabilities)
end
Capybara.javascript_driver = :headless_chrome
driven_by :headless_chrome
else
Capybara.javascript_driver = :chrome
driven_by :chrome
end
else
require 'capybara/webkit'
Capybara.javascript_driver = :webkit
driven_by :webkit
end
#!/bin/sh
# shim in WSL filesystem to use chromedriver.exe installed in Windows
# place this file in your Linux $PATH and ensure chromedriver.exe is also in your $PATH
chromedriver.exe "$@"
class Capybara::Selenium::Driver
# monkey patch capybara-webkit method for chromedriver
def error_messages
browser.manage.logs.get(:browser)
end
end
class ChildProcess::Unix::Process
alias_method :orig_exited?, :exited?
# monkey patch to support chromedriver on WSL
def exited?
return orig_exited? unless `cat /proc/version` =~ /Microsoft/
return true if @exit_code
if (system("pkill -P #{@pid}"))
@exit_code = 1
return true
end
end
end
@zernie
Copy link

zernie commented Sep 18, 2017

@jaxn does this require inside preview to be installed?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment