Skip to content

Instantly share code, notes, and snippets.

@eric-wood
Last active July 5, 2017 15:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eric-wood/807ea1859f0268ac6b735ed939a82906 to your computer and use it in GitHub Desktop.
Save eric-wood/807ea1859f0268ac6b735ed939a82906 to your computer and use it in GitHub Desktop.
Minimal (yet effective) Capybara + headless Chrome testing setup
require 'rspec'
require 'capybara/rspec'
require 'selenium/webdriver'
Capybara.register_driver :chrome do |app|
Capybara::Selenium::Driver.new(app, browser: :chrome)
end
webdriver_options = %w(disable-gpu)
webdriver_options << 'headless' unless ENV['WINDOWED'] == 'true'
Capybara.register_driver(:headless_chrome) do |app|
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
chromeOptions: { args: webdriver_options }
)
Capybara::Selenium::Driver.new(
app,
browser: :chrome,
desired_capabilities: capabilities
)
end
Capybara.register_driver(:mobile) do |app|
device_name = ENV.fetch('device', 'iPhone 6')
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
chromeOptions: {
args: webdriver_options,
mobileEmulation: { deviceName: device_name }
}
)
Capybara::Selenium::Driver.new(
app,
browser: :chrome,
desired_capabilities: capabilities
)
end
Capybara.javascript_driver = :headless_chrome
Capybara.default_driver = :headless_chrome
Capybara.app_host = ENV['HOST']
Capybara.save_path = 'test_reports/'
Capybara.default_max_wait_time = 10
RSpec.configure do |config|
config.include Capybara::DSL
config.include Helpers
config.after(:each) do |example|
if example.exception
errors = page.driver.browser.manage.logs.get(:browser)
puts "Test failed, dumping browser logs:"
# indent error messages by two spaces
errors.map! { |error| " #{error}" }
puts
puts errors.join("\n")
end
end
end
require_relative 'spec_helper'
describe "Signing up for a wine subscription on desktop" do
context 'on desktop' do
it 'takes the user to the homepage' do
visit '/'
end
end
context 'on mobile', driver: :mobile do
it 'takes the user to the homepage' do
visit '/'
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment