selenium-webdriver 4.0.0.alpha3 → 4.0.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/CHANGES +160 -5
- data/LICENSE +1 -1
- data/README.md +4 -5
- data/lib/selenium/server.rb +19 -27
- data/lib/selenium/webdriver.rb +3 -3
- data/lib/selenium/webdriver/atoms/findElements.js +123 -0
- data/lib/selenium/webdriver/atoms/getAttribute.js +104 -7
- data/lib/selenium/webdriver/atoms/isDisplayed.js +76 -78
- data/lib/selenium/webdriver/atoms/mutationListener.js +38 -0
- data/lib/selenium/webdriver/chrome.rb +4 -2
- data/lib/selenium/webdriver/chrome/bridge.rb +4 -6
- data/lib/selenium/webdriver/chrome/driver.rb +19 -17
- data/lib/selenium/webdriver/chrome/features.rb +66 -0
- data/lib/selenium/webdriver/chrome/options.rb +55 -38
- data/lib/selenium/webdriver/chrome/profile.rb +1 -1
- data/lib/selenium/webdriver/chrome/service.rb +1 -5
- data/lib/selenium/webdriver/common.rb +7 -2
- data/lib/selenium/webdriver/common/driver.rb +84 -21
- data/lib/selenium/webdriver/common/driver_extensions/has_authentication.rb +89 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_devtools.rb +38 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +5 -8
- data/lib/selenium/webdriver/common/driver_extensions/has_log_events.rb +149 -0
- data/lib/selenium/webdriver/{edge_chrome/bridge.rb → common/driver_extensions/has_logs.rb} +7 -7
- data/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +4 -27
- data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +1 -0
- data/lib/selenium/webdriver/common/driver_extensions/prints_page.rb +32 -0
- data/lib/selenium/webdriver/common/element.rb +5 -0
- data/lib/selenium/webdriver/common/logger.rb +48 -16
- data/lib/selenium/webdriver/common/manager.rb +11 -1
- data/lib/selenium/webdriver/common/options.rb +53 -12
- data/lib/selenium/webdriver/common/platform.rb +6 -1
- data/lib/selenium/webdriver/common/port_prober.rb +4 -6
- data/lib/selenium/webdriver/common/proxy.rb +0 -0
- data/lib/selenium/webdriver/common/search_context.rb +3 -2
- data/lib/selenium/webdriver/common/service.rb +12 -127
- data/lib/selenium/webdriver/common/service_manager.rb +151 -0
- data/lib/selenium/webdriver/common/socket_lock.rb +2 -2
- data/lib/selenium/webdriver/common/takes_screenshot.rb +63 -0
- data/lib/selenium/webdriver/common/target_locator.rb +4 -4
- data/lib/selenium/webdriver/common/wait.rb +1 -1
- data/lib/selenium/webdriver/devtools.rb +135 -0
- data/lib/selenium/webdriver/devtools/console_event.rb +38 -0
- data/lib/selenium/webdriver/devtools/exception_event.rb +36 -0
- data/lib/selenium/webdriver/devtools/mutation_event.rb +37 -0
- data/lib/selenium/webdriver/devtools/v85/accessibility.rb +64 -0
- data/lib/selenium/webdriver/devtools/v85/animation.rb +100 -0
- data/lib/selenium/webdriver/devtools/v85/application_cache.rb +66 -0
- data/lib/selenium/webdriver/devtools/v85/audits.rb +63 -0
- data/lib/selenium/webdriver/devtools/v85/background_service.rb +69 -0
- data/lib/selenium/webdriver/devtools/v85/browser.rb +125 -0
- data/lib/selenium/webdriver/devtools/v85/cache_storage.rb +75 -0
- data/lib/selenium/webdriver/devtools/v85/cast.rb +72 -0
- data/lib/selenium/webdriver/devtools/v85/console.rb +59 -0
- data/lib/selenium/webdriver/devtools/v85/css.rb +167 -0
- data/lib/selenium/webdriver/devtools/v85/database.rb +66 -0
- data/lib/selenium/webdriver/devtools/v85/debugger.rb +231 -0
- data/lib/selenium/webdriver/devtools/v85/device_orientation.rb +55 -0
- data/lib/selenium/webdriver/devtools/v85/dom.rb +322 -0
- data/lib/selenium/webdriver/devtools/v85/dom_debugger.rb +95 -0
- data/lib/selenium/webdriver/devtools/v85/dom_snapshot.rb +67 -0
- data/lib/selenium/webdriver/devtools/v85/dom_storage.rb +81 -0
- data/lib/selenium/webdriver/devtools/v85/emulation.rb +182 -0
- data/lib/selenium/webdriver/devtools/v85/fetch.rb +99 -0
- data/lib/selenium/webdriver/devtools/v85/headless_experimental.rb +63 -0
- data/lib/selenium/webdriver/devtools/v85/heap_profiler.rb +109 -0
- data/lib/selenium/webdriver/devtools/v85/indexed_db.rb +102 -0
- data/lib/selenium/webdriver/devtools/v85/input.rb +143 -0
- data/lib/selenium/webdriver/devtools/v85/inspector.rb +57 -0
- data/lib/selenium/webdriver/devtools/v85/io.rb +61 -0
- data/lib/selenium/webdriver/devtools/v85/layer_tree.rb +97 -0
- data/lib/selenium/webdriver/devtools/v85/log.rb +68 -0
- data/lib/selenium/webdriver/devtools/v85/media.rb +59 -0
- data/lib/selenium/webdriver/devtools/v85/memory.rb +88 -0
- data/lib/selenium/webdriver/devtools/v85/network.rb +230 -0
- data/lib/selenium/webdriver/devtools/v85/overlay.rb +160 -0
- data/lib/selenium/webdriver/devtools/v85/page.rb +376 -0
- data/lib/selenium/webdriver/devtools/v85/performance.rb +65 -0
- data/lib/selenium/webdriver/devtools/v85/profiler.rb +113 -0
- data/lib/selenium/webdriver/devtools/v85/runtime.rb +196 -0
- data/lib/selenium/webdriver/devtools/v85/schema.rb +48 -0
- data/lib/selenium/webdriver/devtools/v85/security.rb +73 -0
- data/lib/selenium/webdriver/devtools/v85/service_worker.rb +118 -0
- data/lib/selenium/webdriver/devtools/v85/storage.rb +97 -0
- data/lib/selenium/webdriver/devtools/v85/system_info.rb +52 -0
- data/lib/selenium/webdriver/devtools/v85/target.rb +145 -0
- data/lib/selenium/webdriver/devtools/v85/tethering.rb +57 -0
- data/lib/selenium/webdriver/devtools/v85/tracing.rb +78 -0
- data/lib/selenium/webdriver/devtools/v85/web_audio.rb +72 -0
- data/lib/selenium/webdriver/devtools/v85/web_authn.rb +96 -0
- data/lib/selenium/webdriver/devtools/v86/accessibility.rb +64 -0
- data/lib/selenium/webdriver/devtools/v86/animation.rb +100 -0
- data/lib/selenium/webdriver/devtools/v86/application_cache.rb +66 -0
- data/lib/selenium/webdriver/devtools/v86/audits.rb +63 -0
- data/lib/selenium/webdriver/devtools/v86/background_service.rb +69 -0
- data/lib/selenium/webdriver/devtools/v86/browser.rb +125 -0
- data/lib/selenium/webdriver/devtools/v86/cache_storage.rb +75 -0
- data/lib/selenium/webdriver/devtools/v86/cast.rb +72 -0
- data/lib/selenium/webdriver/devtools/v86/console.rb +59 -0
- data/lib/selenium/webdriver/devtools/v86/css.rb +181 -0
- data/lib/selenium/webdriver/devtools/v86/database.rb +66 -0
- data/lib/selenium/webdriver/devtools/v86/debugger.rb +233 -0
- data/lib/selenium/webdriver/devtools/v86/device_orientation.rb +55 -0
- data/lib/selenium/webdriver/devtools/v86/dom.rb +329 -0
- data/lib/selenium/webdriver/devtools/v86/dom_debugger.rb +95 -0
- data/lib/selenium/webdriver/devtools/v86/dom_snapshot.rb +67 -0
- data/lib/selenium/webdriver/devtools/v86/dom_storage.rb +81 -0
- data/lib/selenium/webdriver/devtools/v86/emulation.rb +193 -0
- data/lib/selenium/webdriver/devtools/v86/fetch.rb +99 -0
- data/lib/selenium/webdriver/devtools/v86/headless_experimental.rb +63 -0
- data/lib/selenium/webdriver/devtools/v86/heap_profiler.rb +109 -0
- data/lib/selenium/webdriver/devtools/v86/indexed_db.rb +102 -0
- data/lib/selenium/webdriver/devtools/v86/input.rb +143 -0
- data/lib/selenium/webdriver/devtools/v86/inspector.rb +57 -0
- data/lib/selenium/webdriver/devtools/v86/io.rb +61 -0
- data/lib/selenium/webdriver/devtools/v86/layer_tree.rb +97 -0
- data/lib/selenium/webdriver/devtools/v86/log.rb +68 -0
- data/lib/selenium/webdriver/devtools/v86/media.rb +59 -0
- data/lib/selenium/webdriver/devtools/v86/memory.rb +88 -0
- data/lib/selenium/webdriver/devtools/v86/network.rb +235 -0
- data/lib/selenium/webdriver/devtools/v86/overlay.rb +183 -0
- data/lib/selenium/webdriver/devtools/v86/page.rb +376 -0
- data/lib/selenium/webdriver/devtools/v86/performance.rb +65 -0
- data/lib/selenium/webdriver/devtools/v86/profiler.rb +113 -0
- data/lib/selenium/webdriver/devtools/v86/runtime.rb +196 -0
- data/lib/selenium/webdriver/devtools/v86/schema.rb +48 -0
- data/lib/selenium/webdriver/devtools/v86/security.rb +73 -0
- data/lib/selenium/webdriver/devtools/v86/service_worker.rb +118 -0
- data/lib/selenium/webdriver/devtools/v86/storage.rb +97 -0
- data/lib/selenium/webdriver/devtools/v86/system_info.rb +52 -0
- data/lib/selenium/webdriver/devtools/v86/target.rb +145 -0
- data/lib/selenium/webdriver/devtools/v86/tethering.rb +57 -0
- data/lib/selenium/webdriver/devtools/v86/tracing.rb +78 -0
- data/lib/selenium/webdriver/devtools/v86/web_audio.rb +72 -0
- data/lib/selenium/webdriver/devtools/v86/web_authn.rb +102 -0
- data/lib/selenium/webdriver/devtools/v87/accessibility.rb +73 -0
- data/lib/selenium/webdriver/devtools/v87/animation.rb +100 -0
- data/lib/selenium/webdriver/devtools/v87/application_cache.rb +66 -0
- data/lib/selenium/webdriver/devtools/v87/audits.rb +63 -0
- data/lib/selenium/webdriver/devtools/v87/background_service.rb +69 -0
- data/lib/selenium/webdriver/devtools/v87/browser.rb +125 -0
- data/lib/selenium/webdriver/devtools/v87/cache_storage.rb +75 -0
- data/lib/selenium/webdriver/devtools/v87/cast.rb +72 -0
- data/lib/selenium/webdriver/{edge_html/driver.rb → devtools/v87/console.rb} +36 -30
- data/lib/selenium/webdriver/devtools/v87/css.rb +181 -0
- data/lib/selenium/webdriver/devtools/v87/database.rb +66 -0
- data/lib/selenium/webdriver/devtools/v87/debugger.rb +233 -0
- data/lib/selenium/webdriver/devtools/v87/device_orientation.rb +55 -0
- data/lib/selenium/webdriver/devtools/v87/dom.rb +329 -0
- data/lib/selenium/webdriver/devtools/v87/dom_debugger.rb +95 -0
- data/lib/selenium/webdriver/devtools/v87/dom_snapshot.rb +67 -0
- data/lib/selenium/webdriver/devtools/v87/dom_storage.rb +81 -0
- data/lib/selenium/webdriver/devtools/v87/emulation.rb +193 -0
- data/lib/selenium/webdriver/devtools/v87/fetch.rb +99 -0
- data/lib/selenium/webdriver/devtools/v87/headless_experimental.rb +63 -0
- data/lib/selenium/webdriver/devtools/v87/heap_profiler.rb +109 -0
- data/lib/selenium/webdriver/devtools/v87/indexed_db.rb +102 -0
- data/lib/selenium/webdriver/devtools/v87/input.rb +143 -0
- data/lib/selenium/webdriver/devtools/v87/inspector.rb +57 -0
- data/lib/selenium/webdriver/devtools/v87/io.rb +61 -0
- data/lib/selenium/webdriver/devtools/v87/layer_tree.rb +97 -0
- data/lib/selenium/webdriver/devtools/v87/log.rb +68 -0
- data/lib/selenium/webdriver/devtools/v87/media.rb +59 -0
- data/lib/selenium/webdriver/devtools/v87/memory.rb +88 -0
- data/lib/selenium/webdriver/devtools/v87/network.rb +247 -0
- data/lib/selenium/webdriver/devtools/v87/overlay.rb +183 -0
- data/lib/selenium/webdriver/devtools/v87/page.rb +376 -0
- data/lib/selenium/webdriver/devtools/v87/performance.rb +65 -0
- data/lib/selenium/webdriver/devtools/v87/profiler.rb +125 -0
- data/lib/selenium/webdriver/devtools/v87/runtime.rb +196 -0
- data/lib/selenium/webdriver/devtools/v87/schema.rb +48 -0
- data/lib/selenium/webdriver/devtools/v87/security.rb +73 -0
- data/lib/selenium/webdriver/devtools/v87/service_worker.rb +118 -0
- data/lib/selenium/webdriver/devtools/v87/storage.rb +97 -0
- data/lib/selenium/webdriver/devtools/v87/system_info.rb +52 -0
- data/lib/selenium/webdriver/devtools/v87/target.rb +145 -0
- data/lib/selenium/webdriver/devtools/v87/tethering.rb +57 -0
- data/lib/selenium/webdriver/devtools/v87/tracing.rb +78 -0
- data/lib/selenium/webdriver/devtools/v87/web_audio.rb +72 -0
- data/lib/selenium/webdriver/devtools/v87/web_authn.rb +102 -0
- data/lib/selenium/webdriver/devtools/v88/accessibility.rb +73 -0
- data/lib/selenium/webdriver/devtools/v88/animation.rb +100 -0
- data/lib/selenium/webdriver/devtools/v88/application_cache.rb +66 -0
- data/lib/selenium/webdriver/devtools/v88/audits.rb +63 -0
- data/lib/selenium/webdriver/devtools/v88/background_service.rb +69 -0
- data/lib/selenium/webdriver/devtools/v88/browser.rb +130 -0
- data/lib/selenium/webdriver/devtools/v88/cache_storage.rb +75 -0
- data/lib/selenium/webdriver/devtools/v88/cast.rb +72 -0
- data/lib/selenium/webdriver/devtools/v88/console.rb +59 -0
- data/lib/selenium/webdriver/devtools/v88/css.rb +181 -0
- data/lib/selenium/webdriver/devtools/v88/database.rb +66 -0
- data/lib/selenium/webdriver/devtools/v88/debugger.rb +233 -0
- data/lib/selenium/webdriver/devtools/v88/device_orientation.rb +55 -0
- data/lib/selenium/webdriver/devtools/v88/dom.rb +329 -0
- data/lib/selenium/webdriver/devtools/v88/dom_debugger.rb +95 -0
- data/lib/selenium/webdriver/devtools/v88/dom_snapshot.rb +67 -0
- data/lib/selenium/webdriver/devtools/v88/dom_storage.rb +81 -0
- data/lib/selenium/webdriver/devtools/v88/emulation.rb +198 -0
- data/lib/selenium/webdriver/devtools/v88/fetch.rb +99 -0
- data/lib/selenium/webdriver/devtools/v88/headless_experimental.rb +63 -0
- data/lib/selenium/webdriver/devtools/v88/heap_profiler.rb +109 -0
- data/lib/selenium/webdriver/devtools/v88/indexed_db.rb +102 -0
- data/lib/selenium/webdriver/devtools/v88/input.rb +148 -0
- data/lib/selenium/webdriver/devtools/v88/inspector.rb +57 -0
- data/lib/selenium/webdriver/devtools/v88/io.rb +61 -0
- data/lib/selenium/webdriver/devtools/v88/layer_tree.rb +97 -0
- data/lib/selenium/webdriver/devtools/v88/log.rb +68 -0
- data/lib/selenium/webdriver/devtools/v88/media.rb +59 -0
- data/lib/selenium/webdriver/devtools/v88/memory.rb +88 -0
- data/lib/selenium/webdriver/devtools/v88/network.rb +247 -0
- data/lib/selenium/webdriver/devtools/v88/overlay.rb +183 -0
- data/lib/selenium/webdriver/devtools/v88/page.rb +376 -0
- data/lib/selenium/webdriver/devtools/v88/performance.rb +65 -0
- data/lib/selenium/webdriver/devtools/v88/profiler.rb +125 -0
- data/lib/selenium/webdriver/devtools/v88/runtime.rb +197 -0
- data/lib/selenium/webdriver/devtools/v88/schema.rb +48 -0
- data/lib/selenium/webdriver/devtools/v88/security.rb +73 -0
- data/lib/selenium/webdriver/devtools/v88/service_worker.rb +118 -0
- data/lib/selenium/webdriver/devtools/v88/storage.rb +103 -0
- data/lib/selenium/webdriver/devtools/v88/system_info.rb +52 -0
- data/lib/selenium/webdriver/devtools/v88/target.rb +145 -0
- data/lib/selenium/webdriver/devtools/v88/tethering.rb +57 -0
- data/lib/selenium/webdriver/devtools/v88/tracing.rb +79 -0
- data/lib/selenium/webdriver/devtools/v88/web_audio.rb +72 -0
- data/lib/selenium/webdriver/devtools/v88/web_authn.rb +102 -0
- data/lib/selenium/webdriver/edge.rb +7 -27
- data/lib/selenium/webdriver/edge/bridge.rb +37 -0
- data/lib/selenium/webdriver/{edge_chrome → edge}/driver.rb +14 -4
- data/lib/selenium/webdriver/edge/features.rb +39 -0
- data/lib/selenium/webdriver/{edge_chrome → edge}/options.rb +12 -3
- data/lib/selenium/webdriver/{edge_chrome → edge}/profile.rb +2 -2
- data/lib/selenium/webdriver/{edge_chrome → edge}/service.rb +2 -6
- data/lib/selenium/webdriver/firefox.rb +10 -4
- data/lib/selenium/webdriver/firefox/bridge.rb +1 -1
- data/lib/selenium/webdriver/firefox/driver.rb +14 -14
- data/lib/selenium/webdriver/firefox/features.rb +47 -0
- data/lib/selenium/webdriver/firefox/options.rb +26 -29
- data/lib/selenium/webdriver/firefox/profile.rb +13 -76
- data/lib/selenium/webdriver/firefox/service.rb +1 -5
- data/lib/selenium/webdriver/ie.rb +4 -2
- data/lib/selenium/webdriver/ie/driver.rb +0 -16
- data/lib/selenium/webdriver/ie/options.rb +7 -20
- data/lib/selenium/webdriver/ie/service.rb +6 -10
- data/lib/selenium/webdriver/remote/bridge.rb +43 -67
- data/lib/selenium/webdriver/remote/capabilities.rb +13 -19
- data/lib/selenium/webdriver/remote/commands.rb +1 -0
- data/lib/selenium/webdriver/remote/driver.rb +10 -12
- data/lib/selenium/webdriver/remote/http/default.rb +6 -7
- data/lib/selenium/webdriver/remote/http/persistent.rb +6 -0
- data/lib/selenium/webdriver/safari.rb +11 -2
- data/lib/selenium/webdriver/safari/bridge.rb +1 -1
- data/lib/selenium/webdriver/safari/driver.rb +4 -17
- data/lib/selenium/webdriver/{common/driver_extensions/rotatable.rb → safari/features.rb} +26 -36
- data/lib/selenium/webdriver/safari/options.rb +1 -33
- data/lib/selenium/webdriver/safari/service.rb +0 -4
- data/lib/selenium/webdriver/support.rb +1 -0
- data/lib/selenium/webdriver/support/block_event_listener.rb +1 -1
- data/lib/selenium/webdriver/support/color.rb +2 -2
- data/lib/selenium/webdriver/support/event_firing_bridge.rb +2 -2
- data/lib/selenium/webdriver/support/relative_locator.rb +51 -0
- data/lib/selenium/webdriver/version.rb +1 -1
- data/selenium-webdriver.gemspec +10 -7
- data/selenium_server_deploy.jar +0 -0
- metadata +254 -26
- data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +0 -64
- data/lib/selenium/webdriver/edge_html/options.rb +0 -91
- data/lib/selenium/webdriver/edge_html/service.rb +0 -51
- data/lib/selenium/webdriver/firefox/binary.rb +0 -110
- data/lib/selenium/webdriver/firefox/extension/prefs.json +0 -69
|
@@ -29,22 +29,6 @@ module Selenium
|
|
|
29
29
|
|
|
30
30
|
class Driver < WebDriver::Driver
|
|
31
31
|
include DriverExtensions::HasWebStorage
|
|
32
|
-
include DriverExtensions::TakesScreenshot
|
|
33
|
-
|
|
34
|
-
def initialize(opts = {})
|
|
35
|
-
opts[:desired_capabilities] ||= Remote::Capabilities.internet_explorer
|
|
36
|
-
|
|
37
|
-
opts[:url] ||= service_url(opts)
|
|
38
|
-
|
|
39
|
-
listener = opts.delete(:listener)
|
|
40
|
-
desired_capabilities = opts.delete(:desired_capabilities)
|
|
41
|
-
options = opts.delete(:options)
|
|
42
|
-
|
|
43
|
-
@bridge = Remote::Bridge.new(opts)
|
|
44
|
-
@bridge.create_session(desired_capabilities, options)
|
|
45
|
-
|
|
46
|
-
super(@bridge, listener: listener)
|
|
47
|
-
end
|
|
48
32
|
|
|
49
33
|
def browser
|
|
50
34
|
:internet_explorer
|
|
@@ -41,16 +41,7 @@ module Selenium
|
|
|
41
41
|
use_per_process_proxy: 'ie.usePerProcessProxy',
|
|
42
42
|
validate_cookie_document_type: 'ie.validateCookieDocumentType'
|
|
43
43
|
}.freeze
|
|
44
|
-
|
|
45
|
-
CAPABILITIES.each_key do |key|
|
|
46
|
-
define_method key do
|
|
47
|
-
@options[key]
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
define_method "#{key}=" do |value|
|
|
51
|
-
@options[key] = value
|
|
52
|
-
end
|
|
53
|
-
end
|
|
44
|
+
BROWSER = 'internet explorer'
|
|
54
45
|
|
|
55
46
|
attr_reader :args
|
|
56
47
|
|
|
@@ -85,10 +76,10 @@ module Selenium
|
|
|
85
76
|
# @option opts [Boolean] validate_cookie_document_type
|
|
86
77
|
#
|
|
87
78
|
|
|
88
|
-
def initialize(
|
|
89
|
-
|
|
79
|
+
def initialize(**opts)
|
|
80
|
+
@args = (opts.delete(:args) || []).to_set
|
|
81
|
+
super(**opts)
|
|
90
82
|
|
|
91
|
-
@args = (args || []).to_set
|
|
92
83
|
@options[:native_events] = true if @options[:native_events].nil?
|
|
93
84
|
end
|
|
94
85
|
|
|
@@ -102,15 +93,11 @@ module Selenium
|
|
|
102
93
|
@args << arg
|
|
103
94
|
end
|
|
104
95
|
|
|
105
|
-
|
|
106
|
-
# @api private
|
|
107
|
-
#
|
|
96
|
+
private
|
|
108
97
|
|
|
109
|
-
def
|
|
110
|
-
options =
|
|
98
|
+
def process_browser_options(browser_options)
|
|
99
|
+
options = browser_options[KEY]
|
|
111
100
|
options['ie.browserCommandLineSwitches'] = @args.to_a.join(' ') if @args.any?
|
|
112
|
-
|
|
113
|
-
{KEY => generate_as_json(options)}
|
|
114
101
|
end
|
|
115
102
|
end # Options
|
|
116
103
|
end # IE
|
|
@@ -20,10 +20,6 @@
|
|
|
20
20
|
module Selenium
|
|
21
21
|
module WebDriver
|
|
22
22
|
module IE
|
|
23
|
-
#
|
|
24
|
-
# @api private
|
|
25
|
-
#
|
|
26
|
-
|
|
27
23
|
class Service < WebDriver::Service
|
|
28
24
|
DEFAULT_PORT = 5555
|
|
29
25
|
EXECUTABLE = 'IEDriverServer'
|
|
@@ -36,15 +32,15 @@ module Selenium
|
|
|
36
32
|
|
|
37
33
|
private
|
|
38
34
|
|
|
39
|
-
#
|
|
35
|
+
# NOTE: This processing is deprecated
|
|
40
36
|
def extract_service_args(driver_opts)
|
|
41
37
|
driver_args = super
|
|
42
38
|
driver_opts = driver_opts.dup
|
|
43
|
-
driver_args << "--log-level=#{driver_opts
|
|
44
|
-
driver_args << "--log-file=#{driver_opts
|
|
45
|
-
driver_args << "--implementation=#{driver_opts
|
|
46
|
-
driver_args << "--host=#{driver_opts
|
|
47
|
-
driver_args << "--extract_path=#{driver_opts
|
|
39
|
+
driver_args << "--log-level=#{driver_opts[:log_level].to_s.upcase}" if driver_opts.key?(:log_level)
|
|
40
|
+
driver_args << "--log-file=#{driver_opts[:log_file]}" if driver_opts.key?(:log_file)
|
|
41
|
+
driver_args << "--implementation=#{driver_opts[:implementation].to_s.upcase}" if driver_opts.key?(:implementation)
|
|
42
|
+
driver_args << "--host=#{driver_opts[:host]}" if driver_opts.key?(:host)
|
|
43
|
+
driver_args << "--extract_path=#{driver_opts[:extract_path]}" if driver_opts.key?(:extract_path)
|
|
48
44
|
driver_args << "--silent" if driver_opts[:silent] == true
|
|
49
45
|
driver_args
|
|
50
46
|
end
|
|
@@ -30,30 +30,17 @@ module Selenium
|
|
|
30
30
|
|
|
31
31
|
#
|
|
32
32
|
# Initializes the bridge with the given server URL
|
|
33
|
-
# @param [
|
|
34
|
-
# @
|
|
35
|
-
# @option opts [Object] :http_client an HTTP client instance that implements the same protocol as Http::Default
|
|
36
|
-
# @option opts [Capabilities] :desired_capabilities an instance of Remote::Capabilities describing the capabilities you want
|
|
33
|
+
# @param [String, URI] :url url for the remote server
|
|
34
|
+
# @param [Object] :http_client an HTTP client instance that implements the same protocol as Http::Default
|
|
37
35
|
# @api private
|
|
38
36
|
#
|
|
39
37
|
|
|
40
|
-
def initialize(
|
|
41
|
-
opts = opts.dup
|
|
42
|
-
|
|
43
|
-
http_client = opts.delete(:http_client) { Http::Default.new }
|
|
44
|
-
url = opts.delete(:url) { "http://#{Platform.localhost}:#{PORT}/wd/hub" }
|
|
45
|
-
opts.delete(:options)
|
|
46
|
-
|
|
47
|
-
unless opts.empty?
|
|
48
|
-
raise ArgumentError, "unknown option#{'s' if opts.size != 1}: #{opts.inspect}"
|
|
49
|
-
end
|
|
50
|
-
|
|
38
|
+
def initialize(url:, http_client: nil)
|
|
51
39
|
uri = url.is_a?(URI) ? url : URI.parse(url)
|
|
52
|
-
uri.path += '/' unless
|
|
40
|
+
uri.path += '/' unless uri.path.end_with?('/')
|
|
53
41
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
@http = http_client
|
|
42
|
+
@http = http_client || Http::Default.new
|
|
43
|
+
@http.server_url = uri
|
|
57
44
|
@file_detector = nil
|
|
58
45
|
end
|
|
59
46
|
|
|
@@ -61,8 +48,8 @@ module Selenium
|
|
|
61
48
|
# Creates session.
|
|
62
49
|
#
|
|
63
50
|
|
|
64
|
-
def create_session(
|
|
65
|
-
response = execute(:new_session, {},
|
|
51
|
+
def create_session(capabilities)
|
|
52
|
+
response = execute(:new_session, {}, {capabilities: {firstMatch: [capabilities]}})
|
|
66
53
|
|
|
67
54
|
@session_id = response['sessionId']
|
|
68
55
|
capabilities = response['capabilities']
|
|
@@ -264,6 +251,10 @@ module Selenium
|
|
|
264
251
|
execute :take_screenshot
|
|
265
252
|
end
|
|
266
253
|
|
|
254
|
+
def element_screenshot(element)
|
|
255
|
+
execute :take_element_screenshot, id: element.ref
|
|
256
|
+
end
|
|
257
|
+
|
|
267
258
|
#
|
|
268
259
|
# HTML 5
|
|
269
260
|
#
|
|
@@ -316,22 +307,6 @@ module Selenium
|
|
|
316
307
|
execute_script('return sessionStorage.length')
|
|
317
308
|
end
|
|
318
309
|
|
|
319
|
-
def location
|
|
320
|
-
raise Error::UnsupportedOperationError, 'The W3C standard does not currently support getting location'
|
|
321
|
-
end
|
|
322
|
-
|
|
323
|
-
def set_location(_lat, _lon, _alt)
|
|
324
|
-
raise Error::UnsupportedOperationError, 'The W3C standard does not currently support setting location'
|
|
325
|
-
end
|
|
326
|
-
|
|
327
|
-
def network_connection
|
|
328
|
-
raise Error::UnsupportedOperationError, 'The W3C standard does not currently support getting network connection'
|
|
329
|
-
end
|
|
330
|
-
|
|
331
|
-
def network_connection=(_type)
|
|
332
|
-
raise Error::UnsupportedOperationError, 'The W3C standard does not currently support setting network connection'
|
|
333
|
-
end
|
|
334
|
-
|
|
335
310
|
#
|
|
336
311
|
# javascript execution
|
|
337
312
|
#
|
|
@@ -402,6 +377,10 @@ module Selenium
|
|
|
402
377
|
execute :release_actions
|
|
403
378
|
end
|
|
404
379
|
|
|
380
|
+
def print_page(options = {})
|
|
381
|
+
execute :print_page, {}, {options: options}
|
|
382
|
+
end
|
|
383
|
+
|
|
405
384
|
def click_element(element)
|
|
406
385
|
execute :element_click, id: element
|
|
407
386
|
end
|
|
@@ -441,14 +420,6 @@ module Selenium
|
|
|
441
420
|
'if (arguments[0].dispatchEvent(e)) { arguments[0].submit() }', form.as_json)
|
|
442
421
|
end
|
|
443
422
|
|
|
444
|
-
def screen_orientation=(orientation)
|
|
445
|
-
execute :set_screen_orientation, {}, {orientation: orientation}
|
|
446
|
-
end
|
|
447
|
-
|
|
448
|
-
def screen_orientation
|
|
449
|
-
execute :get_screen_orientation
|
|
450
|
-
end
|
|
451
|
-
|
|
452
423
|
#
|
|
453
424
|
# element properties
|
|
454
425
|
#
|
|
@@ -525,23 +496,28 @@ module Selenium
|
|
|
525
496
|
alias_method :switch_to_active_element, :active_element
|
|
526
497
|
|
|
527
498
|
def find_element_by(how, what, parent = nil)
|
|
528
|
-
how, what =
|
|
499
|
+
how, what = convert_locator(how, what)
|
|
500
|
+
|
|
501
|
+
return execute_atom(:findElements, Support::RelativeLocator.new(what).as_json).first if how == 'relative'
|
|
529
502
|
|
|
530
503
|
id = if parent
|
|
531
|
-
execute :find_child_element, {id: parent}, {using: how, value: what}
|
|
504
|
+
execute :find_child_element, {id: parent}, {using: how, value: what.to_s}
|
|
532
505
|
else
|
|
533
|
-
execute :find_element, {}, {using: how, value: what}
|
|
506
|
+
execute :find_element, {}, {using: how, value: what.to_s}
|
|
534
507
|
end
|
|
508
|
+
|
|
535
509
|
Element.new self, element_id_from(id)
|
|
536
510
|
end
|
|
537
511
|
|
|
538
512
|
def find_elements_by(how, what, parent = nil)
|
|
539
|
-
how, what =
|
|
513
|
+
how, what = convert_locator(how, what)
|
|
514
|
+
|
|
515
|
+
return execute_atom :findElements, Support::RelativeLocator.new(what).as_json if how == 'relative'
|
|
540
516
|
|
|
541
517
|
ids = if parent
|
|
542
|
-
execute :find_child_elements, {id: parent}, {using: how, value: what}
|
|
518
|
+
execute :find_child_elements, {id: parent}, {using: how, value: what.to_s}
|
|
543
519
|
else
|
|
544
|
-
execute :find_elements, {}, {using: how, value: what}
|
|
520
|
+
execute :find_elements, {}, {using: how, value: what.to_s}
|
|
545
521
|
end
|
|
546
522
|
|
|
547
523
|
ids.map { |id| Element.new self, element_id_from(id) }
|
|
@@ -579,16 +555,6 @@ module Selenium
|
|
|
579
555
|
COMMANDS[command]
|
|
580
556
|
end
|
|
581
557
|
|
|
582
|
-
def merged_capabilities(capabilities, options = nil)
|
|
583
|
-
capabilities.merge!(options.as_json) if options
|
|
584
|
-
|
|
585
|
-
{
|
|
586
|
-
capabilities: {
|
|
587
|
-
firstMatch: [capabilities]
|
|
588
|
-
}
|
|
589
|
-
}
|
|
590
|
-
end
|
|
591
|
-
|
|
592
558
|
def unwrap_script_result(arg)
|
|
593
559
|
case arg
|
|
594
560
|
when Array
|
|
@@ -607,31 +573,41 @@ module Selenium
|
|
|
607
573
|
id['ELEMENT'] || id['element-6066-11e4-a52e-4f735466cecf']
|
|
608
574
|
end
|
|
609
575
|
|
|
610
|
-
def
|
|
576
|
+
def convert_locator(how, what)
|
|
577
|
+
how = SearchContext::FINDERS[how.to_sym] || how
|
|
578
|
+
|
|
611
579
|
case how
|
|
612
580
|
when 'class name'
|
|
613
581
|
how = 'css selector'
|
|
614
|
-
what = ".#{escape_css(what)}"
|
|
582
|
+
what = ".#{escape_css(what.to_s)}"
|
|
615
583
|
when 'id'
|
|
616
584
|
how = 'css selector'
|
|
617
|
-
what = "##{escape_css(what)}"
|
|
585
|
+
what = "##{escape_css(what.to_s)}"
|
|
618
586
|
when 'name'
|
|
619
587
|
how = 'css selector'
|
|
620
|
-
what = "*[name='#{escape_css(what)}']"
|
|
588
|
+
what = "*[name='#{escape_css(what.to_s)}']"
|
|
621
589
|
when 'tag name'
|
|
622
590
|
how = 'css selector'
|
|
623
591
|
end
|
|
592
|
+
|
|
593
|
+
if what.is_a?(Hash)
|
|
594
|
+
what = what.each_with_object({}) do |(h, w), hash|
|
|
595
|
+
h, w = convert_locator(h.to_s, w)
|
|
596
|
+
hash[h] = w
|
|
597
|
+
end
|
|
598
|
+
end
|
|
599
|
+
|
|
624
600
|
[how, what]
|
|
625
601
|
end
|
|
626
602
|
|
|
627
|
-
ESCAPE_CSS_REGEXP = /(['"\\#.:;,!?+<>=~*^$|%&@`{}\-\[\]
|
|
603
|
+
ESCAPE_CSS_REGEXP = /(['"\\#.:;,!?+<>=~*^$|%&@`{}\-\[\]()])/.freeze
|
|
628
604
|
UNICODE_CODE_POINT = 30
|
|
629
605
|
|
|
630
606
|
# Escapes invalid characters in CSS selector.
|
|
631
607
|
# @see https://mathiasbynens.be/notes/css-escapes
|
|
632
608
|
def escape_css(string)
|
|
633
609
|
string = string.gsub(ESCAPE_CSS_REGEXP) { |match| "\\#{match}" }
|
|
634
|
-
string = "\\#{UNICODE_CODE_POINT + Integer(string[0])} #{string[1..-1]}" if
|
|
610
|
+
string = "\\#{UNICODE_CODE_POINT + Integer(string[0])} #{string[1..-1]}" if string[0]&.match?(/[[:digit:]]/)
|
|
635
611
|
|
|
636
612
|
string
|
|
637
613
|
end
|
|
@@ -82,17 +82,6 @@ module Selenium
|
|
|
82
82
|
end
|
|
83
83
|
|
|
84
84
|
def edge(opts = {})
|
|
85
|
-
edge_html(opts)
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
def edge_html(opts = {})
|
|
89
|
-
new({
|
|
90
|
-
browser_name: 'MicrosoftEdge',
|
|
91
|
-
platform_name: :windows
|
|
92
|
-
}.merge(opts))
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
def edge_chrome(opts = {})
|
|
96
85
|
new({
|
|
97
86
|
browser_name: 'MicrosoftEdge'
|
|
98
87
|
}.merge(opts))
|
|
@@ -105,6 +94,7 @@ module Selenium
|
|
|
105
94
|
opts[:timeouts]['implicit'] = opts.delete(:implicit_timeout) if opts.key?(:implicit_timeout)
|
|
106
95
|
opts[:timeouts]['pageLoad'] = opts.delete(:page_load_timeout) if opts.key?(:page_load_timeout)
|
|
107
96
|
opts[:timeouts]['script'] = opts.delete(:script_timeout) if opts.key?(:script_timeout)
|
|
97
|
+
opts.delete(:timeouts) if opts[:timeouts].empty?
|
|
108
98
|
new({browser_name: 'firefox'}.merge(opts))
|
|
109
99
|
end
|
|
110
100
|
|
|
@@ -112,8 +102,7 @@ module Selenium
|
|
|
112
102
|
|
|
113
103
|
def safari(opts = {})
|
|
114
104
|
new({
|
|
115
|
-
browser_name: 'safari'
|
|
116
|
-
platform_name: :mac
|
|
105
|
+
browser_name: Selenium::WebDriver::Safari.technology_preview? ? "Safari Technology Preview" : 'safari'
|
|
117
106
|
}.merge(opts))
|
|
118
107
|
end
|
|
119
108
|
|
|
@@ -145,12 +134,7 @@ module Selenium
|
|
|
145
134
|
caps.accept_insecure_certs = data.delete('acceptInsecureCerts') if data.key?('acceptInsecureCerts')
|
|
146
135
|
caps.page_load_strategy = data.delete('pageLoadStrategy') if data.key?('pageLoadStrategy')
|
|
147
136
|
|
|
148
|
-
|
|
149
|
-
timeouts = data.delete('timeouts')
|
|
150
|
-
caps.implicit_timeout = timeouts['implicit'] if timeouts
|
|
151
|
-
caps.page_load_timeout = timeouts['pageLoad'] if timeouts
|
|
152
|
-
caps.script_timeout = timeouts['script'] if timeouts
|
|
153
|
-
end
|
|
137
|
+
process_timeouts(caps, data.delete('timeouts'))
|
|
154
138
|
|
|
155
139
|
if data.key?('proxy')
|
|
156
140
|
proxy = data.delete('proxy')
|
|
@@ -165,6 +149,16 @@ module Selenium
|
|
|
165
149
|
|
|
166
150
|
caps
|
|
167
151
|
end
|
|
152
|
+
|
|
153
|
+
private
|
|
154
|
+
|
|
155
|
+
def process_timeouts(caps, timeouts)
|
|
156
|
+
return if timeouts.nil?
|
|
157
|
+
|
|
158
|
+
caps.implicit_timeout = timeouts['implicit']
|
|
159
|
+
caps.page_load_timeout = timeouts['pageLoad']
|
|
160
|
+
caps.script_timeout = timeouts['script']
|
|
161
|
+
end
|
|
168
162
|
end
|
|
169
163
|
|
|
170
164
|
#
|
|
@@ -28,30 +28,28 @@ module Selenium
|
|
|
28
28
|
|
|
29
29
|
class Driver < WebDriver::Driver
|
|
30
30
|
include DriverExtensions::UploadsFiles
|
|
31
|
-
include DriverExtensions::TakesScreenshot
|
|
32
31
|
include DriverExtensions::HasSessionId
|
|
33
|
-
include DriverExtensions::Rotatable
|
|
34
32
|
include DriverExtensions::HasRemoteStatus
|
|
35
33
|
include DriverExtensions::HasWebStorage
|
|
36
34
|
|
|
37
|
-
def initialize(
|
|
38
|
-
|
|
39
|
-
desired_capabilities = opts.delete(:desired_capabilities) { Capabilities.new }
|
|
40
|
-
|
|
35
|
+
def initialize(bridge: nil, listener: nil, **opts)
|
|
36
|
+
desired_capabilities = opts[:desired_capabilities]
|
|
41
37
|
if desired_capabilities.is_a?(Symbol)
|
|
42
|
-
unless Capabilities.respond_to?(desired_capabilities)
|
|
38
|
+
unless Remote::Capabilities.respond_to?(desired_capabilities)
|
|
43
39
|
raise Error::WebDriverError, "invalid desired capability: #{desired_capabilities.inspect}"
|
|
44
40
|
end
|
|
45
41
|
|
|
46
|
-
desired_capabilities = Capabilities.__send__(desired_capabilities)
|
|
42
|
+
opts[:desired_capabilities] = Remote::Capabilities.__send__(desired_capabilities)
|
|
47
43
|
end
|
|
44
|
+
opts[:url] ||= "http://#{Platform.localhost}:4444/wd/hub"
|
|
45
|
+
super
|
|
46
|
+
end
|
|
48
47
|
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
def print_page(**options)
|
|
49
|
+
options[:page_ranges] &&= Array(options[:page_ranges])
|
|
51
50
|
|
|
52
|
-
|
|
51
|
+
@bridge.print_page(options)
|
|
53
52
|
end
|
|
54
|
-
|
|
55
53
|
end # Driver
|
|
56
54
|
end # Remote
|
|
57
55
|
end # WebDriver
|
|
@@ -28,8 +28,7 @@ module Selenium
|
|
|
28
28
|
class Default < Common
|
|
29
29
|
attr_writer :proxy
|
|
30
30
|
|
|
31
|
-
attr_accessor :open_timeout
|
|
32
|
-
attr_accessor :read_timeout
|
|
31
|
+
attr_accessor :open_timeout, :read_timeout
|
|
33
32
|
|
|
34
33
|
# Initializes object.
|
|
35
34
|
# Warning: Setting {#open_timeout} to non-nil values will cause a separate thread to spawn.
|
|
@@ -39,6 +38,7 @@ module Selenium
|
|
|
39
38
|
def initialize(open_timeout: nil, read_timeout: nil)
|
|
40
39
|
@open_timeout = open_timeout
|
|
41
40
|
@read_timeout = read_timeout
|
|
41
|
+
super()
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
def close
|
|
@@ -89,15 +89,15 @@ module Selenium
|
|
|
89
89
|
retries += 1
|
|
90
90
|
sleep 2
|
|
91
91
|
retry
|
|
92
|
-
rescue Errno::EADDRNOTAVAIL =>
|
|
92
|
+
rescue Errno::EADDRNOTAVAIL => e
|
|
93
93
|
# a retry is sometimes needed when the port becomes temporarily unavailable
|
|
94
94
|
raise if retries >= MAX_RETRIES
|
|
95
95
|
|
|
96
96
|
retries += 1
|
|
97
97
|
sleep 2
|
|
98
98
|
retry
|
|
99
|
-
rescue Errno::ECONNREFUSED =>
|
|
100
|
-
raise
|
|
99
|
+
rescue Errno::ECONNREFUSED => e
|
|
100
|
+
raise e.class, "using proxy: #{proxy.http}" if use_proxy?
|
|
101
101
|
|
|
102
102
|
raise
|
|
103
103
|
end
|
|
@@ -132,8 +132,7 @@ module Selenium
|
|
|
132
132
|
|
|
133
133
|
proxy = URI.parse(url)
|
|
134
134
|
|
|
135
|
-
|
|
136
|
-
clazz.new(server_url.host, server_url.port)
|
|
135
|
+
Net::HTTP.new(server_url.host, server_url.port, proxy.host, proxy.port, proxy.user, proxy.password)
|
|
137
136
|
else
|
|
138
137
|
Net::HTTP.new server_url.host, server_url.port
|
|
139
138
|
end
|