| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- # frozen_string_literal: true
- require 'capybara/rspec'
- require 'selenium/webdriver'
- # Check if Capybara should be running against a remote Selenium instance
- def remote_selenium?
- (ENV['SELENIUM_FIREFOX_HOST'] || ENV['SELENIUM_CHROME_HOST']) && ENV['SELENIUM_PORT']
- end
- if !remote_selenium?
- require 'webdrivers'
- # Only check Webdrivers updates onces per day
- Webdrivers.cache_time = 86_400
- end
- Capybara.default_max_wait_time = 10
- Capybara.server = :puma, {Silent: true}
- # Condtionally swap driver setup, defaults to `:headless_firefox`
- def selenium_driver
- return @selenium_driver if @selenium_driver
- selenium_driver = []
- if remote_selenium?
- selenium_driver.push('remote')
- elsif ENV['CAPYBARA_GUI_DRIVER'] != 'true'
- selenium_driver.push('headless')
- end
- case ENV['CAPYBARA_JS_DRIVER']
- when 'chrome'
- selenium_driver.push('chrome')
- when 'firefox'
- selenium_driver.push('firefox')
- else
- selenium_driver.push('firefox')
- end
- @selenium_driver = selenium_driver.join('_').to_sym
- end
- # Setting app_host and default_host here have no bearing on test runners.
- # These must be set in a `before` block for each test, i.e. in rails_helper.rb
- # Capybara.app_host = "http://#{ip}:#{app_host_port}"
- # Capybara.default_host = "http://#{ip}:#{app_host_port}"
- Capybara.server_port = ENV['APP_HOST_PORT'] if ENV['APP_HOST_PORT']
- Capybara.server_host = '0.0.0.0' if remote_selenium?
- # 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)
- driver
- end
- Capybara.register_driver :remote_firefox do |app|
- Capybara::Selenium::Driver.new(
- app,
- browser: :remote,
- url: "http://#{ENV['SELENIUM_FIREFOX_HOST']}:#{ENV['SELENIUM_PORT']}/wd/hub",
- desired_capabilities: Selenium::WebDriver::Remote::Capabilities.firefox,
- )
- end
- Capybara.register_driver :remote_chrome do |app|
- args = ['--no-default-browser-check', '--start-maximized']
- caps = Selenium::WebDriver::Remote::Capabilities.chrome('chromeOptions' => {'args' => args})
- Capybara::Selenium::Driver.new(
- app,
- browser: :remote,
- url: "http://#{ENV['SELENIUM_CHROME_HOST']}:#{ENV['SELENIUM_PORT']}/wd/hub",
- desired_capabilities: caps,
- )
- end
|