selenium-webdriver 3.141.0 → 3.142.3
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 +125 -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/{options.rb → manager.rb} +27 -1
- data/lib/selenium/webdriver/common/mouse.rb +3 -0
- data/lib/selenium/webdriver/common/navigation.rb +2 -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 +6 -8
- data/lib/selenium/webdriver/common/service.rb +87 -29
- data/lib/selenium/webdriver/common/socket_lock.rb +10 -3
- data/lib/selenium/webdriver/common/socket_poller.rb +26 -18
- 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_options.rb → w3c_manager.rb} +3 -1
- data/lib/selenium/webdriver/common/wait.rb +13 -5
- 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 +2 -0
- 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 +20 -7
- 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 +11 -3
- 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 -23
|
@@ -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
|
|
@@ -17,7 +19,7 @@
|
|
|
17
19
|
|
|
18
20
|
module Selenium
|
|
19
21
|
module WebDriver
|
|
20
|
-
module Error
|
|
22
|
+
module Error # rubocop:disable Metrics/ModuleLength
|
|
21
23
|
|
|
22
24
|
#
|
|
23
25
|
# Returns exception from code (Integer - OSS, String - W3C).
|
|
@@ -29,7 +31,7 @@ module Selenium
|
|
|
29
31
|
when nil, 0
|
|
30
32
|
nil
|
|
31
33
|
when Integer
|
|
32
|
-
ERRORS.fetch(code)
|
|
34
|
+
Object.const_get(ERRORS.fetch(code).to_s)
|
|
33
35
|
when String
|
|
34
36
|
klass_name = code.split(' ').map(&:capitalize).join.sub(/Error$/, '')
|
|
35
37
|
const_get("#{klass_name}Error", false)
|
|
@@ -210,6 +212,13 @@ module Selenium
|
|
|
210
212
|
|
|
211
213
|
class ElementNotInteractableError < WebDriverError; end
|
|
212
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
|
+
|
|
213
222
|
#
|
|
214
223
|
# The arguments passed to a command are either invalid or malformed.
|
|
215
224
|
#
|
|
@@ -263,30 +272,30 @@ module Selenium
|
|
|
263
272
|
class UnsupportedOperationError < WebDriverError; end
|
|
264
273
|
|
|
265
274
|
# Aliases for OSS dialect.
|
|
266
|
-
ScriptTimeoutError = ScriptTimeOutError
|
|
267
|
-
TimeoutError = TimeOutError
|
|
268
|
-
NoAlertOpenError = NoAlertPresentError
|
|
275
|
+
ScriptTimeoutError = Class.new(ScriptTimeOutError)
|
|
276
|
+
TimeoutError = Class.new(TimeOutError)
|
|
277
|
+
NoAlertOpenError = Class.new(NoAlertPresentError)
|
|
269
278
|
|
|
270
279
|
# Aliases for backwards compatibility.
|
|
271
|
-
ObsoleteElementError = StaleElementReferenceError
|
|
272
|
-
UnhandledError = UnknownError
|
|
273
|
-
UnexpectedJavascriptError = JavascriptError
|
|
274
|
-
ElementNotDisplayedError = ElementNotVisibleError
|
|
280
|
+
ObsoleteElementError = Class.new(StaleElementReferenceError)
|
|
281
|
+
UnhandledError = Class.new(UnknownError)
|
|
282
|
+
UnexpectedJavascriptError = Class.new(JavascriptError)
|
|
283
|
+
ElementNotDisplayedError = Class.new(ElementNotVisibleError)
|
|
275
284
|
|
|
276
285
|
#
|
|
277
286
|
# @api private
|
|
278
287
|
#
|
|
279
288
|
|
|
280
289
|
ERRORS = {
|
|
281
|
-
1
|
|
282
|
-
2
|
|
283
|
-
3
|
|
284
|
-
4
|
|
285
|
-
5
|
|
286
|
-
6
|
|
287
|
-
7
|
|
288
|
-
8
|
|
289
|
-
9
|
|
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,
|
|
290
299
|
10 => StaleElementReferenceError,
|
|
291
300
|
11 => ElementNotVisibleError,
|
|
292
301
|
12 => InvalidElementStateError,
|
|
@@ -322,6 +331,53 @@ module Selenium
|
|
|
322
331
|
63 => UnableToCaptureScreenError
|
|
323
332
|
}.freeze
|
|
324
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}")
|
|
377
|
+
WebDriverError
|
|
378
|
+
end
|
|
379
|
+
end
|
|
380
|
+
|
|
325
381
|
end # Error
|
|
326
382
|
end # WebDriver
|
|
327
383
|
end # Selenium
|
|
@@ -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
|
|
@@ -41,9 +43,7 @@ module Selenium
|
|
|
41
43
|
def reap(file)
|
|
42
44
|
return unless reap?
|
|
43
45
|
|
|
44
|
-
unless tmp_files.include?(file)
|
|
45
|
-
raise Error::WebDriverError, "file not added for reaping: #{file.inspect}"
|
|
46
|
-
end
|
|
46
|
+
raise Error::WebDriverError, "file not added for reaping: #{file.inspect}" unless tmp_files.include?(file)
|
|
47
47
|
|
|
48
48
|
FileUtils.rm_rf tmp_files.delete(file)
|
|
49
49
|
end
|
|
@@ -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
|
|
@@ -30,6 +32,7 @@ module Selenium
|
|
|
30
32
|
def fetch(key)
|
|
31
33
|
return self[key] if key? key
|
|
32
34
|
return yield(key) if block_given?
|
|
35
|
+
|
|
33
36
|
raise KeyError, "missing key #{key.inspect}"
|
|
34
37
|
end
|
|
35
38
|
|
|
@@ -40,7 +43,7 @@ module Selenium
|
|
|
40
43
|
def each
|
|
41
44
|
return enum_for(:each) unless block_given?
|
|
42
45
|
|
|
43
|
-
keys.each do |k|
|
|
46
|
+
keys.each do |k|
|
|
44
47
|
yield k, self[k]
|
|
45
48
|
end
|
|
46
49
|
end
|
|
@@ -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
|
|
@@ -30,6 +32,7 @@ module Selenium
|
|
|
30
32
|
|
|
31
33
|
def add_action(action)
|
|
32
34
|
raise TypeError, "#{action.inspect} is not a valid action" unless action.class < Interaction
|
|
35
|
+
|
|
33
36
|
@actions << action
|
|
34
37
|
end
|
|
35
38
|
|
|
@@ -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
|
|
@@ -25,6 +27,7 @@ module Selenium
|
|
|
25
27
|
|
|
26
28
|
def initialize(source)
|
|
27
29
|
raise TypeError, "#{source.type} is not a valid input type" unless Interactions::SOURCE_TYPES.include? source.type
|
|
30
|
+
|
|
28
31
|
@source = source
|
|
29
32
|
end
|
|
30
33
|
end
|
|
@@ -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
|
|
@@ -13,7 +15,7 @@
|
|
|
13
15
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
16
|
# KIND, either express or implied. See the License for the
|
|
15
17
|
# specific language governing permissions and limitations
|
|
16
|
-
# under the License
|
|
18
|
+
# under the License.
|
|
17
19
|
|
|
18
20
|
module Selenium
|
|
19
21
|
module WebDriver
|
|
@@ -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
|
|
@@ -27,6 +29,7 @@ module Selenium
|
|
|
27
29
|
|
|
28
30
|
def encode
|
|
29
31
|
return nil if no_actions?
|
|
32
|
+
|
|
30
33
|
{type: type, id: name, actions: @actions.map(&:encode)}
|
|
31
34
|
end
|
|
32
35
|
|
|
@@ -49,6 +52,7 @@ module Selenium
|
|
|
49
52
|
|
|
50
53
|
def assert_type(type)
|
|
51
54
|
raise TypeError, "#{type.inspect} is not a valid key subtype" unless KeyInput::SUBTYPES.key? type
|
|
55
|
+
|
|
52
56
|
KeyInput::SUBTYPES[type]
|
|
53
57
|
end
|
|
54
58
|
|
|
@@ -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
|
|
@@ -25,6 +27,7 @@ module Selenium
|
|
|
25
27
|
|
|
26
28
|
def encode
|
|
27
29
|
return nil if no_actions?
|
|
30
|
+
|
|
28
31
|
{type: type, id: name, actions: @actions.map(&:encode)}
|
|
29
32
|
end
|
|
30
33
|
end # NoneInput
|
|
@@ -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
|
|
@@ -34,6 +36,7 @@ module Selenium
|
|
|
34
36
|
|
|
35
37
|
def encode
|
|
36
38
|
return nil if no_actions?
|
|
39
|
+
|
|
37
40
|
output = {type: type, id: name, actions: @actions.map(&:encode)}
|
|
38
41
|
output[:parameters] = {pointerType: kind}
|
|
39
42
|
output
|
|
@@ -41,6 +44,7 @@ module Selenium
|
|
|
41
44
|
|
|
42
45
|
def assert_kind(pointer)
|
|
43
46
|
raise TypeError, "#{pointer.inspect} is not a valid pointer type" unless KIND.key? pointer
|
|
47
|
+
|
|
44
48
|
KIND[pointer]
|
|
45
49
|
end
|
|
46
50
|
|
|
@@ -78,14 +82,17 @@ module Selenium
|
|
|
78
82
|
def assert_button(button)
|
|
79
83
|
if button.is_a? Symbol
|
|
80
84
|
raise TypeError, "#{button.inspect} is not a valid button!" unless BUTTONS.key? button
|
|
85
|
+
|
|
81
86
|
button = BUTTONS[button]
|
|
82
87
|
end
|
|
83
88
|
raise ArgumentError, 'Button number cannot be negative!' unless button >= 0
|
|
89
|
+
|
|
84
90
|
button
|
|
85
91
|
end
|
|
86
92
|
|
|
87
93
|
def assert_direction(direction)
|
|
88
94
|
raise TypeError, "#{direction.inspect} is not a valid button direction" unless DIRECTIONS.key? direction
|
|
95
|
+
|
|
89
96
|
DIRECTIONS[direction]
|
|
90
97
|
end
|
|
91
98
|
|
|
@@ -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
|
|
@@ -56,10 +58,11 @@ module Selenium
|
|
|
56
58
|
|
|
57
59
|
private
|
|
58
60
|
|
|
59
|
-
MODIFIERS = [
|
|
61
|
+
MODIFIERS = %i[control shift alt command meta].freeze
|
|
60
62
|
|
|
61
63
|
def assert_modifier(key)
|
|
62
64
|
return if MODIFIERS.include? key
|
|
65
|
+
|
|
63
66
|
raise ArgumentError, "#{key.inspect} is not a modifier key, expected one of #{MODIFIERS.inspect}"
|
|
64
67
|
end
|
|
65
68
|
end # Keyboard
|
|
@@ -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
|
|
@@ -110,6 +112,7 @@ module Selenium
|
|
|
110
112
|
|
|
111
113
|
def self.[](key)
|
|
112
114
|
return KEYS[key] if KEYS[key]
|
|
115
|
+
|
|
113
116
|
raise Error::UnsupportedOperationError, "no such key #{key.inspect}"
|
|
114
117
|
end
|
|
115
118
|
|
|
@@ -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
|
|
@@ -28,9 +30,9 @@ module Selenium
|
|
|
28
30
|
|
|
29
31
|
def as_json(*)
|
|
30
32
|
{
|
|
31
|
-
'level'
|
|
33
|
+
'level' => level,
|
|
32
34
|
'timestamp' => timestamp,
|
|
33
|
-
'message'
|
|
35
|
+
'message' => message
|
|
34
36
|
}
|
|
35
37
|
end
|
|
36
38
|
|
|
@@ -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
|
|
@@ -33,54 +35,27 @@ module Selenium
|
|
|
33
35
|
#
|
|
34
36
|
class Logger
|
|
35
37
|
extend Forwardable
|
|
36
|
-
include ::Logger::Severity
|
|
37
38
|
|
|
38
|
-
def_delegators :@logger,
|
|
39
|
+
def_delegators :@logger,
|
|
40
|
+
:close,
|
|
41
|
+
:debug, :debug?,
|
|
39
42
|
:info, :info?,
|
|
40
43
|
:warn, :warn?,
|
|
41
44
|
:error, :error?,
|
|
42
45
|
:fatal, :fatal?,
|
|
43
|
-
:level
|
|
46
|
+
:level, :level=
|
|
44
47
|
|
|
45
48
|
def initialize
|
|
46
49
|
@logger = create_logger($stdout)
|
|
47
50
|
end
|
|
48
51
|
|
|
49
|
-
def output=(io)
|
|
50
|
-
# `Logger#reopen` was added in Ruby 2.3
|
|
51
|
-
if @logger.respond_to?(:reopen)
|
|
52
|
-
@logger.reopen(io)
|
|
53
|
-
else
|
|
54
|
-
@logger = create_logger(io)
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
52
|
#
|
|
59
|
-
#
|
|
60
|
-
# Based on https://github.com/ruby/ruby/blob/ruby_2_3/lib/logger.rb#L250
|
|
53
|
+
# Changes logger output to a new IO.
|
|
61
54
|
#
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
else
|
|
67
|
-
case severity.to_s.downcase
|
|
68
|
-
when 'debug'.freeze
|
|
69
|
-
@logger.level = DEBUG
|
|
70
|
-
when 'info'.freeze
|
|
71
|
-
@logger.level = INFO
|
|
72
|
-
when 'warn'.freeze
|
|
73
|
-
@logger.level = WARN
|
|
74
|
-
when 'error'.freeze
|
|
75
|
-
@logger.level = ERROR
|
|
76
|
-
when 'fatal'.freeze
|
|
77
|
-
@logger.level = FATAL
|
|
78
|
-
when 'unknown'.freeze
|
|
79
|
-
@logger.level = UNKNOWN
|
|
80
|
-
else
|
|
81
|
-
raise ArgumentError, "invalid log level: #{severity}"
|
|
82
|
-
end
|
|
83
|
-
end
|
|
55
|
+
# @param [String] io
|
|
56
|
+
#
|
|
57
|
+
def output=(io)
|
|
58
|
+
@logger.reopen(io)
|
|
84
59
|
end
|
|
85
60
|
|
|
86
61
|
#
|
|
@@ -95,7 +70,7 @@ module Selenium
|
|
|
95
70
|
# @api private
|
|
96
71
|
#
|
|
97
72
|
def io
|
|
98
|
-
@logger.instance_variable_get(:@logdev).
|
|
73
|
+
@logger.instance_variable_get(:@logdev).dev
|
|
99
74
|
end
|
|
100
75
|
|
|
101
76
|
#
|
|
@@ -105,7 +80,7 @@ module Selenium
|
|
|
105
80
|
# @param [String, nil] new
|
|
106
81
|
#
|
|
107
82
|
def deprecate(old, new = nil)
|
|
108
|
-
message = "[DEPRECATION] #{old} is deprecated"
|
|
83
|
+
message = +"[DEPRECATION] #{old} is deprecated"
|
|
109
84
|
message << if new
|
|
110
85
|
". Use #{new} instead."
|
|
111
86
|
else
|
|
@@ -130,9 +105,9 @@ module Selenium
|
|
|
130
105
|
|
|
131
106
|
def default_level
|
|
132
107
|
if $DEBUG || ENV.key?('DEBUG')
|
|
133
|
-
|
|
108
|
+
:debug
|
|
134
109
|
else
|
|
135
|
-
|
|
110
|
+
:warn
|
|
136
111
|
end
|
|
137
112
|
end
|
|
138
113
|
end # Logger
|