未验证 提交 a59b2305 编写于 作者: J John Hawthorn 提交者: GitHub

Merge pull request #36592 from jhawthorn/system_testing_preload

Preload browser driver_path to fix system testing under parallelism
......@@ -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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册