capybara_helper.rb 1.8 KB

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