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
end
Just require the lib after Capybara require and you done:
require 'capybara/rails'
require 'capybara-box'
CapybaraBox::Base.configure
By 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' })