Merge pull request #36592 from jhawthorn/system_testing_preload
Preload browser driver_path to fix system testing under parallelism
This commit is contained in:
commit
a59b230579
@ -4,6 +4,7 @@
|
||||
|
||||
require "capybara/dsl"
|
||||
require "capybara/minitest"
|
||||
require "selenium/webdriver"
|
||||
require "action_controller"
|
||||
require "action_dispatch/system_testing/driver"
|
||||
require "action_dispatch/system_testing/browser"
|
||||
|
@ -39,6 +39,19 @@ def capabilities
|
||||
end
|
||||
end
|
||||
|
||||
# driver_path can be configured as a proc. The webdrivers gem uses this
|
||||
# proc to update web drivers. Running this proc early allows us to only
|
||||
# update the webdriver once and avoid race conditions when using
|
||||
# parallel tests.
|
||||
def preload
|
||||
case type
|
||||
when :chrome
|
||||
::Selenium::WebDriver::Chrome::Service.driver_path.try(:call)
|
||||
when :firefox
|
||||
::Selenium::WebDriver::Firefox::Service.driver_path.try(:call)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def headless_chrome_browser_options
|
||||
capabilities.args << "--headless"
|
||||
|
@ -9,6 +9,8 @@ def initialize(name, **options, &capabilities)
|
||||
@screen_size = options[:screen_size]
|
||||
@options = options[:options]
|
||||
@capabilities = capabilities
|
||||
|
||||
@browser.preload
|
||||
end
|
||||
|
||||
def use
|
||||
|
@ -120,4 +120,17 @@ class DriverTest < ActiveSupport::TestCase
|
||||
driver.use
|
||||
end
|
||||
end
|
||||
|
||||
test "preloads browser's driver_path" do
|
||||
called = false
|
||||
|
||||
original_driver_path = ::Selenium::WebDriver::Chrome::Service.driver_path
|
||||
::Selenium::WebDriver::Chrome::Service.driver_path = -> { called = true }
|
||||
|
||||
ActionDispatch::SystemTesting::Driver.new(:selenium, screen_size: [1400, 1400], using: :chrome)
|
||||
|
||||
assert called
|
||||
ensure
|
||||
::Selenium::WebDriver::Chrome::Service.driver_path = original_driver_path
|
||||
end
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user