selenium-webdriver 2.53.3 → 3.142.7

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.
Files changed (162) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGES +665 -8
  3. data/Gemfile +2 -0
  4. data/LICENSE +1 -1
  5. data/README.md +2 -3
  6. data/lib/selenium/server.rb +76 -73
  7. data/lib/selenium/webdriver/atoms/getAttribute.js +7 -0
  8. data/lib/selenium/webdriver/atoms/isDisplayed.js +102 -0
  9. data/lib/selenium/webdriver/{phantomjs.rb → atoms.rb} +10 -14
  10. data/lib/selenium/webdriver/chrome/bridge.rb +30 -101
  11. data/lib/selenium/webdriver/chrome/driver.rb +127 -0
  12. data/lib/selenium/webdriver/chrome/options.rb +190 -0
  13. data/lib/selenium/webdriver/chrome/profile.rb +21 -20
  14. data/lib/selenium/webdriver/chrome/service.rb +26 -93
  15. data/lib/selenium/webdriver/chrome.rb +15 -6
  16. data/lib/selenium/webdriver/common/action_builder.rb +52 -58
  17. data/lib/selenium/webdriver/common/alert.rb +7 -15
  18. data/lib/selenium/webdriver/common/bridge_helper.rb +18 -22
  19. data/lib/selenium/webdriver/common/driver.rb +72 -72
  20. data/lib/selenium/webdriver/common/driver_extensions/downloads_files.rb +45 -0
  21. data/lib/selenium/webdriver/common/driver_extensions/has_addons.rb +50 -0
  22. data/lib/selenium/webdriver/common/driver_extensions/{has_input_devices.rb → has_debugger.rb} +11 -27
  23. data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +6 -10
  24. data/lib/selenium/webdriver/common/driver_extensions/has_network_conditions.rb +51 -0
  25. data/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +7 -8
  26. data/lib/selenium/webdriver/common/driver_extensions/has_permissions.rb +51 -0
  27. data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +2 -4
  28. data/lib/selenium/webdriver/common/driver_extensions/has_session_id.rb +2 -4
  29. data/lib/selenium/webdriver/common/driver_extensions/has_touch_screen.rb +3 -5
  30. data/lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb +2 -5
  31. data/lib/selenium/webdriver/common/driver_extensions/rotatable.rb +6 -9
  32. data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +9 -7
  33. data/lib/selenium/webdriver/common/driver_extensions/uploads_files.rb +3 -8
  34. data/lib/selenium/webdriver/common/element.rb +59 -39
  35. data/lib/selenium/webdriver/common/error.rb +259 -104
  36. data/lib/selenium/webdriver/common/file_reaper.rb +6 -14
  37. data/lib/selenium/webdriver/common/html5/local_storage.rb +8 -10
  38. data/lib/selenium/webdriver/common/html5/session_storage.rb +8 -10
  39. data/lib/selenium/webdriver/common/html5/shared_web_storage.rb +8 -16
  40. data/lib/selenium/webdriver/common/interactions/input_device.rb +54 -0
  41. data/lib/selenium/webdriver/common/interactions/interaction.rb +53 -0
  42. data/lib/selenium/webdriver/{safari/browser.rb → common/interactions/interactions.rb} +17 -14
  43. data/lib/selenium/webdriver/common/interactions/key_actions.rb +145 -0
  44. data/lib/selenium/webdriver/common/interactions/key_input.rb +66 -0
  45. data/lib/selenium/webdriver/{android.rb → common/interactions/none_input.rb} +14 -6
  46. data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +363 -0
  47. data/lib/selenium/webdriver/common/interactions/pointer_input.rb +139 -0
  48. data/lib/selenium/webdriver/common/keyboard.rb +10 -14
  49. data/lib/selenium/webdriver/common/keys.rb +102 -82
  50. data/lib/selenium/webdriver/common/log_entry.rb +7 -8
  51. data/lib/selenium/webdriver/common/logger.rb +115 -0
  52. data/lib/selenium/webdriver/common/logs.rb +4 -6
  53. data/lib/selenium/webdriver/common/manager.rb +177 -0
  54. data/lib/selenium/webdriver/common/mouse.rb +12 -14
  55. data/lib/selenium/webdriver/common/navigation.rb +4 -6
  56. data/lib/selenium/webdriver/common/options.rb +26 -127
  57. data/lib/selenium/webdriver/common/platform.rb +75 -101
  58. data/lib/selenium/webdriver/common/port_prober.rb +7 -19
  59. data/lib/selenium/webdriver/common/profile_helper.rb +8 -11
  60. data/lib/selenium/webdriver/common/proxy.rb +68 -74
  61. data/lib/selenium/webdriver/common/search_context.rb +28 -37
  62. data/lib/selenium/webdriver/common/service.rb +219 -0
  63. data/lib/selenium/webdriver/common/socket_lock.rb +15 -16
  64. data/lib/selenium/webdriver/common/socket_poller.rb +30 -28
  65. data/lib/selenium/webdriver/common/target_locator.rb +16 -18
  66. data/lib/selenium/webdriver/common/timeouts.rb +6 -8
  67. data/lib/selenium/webdriver/common/touch_action_builder.rb +5 -10
  68. data/lib/selenium/webdriver/common/touch_screen.rb +22 -23
  69. data/lib/selenium/webdriver/common/w3c_action_builder.rb +212 -0
  70. data/lib/selenium/webdriver/common/w3c_manager.rb +45 -0
  71. data/lib/selenium/webdriver/common/wait.rb +17 -16
  72. data/lib/selenium/webdriver/common/window.rb +50 -17
  73. data/lib/selenium/webdriver/common/zipper.rb +9 -13
  74. data/lib/selenium/webdriver/common.rb +21 -7
  75. data/lib/selenium/webdriver/edge/bridge.rb +34 -63
  76. data/lib/selenium/webdriver/edge/driver.rb +66 -0
  77. data/lib/selenium/webdriver/edge/options.rb +80 -0
  78. data/lib/selenium/webdriver/edge/service.rb +23 -95
  79. data/lib/selenium/webdriver/edge.rb +13 -13
  80. data/lib/selenium/webdriver/firefox/binary.rb +45 -60
  81. data/lib/selenium/webdriver/firefox/driver.rb +50 -0
  82. data/lib/selenium/webdriver/firefox/extension/prefs.json +3 -12
  83. data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
  84. data/lib/selenium/webdriver/firefox/extension.rb +20 -10
  85. data/lib/selenium/webdriver/firefox/launcher.rb +16 -22
  86. data/lib/selenium/webdriver/firefox/legacy/driver.rb +83 -0
  87. data/lib/selenium/webdriver/firefox/marionette/bridge.rb +49 -0
  88. data/lib/selenium/webdriver/firefox/marionette/driver.rb +90 -0
  89. data/lib/selenium/webdriver/firefox/options.rb +162 -0
  90. data/lib/selenium/webdriver/firefox/profile.rb +47 -48
  91. data/lib/selenium/webdriver/firefox/profiles_ini.rb +11 -18
  92. data/lib/selenium/webdriver/firefox/service.rb +24 -95
  93. data/lib/selenium/webdriver/firefox/util.rb +2 -4
  94. data/lib/selenium/webdriver/firefox.rb +27 -12
  95. data/lib/selenium/webdriver/ie/driver.rb +85 -0
  96. data/lib/selenium/webdriver/ie/options.rb +138 -0
  97. data/lib/selenium/webdriver/ie/service.rb +54 -0
  98. data/lib/selenium/webdriver/ie.rb +12 -10
  99. data/lib/selenium/webdriver/remote/bridge.rb +100 -564
  100. data/lib/selenium/webdriver/remote/capabilities.rb +98 -100
  101. data/lib/selenium/webdriver/remote/driver.rb +51 -0
  102. data/lib/selenium/webdriver/remote/http/common.rb +34 -22
  103. data/lib/selenium/webdriver/remote/http/curb.rb +13 -14
  104. data/lib/selenium/webdriver/remote/http/default.rb +62 -43
  105. data/lib/selenium/webdriver/remote/http/persistent.rb +12 -9
  106. data/lib/selenium/webdriver/remote/oss/bridge.rb +594 -0
  107. data/lib/selenium/webdriver/remote/oss/commands.rb +223 -0
  108. data/lib/selenium/webdriver/remote/response.rb +48 -28
  109. data/lib/selenium/webdriver/remote/server_error.rb +3 -5
  110. data/lib/selenium/webdriver/remote/w3c/bridge.rb +605 -0
  111. data/lib/selenium/webdriver/remote/w3c/capabilities.rb +310 -0
  112. data/lib/selenium/webdriver/remote/w3c/commands.rb +157 -0
  113. data/lib/selenium/webdriver/remote.rb +10 -16
  114. data/lib/selenium/webdriver/safari/bridge.rb +17 -101
  115. data/lib/selenium/webdriver/{firefox/w3c_bridge.rb → safari/driver.rb} +27 -25
  116. data/lib/selenium/webdriver/safari/options.rb +29 -31
  117. data/lib/selenium/webdriver/safari/service.rb +38 -0
  118. data/lib/selenium/webdriver/safari.rb +27 -27
  119. data/lib/selenium/webdriver/support/abstract_event_listener.rb +19 -4
  120. data/lib/selenium/webdriver/support/block_event_listener.rb +3 -5
  121. data/lib/selenium/webdriver/support/color.rb +60 -43
  122. data/lib/selenium/webdriver/support/escaper.rb +43 -0
  123. data/lib/selenium/webdriver/support/event_firing_bridge.rb +39 -41
  124. data/lib/selenium/webdriver/support/select.rb +45 -97
  125. data/lib/selenium/webdriver/support.rb +3 -2
  126. data/lib/selenium/webdriver/{iphone.rb → version.rb} +3 -7
  127. data/lib/selenium/webdriver.rb +36 -23
  128. data/lib/selenium-webdriver.rb +2 -2
  129. data/selenium-webdriver.gemspec +42 -29
  130. metadata +331 -262
  131. data/lib/selenium/client/base.rb +0 -151
  132. data/lib/selenium/client/driver.rb +0 -29
  133. data/lib/selenium/client/errors.rb +0 -28
  134. data/lib/selenium/client/extensions.rb +0 -132
  135. data/lib/selenium/client/idiomatic.rb +0 -507
  136. data/lib/selenium/client/javascript_expression_builder.rb +0 -135
  137. data/lib/selenium/client/javascript_frameworks/jquery.rb +0 -32
  138. data/lib/selenium/client/javascript_frameworks/prototype.rb +0 -32
  139. data/lib/selenium/client/legacy_driver.rb +0 -1722
  140. data/lib/selenium/client/protocol.rb +0 -123
  141. data/lib/selenium/client/selenium_helper.rb +0 -49
  142. data/lib/selenium/client.rb +0 -57
  143. data/lib/selenium/rake/server_task.rb +0 -176
  144. data/lib/selenium/webdriver/android/bridge.rb +0 -68
  145. data/lib/selenium/webdriver/common/core_ext/base64.rb +0 -28
  146. data/lib/selenium/webdriver/common/core_ext/dir.rb +0 -61
  147. data/lib/selenium/webdriver/common/html5/location.rb +0 -19
  148. data/lib/selenium/webdriver/common/w3c_error.rb +0 -194
  149. data/lib/selenium/webdriver/edge/legacy_support.rb +0 -117
  150. data/lib/selenium/webdriver/firefox/bridge.rb +0 -89
  151. data/lib/selenium/webdriver/ie/bridge.rb +0 -88
  152. data/lib/selenium/webdriver/ie/server.rb +0 -133
  153. data/lib/selenium/webdriver/iphone/bridge.rb +0 -64
  154. data/lib/selenium/webdriver/phantomjs/bridge.rb +0 -78
  155. data/lib/selenium/webdriver/phantomjs/service.rb +0 -130
  156. data/lib/selenium/webdriver/remote/commands.rb +0 -211
  157. data/lib/selenium/webdriver/remote/w3c_bridge.rb +0 -668
  158. data/lib/selenium/webdriver/remote/w3c_capabilities.rb +0 -236
  159. data/lib/selenium/webdriver/remote/w3c_commands.rb +0 -132
  160. data/lib/selenium/webdriver/safari/resources/client.js +0 -7255
  161. data/lib/selenium/webdriver/safari/server.rb +0 -187
  162. data/lib/selenium-client.rb +0 -21
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
4
  # or more contributor license agreements. See the NOTICE file
5
5
  # distributed with this work for additional information
@@ -19,14 +19,12 @@
19
19
 
20
20
  module Selenium
21
21
  module WebDriver
22
-
23
22
  #
24
23
  # @api private
25
24
  #
26
25
 
27
26
  module DriverExtensions
28
27
  module HasWebStorage
29
-
30
28
  def local_storage
31
29
  HTML5::LocalStorage.new @bridge
32
30
  end
@@ -34,7 +32,6 @@ module Selenium
34
32
  def session_storage
35
33
  HTML5::SessionStorage.new @bridge
36
34
  end
37
-
38
35
  end # HasWebStorage
39
36
  end # DriverExtensions
40
37
  end # WebDriver
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
4
  # or more contributor license agreements. See the NOTICE file
5
5
  # distributed with this work for additional information
@@ -19,20 +19,18 @@
19
19
 
20
20
  module Selenium
21
21
  module WebDriver
22
-
23
22
  #
24
23
  # @api private
25
24
  #
26
25
 
27
26
  module DriverExtensions
28
27
  module Rotatable
29
-
30
- ORIENTATIONS = [:landscape, :portrait]
28
+ ORIENTATIONS = %i[landscape portrait].freeze
31
29
 
32
30
  #
33
31
  # Change the screen orientation
34
32
  #
35
- # @param [:landscape, :portrait] Orientation
33
+ # @param [:landscape, :portrait] orientation
36
34
  #
37
35
  # @api public
38
36
  #
@@ -42,7 +40,7 @@ module Selenium
42
40
  raise ArgumentError, "expected #{ORIENTATIONS.inspect}, got #{orientation.inspect}"
43
41
  end
44
42
 
45
- bridge.setScreenOrientation(orientation.to_s.upcase)
43
+ bridge.screen_orientation = orientation.to_s.upcase
46
44
  end
47
45
  alias_method :rotate, :rotation=
48
46
 
@@ -55,9 +53,8 @@ module Selenium
55
53
  #
56
54
 
57
55
  def orientation
58
- bridge.getScreenOrientation.to_sym.downcase
56
+ bridge.screen_orientation.to_sym.downcase
59
57
  end
60
-
61
58
  end # Rotatable
62
59
  end # DriverExtensions
63
60
  end # WebDriver
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
4
  # or more contributor license agreements. See the NOTICE file
5
5
  # distributed with this work for additional information
@@ -19,14 +19,12 @@
19
19
 
20
20
  module Selenium
21
21
  module WebDriver
22
-
23
22
  #
24
23
  # @api private
25
24
  #
26
25
 
27
26
  module DriverExtensions
28
27
  module TakesScreenshot
29
-
30
28
  #
31
29
  # Save a PNG screenshot to the given path
32
30
  #
@@ -34,6 +32,11 @@ module Selenium
34
32
  #
35
33
 
36
34
  def save_screenshot(png_path)
35
+ extension = File.extname(png_path).downcase
36
+ if extension != '.png'
37
+ WebDriver.logger.warn "name used for saved screenshot does not match file type. "\
38
+ "It should end with .png extension"
39
+ end
37
40
  File.open(png_path, 'wb') { |f| f << screenshot_as(:png) }
38
41
  end
39
42
 
@@ -48,14 +51,13 @@ module Selenium
48
51
  def screenshot_as(format)
49
52
  case format
50
53
  when :base64
51
- bridge.getScreenshot
54
+ bridge.screenshot
52
55
  when :png
53
- bridge.getScreenshot.unpack("m")[0]
56
+ bridge.screenshot.unpack('m')[0]
54
57
  else
55
58
  raise Error::UnsupportedOperationError, "unsupported format: #{format.inspect}"
56
59
  end
57
60
  end
58
-
59
61
  end # TakesScreenshot
60
62
  end # DriverExtensions
61
63
  end # WebDriver
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
4
  # or more contributor license agreements. See the NOTICE file
5
5
  # distributed with this work for additional information
@@ -19,14 +19,12 @@
19
19
 
20
20
  module Selenium
21
21
  module WebDriver
22
-
23
22
  #
24
23
  # @api private
25
24
  #
26
25
 
27
26
  module DriverExtensions
28
27
  module UploadsFiles
29
-
30
28
  #
31
29
  # Set the file detector to pass local files to a remote WebDriver.
32
30
  #
@@ -52,13 +50,10 @@ module Selenium
52
50
  #
53
51
 
54
52
  def file_detector=(detector)
55
- unless detector.nil? or detector.respond_to? :call
56
- raise ArgumentError, "detector must respond to #call"
57
- end
53
+ raise ArgumentError, 'detector must respond to #call' unless detector.nil? || detector.respond_to?(:call)
58
54
 
59
55
  bridge.file_detector = detector
60
56
  end
61
-
62
57
  end # UploadsFiles
63
58
  end # DriverExtensions
64
59
  end # WebDriver
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
4
  # or more contributor license agreements. See the NOTICE file
5
5
  # distributed with this work for additional information
@@ -29,15 +29,16 @@ module Selenium
29
29
  #
30
30
 
31
31
  def initialize(bridge, id)
32
- @bridge, @id = bridge, id
32
+ @bridge = bridge
33
+ @id = id
33
34
  end
34
35
 
35
36
  def inspect
36
- '#<%s:0x%x id=%s>' % [self.class, hash*2, @id.inspect]
37
+ format '#<%<class>s:0x%<hash>x id=%<id>s>', class: self.class, hash: hash * 2, id: @id.inspect
37
38
  end
38
39
 
39
40
  def ==(other)
40
- other.kind_of?(self.class) && ref == other.ref
41
+ other.is_a?(self.class) && ref == other.ref
41
42
  end
42
43
  alias_method :eql?, :==
43
44
 
@@ -63,14 +64,14 @@ module Selenium
63
64
  #
64
65
  # @example Click on a button
65
66
  #
66
- # driver.find_element(:tag_name, "button").click
67
+ # driver.find_element(tag_name: "button").click
67
68
  #
68
69
  # @raise [StaleElementReferenceError] if the element no longer exists as
69
70
  # defined
70
71
  #
71
72
 
72
73
  def click
73
- bridge.clickElement @id
74
+ bridge.click_element @id
74
75
  end
75
76
 
76
77
  #
@@ -78,13 +79,13 @@ module Selenium
78
79
  #
79
80
  # @example Get the tagname of an INPUT element(returns "input")
80
81
  #
81
- # driver.find_element(:xpath, "//input").tag_name
82
+ # driver.find_element(xpath: "//input").tag_name
82
83
  #
83
84
  # @return [String] The tag name of this element.
84
85
  #
85
86
 
86
87
  def tag_name
87
- bridge.getElementTagName @id
88
+ bridge.element_tag_name @id
88
89
  end
89
90
 
90
91
  #
@@ -107,14 +108,24 @@ module Selenium
107
108
  #
108
109
  # class, readonly
109
110
  #
110
- # @param [String]
111
- # attribute name
112
- # @return [String,nil]
113
- # attribute value
111
+ # @param [String] name attribute name
112
+ # @return [String, nil] attribute value
114
113
  #
115
114
 
116
115
  def attribute(name)
117
- bridge.getElementAttribute @id, name
116
+ bridge.element_attribute self, name
117
+ end
118
+
119
+ #
120
+ # Get the value of a the given property with the same name of the element. If the value is not
121
+ # set, nil is returned.
122
+ #
123
+ # @param [String] name property name
124
+ # @return [String, nil] property value
125
+ #
126
+
127
+ def property(name)
128
+ bridge.element_property self, name
118
129
  end
119
130
 
120
131
  #
@@ -124,13 +135,13 @@ module Selenium
124
135
  #
125
136
 
126
137
  def text
127
- bridge.getElementText @id
138
+ bridge.element_text @id
128
139
  end
129
140
 
130
141
  #
131
142
  # Send keystrokes to this element
132
143
  #
133
- # @param [String, Symbol, Array]
144
+ # @param [String, Symbol, Array] args keystrokes to send
134
145
  #
135
146
  # Examples:
136
147
  #
@@ -142,7 +153,7 @@ module Selenium
142
153
  #
143
154
 
144
155
  def send_keys(*args)
145
- bridge.sendKeysToElement @id, Keys.encode(args)
156
+ bridge.send_keys_to_element @id, Keys.encode(args)
146
157
  end
147
158
  alias_method :send_key, :send_keys
148
159
 
@@ -157,7 +168,7 @@ module Selenium
157
168
  #
158
169
 
159
170
  def clear
160
- bridge.clearElement @id
171
+ bridge.clear_element @id
161
172
  end
162
173
 
163
174
  #
@@ -167,7 +178,7 @@ module Selenium
167
178
  #
168
179
 
169
180
  def enabled?
170
- bridge.isElementEnabled @id
181
+ bridge.element_enabled? @id
171
182
  end
172
183
 
173
184
  #
@@ -177,7 +188,7 @@ module Selenium
177
188
  #
178
189
 
179
190
  def selected?
180
- bridge.isElementSelected @id
191
+ bridge.element_selected? @id
181
192
  end
182
193
 
183
194
  #
@@ -187,7 +198,7 @@ module Selenium
187
198
  #
188
199
 
189
200
  def displayed?
190
- bridge.isElementDisplayed @id
201
+ bridge.element_displayed? self
191
202
  end
192
203
 
193
204
  #
@@ -195,7 +206,7 @@ module Selenium
195
206
  #
196
207
 
197
208
  def submit
198
- bridge.submitElement @id
209
+ bridge.submit_element @id
199
210
  end
200
211
 
201
212
  #
@@ -210,7 +221,7 @@ module Selenium
210
221
  #
211
222
 
212
223
  def css_value(prop)
213
- bridge.getElementValueOfCssProperty @id, prop
224
+ bridge.element_value_of_css_property @id, prop
214
225
  end
215
226
  alias_method :style, :css_value
216
227
 
@@ -221,7 +232,17 @@ module Selenium
221
232
  #
222
233
 
223
234
  def location
224
- bridge.getElementLocation @id
235
+ bridge.element_location @id
236
+ end
237
+
238
+ #
239
+ # Get the dimensions and coordinates of this element.
240
+ #
241
+ # @return [WebDriver::Rectangle]
242
+ #
243
+
244
+ def rect
245
+ bridge.element_rect @id
225
246
  end
226
247
 
227
248
  #
@@ -231,7 +252,7 @@ module Selenium
231
252
  #
232
253
 
233
254
  def location_once_scrolled_into_view
234
- bridge.getElementLocationOnceScrolledIntoView @id
255
+ bridge.element_location_once_scrolled_into_view @id
235
256
  end
236
257
 
237
258
  #
@@ -241,19 +262,19 @@ module Selenium
241
262
  #
242
263
 
243
264
  def size
244
- bridge.getElementSize @id
265
+ bridge.element_size @id
245
266
  end
246
267
 
247
268
  #-------------------------------- sugar --------------------------------
248
269
 
249
270
  #
250
- # element.first(:id, 'foo')
271
+ # element.first(id: 'foo')
251
272
  #
252
273
 
253
274
  alias_method :first, :find_element
254
275
 
255
276
  #
256
- # element.all(:class, 'bar')
277
+ # element.all(class: 'bar')
257
278
  #
258
279
 
259
280
  alias_method :all, :find_elements
@@ -280,7 +301,7 @@ module Selenium
280
301
  # @api private
281
302
  #
282
303
 
283
- def to_json(*args)
304
+ def to_json(*)
284
305
  JSON.generate as_json
285
306
  end
286
307
 
@@ -290,26 +311,25 @@ module Selenium
290
311
  # @api private
291
312
  #
292
313
 
293
- def as_json(opts = nil)
294
- {
295
- :ELEMENT => @id,
296
- "element-6066-11e4-a52e-4f735466cecf" => @id
297
- }
314
+ def as_json(*)
315
+ key = if bridge.dialect == :w3c
316
+ 'element-6066-11e4-a52e-4f735466cecf'
317
+ else
318
+ 'ELEMENT'
319
+ end
320
+ @id.is_a?(Hash) ? @id : {key => @id}
298
321
  end
299
322
 
300
323
  private
301
324
 
302
- def bridge
303
- @bridge
304
- end
325
+ attr_reader :bridge
305
326
 
306
327
  def selectable?
307
328
  tn = tag_name.downcase
308
329
  type = attribute(:type).to_s.downcase
309
330
 
310
- tn == "option" || (tn == "input" && %w[radio checkbox].include?(type))
331
+ tn == 'option' || (tn == 'input' && %w[radio checkbox].include?(type))
311
332
  end
312
-
313
333
  end # Element
314
334
  end # WebDriver
315
335
  end # Selenium