selenium-webdriver 3.141.0 → 3.141.592

Sign up to get free protection for your applications and to get access to all the features.
Files changed (130) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +78 -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/manager.rb +177 -0
  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/options.rb +26 -0
  59. data/lib/selenium/webdriver/common/platform.rb +26 -30
  60. data/lib/selenium/webdriver/common/port_prober.rb +6 -19
  61. data/lib/selenium/webdriver/common/profile_helper.rb +2 -0
  62. data/lib/selenium/webdriver/common/proxy.rb +13 -5
  63. data/lib/selenium/webdriver/common/search_context.rb +4 -6
  64. data/lib/selenium/webdriver/common/service.rb +74 -29
  65. data/lib/selenium/webdriver/common/socket_lock.rb +10 -3
  66. data/lib/selenium/webdriver/common/socket_poller.rb +45 -48
  67. data/lib/selenium/webdriver/common/target_locator.rb +6 -4
  68. data/lib/selenium/webdriver/common/timeouts.rb +2 -0
  69. data/lib/selenium/webdriver/common/touch_action_builder.rb +5 -6
  70. data/lib/selenium/webdriver/common/touch_screen.rb +4 -1
  71. data/lib/selenium/webdriver/common/w3c_action_builder.rb +3 -0
  72. data/lib/selenium/webdriver/common/w3c_manager.rb +45 -0
  73. data/lib/selenium/webdriver/common/w3c_options.rb +2 -0
  74. data/lib/selenium/webdriver/common/wait.rb +11 -3
  75. data/lib/selenium/webdriver/common/window.rb +2 -0
  76. data/lib/selenium/webdriver/common/zipper.rb +3 -3
  77. data/lib/selenium/webdriver/edge.rb +11 -5
  78. data/lib/selenium/webdriver/edge/bridge.rb +2 -0
  79. data/lib/selenium/webdriver/edge/driver.rb +5 -12
  80. data/lib/selenium/webdriver/edge/options.rb +3 -0
  81. data/lib/selenium/webdriver/edge/service.rb +8 -12
  82. data/lib/selenium/webdriver/firefox.rb +10 -4
  83. data/lib/selenium/webdriver/firefox/binary.rb +7 -6
  84. data/lib/selenium/webdriver/firefox/bridge.rb +47 -0
  85. data/lib/selenium/webdriver/firefox/driver.rb +3 -2
  86. data/lib/selenium/webdriver/firefox/extension.rb +4 -4
  87. data/lib/selenium/webdriver/firefox/launcher.rb +3 -0
  88. data/lib/selenium/webdriver/firefox/legacy/driver.rb +7 -3
  89. data/lib/selenium/webdriver/firefox/marionette/bridge.rb +4 -2
  90. data/lib/selenium/webdriver/firefox/marionette/driver.rb +5 -11
  91. data/lib/selenium/webdriver/firefox/options.rb +3 -1
  92. data/lib/selenium/webdriver/firefox/profile.rb +7 -8
  93. data/lib/selenium/webdriver/firefox/profiles_ini.rb +3 -0
  94. data/lib/selenium/webdriver/firefox/service.rb +8 -19
  95. data/lib/selenium/webdriver/firefox/util.rb +2 -0
  96. data/lib/selenium/webdriver/ie.rb +10 -4
  97. data/lib/selenium/webdriver/ie/driver.rb +4 -10
  98. data/lib/selenium/webdriver/ie/options.rb +4 -2
  99. data/lib/selenium/webdriver/ie/service.rb +8 -12
  100. data/lib/selenium/webdriver/remote.rb +2 -0
  101. data/lib/selenium/webdriver/remote/bridge.rb +6 -4
  102. data/lib/selenium/webdriver/remote/capabilities.rb +23 -10
  103. data/lib/selenium/webdriver/remote/commands.rb +156 -0
  104. data/lib/selenium/webdriver/remote/driver.rb +2 -0
  105. data/lib/selenium/webdriver/remote/http/common.rb +11 -4
  106. data/lib/selenium/webdriver/remote/http/curb.rb +4 -2
  107. data/lib/selenium/webdriver/remote/http/default.rb +31 -25
  108. data/lib/selenium/webdriver/remote/http/persistent.rb +3 -1
  109. data/lib/selenium/webdriver/remote/oss/bridge.rb +5 -2
  110. data/lib/selenium/webdriver/remote/oss/commands.rb +106 -104
  111. data/lib/selenium/webdriver/remote/response.rb +10 -4
  112. data/lib/selenium/webdriver/remote/server_error.rb +2 -0
  113. data/lib/selenium/webdriver/remote/w3c/bridge.rb +28 -13
  114. data/lib/selenium/webdriver/remote/w3c/capabilities.rb +37 -21
  115. data/lib/selenium/webdriver/remote/w3c/commands.rb +61 -58
  116. data/lib/selenium/webdriver/safari.rb +11 -4
  117. data/lib/selenium/webdriver/safari/bridge.rb +5 -3
  118. data/lib/selenium/webdriver/safari/driver.rb +8 -10
  119. data/lib/selenium/webdriver/safari/options.rb +2 -0
  120. data/lib/selenium/webdriver/safari/service.rb +6 -25
  121. data/lib/selenium/webdriver/support.rb +2 -0
  122. data/lib/selenium/webdriver/support/abstract_event_listener.rb +2 -0
  123. data/lib/selenium/webdriver/support/block_event_listener.rb +3 -1
  124. data/lib/selenium/webdriver/support/color.rb +11 -9
  125. data/lib/selenium/webdriver/support/escaper.rb +2 -0
  126. data/lib/selenium/webdriver/support/event_firing_bridge.rb +3 -1
  127. data/lib/selenium/webdriver/support/select.rb +19 -18
  128. data/lib/selenium/webdriver/version.rb +3 -1
  129. data/selenium-webdriver.gemspec +14 -7
  130. metadata +89 -21
@@ -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 'selenium/webdriver/safari/bridge'
19
21
  require 'selenium/webdriver/safari/driver'
20
22
  require 'selenium/webdriver/safari/options'
21
- require 'selenium/webdriver/safari/service'
22
23
 
23
24
  module Selenium
24
25
  module WebDriver
@@ -41,18 +42,24 @@ module Selenium
41
42
  @path ||= '/Applications/Safari.app/Contents/MacOS/Safari'
42
43
  return @path if File.file?(@path) && File.executable?(@path)
43
44
  raise Error::WebDriverError, 'Safari is only supported on Mac' unless Platform.os.mac?
45
+
44
46
  raise Error::WebDriverError, 'Unable to find Safari'
45
47
  end
46
48
 
47
49
  def driver_path=(path)
48
- Platform.assert_executable path
49
- @driver_path = path
50
+ WebDriver.logger.deprecate 'Selenium::WebDriver::Safari#driver_path=',
51
+ 'Selenium::WebDriver::Safari::Service#driver_path='
52
+ Selenium::WebDriver::Safari::Service.driver_path = path
50
53
  end
51
54
 
52
55
  def driver_path
53
- @driver_path ||= nil
56
+ WebDriver.logger.deprecate 'Selenium::WebDriver::Safari#driver_path',
57
+ 'Selenium::WebDriver::Safari::Service#driver_path'
58
+ Selenium::WebDriver::Safari::Service.driver_path
54
59
  end
55
60
  end
56
61
  end # Safari
57
62
  end # WebDriver
58
63
  end # Selenium
64
+
65
+ require 'selenium/webdriver/safari/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
@@ -22,9 +24,9 @@ module Selenium
22
24
 
23
25
  # https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/WebDriverEndpointDoc/Commands/Commands.html
24
26
  COMMANDS = {
25
- get_permissions: [:get, '/session/:session_id/apple/permissions'.freeze],
26
- set_permissions: [:post, '/session/:session_id/apple/permissions'.freeze],
27
- attach_debugger: [:post, '/session/:session_id/apple/attach_debugger'.freeze]
27
+ get_permissions: [:get, '/session/:session_id/apple/permissions'],
28
+ set_permissions: [:post, '/session/:session_id/apple/permissions'],
29
+ attach_debugger: [:post, '/session/:session_id/apple/attach_debugger']
28
30
  }.freeze
29
31
 
30
32
  def commands(command)
@@ -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,15 +34,7 @@ module Selenium
32
34
  def initialize(opts = {})
33
35
  opts[:desired_capabilities] = create_capabilities(opts)
34
36
 
35
- unless opts.key?(:url)
36
- driver_path = opts.delete(:driver_path) || Safari.driver_path
37
- driver_opts = opts.delete(:driver_opts) || {}
38
- port = opts.delete(:port) || Service::DEFAULT_PORT
39
-
40
- @service = Service.new(driver_path, port, driver_opts)
41
- @service.start
42
- opts[:url] = @service.uri
43
- end
37
+ opts[:url] ||= service_url(opts)
44
38
 
45
39
  listener = opts.delete(:listener)
46
40
  @bridge = Remote::Bridge.handshake(opts)
@@ -49,10 +43,14 @@ module Selenium
49
43
  super(@bridge, listener: listener)
50
44
  end
51
45
 
46
+ def browser
47
+ :safari
48
+ end
49
+
52
50
  def quit
53
51
  super
54
52
  ensure
55
- @service.stop if @service
53
+ @service&.stop
56
54
  end
57
55
 
58
56
  private
@@ -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,34 +25,13 @@ module Selenium
23
25
  #
24
26
 
25
27
  class Service < WebDriver::Service
26
- DEFAULT_PORT = 7050
27
- @executable = '/usr/bin/safaridriver'.freeze
28
- @missing_text = <<-ERROR.gsub(/\n +| {2,}/, ' ').freeze
28
+ @default_port = 7050
29
+ @executable = 'safaridriver'
30
+ @missing_text = <<~ERROR
29
31
  Unable to find Apple's safaridriver which comes with Safari 10.
30
32
  More info at https://webkit.org/blog/6900/webdriver-support-in-safari-10/
31
33
  ERROR
32
-
33
- def stop
34
- stop_process
35
- end
36
-
37
- private
38
-
39
- def binary_path(path)
40
- path = self.class.executable if path.nil?
41
- raise Error::WebDriverError, self.class.missing_text unless path
42
- Platform.assert_executable path
43
- path
44
- end
45
-
46
- def start_process
47
- @process = build_process(@executable_path, "--port=#{@port}", *@extra_args)
48
- @process.start
49
- end
50
-
51
- def cannot_connect_error_text
52
- "unable to connect to safaridriver #{@host}:#{@port}"
53
- end
34
+ @shutdown_supported = false
54
35
  end # Service
55
36
  end # Safari
56
37
  end # 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
@@ -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
  @callback = callback
24
26
  end
25
27
 
26
- def method_missing(meth, *args)
28
+ def method_missing(meth, *args) # rubocop:disable Style/MethodMissingSuper, Style/MissingRespondToMissing
27
29
  @callback.call meth, *args
28
30
  end
29
31
  end # BlockEventListener
@@ -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
@@ -21,27 +23,27 @@ module Selenium
21
23
  class Color
22
24
  RGB_PATTERN = %r{^\s*rgb\(\s*(\d{1,3})\s*,
23
25
  \s*(\d{1,3})\s*,
24
- \s*(\d{1,3})\s*\)\s*$}x
26
+ \s*(\d{1,3})\s*\)\s*$}x.freeze
25
27
  RGB_PCT_PATTERN = %r{^\s*rgb\(\s*(\d{1,3}|\d{1,2}\.\d+)%\s*,
26
28
  \s*(\d{1,3}|\d{1,2}\.\d+)%\s*,
27
- \s*(\d{1,3}|\d{1,2}\.\d+)%\s*\)\s*$}x
29
+ \s*(\d{1,3}|\d{1,2}\.\d+)%\s*\)\s*$}x.freeze
28
30
  RGBA_PATTERN = %r{^\s*rgba\(\s*(\d{1,3})\s*,
29
31
  \s*(\d{1,3})\s*,
30
32
  \s*(\d{1,3})\s*,
31
- \s*(0|1|0\.\d+)\s*\)\s*$}x
33
+ \s*(0|1|0\.\d+)\s*\)\s*$}x.freeze
32
34
  RGBA_PCT_PATTERN = %r{^\s*rgba\(\s*(\d{1,3}|\d{1,2}\.\d+)
33
35
  %\s*,\s*(\d{1,3}|\d{1,2}\.\d+)
34
36
  %\s*,\s*(\d{1,3}|\d{1,2}\.\d+)
35
- %\s*,\s*(0|1|0\.\d+)\s*\)\s*$}x
36
- HEX_PATTERN = /#(\h{2})(\h{2})(\h{2})/
37
- HEX3_PATTERN = /#(\h)(\h)(\h)/
37
+ %\s*,\s*(0|1|0\.\d+)\s*\)\s*$}x.freeze
38
+ HEX_PATTERN = /#(\h{2})(\h{2})(\h{2})/.freeze
39
+ HEX3_PATTERN = /#(\h)(\h)(\h)/.freeze
38
40
  HSL_PATTERN = %r{^\s*hsl\(\s*(\d{1,3})\s*,
39
41
  \s*(\d{1,3})%\s*,
40
- \s*(\d{1,3})%\s*\)\s*$}x
42
+ \s*(\d{1,3})%\s*\)\s*$}x.freeze
41
43
  HSLA_PATTERN = %r{^\s*hsla\(\s*(\d{1,3})\s*,
42
44
  \s*(\d{1,3})%\s*,
43
45
  \s*(\d{1,3})%\s*,
44
- \s*(0|1|0\.\d+)\s*\)\s*$}x
46
+ \s*(0|1|0\.\d+)\s*\)\s*$}x.freeze
45
47
 
46
48
  attr_reader :red, :green, :blue, :alpha
47
49
 
@@ -70,7 +72,7 @@ module Selenium
70
72
  end
71
73
  end
72
74
 
73
- def self.from_hsl(h, s, l, a)
75
+ def self.from_hsl(h, s, l, a) # rubocop:disable Naming/UncommunicativeMethodParamName
74
76
  h = Float(h) / 360
75
77
  s = Float(s) / 100
76
78
  l = Float(l) / 100
@@ -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
@@ -118,7 +120,7 @@ module Selenium
118
120
  returned
119
121
  end
120
122
 
121
- def method_missing(meth, *args, &blk)
123
+ def method_missing(meth, *args, &blk) # rubocop:disable Style/MethodMissingSuper, Style/MissingRespondToMissing
122
124
  @delegate.__send__(meth, *args, &blk)
123
125
  end
124
126
  end # EventFiringBridge
@@ -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
@@ -26,9 +28,7 @@ module Selenium
26
28
  def initialize(element)
27
29
  tag_name = element.tag_name
28
30
 
29
- unless tag_name.casecmp('select').zero?
30
- raise ArgumentError, "unexpected tag name #{tag_name.inspect}"
31
- end
31
+ raise ArgumentError, "unexpected tag name #{tag_name.inspect}" unless tag_name.casecmp('select').zero?
32
32
 
33
33
  @element = element
34
34
  @multi = ![nil, 'false'].include?(element.attribute(:multiple))
@@ -74,6 +74,7 @@ module Selenium
74
74
  def first_selected_option
75
75
  option = options.find(&:selected?)
76
76
  return option if option
77
+
77
78
  raise Error::NoSuchElementError, 'no options are selected'
78
79
  end
79
80
 
@@ -140,9 +141,7 @@ module Selenium
140
141
  #
141
142
 
142
143
  def select_all
143
- unless multiple?
144
- raise Error::UnsupportedOperationError, 'you may only select all options of a multi-select'
145
- end
144
+ raise Error::UnsupportedOperationError, 'you may only select all options of a multi-select' unless multiple?
146
145
 
147
146
  options.each { |e| select_option e }
148
147
  end
@@ -154,9 +153,7 @@ module Selenium
154
153
  #
155
154
 
156
155
  def deselect_all
157
- unless multiple?
158
- raise Error::UnsupportedOperationError, 'you may only deselect all options of a multi-select'
159
- end
156
+ raise Error::UnsupportedOperationError, 'you may only deselect all options of a multi-select' unless multiple?
160
157
 
161
158
  options.each { |e| deselect_option e }
162
159
  end
@@ -167,6 +164,7 @@ module Selenium
167
164
  opts = find_by_text text
168
165
 
169
166
  return select_options(opts) unless opts.empty?
167
+
170
168
  raise Error::NoSuchElementError, "cannot locate element with text: #{text.inspect}"
171
169
  end
172
170
 
@@ -174,6 +172,7 @@ module Selenium
174
172
  opts = find_by_index index
175
173
 
176
174
  return select_option(opts.first) unless opts.empty?
175
+
177
176
  raise Error::NoSuchElementError, "cannot locate element with index: #{index.inspect}"
178
177
  end
179
178
 
@@ -181,36 +180,37 @@ module Selenium
181
180
  opts = find_by_value value
182
181
 
183
182
  return select_options(opts) unless opts.empty?
183
+
184
184
  raise Error::NoSuchElementError, "cannot locate option with value: #{value.inspect}"
185
185
  end
186
186
 
187
187
  def deselect_by_text(text)
188
- unless multiple?
189
- raise Error::UnsupportedOperationError, 'you may only deselect option of a multi-select'
190
- end
188
+ raise Error::UnsupportedOperationError, 'you may only deselect option of a multi-select' unless multiple?
189
+
191
190
  opts = find_by_text text
192
191
 
193
192
  return deselect_options(opts) unless opts.empty?
193
+
194
194
  raise Error::NoSuchElementError, "cannot locate element with text: #{text.inspect}"
195
195
  end
196
196
 
197
197
  def deselect_by_value(value)
198
- unless multiple?
199
- raise Error::UnsupportedOperationError, 'you may only deselect option of a multi-select'
200
- end
198
+ raise Error::UnsupportedOperationError, 'you may only deselect option of a multi-select' unless multiple?
199
+
201
200
  opts = find_by_value value
202
201
 
203
202
  return deselect_options(opts) unless opts.empty?
203
+
204
204
  raise Error::NoSuchElementError, "cannot locate option with value: #{value.inspect}"
205
205
  end
206
206
 
207
207
  def deselect_by_index(index)
208
- unless multiple?
209
- raise Error::UnsupportedOperationError, 'you may only deselect option of a multi-select'
210
- end
208
+ raise Error::UnsupportedOperationError, 'you may only deselect option of a multi-select' unless multiple?
209
+
211
210
  opts = find_by_index index
212
211
 
213
212
  return deselect_option(opts.first) unless opts.empty?
213
+
214
214
  raise Error::NoSuchElementError, "cannot locate option with index: #{index}"
215
215
  end
216
216
 
@@ -253,6 +253,7 @@ module Selenium
253
253
  end
254
254
 
255
255
  return Array(candidates.find { |option| text == option.text }) unless multiple?
256
+
256
257
  candidates.select { |option| text == option.text }
257
258
  end
258
259
 
@@ -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,6 +19,6 @@
17
19
 
18
20
  module Selenium
19
21
  module WebDriver
20
- VERSION = '3.141.0'.freeze
22
+ VERSION = '3.141.592'
21
23
  end # WebDriver
22
24
  end # Selenium
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  root = File.expand_path(File.dirname(__FILE__))
2
4
  raise "cwd must be #{root} when reading gemspec" if root != Dir.pwd
3
5
 
@@ -8,8 +10,8 @@ Gem::Specification.new do |s|
8
10
  s.name = 'selenium-webdriver'
9
11
  s.version = Selenium::WebDriver::VERSION
10
12
 
11
- s.authors = ['Alex Rodionov', 'Titus Fortner']
12
- s.email = ['p0deje@gmail.com', 'titusfortner@gmail.com']
13
+ s.authors = ['Alex Rodionov', 'Titus Fortner', 'Thomas Walpole']
14
+ s.email = ['p0deje@gmail.com', 'titusfortner@gmail.com', 'twalpole@gmail.com']
13
15
 
14
16
  s.summary = 'The next generation developer focused tool for automated testing of webapps'
15
17
  s.description = 'WebDriver is a tool for writing automated tests of websites. ' \
@@ -24,17 +26,22 @@ Gem::Specification.new do |s|
24
26
  }
25
27
 
26
28
  s.required_rubygems_version = Gem::Requirement.new('> 1.3.1') if s.respond_to? :required_rubygems_version=
27
- s.required_ruby_version = Gem::Requirement.new('>= 2.0')
29
+ s.required_ruby_version = Gem::Requirement.new('>= 2.3')
28
30
 
29
31
  s.files = Dir[root + '/**/*'].reject { |e| e =~ /ruby\.iml|build\.desc/ }.map { |e| e.sub(root + '/', '') }
30
32
  s.require_paths = ['lib']
31
33
 
34
+ s.add_runtime_dependency 'childprocess', ['>= 0.5', '< 2.0']
32
35
  s.add_runtime_dependency 'rubyzip', ['~> 1.2', '>= 1.2.2']
33
- s.add_runtime_dependency 'childprocess', ['~> 0.5']
34
36
 
37
+ # childprocess requires ffi on windows but doesn't declare it in its dependencies
38
+ s.add_development_dependency 'ffi'
39
+ s.add_development_dependency 'rack', ['~> 2.0']
40
+ s.add_development_dependency 'rake'
35
41
  s.add_development_dependency 'rspec', ['~> 3.0']
36
- s.add_development_dependency 'rack', ['~> 1.0']
37
- s.add_development_dependency 'webmock', ['~> 2.0']
42
+ s.add_development_dependency 'rubocop', ['~> 0.67.0']
43
+ s.add_development_dependency 'rubocop-performance'
44
+ s.add_development_dependency 'rubocop-rspec'
45
+ s.add_development_dependency 'webmock', ['~> 3.5']
38
46
  s.add_development_dependency 'yard', ['~> 0.9.11']
39
- s.add_development_dependency 'rubocop', ['~> 0.50.0']
40
47
  end
metadata CHANGED
@@ -1,16 +1,37 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: selenium-webdriver
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.141.0
4
+ version: 3.141.592
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Rodionov
8
8
  - Titus Fortner
9
+ - Thomas Walpole
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2018-11-01 00:00:00.000000000 Z
13
+ date: 2019-04-17 00:00:00.000000000 Z
13
14
  dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '0.5'
21
+ - - "<"
22
+ - !ruby/object:Gem::Version
23
+ version: '2.0'
24
+ name: childprocess
25
+ prerelease: false
26
+ type: :runtime
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: '0.5'
32
+ - - "<"
33
+ - !ruby/object:Gem::Version
34
+ version: '2.0'
14
35
  - !ruby/object:Gem::Dependency
15
36
  requirement: !ruby/object:Gem::Requirement
16
37
  requirements:
@@ -31,20 +52,48 @@ dependencies:
31
52
  - - ">="
32
53
  - !ruby/object:Gem::Version
33
54
  version: 1.2.2
55
+ - !ruby/object:Gem::Dependency
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ name: ffi
62
+ prerelease: false
63
+ type: :development
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
34
69
  - !ruby/object:Gem::Dependency
35
70
  requirement: !ruby/object:Gem::Requirement
36
71
  requirements:
37
72
  - - "~>"
38
73
  - !ruby/object:Gem::Version
39
- version: '0.5'
40
- name: childprocess
74
+ version: '2.0'
75
+ name: rack
41
76
  prerelease: false
42
- type: :runtime
77
+ type: :development
43
78
  version_requirements: !ruby/object:Gem::Requirement
44
79
  requirements:
45
80
  - - "~>"
46
81
  - !ruby/object:Gem::Version
47
- version: '0.5'
82
+ version: '2.0'
83
+ - !ruby/object:Gem::Dependency
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ name: rake
90
+ prerelease: false
91
+ type: :development
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
48
97
  - !ruby/object:Gem::Dependency
49
98
  requirement: !ruby/object:Gem::Requirement
50
99
  requirements:
@@ -64,63 +113,78 @@ dependencies:
64
113
  requirements:
65
114
  - - "~>"
66
115
  - !ruby/object:Gem::Version
67
- version: '1.0'
68
- name: rack
116
+ version: 0.67.0
117
+ name: rubocop
69
118
  prerelease: false
70
119
  type: :development
71
120
  version_requirements: !ruby/object:Gem::Requirement
72
121
  requirements:
73
122
  - - "~>"
74
123
  - !ruby/object:Gem::Version
75
- version: '1.0'
124
+ version: 0.67.0
76
125
  - !ruby/object:Gem::Dependency
77
126
  requirement: !ruby/object:Gem::Requirement
78
127
  requirements:
79
- - - "~>"
128
+ - - ">="
80
129
  - !ruby/object:Gem::Version
81
- version: '2.0'
82
- name: webmock
130
+ version: '0'
131
+ name: rubocop-performance
83
132
  prerelease: false
84
133
  type: :development
85
134
  version_requirements: !ruby/object:Gem::Requirement
86
135
  requirements:
87
- - - "~>"
136
+ - - ">="
88
137
  - !ruby/object:Gem::Version
89
- version: '2.0'
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ requirement: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ name: rubocop-rspec
146
+ prerelease: false
147
+ type: :development
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
90
153
  - !ruby/object:Gem::Dependency
91
154
  requirement: !ruby/object:Gem::Requirement
92
155
  requirements:
93
156
  - - "~>"
94
157
  - !ruby/object:Gem::Version
95
- version: 0.9.11
96
- name: yard
158
+ version: '3.5'
159
+ name: webmock
97
160
  prerelease: false
98
161
  type: :development
99
162
  version_requirements: !ruby/object:Gem::Requirement
100
163
  requirements:
101
164
  - - "~>"
102
165
  - !ruby/object:Gem::Version
103
- version: 0.9.11
166
+ version: '3.5'
104
167
  - !ruby/object:Gem::Dependency
105
168
  requirement: !ruby/object:Gem::Requirement
106
169
  requirements:
107
170
  - - "~>"
108
171
  - !ruby/object:Gem::Version
109
- version: 0.50.0
110
- name: rubocop
172
+ version: 0.9.11
173
+ name: yard
111
174
  prerelease: false
112
175
  type: :development
113
176
  version_requirements: !ruby/object:Gem::Requirement
114
177
  requirements:
115
178
  - - "~>"
116
179
  - !ruby/object:Gem::Version
117
- version: 0.50.0
180
+ version: 0.9.11
118
181
  description: WebDriver is a tool for writing automated tests of websites. It aims
119
182
  to mimic the behaviour of a real user, and as such interacts with the HTML of the
120
183
  application.
121
184
  email:
122
185
  - p0deje@gmail.com
123
186
  - titusfortner@gmail.com
187
+ - twalpole@gmail.com
124
188
  executables: []
125
189
  extensions: []
126
190
  extra_rdoc_files: []
@@ -179,6 +243,7 @@ files:
179
243
  - lib/selenium/webdriver/common/log_entry.rb
180
244
  - lib/selenium/webdriver/common/logger.rb
181
245
  - lib/selenium/webdriver/common/logs.rb
246
+ - lib/selenium/webdriver/common/manager.rb
182
247
  - lib/selenium/webdriver/common/mouse.rb
183
248
  - lib/selenium/webdriver/common/navigation.rb
184
249
  - lib/selenium/webdriver/common/options.rb
@@ -195,6 +260,7 @@ files:
195
260
  - lib/selenium/webdriver/common/touch_action_builder.rb
196
261
  - lib/selenium/webdriver/common/touch_screen.rb
197
262
  - lib/selenium/webdriver/common/w3c_action_builder.rb
263
+ - lib/selenium/webdriver/common/w3c_manager.rb
198
264
  - lib/selenium/webdriver/common/w3c_options.rb
199
265
  - lib/selenium/webdriver/common/wait.rb
200
266
  - lib/selenium/webdriver/common/window.rb
@@ -206,6 +272,7 @@ files:
206
272
  - lib/selenium/webdriver/edge/service.rb
207
273
  - lib/selenium/webdriver/firefox.rb
208
274
  - lib/selenium/webdriver/firefox/binary.rb
275
+ - lib/selenium/webdriver/firefox/bridge.rb
209
276
  - lib/selenium/webdriver/firefox/driver.rb
210
277
  - lib/selenium/webdriver/firefox/extension.rb
211
278
  - lib/selenium/webdriver/firefox/extension/prefs.json
@@ -228,6 +295,7 @@ files:
228
295
  - lib/selenium/webdriver/remote.rb
229
296
  - lib/selenium/webdriver/remote/bridge.rb
230
297
  - lib/selenium/webdriver/remote/capabilities.rb
298
+ - lib/selenium/webdriver/remote/commands.rb
231
299
  - lib/selenium/webdriver/remote/driver.rb
232
300
  - lib/selenium/webdriver/remote/http/common.rb
233
301
  - lib/selenium/webdriver/remote/http/curb.rb
@@ -268,7 +336,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
268
336
  requirements:
269
337
  - - ">="
270
338
  - !ruby/object:Gem::Version
271
- version: '2.0'
339
+ version: '2.3'
272
340
  required_rubygems_version: !ruby/object:Gem::Requirement
273
341
  requirements:
274
342
  - - ">"