1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
|
# frozen_string_literal: true
require "abstract_unit"
require "action_dispatch/system_testing/driver"
require "selenium/webdriver"
class DriverTest < ActiveSupport::TestCase
test "initializing the driver" do
driver = ActionDispatch::SystemTesting::Driver.new(:selenium)
assert_equal :selenium, driver.instance_variable_get(:@name)
end
test "initializing the driver with a browser" do
driver = ActionDispatch::SystemTesting::Driver.new(:selenium, using: :chrome, screen_size: [1400, 1400], options: { url: "http://example.com/wd/hub" })
assert_equal :selenium, driver.instance_variable_get(:@name)
assert_equal :chrome, driver.instance_variable_get(:@browser).name
assert_nil driver.instance_variable_get(:@browser).options
assert_equal [1400, 1400], driver.instance_variable_get(:@screen_size)
assert_equal ({ url: "http://example.com/wd/hub" }), driver.instance_variable_get(:@options)
end
test "initializing the driver with a headless chrome" do
driver = ActionDispatch::SystemTesting::Driver.new(:selenium, using: :headless_chrome, screen_size: [1400, 1400], options: { url: "http://example.com/wd/hub" })
assert_equal :selenium, driver.instance_variable_get(:@name)
assert_equal :headless_chrome, driver.instance_variable_get(:@browser).name
assert_instance_of Selenium::WebDriver::Chrome::Options, driver.instance_variable_get(:@browser).options
assert_equal [1400, 1400], driver.instance_variable_get(:@screen_size)
assert_equal ({ url: "http://example.com/wd/hub" }), driver.instance_variable_get(:@options)
end
test "initializing the driver with a headless firefox" do
driver = ActionDispatch::SystemTesting::Driver.new(:selenium, using: :headless_firefox, screen_size: [1400, 1400], options: { url: "http://example.com/wd/hub" })
assert_equal :selenium, driver.instance_variable_get(:@name)
assert_equal :headless_firefox, driver.instance_variable_get(:@browser).name
assert_instance_of Selenium::WebDriver::Firefox::Options, driver.instance_variable_get(:@browser).options
assert_equal [1400, 1400], driver.instance_variable_get(:@screen_size)
assert_equal ({ url: "http://example.com/wd/hub" }), driver.instance_variable_get(:@options)
end
test "initializing the driver with a poltergeist" do
driver = ActionDispatch::SystemTesting::Driver.new(:poltergeist, screen_size: [1400, 1400], options: { js_errors: false })
assert_equal :poltergeist, driver.instance_variable_get(:@name)
assert_equal [1400, 1400], driver.instance_variable_get(:@screen_size)
assert_equal ({ js_errors: false }), driver.instance_variable_get(:@options)
end
test "initializing the driver with a webkit" do
driver = ActionDispatch::SystemTesting::Driver.new(:webkit, screen_size: [1400, 1400], options: { skip_image_loading: true })
assert_equal :webkit, driver.instance_variable_get(:@name)
assert_equal [1400, 1400], driver.instance_variable_get(:@screen_size)
assert_equal ({ skip_image_loading: true }), driver.instance_variable_get(:@options)
end
test "registerable? returns false if driver is rack_test" do
assert_not ActionDispatch::SystemTesting::Driver.new(:rack_test).send(:registerable?)
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
expected = {
"goog:chromeOptions" => {
"args" => ["start-maximized"],
"mobileEmulation" => { "deviceName" => "iphone 6" },
"prefs" => { "detach" => true }
}
}
assert_equal expected, driver_option.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
expected = {
"goog:chromeOptions" => {
"args" => ["start-maximized"],
"mobileEmulation" => { "deviceName" => "iphone 6" },
"prefs" => { "detach" => true }
}
}
assert_equal expected, driver_option.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
expected = {
"moz:firefoxOptions" => {
"args" => ["--host=127.0.0.1"],
"prefs" => { "browser.startup.homepage" => "http://www.seleniumhq.com/" }
}
}
assert_equal expected, driver_option.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
expected = {
"moz:firefoxOptions" => {
"args" => ["--host=127.0.0.1"],
"prefs" => { "browser.startup.homepage" => "http://www.seleniumhq.com/" }
}
}
assert_equal expected, driver_option.as_json
end
test "does not define extra capabilities" do
driver = ActionDispatch::SystemTesting::Driver.new(:selenium, screen_size: [1400, 1400], using: :firefox)
assert_nothing_raised do
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
test "does not preload if :rack_test is set" do
assert_not_called_on_instance_of(ActionDispatch::SystemTesting::Browser, :preload) do
ActionDispatch::SystemTesting::Driver.new(:rack_test, using: :chrome)
end
end
end
|