selenium-webdriver 2.53.3 → 3.142.7

Sign up to get free protection for your applications and to get access to all the features.
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,120 +19,146 @@
19
19
 
20
20
  module Selenium
21
21
  module WebDriver
22
- module Error
22
+ module Error # rubocop:disable Metrics/ModuleLength
23
+
24
+ #
25
+ # Returns exception from code (Integer - OSS, String - W3C).
26
+ # @param [Integer, String, nil] code
27
+ #
28
+
29
+ def self.for_code(code)
30
+ case code
31
+ when nil, 0
32
+ nil
33
+ when Integer
34
+ Object.const_get(ERRORS.fetch(code).to_s)
35
+ when String
36
+ klass_name = code.split(' ').map(&:capitalize).join.sub(/Error$/, '')
37
+ const_get("#{klass_name}Error", false)
38
+ end
39
+ rescue KeyError, NameError
40
+ WebDriverError
41
+ end
23
42
 
24
43
  class WebDriverError < StandardError; end
25
- class UnsupportedOperationError < WebDriverError; end
26
44
 
27
- class IndexOutOfBoundsError < WebDriverError; end # 1
28
- class NoCollectionError < WebDriverError; end # 2
29
- class NoStringError < WebDriverError; end # 3
30
- class NoStringLengthError < WebDriverError; end # 4
31
- class NoStringWrapperError < WebDriverError; end # 5
32
- class NoSuchDriverError < WebDriverError; end # 6
45
+ class IndexOutOfBoundsError < WebDriverError; end # 1
46
+ class NoCollectionError < WebDriverError; end # 2
47
+ class NoStringError < WebDriverError; end # 3
48
+ class NoStringLengthError < WebDriverError; end # 4
49
+ class NoStringWrapperError < WebDriverError; end # 5
50
+ class NoSuchDriverError < WebDriverError; end # 6
33
51
 
34
52
  #
35
- # An element could not be located on the page using the given search
36
- # parameters.
53
+ # An element could not be located on the page using the given search parameters.
37
54
  #
38
55
 
39
- class NoSuchElementError < WebDriverError; end # 7
56
+ class NoSuchElementError < WebDriverError; end # 7
40
57
 
41
58
  #
42
- # A request to switch to a frame could not be satisfied because the
43
- # frame could not be found.
59
+ # A command to switch to a frame could not be satisfied because the frame could not be found.
44
60
  #
45
61
 
46
- class NoSuchFrameError < WebDriverError; end # 8
47
- class UnknownCommandError < WebDriverError; end # 9
62
+ class NoSuchFrameError < WebDriverError; end # 8
48
63
 
64
+ #
65
+ # A command could not be executed because the remote end is not aware of it.
66
+ #
67
+
68
+ class UnknownCommandError < WebDriverError; end # 9
49
69
 
50
70
  #
51
- # Indicates that a reference to an element is now "stale" - the element
52
- # no longer appears in the DOM of the page.
71
+ # A command failed because the referenced element is no longer attached to the DOM.
53
72
  #
54
73
 
55
- class StaleElementReferenceError < WebDriverError; end # 10
74
+ class StaleElementReferenceError < WebDriverError; end # 10
56
75
 
57
76
  #
58
- # Raised to indicate that although an element is present on the DOM,
59
- # it is not visible, and so is not able to be interacted with.
77
+ # Raised to indicate that although an element is present on the DOM, it is not visible, and
78
+ # so is not able to be interacted with.
60
79
  #
61
80
 
62
- class ElementNotVisibleError < WebDriverError; end # 11
81
+ class ElementNotVisibleError < WebDriverError; end # 11
63
82
 
64
83
  #
65
- # Raised when an interaction could not be performed because the element
66
- # is in an invalid state (e.g. attempting to click a disabled element).
84
+ # The target element is in an invalid state, rendering it impossible to interact with, for
85
+ # example if you click a disabled element.
67
86
  #
68
87
 
69
- class InvalidElementStateError < WebDriverError; end # 12
88
+ class InvalidElementStateError < WebDriverError; end # 12
70
89
 
71
90
  #
72
- # An unknown server-side error occurred while processing the command.
91
+ # An unknown error occurred in the remote end while processing the command.
73
92
  #
74
93
 
75
- class UnknownError < WebDriverError; end # 13
76
- class ExpectedError < WebDriverError; end # 14
94
+ class UnknownError < WebDriverError; end # 13
95
+ class ExpectedError < WebDriverError; end # 14
77
96
 
78
97
  #
79
98
  # An attempt was made to select an element that cannot be selected.
80
99
  #
81
100
 
82
- class ElementNotSelectableError < WebDriverError; end # 15
83
- class NoSuchDocumentError < WebDriverError; end # 16
101
+ class ElementNotSelectableError < WebDriverError; end # 15
102
+ class NoSuchDocumentError < WebDriverError; end # 16
84
103
 
85
104
  #
86
- # An error occurred while executing user supplied JavaScript.
105
+ # An error occurred while executing JavaScript supplied by the user.
87
106
  #
88
107
 
89
- class JavascriptError < WebDriverError; end # 17
90
- class NoScriptResultError < WebDriverError; end # 18
108
+ class JavascriptError < WebDriverError; end # 17
109
+ class NoScriptResultError < WebDriverError; end # 18
91
110
 
92
111
  #
93
112
  # An error occurred while searching for an element by XPath.
94
113
  #
95
114
 
96
- class XPathLookupError < WebDriverError; end # 19
97
- class NoSuchCollectionError < WebDriverError; end # 20
115
+ class XPathLookupError < WebDriverError; end # 19
116
+ class NoSuchCollectionError < WebDriverError; end # 20
98
117
 
99
118
  #
100
- # Raised when a command does not complete in enough time.
119
+ # An operation did not complete before its timeout expired.
101
120
  #
102
121
 
103
- class TimeOutError < WebDriverError; end # 21
104
- class NullPointerError < WebDriverError; end # 22
105
- class NoSuchWindowError < WebDriverError; end # 23
122
+ class TimeOutError < WebDriverError; end # 21
123
+
124
+ class NullPointerError < WebDriverError; end # 22
125
+ class NoSuchWindowError < WebDriverError; end # 23
106
126
 
107
127
  #
108
- # Raised when attempting to add a cookie under a different domain than
109
- # the current URL.
128
+ # An illegal attempt was made to set a cookie under a different domain than the current page.
110
129
  #
111
130
 
112
- class InvalidCookieDomainError < WebDriverError; end # 24
131
+ class InvalidCookieDomainError < WebDriverError; end # 24
113
132
 
114
133
  #
115
- # Raised when a driver fails to set a cookie.
134
+ # A command to set a cookie's value could not be satisfied.
116
135
  #
117
136
 
118
- class UnableToSetCookieError < WebDriverError; end # 25
137
+ class UnableToSetCookieError < WebDriverError; end # 25
119
138
 
120
139
  #
121
140
  # Raised when an alert dialog is present that has not been dealt with.
122
141
  #
123
- class UnhandledAlertError < WebDriverError; end # 26
142
+ class UnhandledAlertError < WebDriverError; end # 26
124
143
 
125
144
  #
126
- # Indicates that a user has tried to access an alert when one is not present.
145
+ # An attempt was made to operate on a modal dialog when one was not open:
146
+ #
147
+ # * W3C dialect is NoSuchAlertError
148
+ # * OSS dialect is NoAlertPresentError
149
+ #
150
+ # We want to allow clients to rescue NoSuchAlertError as a superclass for
151
+ # dialect-agnostic implementation, so NoAlertPresentError should inherit from it.
127
152
  #
128
153
 
129
- class NoAlertPresentError < WebDriverError; end # 27
154
+ class NoSuchAlertError < WebDriverError; end
155
+ class NoAlertPresentError < NoSuchAlertError; end # 27
130
156
 
131
157
  #
132
158
  # A script did not complete before its timeout expired.
133
159
  #
134
160
 
135
- class ScriptTimeOutError < WebDriverError; end # 28
161
+ class ScriptTimeOutError < WebDriverError; end # 28
136
162
 
137
163
  #
138
164
  # The coordinates provided to an interactions operation are invalid.
@@ -141,12 +167,11 @@ module Selenium
141
167
  class InvalidElementCoordinatesError < WebDriverError; end # 29
142
168
 
143
169
  #
144
- # Indicates that IME support is not available. This exception is rasied
145
- # for every IME-related method call if IME support is not available on
146
- # the machine.
170
+ # Indicates that IME support is not available. This exception is rasied for every IME-related
171
+ # method call if IME support is not available on the machine.
147
172
  #
148
173
 
149
- class IMENotAvailableError < WebDriverError; end # 30
174
+ class IMENotAvailableError < WebDriverError; end # 30
150
175
 
151
176
  #
152
177
  # Indicates that activating an IME engine has failed.
@@ -155,70 +180,200 @@ module Selenium
155
180
  class IMEEngineActivationFailedError < WebDriverError; end # 31
156
181
 
157
182
  #
158
- # Argument was an invalid selector (e.g. XPath/CSS).
183
+ # Argument was an invalid selector.
159
184
  #
160
185
 
161
- class InvalidSelectorError < WebDriverError; end # 32
186
+ class InvalidSelectorError < WebDriverError; end # 32
162
187
 
163
188
  #
164
189
  # A new session could not be created.
165
190
  #
166
191
 
167
- class SessionNotCreatedError < WebDriverError; end # 33
192
+ class SessionNotCreatedError < WebDriverError; end # 33
193
+
194
+ #
195
+ # The target for mouse interaction is not in the browser's viewport and cannot be brought
196
+ # into that viewport.
197
+ #
198
+
199
+ class MoveTargetOutOfBoundsError < WebDriverError; end # 34
168
200
 
169
201
  #
170
- # Indicates that the target provided to the actions #move method is
171
- # invalid, e.g. outside of the bounds of the window.
202
+ # Indicates that the XPath selector is invalid
172
203
  #
173
204
 
174
- class MoveTargetOutOfBoundsError < WebDriverError; end # 34
205
+ class InvalidXpathSelectorError < WebDriverError; end
206
+ class InvalidXpathSelectorReturnTyperError < WebDriverError; end
207
+
208
+ #
209
+ # A command could not be completed because the element is not pointer or keyboard
210
+ # interactable.
211
+ #
212
+
213
+ class ElementNotInteractableError < WebDriverError; end
214
+
215
+ #
216
+ # A command could not be completed because TLS certificate is expired
217
+ # or invalid.
218
+ #
219
+
220
+ class InsecureCertificateError < WebDriverError; end
221
+
222
+ #
223
+ # The arguments passed to a command are either invalid or malformed.
224
+ #
225
+
226
+ class InvalidArgumentError < WebDriverError; end
227
+
228
+ #
229
+ # No cookie matching the given path name was found amongst the associated cookies of the
230
+ # current browsing context's active document.
231
+ #
175
232
 
233
+ class NoSuchCookieError < WebDriverError; end
234
+
235
+ #
236
+ # A screen capture was made impossible.
237
+ #
238
+
239
+ class UnableToCaptureScreenError < WebDriverError; end
240
+
241
+ #
242
+ # Occurs if the given session id is not in the list of active sessions, meaning the session
243
+ # either does not exist or that it's not active.
244
+ #
245
+
246
+ class InvalidSessionIdError < WebDriverError; end
247
+
248
+ #
249
+ # A modal dialog was open, blocking this operation.
250
+ #
251
+
252
+ class UnexpectedAlertOpenError < WebDriverError; end
253
+
254
+ #
255
+ # The requested command matched a known URL but did not match an method for that URL.
256
+ #
257
+
258
+ class UnknownMethodError < WebDriverError; end
259
+
260
+ #
261
+ # The Element Click command could not be completed because the element receiving the events
262
+ # is obscuring the element that was requested clicked.
263
+ #
264
+
265
+ class ElementClickInterceptedError < WebDriverError; end
266
+
267
+ #
268
+ # Indicates that a command that should have executed properly cannot be supported for some
269
+ # reason.
270
+ #
271
+
272
+ class UnsupportedOperationError < WebDriverError; end
273
+
274
+ # Aliases for OSS dialect.
275
+ ScriptTimeoutError = Class.new(ScriptTimeOutError)
276
+ TimeoutError = Class.new(TimeOutError)
277
+ NoAlertOpenError = Class.new(NoAlertPresentError)
278
+
279
+ # Aliases for backwards compatibility.
280
+ ObsoleteElementError = Class.new(StaleElementReferenceError)
281
+ UnhandledError = Class.new(UnknownError)
282
+ UnexpectedJavascriptError = Class.new(JavascriptError)
283
+ ElementNotDisplayedError = Class.new(ElementNotVisibleError)
284
+
285
+ #
176
286
  # @api private
177
- Errors = [
178
- IndexOutOfBoundsError, # 1
179
- NoCollectionError, # 2
180
- NoStringError, # 3
181
- NoStringLengthError, # 4
182
- NoStringWrapperError, # 5
183
- NoSuchDriverError, # 6
184
- NoSuchElementError, # 7
185
- NoSuchFrameError, # 8
186
- UnknownCommandError, # 9
187
- StaleElementReferenceError, # 10
188
- ElementNotVisibleError, # 11
189
- InvalidElementStateError, # 12
190
- UnknownError, # 13
191
- ExpectedError, # 14
192
- ElementNotSelectableError, # 15
193
- NoSuchDocumentError, # 16
194
- JavascriptError, # 17
195
- NoScriptResultError, # 18
196
- XPathLookupError, # 19
197
- NoSuchCollectionError, # 20
198
- TimeOutError, # 21
199
- NullPointerError, # 22
200
- NoSuchWindowError, # 23
201
- InvalidCookieDomainError, # 24
202
- UnableToSetCookieError, # 25
203
- UnhandledAlertError, # 26
204
- NoAlertPresentError, # 27
205
- ScriptTimeOutError, # 28
206
- InvalidElementCoordinatesError, # 29
207
- IMENotAvailableError, # 30
208
- IMEEngineActivationFailedError, # 31
209
- InvalidSelectorError, # 32
210
- SessionNotCreatedError, # 33
211
- MoveTargetOutOfBoundsError # 34
212
- ]
213
-
214
- class << self
215
- def for_code(code)
216
- return if [nil, 0].include? code
217
- return Errors[code - 1] if code.is_a? Fixnum
218
-
219
- klass_name = code.split(' ').map(&:capitalize).join
220
- Error.const_get("#{klass_name.gsub('Error','')}Error")
221
- rescue NameError
287
+ #
288
+
289
+ ERRORS = {
290
+ 1 => IndexOutOfBoundsError,
291
+ 2 => NoCollectionError,
292
+ 3 => NoStringError,
293
+ 4 => NoStringLengthError,
294
+ 5 => NoStringWrapperError,
295
+ 6 => NoSuchDriverError,
296
+ 7 => NoSuchElementError,
297
+ 8 => NoSuchFrameError,
298
+ 9 => UnknownCommandError,
299
+ 10 => StaleElementReferenceError,
300
+ 11 => ElementNotVisibleError,
301
+ 12 => InvalidElementStateError,
302
+ 13 => UnknownError,
303
+ 14 => ExpectedError,
304
+ 15 => ElementNotSelectableError,
305
+ 16 => NoSuchDocumentError,
306
+ 17 => JavascriptError,
307
+ 18 => NoScriptResultError,
308
+ 19 => XPathLookupError,
309
+ 20 => NoSuchCollectionError,
310
+ 21 => TimeOutError,
311
+ 22 => NullPointerError,
312
+ 23 => NoSuchWindowError,
313
+ 24 => InvalidCookieDomainError,
314
+ 25 => UnableToSetCookieError,
315
+ 26 => UnhandledAlertError,
316
+ 27 => NoAlertPresentError,
317
+ 28 => ScriptTimeOutError,
318
+ 29 => InvalidElementCoordinatesError,
319
+ 30 => IMENotAvailableError,
320
+ 31 => IMEEngineActivationFailedError,
321
+ 32 => InvalidSelectorError,
322
+ 33 => SessionNotCreatedError,
323
+ 34 => MoveTargetOutOfBoundsError,
324
+ # The following are W3C-specific errors,
325
+ # they don't really need error codes, we just make them up!
326
+ 51 => InvalidXpathSelectorError,
327
+ 52 => InvalidXpathSelectorReturnTyperError,
328
+ 60 => ElementNotInteractableError,
329
+ 61 => InvalidArgumentError,
330
+ 62 => NoSuchCookieError,
331
+ 63 => UnableToCaptureScreenError
332
+ }.freeze
333
+
334
+ DEPRECATED_ERRORS = {
335
+ IndexOutOfBoundsError: nil,
336
+ NoCollectionError: nil,
337
+ NoStringError: nil,
338
+ NoStringLengthError: nil,
339
+ NoStringWrapperError: nil,
340
+ NoSuchDriverError: nil,
341
+ ElementNotVisibleError: ElementNotInteractableError,
342
+ InvalidElementStateError: ElementNotInteractableError,
343
+ ElementNotSelectableError: ElementNotInteractableError,
344
+ ExpectedError: nil,
345
+ NoSuchDocumentError: nil,
346
+ NoScriptResultError: nil,
347
+ XPathLookupError: InvalidSelectorError,
348
+ NoSuchCollectionError: nil,
349
+ UnhandledAlertError: UnexpectedAlertOpenError,
350
+ NoAlertPresentError: NoSuchAlertError,
351
+ NoAlertOpenError: NoSuchAlertError,
352
+ ScriptTimeOutError: ScriptTimeoutError,
353
+ InvalidElementCoordinatesError: nil,
354
+ IMENotAvailableError: nil,
355
+ IMEEngineActivationFailedError: nil,
356
+ InvalidXpathSelectorError: InvalidSelectorError,
357
+ InvalidXpathSelectorReturnTyperError: InvalidSelectorError,
358
+ TimeOutError: TimeoutError,
359
+ ObsoleteElementError: StaleElementReferenceError,
360
+ UnhandledError: UnknownError,
361
+ UnexpectedJavascriptError: JavascriptError,
362
+ ElementNotDisplayedError: ElementNotInteractableError
363
+ }.freeze
364
+
365
+ DEPRECATED_ERRORS.keys.each do |oss_error|
366
+ remove_const oss_error
367
+ end
368
+
369
+ def self.const_missing(const_name)
370
+ super unless DEPRECATED_ERRORS.key?(const_name)
371
+ if DEPRECATED_ERRORS[const_name]
372
+ WebDriver.logger.deprecate("Selenium::WebDriver::Error::#{const_name}",
373
+ "#{DEPRECATED_ERRORS[const_name]} (ensure the driver supports W3C WebDriver specification)")
374
+ DEPRECATED_ERRORS[const_name]
375
+ else
376
+ WebDriver.logger.deprecate("Selenium::WebDriver::Error::#{const_name}")
222
377
  WebDriverError
223
378
  end
224
379
  end
@@ -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,21 +19,16 @@
19
19
 
20
20
  module Selenium
21
21
  module WebDriver
22
-
23
22
  #
24
23
  # @api private
25
24
  #
26
25
 
27
26
  module FileReaper
28
-
29
27
  class << self
30
- def reap=(bool)
31
- @reap = bool
32
- end
28
+ attr_writer :reap
33
29
 
34
30
  def reap?
35
- @reap = true unless defined?(@reap)
36
- !!@reap
31
+ @reap = defined?(@reap) ? @reap : true
37
32
  end
38
33
 
39
34
  def tmp_files
@@ -48,9 +43,7 @@ module Selenium
48
43
  def reap(file)
49
44
  return unless reap?
50
45
 
51
- unless tmp_files.include?(file)
52
- raise Error::WebDriverError, "file not added for reaping: #{file.inspect}"
53
- end
46
+ raise Error::WebDriverError, "file not added for reaping: #{file.inspect}" unless tmp_files.include?(file)
54
47
 
55
48
  FileUtils.rm_rf tmp_files.delete(file)
56
49
  end
@@ -67,7 +60,6 @@ module Selenium
67
60
 
68
61
  # we *do* want child process reaping, so not using Platform.exit_hook here.
69
62
  at_exit { reap! }
70
-
71
63
  end # FileReaper
72
64
  end # WebDriver
73
- end # Selenium
65
+ end # Selenium
@@ -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
@@ -20,7 +20,6 @@
20
20
  module Selenium
21
21
  module WebDriver
22
22
  module HTML5
23
-
24
23
  class LocalStorage
25
24
  include SharedWebStorage
26
25
 
@@ -32,29 +31,28 @@ module Selenium
32
31
  end
33
32
 
34
33
  def [](key)
35
- @bridge.getLocalStorageItem key
34
+ @bridge.local_storage_item key
36
35
  end
37
36
 
38
37
  def []=(key, value)
39
- @bridge.setLocalStorageItem key, value
38
+ @bridge.local_storage_item key, value
40
39
  end
41
40
 
42
41
  def delete(key)
43
- @bridge.removeLocalStorageItem key
42
+ @bridge.remove_local_storage_item key
44
43
  end
45
44
 
46
45
  def clear
47
- @bridge.clearLocalStorage
46
+ @bridge.clear_local_storage
48
47
  end
49
48
 
50
49
  def size
51
- @bridge.getLocalStorageSize
50
+ @bridge.local_storage_size
52
51
  end
53
52
 
54
53
  def keys
55
- @bridge.getLocalStorageKeys.reverse
54
+ @bridge.local_storage_keys.reverse
56
55
  end
57
-
58
56
  end # LocalStorage
59
57
  end # HTML5
60
58
  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
@@ -20,33 +20,32 @@
20
20
  module Selenium
21
21
  module WebDriver
22
22
  module HTML5
23
-
24
23
  class SessionStorage
25
24
  include Enumerable
26
25
  include SharedWebStorage
27
26
 
28
27
  def [](key)
29
- @bridge.getSessionStorageItem key
28
+ @bridge.session_storage_item key
30
29
  end
31
30
 
32
31
  def []=(key, value)
33
- @bridge.setSessionStorageItem key, value
32
+ @bridge.session_storage_item key, value
34
33
  end
35
34
 
36
35
  def delete(key)
37
- @bridge.removeSessionStorageItem key
36
+ @bridge.remove_session_storage_item key
38
37
  end
39
38
 
40
39
  def clear
41
- @bridge.clearSessionStorage
40
+ @bridge.clear_session_storage
42
41
  end
43
42
 
44
43
  def size
45
- @bridge.getSessionStorageSize
44
+ @bridge.session_storage_size
46
45
  end
47
46
 
48
47
  def keys
49
- @bridge.getSessionStorageKeys.reverse
48
+ @bridge.session_storage_keys.reverse
50
49
  end
51
50
 
52
51
  #
@@ -56,7 +55,6 @@ module Selenium
56
55
  def initialize(bridge)
57
56
  @bridge = bridge
58
57
  end
59
-
60
58
  end # SessionStorage
61
59
  end # HTML5
62
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
@@ -20,7 +20,6 @@
20
20
  module Selenium
21
21
  module WebDriver
22
22
  module HTML5
23
-
24
23
  module SharedWebStorage
25
24
  include Enumerable
26
25
 
@@ -30,31 +29,24 @@ module Selenium
30
29
  alias_method :member?, :key?
31
30
  alias_method :has_key?, :key?
32
31
 
33
- def fetch(key, &blk)
34
- if self.key? key
35
- return self[key]
36
- end
32
+ def fetch(key)
33
+ return self[key] if key? key
34
+ return yield(key) if block_given?
37
35
 
38
- if block_given?
39
- yield key
40
- else
41
- # should be KeyError, but it's 1.9-specific
42
- raise IndexError, "missing key #{key.inspect}"
43
- end
36
+ raise KeyError, "missing key #{key.inspect}"
44
37
  end
45
38
 
46
39
  def empty?
47
- size == 0
40
+ to_a.empty?
48
41
  end
49
42
 
50
- def each(&blk)
43
+ def each
51
44
  return enum_for(:each) unless block_given?
52
45
 
53
46
  keys.each do |k|
54
47
  yield k, self[k]
55
48
  end
56
49
  end
57
-
58
50
  end # SharedWebStorage
59
51
  end # HTML5
60
52
  end # WebDriver