capybara_helper.rb 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. # frozen_string_literal: true
  2. require 'capybara/rspec'
  3. require 'selenium/webdriver'
  4. Capybara.default_max_wait_time = 10
  5. Capybara.server = :puma, {Silent: true}
  6. # Headless firefox and chrome configuration. Useful for CI matrices.
  7. # See https://gist.github.com/bbonamin/4b01be9ed5dd1bdaf909462ff4fdca95
  8. Capybara.register_driver :firefox do |app|
  9. Capybara::Selenium::Driver.new(app, browser: :firefox)
  10. end
  11. Capybara.register_driver :headless_firefox do |app|
  12. options = Selenium::WebDriver::Firefox::Options.new
  13. options.headless! # added on https://github.com/SeleniumHQ/selenium/pull/4762
  14. Capybara::Selenium::Driver.new(app, browser: :firefox, options: options)
  15. end
  16. options = Selenium::WebDriver::Chrome::Options.new
  17. options.add_preference(:download, prompt_for_download: false,
  18. default_directory: '/tmp/downloads')
  19. options.add_preference(:browser, set_download_behavior: {behavior: 'allow'})
  20. Capybara.register_driver :chrome do |app|
  21. Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
  22. end
  23. Capybara.register_driver :headless_chrome do |app|
  24. options.add_argument('--headless')
  25. options.add_argument('--disable-gpu')
  26. options.add_argument('--window-size=1280,800')
  27. driver = Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
  28. ### Allow file downloads in Google Chrome when headless!!!
  29. ### https://bugs.chromium.org/p/chromium/issues/detail?id=696481#c89
  30. bridge = driver.browser.send(:bridge)
  31. path = '/session/:session_id/chromium/send_command'
  32. path[':session_id'] = bridge.session_id
  33. bridge.http.call(:post, path, cmd: 'Page.setDownloadBehavior',
  34. params: {
  35. behavior: 'allow',
  36. downloadPath: '/tmp/downloads',
  37. })
  38. ###
  39. driver
  40. end