selenium-webdriver 3.141.0 → 3.142.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (127) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +150 -0
  3. data/Gemfile +2 -0
  4. data/LICENSE +1 -1
  5. data/lib/selenium/server.rb +9 -7
  6. data/lib/selenium/webdriver/atoms/getAttribute.js +6 -7
  7. data/lib/selenium/webdriver/atoms/isDisplayed.js +60 -59
  8. data/lib/selenium/webdriver/atoms.rb +20 -1
  9. data/lib/selenium/webdriver/chrome/bridge.rb +23 -3
  10. data/lib/selenium/webdriver/chrome/driver.rb +30 -20
  11. data/lib/selenium/webdriver/chrome/options.rb +11 -7
  12. data/lib/selenium/webdriver/chrome/profile.rb +6 -5
  13. data/lib/selenium/webdriver/chrome/service.rb +13 -13
  14. data/lib/selenium/webdriver/chrome.rb +10 -4
  15. data/lib/selenium/webdriver/common/action_builder.rb +2 -0
  16. data/lib/selenium/webdriver/common/alert.rb +2 -0
  17. data/lib/selenium/webdriver/common/bridge_helper.rb +8 -5
  18. data/lib/selenium/webdriver/common/driver.rb +22 -7
  19. data/lib/selenium/webdriver/common/driver_extensions/downloads_files.rb +2 -0
  20. data/lib/selenium/webdriver/common/driver_extensions/has_addons.rb +2 -0
  21. data/lib/selenium/webdriver/common/driver_extensions/has_debugger.rb +2 -0
  22. data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +3 -3
  23. data/lib/selenium/webdriver/common/driver_extensions/has_network_conditions.rb +2 -0
  24. data/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +3 -1
  25. data/lib/selenium/webdriver/common/driver_extensions/has_permissions.rb +2 -0
  26. data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +2 -0
  27. data/lib/selenium/webdriver/common/driver_extensions/has_session_id.rb +2 -0
  28. data/lib/selenium/webdriver/common/driver_extensions/has_touch_screen.rb +2 -0
  29. data/lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb +2 -0
  30. data/lib/selenium/webdriver/common/driver_extensions/rotatable.rb +3 -1
  31. data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +2 -0
  32. data/lib/selenium/webdriver/common/driver_extensions/uploads_files.rb +3 -3
  33. data/lib/selenium/webdriver/common/element.rb +3 -1
  34. data/lib/selenium/webdriver/common/error.rb +74 -18
  35. data/lib/selenium/webdriver/common/file_reaper.rb +3 -3
  36. data/lib/selenium/webdriver/common/html5/local_storage.rb +2 -0
  37. data/lib/selenium/webdriver/common/html5/session_storage.rb +2 -0
  38. data/lib/selenium/webdriver/common/html5/shared_web_storage.rb +4 -1
  39. data/lib/selenium/webdriver/common/interactions/input_device.rb +3 -0
  40. data/lib/selenium/webdriver/common/interactions/interaction.rb +3 -0
  41. data/lib/selenium/webdriver/common/interactions/interactions.rb +3 -1
  42. data/lib/selenium/webdriver/common/interactions/key_actions.rb +2 -0
  43. data/lib/selenium/webdriver/common/interactions/key_input.rb +4 -0
  44. data/lib/selenium/webdriver/common/interactions/none_input.rb +3 -0
  45. data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +2 -0
  46. data/lib/selenium/webdriver/common/interactions/pointer_input.rb +7 -0
  47. data/lib/selenium/webdriver/common/keyboard.rb +4 -1
  48. data/lib/selenium/webdriver/common/keys.rb +3 -0
  49. data/lib/selenium/webdriver/common/log_entry.rb +4 -2
  50. data/lib/selenium/webdriver/common/logger.rb +15 -40
  51. data/lib/selenium/webdriver/common/logs.rb +2 -0
  52. data/lib/selenium/webdriver/common/manager.rb +177 -0
  53. data/lib/selenium/webdriver/common/mouse.rb +3 -0
  54. data/lib/selenium/webdriver/common/navigation.rb +2 -0
  55. data/lib/selenium/webdriver/common/options.rb +28 -126
  56. data/lib/selenium/webdriver/common/platform.rb +26 -30
  57. data/lib/selenium/webdriver/common/port_prober.rb +6 -19
  58. data/lib/selenium/webdriver/common/profile_helper.rb +2 -0
  59. data/lib/selenium/webdriver/common/proxy.rb +13 -5
  60. data/lib/selenium/webdriver/common/search_context.rb +6 -8
  61. data/lib/selenium/webdriver/common/service.rb +87 -29
  62. data/lib/selenium/webdriver/common/socket_lock.rb +10 -3
  63. data/lib/selenium/webdriver/common/socket_poller.rb +26 -18
  64. data/lib/selenium/webdriver/common/target_locator.rb +6 -4
  65. data/lib/selenium/webdriver/common/timeouts.rb +2 -0
  66. data/lib/selenium/webdriver/common/touch_action_builder.rb +5 -6
  67. data/lib/selenium/webdriver/common/touch_screen.rb +4 -1
  68. data/lib/selenium/webdriver/common/w3c_action_builder.rb +3 -0
  69. data/lib/selenium/webdriver/common/{w3c_options.rb → w3c_manager.rb} +3 -1
  70. data/lib/selenium/webdriver/common/wait.rb +13 -5
  71. data/lib/selenium/webdriver/common/window.rb +2 -0
  72. data/lib/selenium/webdriver/common/zipper.rb +3 -3
  73. data/lib/selenium/webdriver/common.rb +5 -2
  74. data/lib/selenium/webdriver/edge/bridge.rb +2 -0
  75. data/lib/selenium/webdriver/edge/driver.rb +6 -13
  76. data/lib/selenium/webdriver/edge/options.rb +3 -0
  77. data/lib/selenium/webdriver/edge/service.rb +8 -12
  78. data/lib/selenium/webdriver/edge.rb +11 -5
  79. data/lib/selenium/webdriver/firefox/binary.rb +9 -8
  80. data/lib/selenium/webdriver/firefox/driver.rb +2 -0
  81. data/lib/selenium/webdriver/firefox/extension.rb +4 -4
  82. data/lib/selenium/webdriver/firefox/launcher.rb +3 -0
  83. data/lib/selenium/webdriver/firefox/legacy/driver.rb +7 -3
  84. data/lib/selenium/webdriver/firefox/marionette/bridge.rb +4 -2
  85. data/lib/selenium/webdriver/firefox/marionette/driver.rb +6 -12
  86. data/lib/selenium/webdriver/firefox/options.rb +22 -9
  87. data/lib/selenium/webdriver/firefox/profile.rb +7 -8
  88. data/lib/selenium/webdriver/firefox/profiles_ini.rb +3 -0
  89. data/lib/selenium/webdriver/firefox/service.rb +8 -19
  90. data/lib/selenium/webdriver/firefox/util.rb +2 -0
  91. data/lib/selenium/webdriver/firefox.rb +10 -4
  92. data/lib/selenium/webdriver/ie/driver.rb +5 -11
  93. data/lib/selenium/webdriver/ie/options.rb +6 -4
  94. data/lib/selenium/webdriver/ie/service.rb +8 -12
  95. data/lib/selenium/webdriver/ie.rb +10 -4
  96. data/lib/selenium/webdriver/remote/bridge.rb +8 -6
  97. data/lib/selenium/webdriver/remote/capabilities.rb +23 -10
  98. data/lib/selenium/webdriver/remote/driver.rb +2 -0
  99. data/lib/selenium/webdriver/remote/http/common.rb +11 -4
  100. data/lib/selenium/webdriver/remote/http/curb.rb +4 -2
  101. data/lib/selenium/webdriver/remote/http/default.rb +31 -25
  102. data/lib/selenium/webdriver/remote/http/persistent.rb +3 -1
  103. data/lib/selenium/webdriver/remote/oss/bridge.rb +5 -2
  104. data/lib/selenium/webdriver/remote/oss/commands.rb +106 -104
  105. data/lib/selenium/webdriver/remote/response.rb +11 -3
  106. data/lib/selenium/webdriver/remote/server_error.rb +2 -0
  107. data/lib/selenium/webdriver/remote/w3c/bridge.rb +28 -13
  108. data/lib/selenium/webdriver/remote/w3c/capabilities.rb +37 -21
  109. data/lib/selenium/webdriver/remote/w3c/commands.rb +61 -58
  110. data/lib/selenium/webdriver/remote.rb +2 -0
  111. data/lib/selenium/webdriver/safari/bridge.rb +5 -3
  112. data/lib/selenium/webdriver/safari/driver.rb +9 -11
  113. data/lib/selenium/webdriver/safari/options.rb +2 -0
  114. data/lib/selenium/webdriver/safari/service.rb +6 -25
  115. data/lib/selenium/webdriver/safari.rb +11 -4
  116. data/lib/selenium/webdriver/support/abstract_event_listener.rb +2 -0
  117. data/lib/selenium/webdriver/support/block_event_listener.rb +3 -1
  118. data/lib/selenium/webdriver/support/color.rb +11 -9
  119. data/lib/selenium/webdriver/support/escaper.rb +2 -0
  120. data/lib/selenium/webdriver/support/event_firing_bridge.rb +3 -1
  121. data/lib/selenium/webdriver/support/select.rb +19 -18
  122. data/lib/selenium/webdriver/support.rb +2 -0
  123. data/lib/selenium/webdriver/version.rb +3 -1
  124. data/lib/selenium/webdriver.rb +3 -1
  125. data/lib/selenium-webdriver.rb +2 -0
  126. data/selenium-webdriver.gemspec +15 -8
  127. metadata +86 -27
@@ -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
@@ -23,28 +25,26 @@ module Selenium
23
25
  #
24
26
 
25
27
  class Service < WebDriver::Service
26
- DEFAULT_PORT = 9515
27
- @executable = 'chromedriver'.freeze
28
- @missing_text = <<-ERROR.gsub(/\n +| {2,}/, ' ').freeze
28
+ @default_port = 9515
29
+ @executable = 'chromedriver'
30
+ @missing_text = <<~ERROR
29
31
  Unable to find chromedriver. Please download the server from
30
- http://chromedriver.storage.googleapis.com/index.html and place it somewhere on your PATH.
32
+ https://chromedriver.storage.googleapis.com/index.html and place it somewhere on your PATH.
31
33
  More info at https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver.
32
34
  ERROR
35
+ @shutdown_supported = true
33
36
 
34
- private
35
-
36
- def start_process
37
- @process = build_process(@executable_path, "--port=#{@port}", *@extra_args)
38
- @process.leader = true unless Platform.windows?
39
- @process.start
37
+ def self.driver_path=(path)
38
+ Platform.assert_executable path if path.is_a?(String)
39
+ @driver_path = path
40
40
  end
41
41
 
42
- def cannot_connect_error_text
43
- "unable to connect to chromedriver #{@host}:#{@port}"
44
- end
42
+ private
45
43
 
44
+ # Note: This processing is deprecated
46
45
  def extract_service_args(driver_opts)
47
46
  driver_args = super
47
+ driver_opts = driver_opts.dup
48
48
  driver_args << "--log-path=#{driver_opts.delete(:log_path)}" if driver_opts.key?(:log_path)
49
49
  driver_args << "--url-base=#{driver_opts.delete(:url_base)}" if driver_opts.key?(:url_base)
50
50
  driver_args << "--port-server=#{driver_opts.delete(:port_server)}" if driver_opts.key?(:port_server)
@@ -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
@@ -18,7 +20,6 @@
18
20
  require 'net/http'
19
21
 
20
22
  require 'selenium/webdriver/chrome/bridge'
21
- require 'selenium/webdriver/chrome/service'
22
23
  require 'selenium/webdriver/chrome/driver'
23
24
  require 'selenium/webdriver/chrome/profile'
24
25
  require 'selenium/webdriver/chrome/options'
@@ -27,12 +28,15 @@ module Selenium
27
28
  module WebDriver
28
29
  module Chrome
29
30
  def self.driver_path=(path)
30
- Platform.assert_executable path
31
- @driver_path = path
31
+ WebDriver.logger.deprecate 'Selenium::WebDriver::Chrome#driver_path=',
32
+ 'Selenium::WebDriver::Chrome::Service#driver_path='
33
+ Selenium::WebDriver::Chrome::Service.driver_path = path
32
34
  end
33
35
 
34
36
  def self.driver_path
35
- @driver_path ||= nil
37
+ WebDriver.logger.deprecate 'Selenium::WebDriver::Chrome#driver_path',
38
+ 'Selenium::WebDriver::Chrome::Service#driver_path'
39
+ Selenium::WebDriver::Chrome::Service.driver_path
36
40
  end
37
41
 
38
42
  def self.path=(path)
@@ -46,3 +50,5 @@ module Selenium
46
50
  end # Chrome
47
51
  end # WebDriver
48
52
  end # Selenium
53
+
54
+ require 'selenium/webdriver/chrome/service'
@@ -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
@@ -31,6 +33,7 @@ module Selenium
31
33
  when Hash
32
34
  element_id = element_id_from(arg)
33
35
  return Element.new(self, element_id) if element_id
36
+
34
37
  arg.each { |k, v| arg[k] = unwrap_script_result(v) }
35
38
  else
36
39
  arg
@@ -43,12 +46,12 @@ module Selenium
43
46
 
44
47
  def parse_cookie_string(str)
45
48
  result = {
46
- 'name' => '',
47
- 'value' => '',
48
- 'domain' => '',
49
- 'path' => '',
49
+ 'name' => '',
50
+ 'value' => '',
51
+ 'domain' => '',
52
+ 'path' => '',
50
53
  'expires' => '',
51
- 'secure' => false
54
+ 'secure' => false
52
55
  }
53
56
 
54
57
  str.split(';').each do |attribute|
@@ -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
@@ -73,7 +75,7 @@ module Selenium
73
75
  end
74
76
 
75
77
  def inspect
76
- format '#<%s:0x%x browser=%s>', self.class, hash * 2, bridge.browser.inspect
78
+ format '#<%<class>s:0x%<hash>x browser=%<browser>s>', class: self.class, hash: hash * 2, browser: bridge.browser.inspect
77
79
  end
78
80
 
79
81
  #
@@ -95,12 +97,12 @@ module Selenium
95
97
  end
96
98
 
97
99
  #
98
- # @return [Options]
99
- # @see Options
100
+ # @return [Manager]
101
+ # @see Manager
100
102
  #
101
103
 
102
104
  def manage
103
- bridge.options
105
+ bridge.manage
104
106
  end
105
107
 
106
108
  #
@@ -281,13 +283,26 @@ module Selenium
281
283
  # @see SearchContext
282
284
  #
283
285
 
284
- def ref
285
- nil
286
- end
286
+ def ref; end
287
287
 
288
288
  private
289
289
 
290
290
  attr_reader :bridge
291
+
292
+ def service_url(opts)
293
+ @service = opts.delete(:service)
294
+ %i[driver_opts driver_path port].each do |key|
295
+ next unless opts.key? key
296
+
297
+ WebDriver.logger.deprecate(":#{key}", ':service with an instance of Selenium::WebDriver::Service')
298
+ end
299
+ @service ||= Service.send(browser,
300
+ args: opts.delete(:driver_opts),
301
+ path: opts.delete(:driver_path),
302
+ port: opts.delete(:port))
303
+ @service.start
304
+ @service.uri
305
+ end
291
306
  end # Driver
292
307
  end # WebDriver
293
308
  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
@@ -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
@@ -24,9 +26,7 @@ module Selenium
24
26
  end
25
27
 
26
28
  def location=(loc)
27
- unless loc.is_a?(Location)
28
- raise TypeError, "expected #{Location}, got #{loc.inspect}:#{loc.class}"
29
- end
29
+ raise TypeError, "expected #{Location}, got #{loc.inspect}:#{loc.class}" unless loc.is_a?(Location)
30
30
 
31
31
  @bridge.set_location loc.latitude, loc.longitude, loc.altitude
32
32
  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
@@ -48,7 +50,7 @@ module Selenium
48
50
  end
49
51
 
50
52
  def valid_type?(type)
51
- type_to_values.keys.include? type
53
+ type_to_values.key? type
52
54
  end
53
55
  end # HasNetworkConnection
54
56
  end # DriverExtensions
@@ -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
@@ -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
@@ -23,7 +25,7 @@ module Selenium
23
25
 
24
26
  module DriverExtensions
25
27
  module Rotatable
26
- ORIENTATIONS = [:landscape, :portrait].freeze
28
+ ORIENTATIONS = %i[landscape portrait].freeze
27
29
 
28
30
  #
29
31
  # Change the screen orientation
@@ -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
@@ -48,9 +50,7 @@ module Selenium
48
50
  #
49
51
 
50
52
  def file_detector=(detector)
51
- unless detector.nil? || detector.respond_to?(:call)
52
- raise ArgumentError, 'detector must respond to #call'
53
- end
53
+ raise ArgumentError, 'detector must respond to #call' unless detector.nil? || detector.respond_to?(:call)
54
54
 
55
55
  bridge.file_detector = detector
56
56
  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
@@ -32,7 +34,7 @@ module Selenium
32
34
  end
33
35
 
34
36
  def inspect
35
- format '#<%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
36
38
  end
37
39
 
38
40
  def ==(other)
@@ -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