Configure Capybara with Chrome, Chrome Headless, Firefox and Firefox Headless with Screenshot feature without losing your mind.
Add the following code on your Gemfile and run bundle install:
group :test do
gem 'capybara-box', require: false
endJust require the lib after Capybara require and you done:
require 'capybara/rails'
require 'capybara-box'
CapybaraBox::Base.configureBy default, selenium_chrome is the driver, but you can use selenium_chrome_headless and selenium_firefox or selenium_firefox_headless too.
CapybaraBox::Base.configure(browser: :selenium_firefox)The version is setted via webdrivers. You can specify the version:
CapybaraBox::Base.configure(version: '83.0.4103.39')You can enable screenshot on failure:
CapybaraBox.configure(screenshot: { enabled: true })If you want to send the screenshot and html page to S3 setup your credentials via ENV:
ENV['CAPYBARA_BOX__S3_BUCKET_NAME']
ENV['CAPYBARA_BOX__S3_REGION']
ENV['CAPYBARA_BOX__S3_ACCESS_KEY_ID']
ENV['CAPYBARA_BOX__S3_SECRET_ACCESS_KEY']And then enable S3 feature:
CapybaraBox.configure(screenshot: { enabled: true, s3: true })By default some Switches are enabled for a better performance, you can add yours too:
capybara_box = CapybaraBox.configure
capybara_box.add_argument('--incognito')If you prefere, is possible override all of them:
CapybaraBox.configure(arguments: ['--incognito'])Click here to see the avaiables.
By default some Preferences are enabled for a better performance, you can add yours too:
capybara_box = CapybaraBox.configure
capybara_box.add_preference(:credentials_enable_service, false)If you prefere, is possible override all of them:
CapybaraBox.configure(preferences: { credentials_enable_service: false })You can check Chrome and Firefox.
By default some timeout configs are enabled only on CI env for a better performance. It has this restrition because with timeout enabled, debugger cannot evaluate the variables values. You can override all of them too:
CapybaraBox.configure(http_client_options: { read_timeout: 60 })You can override all driver options:
CapybaraBox.configure(driver_options: { clear_local_storage: true })Logs are writen as WARN on the STDOUT by default. You can change it:
CapybaraBox.configure(logger: { level: :debug, output: 'log/selenium.log' })