未验证 提交 3ae38069 编写于 作者: R Ryuta Kamizono 提交者: GitHub

Merge pull request #37792 from glaszig/fix/actiondispatch/non-headless-driver-options

system tests: properly set driver options for non-headless drivers
* Fix system test driver option initialization for non-headless browsers.
*glaszig*
* `redirect_to.action_controller` notifications now include the `ActionDispatch::Request` in
their payloads as `:request`.
......
......@@ -3,10 +3,11 @@
module ActionDispatch
module SystemTesting
class Browser # :nodoc:
attr_reader :name
attr_reader :name, :options
def initialize(name)
@name = name
set_default_options
end
def type
......@@ -20,23 +21,9 @@ def type
end
end
def options
case name
when :headless_chrome
headless_chrome_browser_options
when :headless_firefox
headless_firefox_browser_options
end
end
def capabilities
@option ||=
case type
when :chrome
::Selenium::WebDriver::Chrome::Options.new
when :firefox
::Selenium::WebDriver::Firefox::Options.new
end
def configure
initialize_options
yield options if block_given? && options
end
# driver_path can be configured as a proc. The webdrivers gem uses this
......@@ -63,17 +50,37 @@ def preload
end
private
def headless_chrome_browser_options
capabilities.args << "--headless"
capabilities.args << "--disable-gpu" if Gem.win_platform?
def initialize_options
@options ||= begin
case type
when :chrome
::Selenium::WebDriver::Chrome::Options.new
when :firefox
::Selenium::WebDriver::Firefox::Options.new
end
end
end
capabilities
def set_default_options
case name
when :headless_chrome
set_headless_chrome_browser_options
when :headless_firefox
set_headless_firefox_browser_options
end
end
def headless_firefox_browser_options
capabilities.args << "-headless"
def set_headless_chrome_browser_options
configure do |capabilities|
capabilities.args << "--headless"
capabilities.args << "--disable-gpu" if Gem.win_platform?
end
end
capabilities
def set_headless_firefox_browser_options
configure do |capabilities|
capabilities.args << "-headless"
end
end
end
end
......
......@@ -7,7 +7,7 @@ def initialize(name, **options, &capabilities)
@name = name
@browser = Browser.new(options[:using])
@screen_size = options[:screen_size]
@options = options[:options]
@options = options[:options] || {}
@capabilities = capabilities
@browser.preload unless name == :rack_test
......@@ -25,7 +25,7 @@ def registerable?
end
def register
define_browser_capabilities(@browser.capabilities)
@browser.configure(&@capabilities)
Capybara.register_driver @name do |app|
case @name
......@@ -36,10 +36,6 @@ def register
end
end
def define_browser_capabilities(capabilities)
@capabilities.call(capabilities) if @capabilities
end
def browser_options
@options.merge(options: @browser.options).compact
end
......
......@@ -56,61 +56,53 @@ class DriverTest < ActiveSupport::TestCase
end
test "define extra capabilities using chrome" do
driver_option = nil
driver = ActionDispatch::SystemTesting::Driver.new(:selenium, screen_size: [1400, 1400], using: :chrome) do |option|
option.add_argument("start-maximized")
option.add_emulation(device_name: "iphone 6")
option.add_preference(:detach, true)
driver_option = option
end
driver.use
browser_options = driver.__send__(:browser_options)
expected = { "goog:chromeOptions" => { args: ["start-maximized"], mobileEmulation: { deviceName: "iphone 6" }, prefs: { detach: true } } }
assert_equal expected, driver_option.as_json
assert_equal expected, browser_options[:options].as_json
end
test "define extra capabilities using headless_chrome" do
driver_option = nil
driver = ActionDispatch::SystemTesting::Driver.new(:selenium, screen_size: [1400, 1400], using: :headless_chrome) do |option|
option.add_argument("start-maximized")
option.add_emulation(device_name: "iphone 6")
option.add_preference(:detach, true)
driver_option = option
end
driver.use
browser_options = driver.__send__(:browser_options)
expected = { "goog:chromeOptions" => { args: ["start-maximized"], mobileEmulation: { deviceName: "iphone 6" }, prefs: { detach: true } } }
assert_equal expected, driver_option.as_json
expected = { "goog:chromeOptions" => { args: ["--headless", "start-maximized"], mobileEmulation: { deviceName: "iphone 6" }, prefs: { detach: true } } }
assert_equal expected, browser_options[:options].as_json
end
test "define extra capabilities using firefox" do
driver_option = nil
driver = ActionDispatch::SystemTesting::Driver.new(:selenium, screen_size: [1400, 1400], using: :firefox) do |option|
option.add_preference("browser.startup.homepage", "http://www.seleniumhq.com/")
option.add_argument("--host=127.0.0.1")
driver_option = option
end
driver.use
browser_options = driver.__send__(:browser_options)
expected = { "moz:firefoxOptions" => { args: ["--host=127.0.0.1"], prefs: { "browser.startup.homepage" => "http://www.seleniumhq.com/" } } }
assert_equal expected, driver_option.as_json
assert_equal expected, browser_options[:options].as_json
end
test "define extra capabilities using headless_firefox" do
driver_option = nil
driver = ActionDispatch::SystemTesting::Driver.new(:selenium, screen_size: [1400, 1400], using: :headless_firefox) do |option|
option.add_preference("browser.startup.homepage", "http://www.seleniumhq.com/")
option.add_argument("--host=127.0.0.1")
driver_option = option
end
driver.use
browser_options = driver.__send__(:browser_options)
expected = { "moz:firefoxOptions" => { args: ["--host=127.0.0.1"], prefs: { "browser.startup.homepage" => "http://www.seleniumhq.com/" } } }
assert_equal expected, driver_option.as_json
expected = { "moz:firefoxOptions" => { args: ["-headless", "--host=127.0.0.1"], prefs: { "browser.startup.homepage" => "http://www.seleniumhq.com/" } } }
assert_equal expected, browser_options[:options].as_json
end
test "does not define extra capabilities" do
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册