# frozen_string_literal: true require 'capybara/rspec' require 'selenium/webdriver' Capybara.default_max_wait_time = 10 Capybara.server = :puma, {Silent: true} # Headless firefox and chrome configuration. Useful for CI matrices. # See https://gist.github.com/bbonamin/4b01be9ed5dd1bdaf909462ff4fdca95 Capybara.register_driver :firefox do |app| Capybara::Selenium::Driver.new(app, browser: :firefox) end Capybara.register_driver :headless_firefox do |app| options = Selenium::WebDriver::Firefox::Options.new options.headless! # added on https://github.com/SeleniumHQ/selenium/pull/4762 Capybara::Selenium::Driver.new(app, browser: :firefox, options: options) end options = Selenium::WebDriver::Chrome::Options.new options.add_preference(:download, prompt_for_download: false, default_directory: '/tmp/downloads') options.add_preference(:browser, set_download_behavior: {behavior: 'allow'}) Capybara.register_driver :chrome do |app| Capybara::Selenium::Driver.new(app, browser: :chrome, options: options) end Capybara.register_driver :headless_chrome do |app| options.add_argument('--headless') options.add_argument('--disable-gpu') options.add_argument('--window-size=1280,800') driver = Capybara::Selenium::Driver.new(app, browser: :chrome, options: options) ### Allow file downloads in Google Chrome when headless!!! ### https://bugs.chromium.org/p/chromium/issues/detail?id=696481#c89 bridge = driver.browser.send(:bridge) path = '/session/:session_id/chromium/send_command' path[':session_id'] = bridge.session_id bridge.http.call(:post, path, cmd: 'Page.setDownloadBehavior', params: { behavior: 'allow', downloadPath: '/tmp/downloads', }) ### driver end