|
@@ -0,0 +1,52 @@
|
|
|
|
|
+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
|