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.
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 })
Log is writen at log/capybara-box.log
as default.
You can see each command executed. Time spent between them and debug some hanging command. 🎉
CapybaraBox.configure(log: true)
[15.479][INFO]: RESPONSE Navigate
[15.482][INFO]: COMMAND ExecuteScript {
"args": [ ],
"script": "return $(\".gridy\").data(\"ready\")"
}
[15.483][INFO]: Waiting for pending navigations...
[15.545][INFO]: Done waiting for pending navigations. Status: ok