selenium-webdriver 4.0.0.alpha2 → 4.0.0.alpha7
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 +172 -4
- data/LICENSE +1 -1
- data/lib/selenium/server.rb +25 -9
- data/lib/selenium/webdriver.rb +12 -8
- data/lib/selenium/webdriver/atoms/findElements.js +121 -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 +10 -9
- data/lib/selenium/webdriver/chrome/bridge.rb +20 -4
- data/lib/selenium/webdriver/chrome/driver.rb +7 -49
- data/lib/selenium/webdriver/chrome/options.rb +97 -57
- data/lib/selenium/webdriver/chrome/profile.rb +3 -3
- data/lib/selenium/webdriver/chrome/service.rb +0 -4
- data/lib/selenium/webdriver/common.rb +6 -1
- data/lib/selenium/webdriver/common/driver.rb +81 -17
- data/lib/selenium/webdriver/common/driver_extensions/has_authentication.rb +89 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_devtools.rb +39 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_log_events.rb +143 -0
- data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +2 -1
- 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 +5 -0
- data/lib/selenium/webdriver/common/options.rb +116 -0
- data/lib/selenium/webdriver/common/platform.rb +4 -1
- data/lib/selenium/webdriver/common/port_prober.rb +4 -6
- data/lib/selenium/webdriver/common/profile_helper.rb +10 -2
- 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 +30 -113
- 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/wait.rb +1 -1
- data/lib/selenium/webdriver/devtools.rb +132 -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/v84/accessibility.rb +64 -0
- data/lib/selenium/webdriver/devtools/v84/animation.rb +100 -0
- data/lib/selenium/webdriver/devtools/v84/application_cache.rb +66 -0
- data/lib/selenium/webdriver/devtools/v84/audits.rb +63 -0
- data/lib/selenium/webdriver/devtools/v84/background_service.rb +69 -0
- data/lib/selenium/webdriver/devtools/v84/browser.rb +125 -0
- data/lib/selenium/webdriver/devtools/v84/cache_storage.rb +75 -0
- data/lib/selenium/webdriver/devtools/v84/cast.rb +72 -0
- data/lib/selenium/webdriver/devtools/v84/console.rb +59 -0
- data/lib/selenium/webdriver/devtools/v84/css.rb +167 -0
- data/lib/selenium/webdriver/devtools/v84/database.rb +66 -0
- data/lib/selenium/webdriver/devtools/v84/debugger.rb +231 -0
- data/lib/selenium/webdriver/devtools/v84/device_orientation.rb +55 -0
- data/lib/selenium/webdriver/devtools/v84/dom.rb +322 -0
- data/lib/selenium/webdriver/devtools/v84/dom_debugger.rb +95 -0
- data/lib/selenium/webdriver/devtools/v84/dom_snapshot.rb +67 -0
- data/lib/selenium/webdriver/devtools/v84/dom_storage.rb +81 -0
- data/lib/selenium/webdriver/devtools/v84/emulation.rb +182 -0
- data/lib/selenium/webdriver/devtools/v84/fetch.rb +99 -0
- data/lib/selenium/webdriver/devtools/v84/headless_experimental.rb +63 -0
- data/lib/selenium/webdriver/devtools/v84/heap_profiler.rb +109 -0
- data/lib/selenium/webdriver/devtools/v84/indexed_db.rb +102 -0
- data/lib/selenium/webdriver/devtools/v84/input.rb +142 -0
- data/lib/selenium/webdriver/devtools/v84/inspector.rb +57 -0
- data/lib/selenium/webdriver/devtools/v84/io.rb +61 -0
- data/lib/selenium/webdriver/devtools/v84/layer_tree.rb +97 -0
- data/lib/selenium/webdriver/devtools/v84/log.rb +68 -0
- data/lib/selenium/webdriver/devtools/v84/media.rb +59 -0
- data/lib/selenium/webdriver/devtools/v84/memory.rb +88 -0
- data/lib/selenium/webdriver/devtools/v84/network.rb +230 -0
- data/lib/selenium/webdriver/devtools/v84/overlay.rb +159 -0
- data/lib/selenium/webdriver/devtools/v84/page.rb +376 -0
- data/lib/selenium/webdriver/devtools/v84/performance.rb +65 -0
- data/lib/selenium/webdriver/devtools/v84/profiler.rb +113 -0
- data/lib/selenium/webdriver/devtools/v84/runtime.rb +195 -0
- data/lib/selenium/webdriver/devtools/v84/schema.rb +48 -0
- data/lib/selenium/webdriver/devtools/v84/security.rb +73 -0
- data/lib/selenium/webdriver/devtools/v84/service_worker.rb +118 -0
- data/lib/selenium/webdriver/devtools/v84/storage.rb +97 -0
- data/lib/selenium/webdriver/devtools/v84/system_info.rb +52 -0
- data/lib/selenium/webdriver/devtools/v84/target.rb +143 -0
- data/lib/selenium/webdriver/devtools/v84/tethering.rb +57 -0
- data/lib/selenium/webdriver/devtools/v84/tracing.rb +78 -0
- data/lib/selenium/webdriver/devtools/v84/web_audio.rb +72 -0
- data/lib/selenium/webdriver/devtools/v84/web_authn.rb +96 -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/devtools/v87/console.rb +59 -0
- 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/edge.rb +29 -9
- data/lib/selenium/webdriver/edge_chrome/bridge.rb +37 -0
- data/lib/selenium/webdriver/edge_chrome/driver.rb +48 -0
- data/lib/selenium/webdriver/edge_chrome/options.rb +37 -0
- data/lib/selenium/webdriver/edge_chrome/profile.rb +33 -0
- data/lib/selenium/webdriver/edge_chrome/service.rb +36 -0
- data/lib/selenium/webdriver/{edge → edge_html}/driver.rb +3 -35
- data/lib/selenium/webdriver/{edge → edge_html}/options.rb +26 -22
- data/lib/selenium/webdriver/{edge → edge_html}/service.rb +2 -6
- data/lib/selenium/webdriver/firefox.rb +18 -15
- data/lib/selenium/webdriver/firefox/bridge.rb +1 -1
- data/lib/selenium/webdriver/firefox/driver.rb +2 -31
- data/lib/selenium/webdriver/firefox/extension.rb +8 -0
- data/lib/selenium/webdriver/firefox/options.rb +47 -52
- data/lib/selenium/webdriver/firefox/profile.rb +7 -78
- data/lib/selenium/webdriver/firefox/service.rb +0 -4
- data/lib/selenium/webdriver/ie.rb +8 -7
- data/lib/selenium/webdriver/ie/driver.rb +0 -33
- data/lib/selenium/webdriver/ie/options.rb +10 -33
- data/lib/selenium/webdriver/ie/service.rb +5 -9
- data/lib/selenium/webdriver/remote.rb +16 -10
- data/lib/selenium/webdriver/remote/bridge.rb +38 -42
- data/lib/selenium/webdriver/remote/capabilities.rb +25 -7
- data/lib/selenium/webdriver/remote/driver.rb +6 -13
- data/lib/selenium/webdriver/remote/http/default.rb +10 -6
- data/lib/selenium/webdriver/remote/http/persistent.rb +5 -6
- data/lib/selenium/webdriver/safari.rb +16 -8
- data/lib/selenium/webdriver/safari/bridge.rb +4 -4
- data/lib/selenium/webdriver/safari/driver.rb +3 -30
- data/lib/selenium/webdriver/safari/options.rb +18 -19
- data/lib/selenium/webdriver/safari/service.rb +0 -4
- data/lib/selenium/webdriver/support.rb +1 -0
- data/lib/selenium/webdriver/support/color.rb +2 -2
- data/lib/selenium/webdriver/support/event_firing_bridge.rb +1 -1
- data/lib/selenium/webdriver/support/relative_locator.rb +51 -0
- data/lib/selenium/webdriver/version.rb +1 -1
- data/selenium-webdriver.gemspec +7 -6
- metadata +225 -21
- data/lib/selenium/webdriver/firefox/binary.rb +0 -110
- data/lib/selenium/webdriver/firefox/extension/prefs.json +0 -69
|
@@ -82,12 +82,22 @@ module Selenium
|
|
|
82
82
|
end
|
|
83
83
|
|
|
84
84
|
def edge(opts = {})
|
|
85
|
+
edge_chrome(opts)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def edge_html(opts = {})
|
|
85
89
|
new({
|
|
86
90
|
browser_name: 'MicrosoftEdge',
|
|
87
91
|
platform_name: :windows
|
|
88
92
|
}.merge(opts))
|
|
89
93
|
end
|
|
90
94
|
|
|
95
|
+
def edge_chrome(opts = {})
|
|
96
|
+
new({
|
|
97
|
+
browser_name: 'MicrosoftEdge'
|
|
98
|
+
}.merge(opts))
|
|
99
|
+
end
|
|
100
|
+
|
|
91
101
|
def firefox(opts = {})
|
|
92
102
|
opts[:browser_version] = opts.delete(:version) if opts.key?(:version)
|
|
93
103
|
opts[:platform_name] = opts.delete(:platform) if opts.key?(:platform)
|
|
@@ -95,14 +105,17 @@ module Selenium
|
|
|
95
105
|
opts[:timeouts]['implicit'] = opts.delete(:implicit_timeout) if opts.key?(:implicit_timeout)
|
|
96
106
|
opts[:timeouts]['pageLoad'] = opts.delete(:page_load_timeout) if opts.key?(:page_load_timeout)
|
|
97
107
|
opts[:timeouts]['script'] = opts.delete(:script_timeout) if opts.key?(:script_timeout)
|
|
108
|
+
opts.delete(:timeouts) if opts[:timeouts].empty?
|
|
98
109
|
new({browser_name: 'firefox'}.merge(opts))
|
|
99
110
|
end
|
|
100
111
|
|
|
101
112
|
alias_method :ff, :firefox
|
|
102
113
|
|
|
103
114
|
def safari(opts = {})
|
|
115
|
+
browser = Selenium::WebDriver::Safari.technology_preview? ? "Safari Technology Preview" : 'safari'
|
|
116
|
+
|
|
104
117
|
new({
|
|
105
|
-
browser_name:
|
|
118
|
+
browser_name: browser,
|
|
106
119
|
platform_name: :mac
|
|
107
120
|
}.merge(opts))
|
|
108
121
|
end
|
|
@@ -135,12 +148,7 @@ module Selenium
|
|
|
135
148
|
caps.accept_insecure_certs = data.delete('acceptInsecureCerts') if data.key?('acceptInsecureCerts')
|
|
136
149
|
caps.page_load_strategy = data.delete('pageLoadStrategy') if data.key?('pageLoadStrategy')
|
|
137
150
|
|
|
138
|
-
|
|
139
|
-
timeouts = data.delete('timeouts')
|
|
140
|
-
caps.implicit_timeout = timeouts['implicit'] if timeouts
|
|
141
|
-
caps.page_load_timeout = timeouts['pageLoad'] if timeouts
|
|
142
|
-
caps.script_timeout = timeouts['script'] if timeouts
|
|
143
|
-
end
|
|
151
|
+
process_timeouts(caps, data.delete('timeouts'))
|
|
144
152
|
|
|
145
153
|
if data.key?('proxy')
|
|
146
154
|
proxy = data.delete('proxy')
|
|
@@ -155,6 +163,16 @@ module Selenium
|
|
|
155
163
|
|
|
156
164
|
caps
|
|
157
165
|
end
|
|
166
|
+
|
|
167
|
+
private
|
|
168
|
+
|
|
169
|
+
def process_timeouts(caps, timeouts)
|
|
170
|
+
return if timeouts.nil?
|
|
171
|
+
|
|
172
|
+
caps.implicit_timeout = timeouts['implicit']
|
|
173
|
+
caps.page_load_timeout = timeouts['pageLoad']
|
|
174
|
+
caps.script_timeout = timeouts['script']
|
|
175
|
+
end
|
|
158
176
|
end
|
|
159
177
|
|
|
160
178
|
#
|
|
@@ -28,30 +28,23 @@ 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
32
|
include DriverExtensions::Rotatable
|
|
34
33
|
include DriverExtensions::HasRemoteStatus
|
|
35
34
|
include DriverExtensions::HasWebStorage
|
|
36
35
|
|
|
37
|
-
def initialize(
|
|
38
|
-
|
|
39
|
-
desired_capabilities = opts.delete(:desired_capabilities) { Capabilities.new }
|
|
40
|
-
|
|
36
|
+
def initialize(bridge: nil, listener: nil, **opts)
|
|
37
|
+
desired_capabilities = opts[:desired_capabilities]
|
|
41
38
|
if desired_capabilities.is_a?(Symbol)
|
|
42
|
-
unless Capabilities.respond_to?(desired_capabilities)
|
|
39
|
+
unless Remote::Capabilities.respond_to?(desired_capabilities)
|
|
43
40
|
raise Error::WebDriverError, "invalid desired capability: #{desired_capabilities.inspect}"
|
|
44
41
|
end
|
|
45
42
|
|
|
46
|
-
desired_capabilities = Capabilities.__send__(desired_capabilities)
|
|
43
|
+
opts[:desired_capabilities] = Remote::Capabilities.__send__(desired_capabilities)
|
|
47
44
|
end
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
@bridge.create_session(desired_capabilities, opts.delete(:options))
|
|
51
|
-
|
|
52
|
-
super(@bridge, listener: listener)
|
|
45
|
+
opts[:url] ||= "http://#{Platform.localhost}:4444/wd/hub"
|
|
46
|
+
super
|
|
53
47
|
end
|
|
54
|
-
|
|
55
48
|
end # Driver
|
|
56
49
|
end # Remote
|
|
57
50
|
end # WebDriver
|
|
@@ -59,10 +59,15 @@ module Selenium
|
|
|
59
59
|
http.open_timeout = open_timeout
|
|
60
60
|
http.read_timeout = read_timeout if read_timeout
|
|
61
61
|
|
|
62
|
-
http
|
|
62
|
+
start(http)
|
|
63
|
+
http
|
|
63
64
|
end
|
|
64
65
|
end
|
|
65
66
|
|
|
67
|
+
def start(http)
|
|
68
|
+
http.start
|
|
69
|
+
end
|
|
70
|
+
|
|
66
71
|
MAX_RETRIES = 3
|
|
67
72
|
|
|
68
73
|
def request(verb, url, headers, payload, redirects = 0)
|
|
@@ -84,15 +89,15 @@ module Selenium
|
|
|
84
89
|
retries += 1
|
|
85
90
|
sleep 2
|
|
86
91
|
retry
|
|
87
|
-
rescue Errno::EADDRNOTAVAIL =>
|
|
92
|
+
rescue Errno::EADDRNOTAVAIL => e
|
|
88
93
|
# a retry is sometimes needed when the port becomes temporarily unavailable
|
|
89
94
|
raise if retries >= MAX_RETRIES
|
|
90
95
|
|
|
91
96
|
retries += 1
|
|
92
97
|
sleep 2
|
|
93
98
|
retry
|
|
94
|
-
rescue Errno::ECONNREFUSED =>
|
|
95
|
-
raise
|
|
99
|
+
rescue Errno::ECONNREFUSED => e
|
|
100
|
+
raise e.class, "using proxy: #{proxy.http}" if use_proxy?
|
|
96
101
|
|
|
97
102
|
raise
|
|
98
103
|
end
|
|
@@ -127,8 +132,7 @@ module Selenium
|
|
|
127
132
|
|
|
128
133
|
proxy = URI.parse(url)
|
|
129
134
|
|
|
130
|
-
|
|
131
|
-
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)
|
|
132
136
|
else
|
|
133
137
|
Net::HTTP.new server_url.host, server_url.port
|
|
134
138
|
end
|
|
@@ -31,6 +31,10 @@ module Selenium
|
|
|
31
31
|
|
|
32
32
|
private
|
|
33
33
|
|
|
34
|
+
def start(*)
|
|
35
|
+
# no need to explicitly start connection
|
|
36
|
+
end
|
|
37
|
+
|
|
34
38
|
def new_http_client
|
|
35
39
|
proxy = nil
|
|
36
40
|
|
|
@@ -42,12 +46,7 @@ module Selenium
|
|
|
42
46
|
proxy = URI.parse(url)
|
|
43
47
|
end
|
|
44
48
|
|
|
45
|
-
|
|
46
|
-
Net::HTTP::Persistent.new name: 'webdriver', proxy: proxy
|
|
47
|
-
else
|
|
48
|
-
WebDriver.logger.warn 'Support for this version of net-http-persistent is deprecated. Please upgrade.'
|
|
49
|
-
Net::HTTP::Persistent.new 'webdriver', proxy
|
|
50
|
-
end
|
|
49
|
+
Net::HTTP::Persistent.new name: 'webdriver', proxy: proxy
|
|
51
50
|
end
|
|
52
51
|
|
|
53
52
|
def response_for(request)
|
|
@@ -17,20 +17,28 @@
|
|
|
17
17
|
# specific language governing permissions and limitations
|
|
18
18
|
# under the License.
|
|
19
19
|
|
|
20
|
-
require 'selenium/webdriver/safari/bridge'
|
|
21
|
-
require 'selenium/webdriver/safari/driver'
|
|
22
|
-
require 'selenium/webdriver/safari/options'
|
|
23
|
-
|
|
24
20
|
module Selenium
|
|
25
21
|
module WebDriver
|
|
26
22
|
module Safari
|
|
23
|
+
autoload :Bridge, 'selenium/webdriver/safari/bridge'
|
|
24
|
+
autoload :Driver, 'selenium/webdriver/safari/driver'
|
|
25
|
+
autoload :Options, 'selenium/webdriver/safari/options'
|
|
26
|
+
autoload :Service, 'selenium/webdriver/safari/service'
|
|
27
|
+
|
|
27
28
|
class << self
|
|
29
|
+
attr_accessor :use_technology_preview
|
|
30
|
+
|
|
28
31
|
def technology_preview
|
|
29
32
|
"/Applications/Safari\ Technology\ Preview.app/Contents/MacOS/safaridriver"
|
|
30
33
|
end
|
|
31
34
|
|
|
32
35
|
def technology_preview!
|
|
33
36
|
Service.driver_path = technology_preview
|
|
37
|
+
@use_technology_preview = true
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def technology_preview?
|
|
41
|
+
use_technology_preview
|
|
34
42
|
end
|
|
35
43
|
|
|
36
44
|
def path=(path)
|
|
@@ -48,18 +56,18 @@ module Selenium
|
|
|
48
56
|
|
|
49
57
|
def driver_path=(path)
|
|
50
58
|
WebDriver.logger.deprecate 'Selenium::WebDriver::Safari#driver_path=',
|
|
51
|
-
'Selenium::WebDriver::Safari::Service#driver_path='
|
|
59
|
+
'Selenium::WebDriver::Safari::Service#driver_path=',
|
|
60
|
+
id: :driver_path
|
|
52
61
|
Selenium::WebDriver::Safari::Service.driver_path = path
|
|
53
62
|
end
|
|
54
63
|
|
|
55
64
|
def driver_path
|
|
56
65
|
WebDriver.logger.deprecate 'Selenium::WebDriver::Safari#driver_path',
|
|
57
|
-
'Selenium::WebDriver::Safari::Service#driver_path'
|
|
66
|
+
'Selenium::WebDriver::Safari::Service#driver_path',
|
|
67
|
+
id: :driver_path
|
|
58
68
|
Selenium::WebDriver::Safari::Service.driver_path
|
|
59
69
|
end
|
|
60
70
|
end
|
|
61
71
|
end # Safari
|
|
62
72
|
end # WebDriver
|
|
63
73
|
end # Selenium
|
|
64
|
-
|
|
65
|
-
require 'selenium/webdriver/safari/service'
|
|
@@ -20,13 +20,13 @@
|
|
|
20
20
|
module Selenium
|
|
21
21
|
module WebDriver
|
|
22
22
|
module Safari
|
|
23
|
-
|
|
23
|
+
class Bridge < WebDriver::Remote::Bridge
|
|
24
24
|
|
|
25
25
|
# https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/WebDriverEndpointDoc/Commands/Commands.html
|
|
26
26
|
COMMANDS = {
|
|
27
|
-
get_permissions: [:get, '
|
|
28
|
-
set_permissions: [:post, '
|
|
29
|
-
attach_debugger: [:post, '
|
|
27
|
+
get_permissions: [:get, 'session/:session_id/apple/permissions'],
|
|
28
|
+
set_permissions: [:post, 'session/:session_id/apple/permissions'],
|
|
29
|
+
attach_debugger: [:post, 'session/:session_id/apple/attach_debugger']
|
|
30
30
|
}.freeze
|
|
31
31
|
|
|
32
32
|
def commands(command)
|
|
@@ -29,42 +29,15 @@ module Selenium
|
|
|
29
29
|
class Driver < WebDriver::Driver
|
|
30
30
|
include DriverExtensions::HasDebugger
|
|
31
31
|
include DriverExtensions::HasPermissions
|
|
32
|
-
include DriverExtensions::
|
|
33
|
-
|
|
34
|
-
def initialize(opts = {})
|
|
35
|
-
opts[:desired_capabilities] = create_capabilities(opts)
|
|
36
|
-
|
|
37
|
-
opts[:url] ||= service_url(opts)
|
|
38
|
-
|
|
39
|
-
listener = opts.delete(:listener)
|
|
40
|
-
desired_capabilities = opts.delete(:desired_capabilities)
|
|
41
|
-
|
|
42
|
-
@bridge = Remote::Bridge.new(opts)
|
|
43
|
-
@bridge.extend Bridge
|
|
44
|
-
@bridge.create_session(desired_capabilities)
|
|
45
|
-
|
|
46
|
-
super(@bridge, listener: listener)
|
|
47
|
-
end
|
|
32
|
+
include DriverExtensions::HasWebStorage
|
|
48
33
|
|
|
49
34
|
def browser
|
|
50
35
|
:safari
|
|
51
36
|
end
|
|
52
37
|
|
|
53
|
-
def
|
|
54
|
-
|
|
55
|
-
ensure
|
|
56
|
-
@service&.stop
|
|
38
|
+
def bridge_class
|
|
39
|
+
Bridge
|
|
57
40
|
end
|
|
58
|
-
|
|
59
|
-
private
|
|
60
|
-
|
|
61
|
-
def create_capabilities(opts = {})
|
|
62
|
-
caps = opts.delete(:desired_capabilities) { Remote::Capabilities.safari }
|
|
63
|
-
options = opts.delete(:options) { Options.new }
|
|
64
|
-
caps.merge!(options.as_json)
|
|
65
|
-
caps
|
|
66
|
-
end
|
|
67
|
-
|
|
68
41
|
end # Driver
|
|
69
42
|
end # Safari
|
|
70
43
|
end # WebDriver
|
|
@@ -20,8 +20,23 @@
|
|
|
20
20
|
module Selenium
|
|
21
21
|
module WebDriver
|
|
22
22
|
module Safari
|
|
23
|
-
class Options
|
|
24
|
-
attr_accessor :
|
|
23
|
+
class Options < WebDriver::Options
|
|
24
|
+
attr_accessor :options
|
|
25
|
+
|
|
26
|
+
# @see https://developer.apple.com/documentation/webkit/about_webdriver_for_safari
|
|
27
|
+
CAPABILITIES = {automatic_inspection: 'safari:automaticInspection',
|
|
28
|
+
automatic_profiling: 'safari:automaticProfiling'}.freeze
|
|
29
|
+
BROWSER = 'safari'
|
|
30
|
+
|
|
31
|
+
CAPABILITIES.each_key do |key|
|
|
32
|
+
define_method key do
|
|
33
|
+
@options[key]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
define_method "#{key}=" do |value|
|
|
37
|
+
@options[key] = value
|
|
38
|
+
end
|
|
39
|
+
end
|
|
25
40
|
|
|
26
41
|
#
|
|
27
42
|
# Create a new Options instance for W3C-capable versions of Safari.
|
|
@@ -34,25 +49,9 @@ module Selenium
|
|
|
34
49
|
# @option opts [Boolean] :automatic_inspection Preloads Web Inspector and JavaScript debugger. Default is false
|
|
35
50
|
# @option opts [Boolean] :automatic_profiling Preloads Web Inspector and starts a timeline recording. Default is false
|
|
36
51
|
#
|
|
37
|
-
# @see https://developer.apple.com/documentation/webkit/about_webdriver_for_safari
|
|
38
|
-
#
|
|
39
52
|
|
|
40
53
|
def initialize(**opts)
|
|
41
|
-
|
|
42
|
-
@automatic_profiling = opts.delete(:automatic_profiling) || false
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
#
|
|
46
|
-
# @api private
|
|
47
|
-
#
|
|
48
|
-
|
|
49
|
-
def as_json(*)
|
|
50
|
-
opts = {}
|
|
51
|
-
|
|
52
|
-
opts['safari:automaticInspection'] = true if @automatic_inspection
|
|
53
|
-
opts['safari:automaticProfiling'] = true if @automatic_profiling
|
|
54
|
-
|
|
55
|
-
opts
|
|
54
|
+
super
|
|
56
55
|
end
|
|
57
56
|
end # Options
|
|
58
57
|
end # Safari
|
|
@@ -72,7 +72,7 @@ module Selenium
|
|
|
72
72
|
end
|
|
73
73
|
end
|
|
74
74
|
|
|
75
|
-
def self.from_hsl(h, s, l, a) # rubocop:disable Naming/
|
|
75
|
+
def self.from_hsl(h, s, l, a) # rubocop:disable Naming/MethodParameterName
|
|
76
76
|
h = Float(h) / 360
|
|
77
77
|
s = Float(s) / 100
|
|
78
78
|
l = Float(l) / 100
|
|
@@ -138,7 +138,7 @@ module Selenium
|
|
|
138
138
|
end
|
|
139
139
|
|
|
140
140
|
def hex
|
|
141
|
-
format '
|
|
141
|
+
format '#%<red>02x%<green>02x%<blue>02x', red: red, green: green, blue: blue
|
|
142
142
|
end
|
|
143
143
|
end # Color
|
|
144
144
|
end # Support
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Licensed to the Software Freedom Conservancy (SFC) under one
|
|
4
|
+
# or more contributor license agreements. See the NOTICE file
|
|
5
|
+
# distributed with this work for additional information
|
|
6
|
+
# regarding copyright ownership. The SFC licenses this file
|
|
7
|
+
# to you under the Apache License, Version 2.0 (the
|
|
8
|
+
# "License"); you may not use this file except in compliance
|
|
9
|
+
# with the License. You may obtain a copy of the License at
|
|
10
|
+
#
|
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
#
|
|
13
|
+
# Unless required by applicable law or agreed to in writing,
|
|
14
|
+
# software distributed under the License is distributed on an
|
|
15
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
16
|
+
# KIND, either express or implied. See the License for the
|
|
17
|
+
# specific language governing permissions and limitations
|
|
18
|
+
# under the License.
|
|
19
|
+
|
|
20
|
+
module Selenium
|
|
21
|
+
module WebDriver
|
|
22
|
+
module Support
|
|
23
|
+
|
|
24
|
+
#
|
|
25
|
+
# @api private
|
|
26
|
+
#
|
|
27
|
+
|
|
28
|
+
class RelativeLocator
|
|
29
|
+
KEYS = %w[above below left right near distance].freeze
|
|
30
|
+
|
|
31
|
+
def initialize(locator)
|
|
32
|
+
@filters, @root = locator.partition { |how, _| KEYS.include?(how) }.map(&:to_h)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def as_json
|
|
36
|
+
{
|
|
37
|
+
relative: {
|
|
38
|
+
root: @root,
|
|
39
|
+
filters: @filters.map do |kind, filter|
|
|
40
|
+
{
|
|
41
|
+
kind: kind,
|
|
42
|
+
args: [filter]
|
|
43
|
+
}
|
|
44
|
+
end
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|