selenium-webdriver 3.141.0 → 3.141.592
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 +4 -4
- data/CHANGES +78 -0
- data/Gemfile +2 -0
- data/LICENSE +1 -1
- data/lib/selenium-webdriver.rb +2 -0
- data/lib/selenium/server.rb +9 -7
- data/lib/selenium/webdriver.rb +3 -1
- data/lib/selenium/webdriver/atoms.rb +20 -1
- data/lib/selenium/webdriver/atoms/getAttribute.js +6 -7
- data/lib/selenium/webdriver/atoms/isDisplayed.js +60 -59
- data/lib/selenium/webdriver/chrome.rb +10 -4
- data/lib/selenium/webdriver/chrome/bridge.rb +5 -3
- data/lib/selenium/webdriver/chrome/driver.rb +10 -13
- data/lib/selenium/webdriver/chrome/options.rb +4 -4
- data/lib/selenium/webdriver/chrome/profile.rb +4 -3
- data/lib/selenium/webdriver/chrome/service.rb +13 -13
- data/lib/selenium/webdriver/common.rb +4 -2
- data/lib/selenium/webdriver/common/action_builder.rb +2 -0
- data/lib/selenium/webdriver/common/alert.rb +2 -0
- data/lib/selenium/webdriver/common/bridge_helper.rb +8 -5
- data/lib/selenium/webdriver/common/driver.rb +22 -7
- data/lib/selenium/webdriver/common/driver_extensions/downloads_files.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_addons.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_debugger.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +3 -3
- data/lib/selenium/webdriver/common/driver_extensions/has_network_conditions.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +3 -1
- data/lib/selenium/webdriver/common/driver_extensions/has_permissions.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_session_id.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_touch_screen.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/rotatable.rb +3 -1
- data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/uploads_files.rb +3 -3
- data/lib/selenium/webdriver/common/element.rb +3 -1
- data/lib/selenium/webdriver/common/error.rb +74 -18
- data/lib/selenium/webdriver/common/file_reaper.rb +3 -3
- data/lib/selenium/webdriver/common/html5/local_storage.rb +2 -0
- data/lib/selenium/webdriver/common/html5/session_storage.rb +2 -0
- data/lib/selenium/webdriver/common/html5/shared_web_storage.rb +4 -1
- data/lib/selenium/webdriver/common/interactions/input_device.rb +3 -0
- data/lib/selenium/webdriver/common/interactions/interaction.rb +3 -0
- data/lib/selenium/webdriver/common/interactions/interactions.rb +3 -1
- data/lib/selenium/webdriver/common/interactions/key_actions.rb +2 -0
- data/lib/selenium/webdriver/common/interactions/key_input.rb +4 -0
- data/lib/selenium/webdriver/common/interactions/none_input.rb +3 -0
- data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +2 -0
- data/lib/selenium/webdriver/common/interactions/pointer_input.rb +7 -0
- data/lib/selenium/webdriver/common/keyboard.rb +4 -1
- data/lib/selenium/webdriver/common/keys.rb +3 -0
- data/lib/selenium/webdriver/common/log_entry.rb +4 -2
- data/lib/selenium/webdriver/common/logger.rb +15 -40
- data/lib/selenium/webdriver/common/logs.rb +2 -0
- data/lib/selenium/webdriver/common/manager.rb +177 -0
- data/lib/selenium/webdriver/common/mouse.rb +3 -0
- data/lib/selenium/webdriver/common/navigation.rb +2 -0
- data/lib/selenium/webdriver/common/options.rb +26 -0
- data/lib/selenium/webdriver/common/platform.rb +26 -30
- data/lib/selenium/webdriver/common/port_prober.rb +6 -19
- data/lib/selenium/webdriver/common/profile_helper.rb +2 -0
- data/lib/selenium/webdriver/common/proxy.rb +13 -5
- data/lib/selenium/webdriver/common/search_context.rb +4 -6
- data/lib/selenium/webdriver/common/service.rb +74 -29
- data/lib/selenium/webdriver/common/socket_lock.rb +10 -3
- data/lib/selenium/webdriver/common/socket_poller.rb +45 -48
- data/lib/selenium/webdriver/common/target_locator.rb +6 -4
- data/lib/selenium/webdriver/common/timeouts.rb +2 -0
- data/lib/selenium/webdriver/common/touch_action_builder.rb +5 -6
- data/lib/selenium/webdriver/common/touch_screen.rb +4 -1
- data/lib/selenium/webdriver/common/w3c_action_builder.rb +3 -0
- data/lib/selenium/webdriver/common/w3c_manager.rb +45 -0
- data/lib/selenium/webdriver/common/w3c_options.rb +2 -0
- data/lib/selenium/webdriver/common/wait.rb +11 -3
- data/lib/selenium/webdriver/common/window.rb +2 -0
- data/lib/selenium/webdriver/common/zipper.rb +3 -3
- data/lib/selenium/webdriver/edge.rb +11 -5
- data/lib/selenium/webdriver/edge/bridge.rb +2 -0
- data/lib/selenium/webdriver/edge/driver.rb +5 -12
- data/lib/selenium/webdriver/edge/options.rb +3 -0
- data/lib/selenium/webdriver/edge/service.rb +8 -12
- data/lib/selenium/webdriver/firefox.rb +10 -4
- data/lib/selenium/webdriver/firefox/binary.rb +7 -6
- data/lib/selenium/webdriver/firefox/bridge.rb +47 -0
- data/lib/selenium/webdriver/firefox/driver.rb +3 -2
- data/lib/selenium/webdriver/firefox/extension.rb +4 -4
- data/lib/selenium/webdriver/firefox/launcher.rb +3 -0
- data/lib/selenium/webdriver/firefox/legacy/driver.rb +7 -3
- data/lib/selenium/webdriver/firefox/marionette/bridge.rb +4 -2
- data/lib/selenium/webdriver/firefox/marionette/driver.rb +5 -11
- data/lib/selenium/webdriver/firefox/options.rb +3 -1
- data/lib/selenium/webdriver/firefox/profile.rb +7 -8
- data/lib/selenium/webdriver/firefox/profiles_ini.rb +3 -0
- data/lib/selenium/webdriver/firefox/service.rb +8 -19
- data/lib/selenium/webdriver/firefox/util.rb +2 -0
- data/lib/selenium/webdriver/ie.rb +10 -4
- data/lib/selenium/webdriver/ie/driver.rb +4 -10
- data/lib/selenium/webdriver/ie/options.rb +4 -2
- data/lib/selenium/webdriver/ie/service.rb +8 -12
- data/lib/selenium/webdriver/remote.rb +2 -0
- data/lib/selenium/webdriver/remote/bridge.rb +6 -4
- data/lib/selenium/webdriver/remote/capabilities.rb +23 -10
- data/lib/selenium/webdriver/remote/commands.rb +156 -0
- data/lib/selenium/webdriver/remote/driver.rb +2 -0
- data/lib/selenium/webdriver/remote/http/common.rb +11 -4
- data/lib/selenium/webdriver/remote/http/curb.rb +4 -2
- data/lib/selenium/webdriver/remote/http/default.rb +31 -25
- data/lib/selenium/webdriver/remote/http/persistent.rb +3 -1
- data/lib/selenium/webdriver/remote/oss/bridge.rb +5 -2
- data/lib/selenium/webdriver/remote/oss/commands.rb +106 -104
- data/lib/selenium/webdriver/remote/response.rb +10 -4
- data/lib/selenium/webdriver/remote/server_error.rb +2 -0
- data/lib/selenium/webdriver/remote/w3c/bridge.rb +28 -13
- data/lib/selenium/webdriver/remote/w3c/capabilities.rb +37 -21
- data/lib/selenium/webdriver/remote/w3c/commands.rb +61 -58
- data/lib/selenium/webdriver/safari.rb +11 -4
- data/lib/selenium/webdriver/safari/bridge.rb +5 -3
- data/lib/selenium/webdriver/safari/driver.rb +8 -10
- data/lib/selenium/webdriver/safari/options.rb +2 -0
- data/lib/selenium/webdriver/safari/service.rb +6 -25
- data/lib/selenium/webdriver/support.rb +2 -0
- data/lib/selenium/webdriver/support/abstract_event_listener.rb +2 -0
- data/lib/selenium/webdriver/support/block_event_listener.rb +3 -1
- data/lib/selenium/webdriver/support/color.rb +11 -9
- data/lib/selenium/webdriver/support/escaper.rb +2 -0
- data/lib/selenium/webdriver/support/event_firing_bridge.rb +3 -1
- data/lib/selenium/webdriver/support/select.rb +19 -18
- data/lib/selenium/webdriver/version.rb +3 -1
- data/selenium-webdriver.gemspec +14 -7
- metadata +89 -21
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# Licensed to the Software Freedom Conservancy (SFC) under one
|
|
2
4
|
# or more contributor license agreements. See the NOTICE file
|
|
3
5
|
# distributed with this work for additional information
|
|
@@ -20,7 +22,7 @@ module Selenium
|
|
|
20
22
|
module Remote
|
|
21
23
|
# @api private
|
|
22
24
|
class Response
|
|
23
|
-
STACKTRACE_KEY = 'stackTrace'
|
|
25
|
+
STACKTRACE_KEY = 'stackTrace'
|
|
24
26
|
|
|
25
27
|
attr_reader :code, :payload
|
|
26
28
|
attr_writer :payload
|
|
@@ -49,6 +51,7 @@ module Selenium
|
|
|
49
51
|
when Hash
|
|
50
52
|
msg = val['message']
|
|
51
53
|
return 'unknown error' unless msg
|
|
54
|
+
|
|
52
55
|
msg << ": #{val['alert']['text'].inspect}" if val['alert'].is_a?(Hash) && val['alert']['text']
|
|
53
56
|
msg << " (#{val['class']})" if val['class']
|
|
54
57
|
msg
|
|
@@ -69,6 +72,7 @@ module Selenium
|
|
|
69
72
|
e = error
|
|
70
73
|
raise e if e
|
|
71
74
|
return unless @code.nil? || @code >= 400
|
|
75
|
+
|
|
72
76
|
raise Error::ServerError, self
|
|
73
77
|
end
|
|
74
78
|
|
|
@@ -77,7 +81,7 @@ module Selenium
|
|
|
77
81
|
|
|
78
82
|
server_trace = error_payload[STACKTRACE_KEY] ||
|
|
79
83
|
error_payload[STACKTRACE_KEY.downcase] ||
|
|
80
|
-
(
|
|
84
|
+
error_payload.dig('value', STACKTRACE_KEY)
|
|
81
85
|
return unless server_trace
|
|
82
86
|
|
|
83
87
|
backtrace = case server_trace
|
|
@@ -91,7 +95,7 @@ module Selenium
|
|
|
91
95
|
end
|
|
92
96
|
|
|
93
97
|
def backtrace_from_remote(server_trace)
|
|
94
|
-
server_trace.map
|
|
98
|
+
server_trace.map { |frame|
|
|
95
99
|
next unless frame.is_a?(Hash)
|
|
96
100
|
|
|
97
101
|
file = frame['fileName']
|
|
@@ -104,7 +108,7 @@ module Selenium
|
|
|
104
108
|
meth = 'unknown' if meth.nil? || meth.empty?
|
|
105
109
|
|
|
106
110
|
"[remote server] #{file}:#{line}:in `#{meth}'"
|
|
107
|
-
|
|
111
|
+
}.compact
|
|
108
112
|
end
|
|
109
113
|
|
|
110
114
|
def error_payload
|
|
@@ -115,11 +119,13 @@ module Selenium
|
|
|
115
119
|
|
|
116
120
|
def status
|
|
117
121
|
return unless error_payload.is_a? Hash
|
|
122
|
+
|
|
118
123
|
@status ||= error_payload['status'] || error_payload['error']
|
|
119
124
|
end
|
|
120
125
|
|
|
121
126
|
def value
|
|
122
127
|
return unless error_payload.is_a? Hash
|
|
128
|
+
|
|
123
129
|
@value ||= error_payload['value'] || error_payload['message']
|
|
124
130
|
end
|
|
125
131
|
end # Response
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# Licensed to the Software Freedom Conservancy (SFC) under one
|
|
2
4
|
# or more contributor license agreements. See the NOTICE file
|
|
3
5
|
# distributed with this work for additional information
|
|
@@ -116,6 +118,20 @@ module Selenium
|
|
|
116
118
|
'return source;')
|
|
117
119
|
end
|
|
118
120
|
|
|
121
|
+
#
|
|
122
|
+
# Create a new top-level browsing context
|
|
123
|
+
# https://w3c.github.io/webdriver/#new-window
|
|
124
|
+
# @param type [String] Supports two values: 'tab' and 'window'.
|
|
125
|
+
# Use 'tab' if you'd like the new window to share an OS-level window
|
|
126
|
+
# with the current browsing context.
|
|
127
|
+
# Use 'window' otherwise
|
|
128
|
+
# @return [Hash] Containing 'handle' with the value of the window handle
|
|
129
|
+
# and 'type' with the value of the created window type
|
|
130
|
+
#
|
|
131
|
+
def new_window(type)
|
|
132
|
+
execute :new_window, {}, {type: type}
|
|
133
|
+
end
|
|
134
|
+
|
|
119
135
|
def switch_to_window(name)
|
|
120
136
|
execute :switch_to_window, {}, {handle: name}
|
|
121
137
|
end
|
|
@@ -162,16 +178,14 @@ module Selenium
|
|
|
162
178
|
end
|
|
163
179
|
|
|
164
180
|
def resize_window(width, height, handle = :current)
|
|
165
|
-
unless handle == :current
|
|
166
|
-
|
|
167
|
-
end
|
|
181
|
+
raise Error::WebDriverError, 'Switch to desired window before changing its size' unless handle == :current
|
|
182
|
+
|
|
168
183
|
set_window_rect(width: width, height: height)
|
|
169
184
|
end
|
|
170
185
|
|
|
171
186
|
def window_size(handle = :current)
|
|
172
|
-
unless handle == :current
|
|
173
|
-
|
|
174
|
-
end
|
|
187
|
+
raise Error::UnsupportedOperationError, 'Switch to desired window before getting its size' unless handle == :current
|
|
188
|
+
|
|
175
189
|
data = execute :get_window_rect
|
|
176
190
|
|
|
177
191
|
Dimension.new data['width'], data['height']
|
|
@@ -182,9 +196,8 @@ module Selenium
|
|
|
182
196
|
end
|
|
183
197
|
|
|
184
198
|
def maximize_window(handle = :current)
|
|
185
|
-
unless handle == :current
|
|
186
|
-
|
|
187
|
-
end
|
|
199
|
+
raise Error::UnsupportedOperationError, 'Switch to desired window before changing its size' unless handle == :current
|
|
200
|
+
|
|
188
201
|
execute :maximize_window
|
|
189
202
|
end
|
|
190
203
|
|
|
@@ -203,7 +216,7 @@ module Selenium
|
|
|
203
216
|
|
|
204
217
|
def set_window_rect(x: nil, y: nil, width: nil, height: nil)
|
|
205
218
|
params = {x: x, y: y, width: width, height: height}
|
|
206
|
-
params.update(params) { |
|
|
219
|
+
params.update(params) { |_k, v| Integer(v) unless v.nil? }
|
|
207
220
|
execute :set_window_rect, {}, params
|
|
208
221
|
end
|
|
209
222
|
|
|
@@ -302,8 +315,8 @@ module Selenium
|
|
|
302
315
|
# cookies
|
|
303
316
|
#
|
|
304
317
|
|
|
305
|
-
def
|
|
306
|
-
@
|
|
318
|
+
def manage
|
|
319
|
+
@manage ||= WebDriver::W3CManager.new(self)
|
|
307
320
|
end
|
|
308
321
|
|
|
309
322
|
def add_cookie(cookie)
|
|
@@ -459,6 +472,7 @@ module Selenium
|
|
|
459
472
|
end
|
|
460
473
|
|
|
461
474
|
def element_attribute(element, name)
|
|
475
|
+
WebDriver.logger.info "Using script for :getAttribute of #{name}"
|
|
462
476
|
execute_atom :getAttribute, element, name
|
|
463
477
|
end
|
|
464
478
|
|
|
@@ -506,6 +520,7 @@ module Selenium
|
|
|
506
520
|
end
|
|
507
521
|
|
|
508
522
|
def element_displayed?(element)
|
|
523
|
+
WebDriver.logger.info 'Using script for :isDisplayed'
|
|
509
524
|
execute_atom :isDisplayed, element
|
|
510
525
|
end
|
|
511
526
|
|
|
@@ -569,7 +584,7 @@ module Selenium
|
|
|
569
584
|
[how, what]
|
|
570
585
|
end
|
|
571
586
|
|
|
572
|
-
ESCAPE_CSS_REGEXP = /(['"\\#.:;,!?+<>=~*^$|%&@`{}\-\[\]\(\)])
|
|
587
|
+
ESCAPE_CSS_REGEXP = /(['"\\#.:;,!?+<>=~*^$|%&@`{}\-\[\]\(\)])/.freeze
|
|
573
588
|
UNICODE_CODE_POINT = 30
|
|
574
589
|
|
|
575
590
|
# Escapes invalid characters in CSS selector.
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# Licensed to the Software Freedom Conservancy (SFC) under one
|
|
2
4
|
# or more contributor license agreements. See the NOTICE file
|
|
3
5
|
# distributed with this work for additional information
|
|
@@ -29,7 +31,7 @@ module Selenium
|
|
|
29
31
|
|
|
30
32
|
class Capabilities
|
|
31
33
|
|
|
32
|
-
EXTENSION_CAPABILITY_PATTERN = /\A[\w-]+:.*\z
|
|
34
|
+
EXTENSION_CAPABILITY_PATTERN = /\A[\w-]+:.*\z/.freeze
|
|
33
35
|
|
|
34
36
|
KNOWN = [
|
|
35
37
|
:browser_name,
|
|
@@ -41,18 +43,19 @@ module Selenium
|
|
|
41
43
|
:set_window_rect,
|
|
42
44
|
:timeouts,
|
|
43
45
|
:unhandled_prompt_behavior,
|
|
46
|
+
:strict_file_interactability,
|
|
44
47
|
|
|
45
48
|
# remote-specific
|
|
46
49
|
:remote_session_id,
|
|
47
50
|
|
|
48
|
-
# TODO (alex)
|
|
51
|
+
# TODO: (alex) deprecate in favor of Firefox::Options?
|
|
49
52
|
:accessibility_checks,
|
|
50
53
|
:device,
|
|
51
54
|
|
|
52
|
-
# TODO (alex)
|
|
55
|
+
# TODO: (alex) deprecate compatibility with OSS-capabilities
|
|
53
56
|
:implicit_timeout,
|
|
54
57
|
:page_load_timeout,
|
|
55
|
-
:script_timeout
|
|
58
|
+
:script_timeout
|
|
56
59
|
].freeze
|
|
57
60
|
|
|
58
61
|
KNOWN.each do |key|
|
|
@@ -61,7 +64,14 @@ module Selenium
|
|
|
61
64
|
end
|
|
62
65
|
|
|
63
66
|
next if key == :proxy
|
|
67
|
+
|
|
64
68
|
define_method "#{key}=" do |value|
|
|
69
|
+
case key
|
|
70
|
+
when :accessibility_checks
|
|
71
|
+
WebDriver.logger.deprecate(":accessibility_checks capability")
|
|
72
|
+
when :device
|
|
73
|
+
WebDriver.logger.deprecate(":device capability")
|
|
74
|
+
end
|
|
65
75
|
@capabilities[key] = value
|
|
66
76
|
end
|
|
67
77
|
end
|
|
@@ -81,20 +91,15 @@ module Selenium
|
|
|
81
91
|
|
|
82
92
|
class << self
|
|
83
93
|
def edge(opts = {})
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
}.merge(opts))
|
|
94
|
+
WebDriver.logger.deprecate('Selenium::WebDriver::Remote::W3C::Capabilities.edge',
|
|
95
|
+
'Selenium::WebDriver::Remote::Capabilities.edge')
|
|
96
|
+
Remote::Capabilities.edge(opts)
|
|
88
97
|
end
|
|
89
98
|
|
|
90
99
|
def firefox(opts = {})
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
opts
|
|
94
|
-
opts[:timeouts]['implicit'] = opts.delete(:implicit_timeout) if opts.key?(:implicit_timeout)
|
|
95
|
-
opts[:timeouts]['pageLoad'] = opts.delete(:page_load_timeout) if opts.key?(:page_load_timeout)
|
|
96
|
-
opts[:timeouts]['script'] = opts.delete(:script_timeout) if opts.key?(:script_timeout)
|
|
97
|
-
new({browser_name: 'firefox', marionette: true}.merge(opts))
|
|
100
|
+
WebDriver.logger.deprecate('Selenium::WebDriver::Remote::W3C::Capabilities.firefox',
|
|
101
|
+
'Selenium::WebDriver::Remote::Capabilities.firefox')
|
|
102
|
+
Remote::Capabilities.firefox(opts)
|
|
98
103
|
end
|
|
99
104
|
|
|
100
105
|
alias_method :ff, :firefox
|
|
@@ -140,10 +145,10 @@ module Selenium
|
|
|
140
145
|
# @param oss_capabilities [Hash, Remote::Capabilities]
|
|
141
146
|
#
|
|
142
147
|
|
|
143
|
-
def from_oss(oss_capabilities)
|
|
148
|
+
def from_oss(oss_capabilities) # rubocop:disable Metrics/MethodLength
|
|
144
149
|
w3c_capabilities = new
|
|
145
150
|
|
|
146
|
-
# TODO (alex)
|
|
151
|
+
# TODO: (alex) make capabilities enumerable?
|
|
147
152
|
oss_capabilities = oss_capabilities.__send__(:capabilities) unless oss_capabilities.is_a?(Hash)
|
|
148
153
|
oss_capabilities.each do |name, value|
|
|
149
154
|
next if value.nil?
|
|
@@ -163,11 +168,23 @@ module Selenium
|
|
|
163
168
|
|
|
164
169
|
# User can pass :firefox_options or :firefox_profile.
|
|
165
170
|
#
|
|
166
|
-
# TODO (alex)
|
|
171
|
+
# TODO: (alex) Refactor this whole method into converter class.
|
|
167
172
|
firefox_options = oss_capabilities['firefoxOptions'] || oss_capabilities['firefox_options'] || oss_capabilities[:firefox_options]
|
|
168
173
|
firefox_profile = oss_capabilities['firefox_profile'] || oss_capabilities[:firefox_profile]
|
|
169
174
|
firefox_binary = oss_capabilities['firefox_binary'] || oss_capabilities[:firefox_binary]
|
|
170
175
|
|
|
176
|
+
if firefox_options
|
|
177
|
+
WebDriver.logger.deprecate(':firefox_options capabilitiy', 'Selenium::WebDriver::Firefox::Options')
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
if firefox_profile
|
|
181
|
+
WebDriver.logger.deprecate(':firefox_profile capabilitiy', 'Selenium::WebDriver::Firefox::Options#profile')
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
if firefox_binary
|
|
185
|
+
WebDriver.logger.deprecate(':firefox_binary capabilitiy', 'Selenium::WebDriver::Firefox::Options#binary')
|
|
186
|
+
end
|
|
187
|
+
|
|
171
188
|
if firefox_profile && firefox_options
|
|
172
189
|
second_profile = firefox_options['profile'] || firefox_options[:profile]
|
|
173
190
|
if second_profile && firefox_profile != second_profile
|
|
@@ -250,9 +267,7 @@ module Selenium
|
|
|
250
267
|
if value
|
|
251
268
|
hash['proxy'] = value.as_json
|
|
252
269
|
hash['proxy']['proxyType'] &&= hash['proxy']['proxyType'].downcase
|
|
253
|
-
if hash['proxy']['noProxy'].is_a?(String)
|
|
254
|
-
hash['proxy']['noProxy'] = hash['proxy']['noProxy'].split(', ')
|
|
255
|
-
end
|
|
270
|
+
hash['proxy']['noProxy'] = hash['proxy']['noProxy'].split(', ') if hash['proxy']['noProxy'].is_a?(String)
|
|
256
271
|
end
|
|
257
272
|
when String, :firefox_binary
|
|
258
273
|
hash[key.to_s] = value
|
|
@@ -272,6 +287,7 @@ module Selenium
|
|
|
272
287
|
|
|
273
288
|
def ==(other)
|
|
274
289
|
return false unless other.is_a? self.class
|
|
290
|
+
|
|
275
291
|
as_json == other.as_json
|
|
276
292
|
end
|
|
277
293
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# Licensed to the Software Freedom Conservancy (SFC) under one
|
|
2
4
|
# or more contributor license agreements. See the NOTICE file
|
|
3
5
|
# distributed with this work for additional information
|
|
@@ -32,119 +34,120 @@ module Selenium
|
|
|
32
34
|
# session handling
|
|
33
35
|
#
|
|
34
36
|
|
|
35
|
-
new_session: [:post, 'session'
|
|
36
|
-
delete_session: [:delete, 'session/:session_id'
|
|
37
|
+
new_session: [:post, 'session'],
|
|
38
|
+
delete_session: [:delete, 'session/:session_id'],
|
|
37
39
|
|
|
38
40
|
#
|
|
39
41
|
# basic driver
|
|
40
42
|
#
|
|
41
43
|
|
|
42
|
-
get: [:post, 'session/:session_id/url'
|
|
43
|
-
get_current_url: [:get, 'session/:session_id/url'
|
|
44
|
-
back: [:post, 'session/:session_id/back'
|
|
45
|
-
forward: [:post, 'session/:session_id/forward'
|
|
46
|
-
refresh: [:post, 'session/:session_id/refresh'
|
|
47
|
-
get_title: [:get, 'session/:session_id/title'
|
|
44
|
+
get: [:post, 'session/:session_id/url'],
|
|
45
|
+
get_current_url: [:get, 'session/:session_id/url'],
|
|
46
|
+
back: [:post, 'session/:session_id/back'],
|
|
47
|
+
forward: [:post, 'session/:session_id/forward'],
|
|
48
|
+
refresh: [:post, 'session/:session_id/refresh'],
|
|
49
|
+
get_title: [:get, 'session/:session_id/title'],
|
|
48
50
|
|
|
49
51
|
#
|
|
50
52
|
# window and Frame handling
|
|
51
53
|
#
|
|
52
54
|
|
|
53
|
-
get_window_handle: [:get, 'session/:session_id/window'
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
55
|
+
get_window_handle: [:get, 'session/:session_id/window'],
|
|
56
|
+
new_window: [:post, 'session/:session_id/window/new'],
|
|
57
|
+
close_window: [:delete, 'session/:session_id/window'],
|
|
58
|
+
switch_to_window: [:post, 'session/:session_id/window'],
|
|
59
|
+
get_window_handles: [:get, 'session/:session_id/window/handles'],
|
|
60
|
+
fullscreen_window: [:post, 'session/:session_id/window/fullscreen'],
|
|
61
|
+
minimize_window: [:post, 'session/:session_id/window/minimize'],
|
|
62
|
+
maximize_window: [:post, 'session/:session_id/window/maximize'],
|
|
63
|
+
set_window_size: [:post, 'session/:session_id/window/size'],
|
|
64
|
+
get_window_size: [:get, 'session/:session_id/window/size'],
|
|
65
|
+
set_window_position: [:post, 'session/:session_id/window/position'],
|
|
66
|
+
get_window_position: [:get, 'session/:session_id/window/position'],
|
|
67
|
+
set_window_rect: [:post, 'session/:session_id/window/rect'],
|
|
68
|
+
get_window_rect: [:get, 'session/:session_id/window/rect'],
|
|
69
|
+
switch_to_frame: [:post, 'session/:session_id/frame'],
|
|
70
|
+
switch_to_parent_frame: [:post, 'session/:session_id/frame/parent'],
|
|
68
71
|
|
|
69
72
|
#
|
|
70
73
|
# element
|
|
71
74
|
#
|
|
72
75
|
|
|
73
|
-
find_element: [:post, 'session/:session_id/element'
|
|
74
|
-
find_elements: [:post, 'session/:session_id/elements'
|
|
75
|
-
find_child_element: [:post, 'session/:session_id/element/:id/element'
|
|
76
|
-
find_child_elements: [:post, 'session/:session_id/element/:id/elements'
|
|
77
|
-
get_active_element: [:get, 'session/:session_id/element/active'
|
|
78
|
-
is_element_selected: [:get, 'session/:session_id/element/:id/selected'
|
|
79
|
-
get_element_attribute: [:get, 'session/:session_id/element/:id/attribute/:name'
|
|
80
|
-
get_element_property: [:get, 'session/:session_id/element/:id/property/:name'
|
|
81
|
-
get_element_css_value: [:get, 'session/:session_id/element/:id/css/:property_name'
|
|
82
|
-
get_element_text: [:get, 'session/:session_id/element/:id/text'
|
|
83
|
-
get_element_tag_name: [:get, 'session/:session_id/element/:id/name'
|
|
84
|
-
get_element_rect: [:get, 'session/:session_id/element/:id/rect'
|
|
85
|
-
is_element_enabled: [:get, 'session/:session_id/element/:id/enabled'
|
|
76
|
+
find_element: [:post, 'session/:session_id/element'],
|
|
77
|
+
find_elements: [:post, 'session/:session_id/elements'],
|
|
78
|
+
find_child_element: [:post, 'session/:session_id/element/:id/element'],
|
|
79
|
+
find_child_elements: [:post, 'session/:session_id/element/:id/elements'],
|
|
80
|
+
get_active_element: [:get, 'session/:session_id/element/active'],
|
|
81
|
+
is_element_selected: [:get, 'session/:session_id/element/:id/selected'],
|
|
82
|
+
get_element_attribute: [:get, 'session/:session_id/element/:id/attribute/:name'],
|
|
83
|
+
get_element_property: [:get, 'session/:session_id/element/:id/property/:name'],
|
|
84
|
+
get_element_css_value: [:get, 'session/:session_id/element/:id/css/:property_name'],
|
|
85
|
+
get_element_text: [:get, 'session/:session_id/element/:id/text'],
|
|
86
|
+
get_element_tag_name: [:get, 'session/:session_id/element/:id/name'],
|
|
87
|
+
get_element_rect: [:get, 'session/:session_id/element/:id/rect'],
|
|
88
|
+
is_element_enabled: [:get, 'session/:session_id/element/:id/enabled'],
|
|
86
89
|
|
|
87
90
|
#
|
|
88
91
|
# document handling
|
|
89
92
|
#
|
|
90
93
|
|
|
91
|
-
get_page_source: [:get, 'session/:session_id/source'
|
|
92
|
-
execute_script: [:post, 'session/:session_id/execute/sync'
|
|
93
|
-
execute_async_script: [:post, 'session/:session_id/execute/async'
|
|
94
|
+
get_page_source: [:get, 'session/:session_id/source'],
|
|
95
|
+
execute_script: [:post, 'session/:session_id/execute/sync'],
|
|
96
|
+
execute_async_script: [:post, 'session/:session_id/execute/async'],
|
|
94
97
|
|
|
95
98
|
#
|
|
96
99
|
# cookies
|
|
97
100
|
#
|
|
98
101
|
|
|
99
|
-
get_all_cookies: [:get, 'session/:session_id/cookie'
|
|
100
|
-
get_cookie: [:get, 'session/:session_id/cookie/:name'
|
|
101
|
-
add_cookie: [:post, 'session/:session_id/cookie'
|
|
102
|
-
delete_cookie: [:delete, 'session/:session_id/cookie/:name'
|
|
103
|
-
delete_all_cookies: [:delete, 'session/:session_id/cookie'
|
|
102
|
+
get_all_cookies: [:get, 'session/:session_id/cookie'],
|
|
103
|
+
get_cookie: [:get, 'session/:session_id/cookie/:name'],
|
|
104
|
+
add_cookie: [:post, 'session/:session_id/cookie'],
|
|
105
|
+
delete_cookie: [:delete, 'session/:session_id/cookie/:name'],
|
|
106
|
+
delete_all_cookies: [:delete, 'session/:session_id/cookie'],
|
|
104
107
|
|
|
105
108
|
#
|
|
106
109
|
# timeouts
|
|
107
110
|
#
|
|
108
111
|
|
|
109
|
-
set_timeout: [:post, 'session/:session_id/timeouts'
|
|
112
|
+
set_timeout: [:post, 'session/:session_id/timeouts'],
|
|
110
113
|
|
|
111
114
|
#
|
|
112
115
|
# actions
|
|
113
116
|
#
|
|
114
117
|
|
|
115
|
-
actions: [:post, 'session/:session_id/actions'
|
|
116
|
-
release_actions: [:delete, 'session/:session_id/actions'
|
|
118
|
+
actions: [:post, 'session/:session_id/actions'],
|
|
119
|
+
release_actions: [:delete, 'session/:session_id/actions'],
|
|
117
120
|
|
|
118
121
|
#
|
|
119
122
|
# Element Operations
|
|
120
123
|
#
|
|
121
124
|
|
|
122
|
-
element_click: [:post, 'session/:session_id/element/:id/click'
|
|
123
|
-
element_tap: [:post, 'session/:session_id/element/:id/tap'
|
|
124
|
-
element_clear: [:post, 'session/:session_id/element/:id/clear'
|
|
125
|
-
element_send_keys: [:post, 'session/:session_id/element/:id/value'
|
|
125
|
+
element_click: [:post, 'session/:session_id/element/:id/click'],
|
|
126
|
+
element_tap: [:post, 'session/:session_id/element/:id/tap'],
|
|
127
|
+
element_clear: [:post, 'session/:session_id/element/:id/clear'],
|
|
128
|
+
element_send_keys: [:post, 'session/:session_id/element/:id/value'],
|
|
126
129
|
|
|
127
130
|
#
|
|
128
131
|
# alerts
|
|
129
132
|
#
|
|
130
133
|
|
|
131
|
-
dismiss_alert: [:post, 'session/:session_id/alert/dismiss'
|
|
132
|
-
accept_alert: [:post, 'session/:session_id/alert/accept'
|
|
133
|
-
get_alert_text: [:get, 'session/:session_id/alert/text'
|
|
134
|
-
send_alert_text: [:post, 'session/:session_id/alert/text'
|
|
134
|
+
dismiss_alert: [:post, 'session/:session_id/alert/dismiss'],
|
|
135
|
+
accept_alert: [:post, 'session/:session_id/alert/accept'],
|
|
136
|
+
get_alert_text: [:get, 'session/:session_id/alert/text'],
|
|
137
|
+
send_alert_text: [:post, 'session/:session_id/alert/text'],
|
|
135
138
|
|
|
136
139
|
#
|
|
137
140
|
# screenshot
|
|
138
141
|
#
|
|
139
142
|
|
|
140
|
-
take_screenshot: [:get, 'session/:session_id/screenshot'
|
|
141
|
-
take_element_screenshot: [:get, 'session/:session_id/element/:id/screenshot'
|
|
143
|
+
take_screenshot: [:get, 'session/:session_id/screenshot'],
|
|
144
|
+
take_element_screenshot: [:get, 'session/:session_id/element/:id/screenshot'],
|
|
142
145
|
|
|
143
146
|
#
|
|
144
147
|
# server extensions
|
|
145
148
|
#
|
|
146
149
|
|
|
147
|
-
upload_file: [:post, 'session/:session_id/se/file'
|
|
150
|
+
upload_file: [:post, 'session/:session_id/se/file']
|
|
148
151
|
}.freeze
|
|
149
152
|
|
|
150
153
|
end # Bridge
|