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.
Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +125 -0
  3. data/Gemfile +2 -0
  4. data/LICENSE +1 -1
  5. data/lib/selenium-webdriver.rb +2 -0
  6. data/lib/selenium/server.rb +9 -7
  7. data/lib/selenium/webdriver.rb +3 -1
  8. data/lib/selenium/webdriver/atoms.rb +20 -1
  9. data/lib/selenium/webdriver/atoms/getAttribute.js +6 -7
  10. data/lib/selenium/webdriver/atoms/isDisplayed.js +60 -59
  11. data/lib/selenium/webdriver/chrome.rb +10 -4
  12. data/lib/selenium/webdriver/chrome/bridge.rb +5 -3
  13. data/lib/selenium/webdriver/chrome/driver.rb +10 -13
  14. data/lib/selenium/webdriver/chrome/options.rb +4 -4
  15. data/lib/selenium/webdriver/chrome/profile.rb +4 -3
  16. data/lib/selenium/webdriver/chrome/service.rb +13 -13
  17. data/lib/selenium/webdriver/common.rb +4 -2
  18. data/lib/selenium/webdriver/common/action_builder.rb +2 -0
  19. data/lib/selenium/webdriver/common/alert.rb +2 -0
  20. data/lib/selenium/webdriver/common/bridge_helper.rb +8 -5
  21. data/lib/selenium/webdriver/common/driver.rb +22 -7
  22. data/lib/selenium/webdriver/common/driver_extensions/downloads_files.rb +2 -0
  23. data/lib/selenium/webdriver/common/driver_extensions/has_addons.rb +2 -0
  24. data/lib/selenium/webdriver/common/driver_extensions/has_debugger.rb +2 -0
  25. data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +3 -3
  26. data/lib/selenium/webdriver/common/driver_extensions/has_network_conditions.rb +2 -0
  27. data/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +3 -1
  28. data/lib/selenium/webdriver/common/driver_extensions/has_permissions.rb +2 -0
  29. data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +2 -0
  30. data/lib/selenium/webdriver/common/driver_extensions/has_session_id.rb +2 -0
  31. data/lib/selenium/webdriver/common/driver_extensions/has_touch_screen.rb +2 -0
  32. data/lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb +2 -0
  33. data/lib/selenium/webdriver/common/driver_extensions/rotatable.rb +3 -1
  34. data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +2 -0
  35. data/lib/selenium/webdriver/common/driver_extensions/uploads_files.rb +3 -3
  36. data/lib/selenium/webdriver/common/element.rb +3 -1
  37. data/lib/selenium/webdriver/common/error.rb +74 -18
  38. data/lib/selenium/webdriver/common/file_reaper.rb +3 -3
  39. data/lib/selenium/webdriver/common/html5/local_storage.rb +2 -0
  40. data/lib/selenium/webdriver/common/html5/session_storage.rb +2 -0
  41. data/lib/selenium/webdriver/common/html5/shared_web_storage.rb +4 -1
  42. data/lib/selenium/webdriver/common/interactions/input_device.rb +3 -0
  43. data/lib/selenium/webdriver/common/interactions/interaction.rb +3 -0
  44. data/lib/selenium/webdriver/common/interactions/interactions.rb +3 -1
  45. data/lib/selenium/webdriver/common/interactions/key_actions.rb +2 -0
  46. data/lib/selenium/webdriver/common/interactions/key_input.rb +4 -0
  47. data/lib/selenium/webdriver/common/interactions/none_input.rb +3 -0
  48. data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +2 -0
  49. data/lib/selenium/webdriver/common/interactions/pointer_input.rb +7 -0
  50. data/lib/selenium/webdriver/common/keyboard.rb +4 -1
  51. data/lib/selenium/webdriver/common/keys.rb +3 -0
  52. data/lib/selenium/webdriver/common/log_entry.rb +4 -2
  53. data/lib/selenium/webdriver/common/logger.rb +15 -40
  54. data/lib/selenium/webdriver/common/logs.rb +2 -0
  55. data/lib/selenium/webdriver/common/{options.rb → manager.rb} +27 -1
  56. data/lib/selenium/webdriver/common/mouse.rb +3 -0
  57. data/lib/selenium/webdriver/common/navigation.rb +2 -0
  58. data/lib/selenium/webdriver/common/platform.rb +26 -30
  59. data/lib/selenium/webdriver/common/port_prober.rb +6 -19
  60. data/lib/selenium/webdriver/common/profile_helper.rb +2 -0
  61. data/lib/selenium/webdriver/common/proxy.rb +13 -5
  62. data/lib/selenium/webdriver/common/search_context.rb +6 -8
  63. data/lib/selenium/webdriver/common/service.rb +87 -29
  64. data/lib/selenium/webdriver/common/socket_lock.rb +10 -3
  65. data/lib/selenium/webdriver/common/socket_poller.rb +26 -18
  66. data/lib/selenium/webdriver/common/target_locator.rb +6 -4
  67. data/lib/selenium/webdriver/common/timeouts.rb +2 -0
  68. data/lib/selenium/webdriver/common/touch_action_builder.rb +5 -6
  69. data/lib/selenium/webdriver/common/touch_screen.rb +4 -1
  70. data/lib/selenium/webdriver/common/w3c_action_builder.rb +3 -0
  71. data/lib/selenium/webdriver/common/{w3c_options.rb → w3c_manager.rb} +3 -1
  72. data/lib/selenium/webdriver/common/wait.rb +13 -5
  73. data/lib/selenium/webdriver/common/window.rb +2 -0
  74. data/lib/selenium/webdriver/common/zipper.rb +3 -3
  75. data/lib/selenium/webdriver/edge.rb +11 -5
  76. data/lib/selenium/webdriver/edge/bridge.rb +2 -0
  77. data/lib/selenium/webdriver/edge/driver.rb +5 -12
  78. data/lib/selenium/webdriver/edge/options.rb +3 -0
  79. data/lib/selenium/webdriver/edge/service.rb +8 -12
  80. data/lib/selenium/webdriver/firefox.rb +10 -4
  81. data/lib/selenium/webdriver/firefox/binary.rb +7 -6
  82. data/lib/selenium/webdriver/firefox/bridge.rb +47 -0
  83. data/lib/selenium/webdriver/firefox/driver.rb +2 -0
  84. data/lib/selenium/webdriver/firefox/extension.rb +4 -4
  85. data/lib/selenium/webdriver/firefox/launcher.rb +3 -0
  86. data/lib/selenium/webdriver/firefox/legacy/driver.rb +7 -3
  87. data/lib/selenium/webdriver/firefox/marionette/bridge.rb +4 -2
  88. data/lib/selenium/webdriver/firefox/marionette/driver.rb +5 -11
  89. data/lib/selenium/webdriver/firefox/options.rb +20 -7
  90. data/lib/selenium/webdriver/firefox/profile.rb +7 -8
  91. data/lib/selenium/webdriver/firefox/profiles_ini.rb +3 -0
  92. data/lib/selenium/webdriver/firefox/service.rb +8 -19
  93. data/lib/selenium/webdriver/firefox/util.rb +2 -0
  94. data/lib/selenium/webdriver/ie.rb +10 -4
  95. data/lib/selenium/webdriver/ie/driver.rb +4 -10
  96. data/lib/selenium/webdriver/ie/options.rb +4 -2
  97. data/lib/selenium/webdriver/ie/service.rb +8 -12
  98. data/lib/selenium/webdriver/remote.rb +2 -0
  99. data/lib/selenium/webdriver/remote/bridge.rb +6 -4
  100. data/lib/selenium/webdriver/remote/capabilities.rb +23 -10
  101. data/lib/selenium/webdriver/remote/commands.rb +156 -0
  102. data/lib/selenium/webdriver/remote/driver.rb +2 -0
  103. data/lib/selenium/webdriver/remote/http/common.rb +11 -4
  104. data/lib/selenium/webdriver/remote/http/curb.rb +4 -2
  105. data/lib/selenium/webdriver/remote/http/default.rb +31 -25
  106. data/lib/selenium/webdriver/remote/http/persistent.rb +3 -1
  107. data/lib/selenium/webdriver/remote/oss/bridge.rb +5 -2
  108. data/lib/selenium/webdriver/remote/oss/commands.rb +106 -104
  109. data/lib/selenium/webdriver/remote/response.rb +11 -3
  110. data/lib/selenium/webdriver/remote/server_error.rb +2 -0
  111. data/lib/selenium/webdriver/remote/w3c/bridge.rb +28 -13
  112. data/lib/selenium/webdriver/remote/w3c/capabilities.rb +37 -21
  113. data/lib/selenium/webdriver/remote/w3c/commands.rb +61 -58
  114. data/lib/selenium/webdriver/safari.rb +11 -4
  115. data/lib/selenium/webdriver/safari/bridge.rb +5 -3
  116. data/lib/selenium/webdriver/safari/driver.rb +8 -10
  117. data/lib/selenium/webdriver/safari/options.rb +2 -0
  118. data/lib/selenium/webdriver/safari/service.rb +6 -25
  119. data/lib/selenium/webdriver/support.rb +2 -0
  120. data/lib/selenium/webdriver/support/abstract_event_listener.rb +2 -0
  121. data/lib/selenium/webdriver/support/block_event_listener.rb +3 -1
  122. data/lib/selenium/webdriver/support/color.rb +11 -9
  123. data/lib/selenium/webdriver/support/escaper.rb +2 -0
  124. data/lib/selenium/webdriver/support/event_firing_bridge.rb +3 -1
  125. data/lib/selenium/webdriver/support/select.rb +19 -18
  126. data/lib/selenium/webdriver/version.rb +3 -1
  127. data/selenium-webdriver.gemspec +14 -7
  128. 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 => IndexOutOfBoundsError,
282
- 2 => NoCollectionError,
283
- 3 => NoStringError,
284
- 4 => NoStringLengthError,
285
- 5 => NoStringWrapperError,
286
- 6 => NoSuchDriverError,
287
- 7 => NoSuchElementError,
288
- 8 => NoSuchFrameError,
289
- 9 => UnknownCommandError,
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
@@ -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
@@ -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| # rubocop:disable Performance/HashEachMethods
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
@@ -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
@@ -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 = [:control, :shift, :alt, :command, :meta].freeze
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' => level,
33
+ 'level' => level,
32
34
  'timestamp' => timestamp,
33
- 'message' => 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, :debug, :debug?,
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
- # For Ruby < 2.3 compatibility
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
- def level=(severity)
64
- if severity.is_a?(Integer)
65
- @logger.level = severity
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).instance_variable_get(:@dev)
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
- DEBUG
108
+ :debug
134
109
  else
135
- WARN
110
+ :warn
136
111
  end
137
112
  end
138
113
  end # Logger