selenium-webdriver 3.142.7 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (136) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGES +324 -5
  3. data/Gemfile +3 -1
  4. data/LICENSE +1 -1
  5. data/NOTICE +2 -0
  6. data/README.md +4 -5
  7. data/lib/selenium/server.rb +21 -29
  8. data/lib/selenium/webdriver/atoms/findElements.js +122 -0
  9. data/lib/selenium/webdriver/atoms/getAttribute.js +100 -7
  10. data/lib/selenium/webdriver/atoms/isDisplayed.js +76 -78
  11. data/lib/selenium/webdriver/atoms/mutationListener.js +55 -0
  12. data/lib/selenium/webdriver/chrome/driver.rb +26 -83
  13. data/lib/selenium/webdriver/chrome/{bridge.rb → features.rb} +50 -12
  14. data/lib/selenium/webdriver/chrome/options.rb +129 -58
  15. data/lib/selenium/webdriver/chrome/profile.rb +6 -3
  16. data/lib/selenium/webdriver/chrome/service.rb +8 -15
  17. data/lib/selenium/webdriver/chrome.rb +10 -9
  18. data/lib/selenium/webdriver/common/action_builder.rb +97 -249
  19. data/lib/selenium/webdriver/common/driver.rb +112 -23
  20. data/lib/selenium/webdriver/common/driver_extensions/full_page_screenshot.rb +43 -0
  21. data/lib/selenium/webdriver/common/driver_extensions/has_apple_permissions.rb +51 -0
  22. data/lib/selenium/webdriver/common/driver_extensions/has_authentication.rb +89 -0
  23. data/lib/selenium/webdriver/common/driver_extensions/has_casting.rb +77 -0
  24. data/lib/selenium/webdriver/common/driver_extensions/{has_touch_screen.rb → has_cdp.rb} +10 -8
  25. data/lib/selenium/webdriver/common/driver_extensions/has_context.rb +45 -0
  26. data/lib/selenium/webdriver/{firefox/util.rb → common/driver_extensions/has_devtools.rb} +16 -19
  27. data/lib/selenium/webdriver/common/driver_extensions/has_launching.rb +38 -0
  28. data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +5 -8
  29. data/lib/selenium/webdriver/common/driver_extensions/has_log_events.rb +144 -0
  30. data/lib/selenium/webdriver/common/driver_extensions/has_logs.rb +30 -0
  31. data/lib/selenium/webdriver/common/driver_extensions/has_network_conditions.rb +17 -0
  32. data/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +6 -27
  33. data/lib/selenium/webdriver/common/driver_extensions/has_network_interception.rb +136 -0
  34. data/lib/selenium/webdriver/common/driver_extensions/has_permissions.rb +11 -11
  35. data/lib/selenium/webdriver/common/driver_extensions/has_pinned_scripts.rb +77 -0
  36. data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +1 -0
  37. data/lib/selenium/webdriver/common/driver_extensions/{rotatable.rb → prints_page.rb} +18 -20
  38. data/lib/selenium/webdriver/common/element.rb +82 -22
  39. data/lib/selenium/webdriver/common/error.rb +32 -196
  40. data/lib/selenium/webdriver/common/interactions/interaction.rb +4 -1
  41. data/lib/selenium/webdriver/common/interactions/key_actions.rb +5 -5
  42. data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +13 -13
  43. data/lib/selenium/webdriver/common/log_entry.rb +2 -2
  44. data/lib/selenium/webdriver/common/logger.rb +50 -15
  45. data/lib/selenium/webdriver/common/manager.rb +15 -15
  46. data/lib/selenium/webdriver/common/options.rb +156 -23
  47. data/lib/selenium/webdriver/common/platform.rb +6 -1
  48. data/lib/selenium/webdriver/common/port_prober.rb +4 -6
  49. data/lib/selenium/webdriver/common/profile_helper.rb +10 -2
  50. data/lib/selenium/webdriver/common/proxy.rb +6 -3
  51. data/lib/selenium/webdriver/common/search_context.rb +7 -3
  52. data/lib/selenium/webdriver/common/service.rb +17 -125
  53. data/lib/selenium/webdriver/common/service_manager.rb +151 -0
  54. data/lib/selenium/webdriver/common/shadow_root.rb +87 -0
  55. data/lib/selenium/webdriver/common/socket_lock.rb +2 -2
  56. data/lib/selenium/webdriver/common/socket_poller.rb +2 -2
  57. data/lib/selenium/webdriver/common/takes_screenshot.rb +66 -0
  58. data/lib/selenium/webdriver/common/target_locator.rb +32 -4
  59. data/lib/selenium/webdriver/common/timeouts.rb +31 -4
  60. data/lib/selenium/webdriver/common/wait.rb +1 -1
  61. data/lib/selenium/webdriver/common/window.rb +0 -4
  62. data/lib/selenium/webdriver/common.rb +23 -17
  63. data/lib/selenium/webdriver/devtools/console_event.rb +38 -0
  64. data/lib/selenium/webdriver/devtools/exception_event.rb +36 -0
  65. data/lib/selenium/webdriver/devtools/mutation_event.rb +37 -0
  66. data/lib/selenium/webdriver/devtools/pinned_script.rb +59 -0
  67. data/lib/selenium/webdriver/devtools/request.rb +67 -0
  68. data/lib/selenium/webdriver/devtools/response.rb +66 -0
  69. data/lib/selenium/webdriver/devtools.rb +182 -0
  70. data/lib/selenium/webdriver/edge/driver.rb +7 -29
  71. data/lib/selenium/webdriver/edge/features.rb +44 -0
  72. data/lib/selenium/webdriver/edge/options.rb +11 -48
  73. data/lib/selenium/webdriver/{common/w3c_manager.rb → edge/profile.rb} +7 -19
  74. data/lib/selenium/webdriver/edge/service.rb +10 -26
  75. data/lib/selenium/webdriver/edge.rb +11 -14
  76. data/lib/selenium/webdriver/firefox/driver.rb +31 -19
  77. data/lib/selenium/webdriver/firefox/extension.rb +8 -0
  78. data/lib/selenium/webdriver/firefox/features.rb +66 -0
  79. data/lib/selenium/webdriver/firefox/options.rb +70 -49
  80. data/lib/selenium/webdriver/firefox/profile.rb +21 -71
  81. data/lib/selenium/webdriver/firefox/service.rb +5 -9
  82. data/lib/selenium/webdriver/firefox.rb +22 -20
  83. data/lib/selenium/webdriver/ie/driver.rb +1 -47
  84. data/lib/selenium/webdriver/ie/options.rb +13 -44
  85. data/lib/selenium/webdriver/ie/service.rb +13 -15
  86. data/lib/selenium/webdriver/ie.rb +8 -7
  87. data/lib/selenium/webdriver/remote/bridge.rb +558 -86
  88. data/lib/selenium/webdriver/remote/capabilities.rb +159 -123
  89. data/lib/selenium/webdriver/remote/commands.rb +163 -0
  90. data/lib/selenium/webdriver/remote/driver.rb +22 -12
  91. data/lib/selenium/webdriver/remote/http/common.rb +0 -5
  92. data/lib/selenium/webdriver/remote/http/default.rb +17 -20
  93. data/lib/selenium/webdriver/remote/http/persistent.rb +11 -6
  94. data/lib/selenium/webdriver/remote/response.rb +16 -47
  95. data/lib/selenium/webdriver/remote.rb +15 -13
  96. data/lib/selenium/webdriver/safari/driver.rb +3 -31
  97. data/lib/selenium/webdriver/safari/{bridge.rb → features.rb} +3 -3
  98. data/lib/selenium/webdriver/safari/options.rb +10 -29
  99. data/lib/selenium/webdriver/safari/service.rb +4 -8
  100. data/lib/selenium/webdriver/safari.rb +17 -9
  101. data/lib/selenium/webdriver/support/block_event_listener.rb +1 -1
  102. data/lib/selenium/webdriver/support/cdp/domain.rb.erb +63 -0
  103. data/lib/selenium/webdriver/support/cdp_client_generator.rb +108 -0
  104. data/lib/selenium/webdriver/support/color.rb +2 -2
  105. data/lib/selenium/webdriver/support/event_firing_bridge.rb +4 -4
  106. data/lib/selenium/webdriver/support/guards/guard.rb +89 -0
  107. data/lib/selenium/webdriver/{firefox/marionette/bridge.rb → support/guards/guard_condition.rb} +22 -19
  108. data/lib/selenium/webdriver/support/guards.rb +95 -0
  109. data/lib/selenium/webdriver/support/relative_locator.rb +51 -0
  110. data/lib/selenium/webdriver/support/select.rb +3 -3
  111. data/lib/selenium/webdriver/support.rb +1 -0
  112. data/lib/selenium/webdriver/version.rb +1 -1
  113. data/lib/selenium/webdriver.rb +12 -12
  114. data/selenium-webdriver.gemspec +28 -12
  115. metadata +128 -69
  116. data/lib/selenium/webdriver/common/bridge_helper.rb +0 -82
  117. data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +0 -64
  118. data/lib/selenium/webdriver/common/keyboard.rb +0 -70
  119. data/lib/selenium/webdriver/common/mouse.rb +0 -89
  120. data/lib/selenium/webdriver/common/touch_action_builder.rb +0 -78
  121. data/lib/selenium/webdriver/common/touch_screen.rb +0 -123
  122. data/lib/selenium/webdriver/common/w3c_action_builder.rb +0 -212
  123. data/lib/selenium/webdriver/edge/bridge.rb +0 -76
  124. data/lib/selenium/webdriver/firefox/binary.rb +0 -187
  125. data/lib/selenium/webdriver/firefox/extension/prefs.json +0 -69
  126. data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
  127. data/lib/selenium/webdriver/firefox/launcher.rb +0 -111
  128. data/lib/selenium/webdriver/firefox/legacy/driver.rb +0 -83
  129. data/lib/selenium/webdriver/firefox/marionette/driver.rb +0 -90
  130. data/lib/selenium/webdriver/firefox/native/linux/amd64/x_ignore_nofocus.so +0 -0
  131. data/lib/selenium/webdriver/firefox/native/linux/x86/x_ignore_nofocus.so +0 -0
  132. data/lib/selenium/webdriver/remote/oss/bridge.rb +0 -594
  133. data/lib/selenium/webdriver/remote/oss/commands.rb +0 -223
  134. data/lib/selenium/webdriver/remote/w3c/bridge.rb +0 -605
  135. data/lib/selenium/webdriver/remote/w3c/capabilities.rb +0 -310
  136. data/lib/selenium/webdriver/remote/w3c/commands.rb +0 -157
@@ -1,310 +0,0 @@
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 Remote
23
- module W3C
24
-
25
- #
26
- # Specification of the desired and/or actual capabilities of the browser that the
27
- # server is being asked to create.
28
- #
29
- # @api private
30
- #
31
-
32
- class Capabilities
33
-
34
- EXTENSION_CAPABILITY_PATTERN = /\A[\w-]+:.*\z/.freeze
35
-
36
- KNOWN = [
37
- :browser_name,
38
- :browser_version,
39
- :platform_name,
40
- :accept_insecure_certs,
41
- :page_load_strategy,
42
- :proxy,
43
- :set_window_rect,
44
- :timeouts,
45
- :unhandled_prompt_behavior,
46
- :strict_file_interactability,
47
-
48
- # remote-specific
49
- :remote_session_id,
50
-
51
- # TODO: (alex) deprecate in favor of Firefox::Options?
52
- :accessibility_checks,
53
- :device,
54
-
55
- # TODO: (alex) deprecate compatibility with OSS-capabilities
56
- :implicit_timeout,
57
- :page_load_timeout,
58
- :script_timeout
59
- ].freeze
60
-
61
- KNOWN.each do |key|
62
- define_method key do
63
- @capabilities.fetch(key)
64
- end
65
-
66
- next if key == :proxy
67
-
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
75
- @capabilities[key] = value
76
- end
77
- end
78
-
79
- #
80
- # Backward compatibility
81
- #
82
-
83
- alias_method :version, :browser_version
84
- alias_method :version=, :browser_version=
85
- alias_method :platform, :platform_name
86
- alias_method :platform=, :platform_name=
87
-
88
- #
89
- # Convenience methods for the common choices.
90
- #
91
-
92
- class << self
93
- def edge(opts = {})
94
- WebDriver.logger.deprecate('Selenium::WebDriver::Remote::W3C::Capabilities.edge',
95
- 'Selenium::WebDriver::Remote::Capabilities.edge')
96
- Remote::Capabilities.edge(opts)
97
- end
98
-
99
- def firefox(opts = {})
100
- WebDriver.logger.deprecate('Selenium::WebDriver::Remote::W3C::Capabilities.firefox',
101
- 'Selenium::WebDriver::Remote::Capabilities.firefox')
102
- Remote::Capabilities.firefox(opts)
103
- end
104
-
105
- alias_method :ff, :firefox
106
-
107
- #
108
- # @api private
109
- #
110
-
111
- def json_create(data)
112
- data = data.dup
113
-
114
- caps = new
115
- caps.browser_name = data.delete('browserName')
116
- caps.browser_version = data.delete('browserVersion')
117
- caps.platform_name = data.delete('platformName')
118
- caps.accept_insecure_certs = data.delete('acceptInsecureCerts') if data.key?('acceptInsecureCerts')
119
- caps.page_load_strategy = data.delete('pageLoadStrategy')
120
- timeouts = data.delete('timeouts')
121
- caps.implicit_timeout = timeouts['implicit'] if timeouts
122
- caps.page_load_timeout = timeouts['pageLoad'] if timeouts
123
- caps.script_timeout = timeouts['script'] if timeouts
124
-
125
- proxy = data.delete('proxy')
126
- caps.proxy = Proxy.json_create(proxy) unless proxy.nil? || proxy.empty?
127
-
128
- # Remote Server Specific
129
- caps[:remote_session_id] = data.delete('webdriver.remote.sessionid')
130
-
131
- # Marionette Specific
132
- caps[:accessibility_checks] = data.delete('moz:accessibilityChecks')
133
- caps[:profile] = data.delete('moz:profile')
134
- caps[:rotatable] = data.delete('rotatable')
135
- caps[:device] = data.delete('device')
136
-
137
- # any remaining pairs will be added as is, with no conversion
138
- caps.merge!(data)
139
-
140
- caps
141
- end
142
-
143
- #
144
- # Creates W3C compliant capabilities from OSS ones.
145
- # @param oss_capabilities [Hash, Remote::Capabilities]
146
- #
147
-
148
- def from_oss(oss_capabilities) # rubocop:disable Metrics/MethodLength
149
- w3c_capabilities = new
150
-
151
- # TODO: (alex) make capabilities enumerable?
152
- oss_capabilities = oss_capabilities.__send__(:capabilities) unless oss_capabilities.is_a?(Hash)
153
- oss_capabilities.each do |name, value|
154
- next if value.nil?
155
- next if value.is_a?(String) && value.empty?
156
-
157
- capability_name = name.to_s
158
-
159
- snake_cased_capability_names = KNOWN.map(&:to_s)
160
- camel_cased_capability_names = snake_cased_capability_names.map(&w3c_capabilities.method(:camel_case))
161
-
162
- next unless snake_cased_capability_names.include?(capability_name) ||
163
- camel_cased_capability_names.include?(capability_name) ||
164
- capability_name.match(EXTENSION_CAPABILITY_PATTERN)
165
-
166
- w3c_capabilities[name] = value
167
- end
168
-
169
- # User can pass :firefox_options or :firefox_profile.
170
- #
171
- # TODO: (alex) Refactor this whole method into converter class.
172
- firefox_options = oss_capabilities['firefoxOptions'] || oss_capabilities['firefox_options'] || oss_capabilities[:firefox_options]
173
- firefox_profile = oss_capabilities['firefox_profile'] || oss_capabilities[:firefox_profile]
174
- firefox_binary = oss_capabilities['firefox_binary'] || oss_capabilities[:firefox_binary]
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
-
188
- if firefox_profile && firefox_options
189
- second_profile = firefox_options['profile'] || firefox_options[:profile]
190
- if second_profile && firefox_profile != second_profile
191
- raise Error::WebDriverError, 'You cannot pass 2 different Firefox profiles'
192
- end
193
- end
194
-
195
- if firefox_options || firefox_profile || firefox_binary
196
- options = WebDriver::Firefox::Options.new(firefox_options || {})
197
- options.binary = firefox_binary if firefox_binary
198
- options.profile = firefox_profile if firefox_profile
199
- w3c_capabilities.merge!(options.as_json)
200
- end
201
-
202
- w3c_capabilities
203
- end
204
- end
205
-
206
- #
207
- # @param [Hash] opts
208
- # @option :browser_name [String] required browser name
209
- # @option :browser_version [String] required browser version number
210
- # @option :platform_name [Symbol] one of :any, :win, :mac, or :x
211
- # @option :accept_insecure_certs [Boolean] does the driver accept insecure SSL certifications?
212
- # @option :proxy [Selenium::WebDriver::Proxy, Hash] proxy configuration
213
- #
214
- # @api public
215
- #
216
-
217
- def initialize(opts = {})
218
- @capabilities = opts
219
- self.proxy = opts.delete(:proxy)
220
- end
221
-
222
- #
223
- # Allows setting arbitrary capabilities.
224
- #
225
-
226
- def []=(key, value)
227
- @capabilities[key] = value
228
- end
229
-
230
- def [](key)
231
- @capabilities[key]
232
- end
233
-
234
- def merge!(other)
235
- if other.respond_to?(:capabilities, true) && other.capabilities.is_a?(Hash)
236
- @capabilities.merge! other.capabilities
237
- elsif other.is_a? Hash
238
- @capabilities.merge! other
239
- else
240
- raise ArgumentError, 'argument should be a Hash or implement #capabilities'
241
- end
242
- end
243
-
244
- def proxy=(proxy)
245
- case proxy
246
- when Hash
247
- @capabilities[:proxy] = Proxy.new(proxy)
248
- when Proxy, nil
249
- @capabilities[:proxy] = proxy
250
- else
251
- raise TypeError, "expected Hash or #{Proxy.name}, got #{proxy.inspect}:#{proxy.class}"
252
- end
253
- end
254
-
255
- #
256
- # @api private
257
- #
258
-
259
- def as_json(*)
260
- hash = {}
261
-
262
- @capabilities.each do |key, value|
263
- case key
264
- when :platform
265
- hash['platform'] = value.to_s.upcase
266
- when :proxy
267
- if value
268
- hash['proxy'] = value.as_json
269
- hash['proxy']['proxyType'] &&= hash['proxy']['proxyType'].downcase
270
- hash['proxy']['noProxy'] = hash['proxy']['noProxy'].split(', ') if hash['proxy']['noProxy'].is_a?(String)
271
- end
272
- when String, :firefox_binary
273
- hash[key.to_s] = value
274
- when Symbol
275
- hash[camel_case(key.to_s)] = value
276
- else
277
- raise TypeError, "expected String or Symbol, got #{key.inspect}:#{key.class} / #{value.inspect}"
278
- end
279
- end
280
-
281
- hash
282
- end
283
-
284
- def to_json(*)
285
- JSON.generate as_json
286
- end
287
-
288
- def ==(other)
289
- return false unless other.is_a? self.class
290
-
291
- as_json == other.as_json
292
- end
293
-
294
- alias_method :eql?, :==
295
-
296
- protected
297
-
298
- attr_reader :capabilities
299
-
300
- private
301
-
302
- def camel_case(str)
303
- str.gsub(/_([a-z])/) { Regexp.last_match(1).upcase }
304
- end
305
-
306
- end # Capabilities
307
- end # W3c
308
- end # Remote
309
- end # WebDriver
310
- end # Selenium
@@ -1,157 +0,0 @@
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 Remote
23
- module W3C
24
-
25
- #
26
- # http://www.w3.org/TR/2015/WD-webdriver-20150918/#list-of-endpoints
27
- # @api private
28
- #
29
-
30
- class Bridge
31
- COMMANDS = {
32
-
33
- #
34
- # session handling
35
- #
36
-
37
- new_session: [:post, 'session'],
38
- delete_session: [:delete, 'session/:session_id'],
39
-
40
- #
41
- # basic driver
42
- #
43
-
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'],
50
-
51
- #
52
- # window and Frame handling
53
- #
54
-
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'],
71
-
72
- #
73
- # element
74
- #
75
-
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'],
89
-
90
- #
91
- # document handling
92
- #
93
-
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'],
97
-
98
- #
99
- # cookies
100
- #
101
-
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'],
107
-
108
- #
109
- # timeouts
110
- #
111
-
112
- set_timeout: [:post, 'session/:session_id/timeouts'],
113
-
114
- #
115
- # actions
116
- #
117
-
118
- actions: [:post, 'session/:session_id/actions'],
119
- release_actions: [:delete, 'session/:session_id/actions'],
120
-
121
- #
122
- # Element Operations
123
- #
124
-
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'],
129
-
130
- #
131
- # alerts
132
- #
133
-
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'],
138
-
139
- #
140
- # screenshot
141
- #
142
-
143
- take_screenshot: [:get, 'session/:session_id/screenshot'],
144
- take_element_screenshot: [:get, 'session/:session_id/element/:id/screenshot'],
145
-
146
- #
147
- # server extensions
148
- #
149
-
150
- upload_file: [:post, 'session/:session_id/se/file']
151
- }.freeze
152
-
153
- end # Bridge
154
- end # W3C
155
- end # Remote
156
- end # WebDriver
157
- end # Selenium