Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 31 additions & 10 deletions lib/solidus_dev_support/rspec/capybara.rb
Original file line number Diff line number Diff line change
@@ -1,22 +1,43 @@
# frozen_string_literal: true

require "selenium-webdriver"

# Allow to override the initial windows size
CAPYBARA_WINDOW_SIZE = ENV.fetch("CAPYBARA_WINDOW_SIZE", "1920x1080").split("x", 2).map(&:to_i)
CAPYBARA_WINDOW_WIDTH = CAPYBARA_WINDOW_SIZE[0]
CAPYBARA_WINDOW_HEIGHT = CAPYBARA_WINDOW_SIZE[1]
CAPYBARA_WINDOW_SIZE = ENV.fetch("CAPYBARA_WINDOW_SIZE", "1920x1080")

# Set Chrome version you want to use
CAPYBARA_JAVASCRIPT_DRIVER_VERSION = ENV.fetch("CAPYBARA_JAVASCRIPT_DRIVER_VERSION", "133")
# Make sure Selenium downloads this version of Chrome
ENV["SE_BROWSER_VERSION"] = CAPYBARA_JAVASCRIPT_DRIVER_VERSION

Capybara.javascript_driver = ENV.fetch("CAPYBARA_JAVASCRIPT_DRIVER", "solidus_chrome_headless").to_sym
Capybara.default_max_wait_time = 10
Capybara.server = :puma, {Silent: true} # A fix for rspec/rspec-rails#1897

Capybara.drivers[:selenium_chrome_headless].tap do |original_driver|
Capybara.register_driver :solidus_chrome_headless do |app|
original_driver.call(app).tap do |driver|
driver.resize_window_to(
driver.current_window_handle, CAPYBARA_WINDOW_WIDTH, CAPYBARA_WINDOW_HEIGHT
)
end
Capybara.register_driver :solidus_chrome_headless do |app|
browser_options = Selenium::WebDriver::Chrome::Options.new.tap do |opts|
opts.add_argument("--headless=new")
opts.add_argument("--disable-gpu")
opts.add_argument("--no-sandbox")
opts.add_argument("--window-size=#{CAPYBARA_WINDOW_SIZE}")
opts.add_argument("--disable-search-engine-choice-screen")

# From https://github.com/teamcapybara/capybara/issues/2796
# Chrome flags found from:
# - https://peter.sh/experiments/chromium-command-line-switches/
# - https://github.com/GoogleChrome/chrome-launcher/blob/main/docs/chrome-flags-for-tools.md
#
# Disable timers being throttled in background pages/tabs. Useful for parallel test runs.
opts.add_argument("disable-background-timer-throttling")
# Normally, Chrome will treat a "foreground" tab instead as backgrounded if the surrounding window is occluded (aka
# visually covered) by another window. This flag disables that. Useful for parallel test runs.
opts.add_argument("disable-backgrounding-occluded-windows")
# This disables non-foreground tabs from getting a lower process priority. Useful for parallel test runs.
opts.add_argument("disable-renderer-backgrounding")

opts.browser_version = CAPYBARA_JAVASCRIPT_DRIVER_VERSION
end
Capybara::Selenium::Driver.new(app, browser: :chrome, options: browser_options)
end

require "capybara-screenshot/rspec"
Expand Down
Loading