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
@@ -17,19 +19,23 @@
17
19
 
18
20
  require 'selenium/webdriver/ie/driver'
19
21
  require 'selenium/webdriver/ie/options'
20
- require 'selenium/webdriver/ie/service'
21
22
 
22
23
  module Selenium
23
24
  module WebDriver
24
25
  module IE
25
26
  def self.driver_path=(path)
26
- Platform.assert_executable path
27
- @driver_path = path
27
+ WebDriver.logger.deprecate 'Selenium::WebDriver::IE#driver_path=',
28
+ 'Selenium::WebDriver::IE::Service#driver_path='
29
+ Selenium::WebDriver::IE::Service.driver_path = path
28
30
  end
29
31
 
30
32
  def self.driver_path
31
- @driver_path ||= nil
33
+ WebDriver.logger.deprecate 'Selenium::WebDriver::IE#driver_path',
34
+ 'Selenium::WebDriver::IE::Service#driver_path'
35
+ Selenium::WebDriver::IE::Service.driver_path
32
36
  end
33
37
  end # IE
34
38
  end # WebDriver
35
39
  end # Selenium
40
+
41
+ require 'selenium/webdriver/ie/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
@@ -24,7 +26,7 @@ module Selenium
24
26
 
25
27
  PORT = 4444
26
28
  COMMANDS = {
27
- new_session: [:post, 'session'.freeze]
29
+ new_session: [:post, 'session']
28
30
  }.freeze
29
31
 
30
32
  attr_accessor :context, :http, :file_detector
@@ -46,6 +48,7 @@ module Selenium
46
48
  unless Capabilities.respond_to?(desired_capabilities)
47
49
  raise Error::WebDriverError, "invalid desired capability: #{desired_capabilities.inspect}"
48
50
  end
51
+
49
52
  desired_capabilities = Capabilities.__send__(desired_capabilities)
50
53
  end
51
54
 
@@ -54,9 +57,9 @@ module Selenium
54
57
 
55
58
  case bridge.dialect
56
59
  when :oss
57
- Remote::OSS::Bridge.new(capabilities, bridge.session_id, opts)
60
+ Remote::OSS::Bridge.new(capabilities, bridge.session_id, **opts)
58
61
  when :w3c
59
- Remote::W3C::Bridge.new(capabilities, bridge.session_id, opts)
62
+ Remote::W3C::Bridge.new(capabilities, bridge.session_id, **opts)
60
63
  else
61
64
  raise WebDriverError, 'cannot understand dialect'
62
65
  end
@@ -112,9 +115,7 @@ module Selenium
112
115
  end
113
116
  end
114
117
 
115
- unless @session_id
116
- raise Error::WebDriverError, 'no sessionId in returned payload'
117
- end
118
+ raise Error::WebDriverError, 'no sessionId in returned payload' unless @session_id
118
119
 
119
120
  if oss_status
120
121
  WebDriver.logger.info 'Detected OSS dialect.'
@@ -172,6 +173,7 @@ module Selenium
172
173
 
173
174
  def commands(command)
174
175
  raise NotImplementedError unless command == :new_session
176
+
175
177
  COMMANDS[command]
176
178
  end
177
179
 
@@ -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
@@ -44,6 +46,7 @@ module Selenium
44
46
  end
45
47
 
46
48
  next if key == :proxy
49
+
47
50
  define_method "#{key}=" do |value|
48
51
  @capabilities[key] = value
49
52
  end
@@ -80,14 +83,21 @@ module Selenium
80
83
  def edge(opts = {})
81
84
  new({
82
85
  browser_name: 'MicrosoftEdge',
83
- platform: :windows,
84
- javascript_enabled: true,
85
- takes_screenshot: true,
86
- css_selectors_enabled: true
86
+ platform: :windows
87
87
  }.merge(opts))
88
88
  end
89
89
 
90
90
  def firefox(opts = {})
91
+ opts[:browser_version] = opts.delete(:version) if opts.key?(:version)
92
+ opts[:platform_name] = opts.delete(:platform) if opts.key?(:platform)
93
+ opts[:timeouts] = {}
94
+ opts[:timeouts]['implicit'] = opts.delete(:implicit_timeout) if opts.key?(:implicit_timeout)
95
+ opts[:timeouts]['pageLoad'] = opts.delete(:page_load_timeout) if opts.key?(:page_load_timeout)
96
+ opts[:timeouts]['script'] = opts.delete(:script_timeout) if opts.key?(:script_timeout)
97
+ new({browser_name: 'firefox', marionette: true}.merge(opts))
98
+ end
99
+
100
+ def firefox_legacy(opts = {})
91
101
  new({
92
102
  browser_name: 'firefox',
93
103
  javascript_enabled: true,
@@ -175,10 +185,6 @@ module Selenium
175
185
  # @option :native_events [Boolean] does this driver use native events?
176
186
  # @option :proxy [Selenium::WebDriver::Proxy, Hash] proxy configuration
177
187
  #
178
- # Firefox-specific options:
179
- #
180
- # @option :firefox_profile [Selenium::WebDriver::Firefox::Profile] the firefox profile to use
181
- #
182
188
  # @api public
183
189
  #
184
190
 
@@ -224,7 +230,7 @@ module Selenium
224
230
  # @api private
225
231
  #
226
232
 
227
- def as_json(*)
233
+ def as_json(*) # rubocop:disable Metrics/CyclomaticComplexity
228
234
  hash = {}
229
235
 
230
236
  @capabilities.each do |key, value|
@@ -232,10 +238,16 @@ module Selenium
232
238
  when :platform
233
239
  hash['platform'] = value.to_s.upcase
234
240
  when :firefox_profile
235
- hash['firefox_profile'] = value.as_json['zip'] if value
241
+ if value
242
+ WebDriver.logger.deprecate(':firefox_profile capabilitiy', 'Selenium::WebDriver::Firefox::Options#profile')
243
+ hash['firefox_profile'] = value.as_json['zip']
244
+ end
236
245
  when :proxy
237
246
  hash['proxy'] = value.as_json if value
238
247
  when String, :firefox_binary
248
+ if key == :firefox_binary && value
249
+ WebDriver.logger.deprecate(':firefox_binary capabilitiy', 'Selenium::WebDriver::Firefox::Options#binary')
250
+ end
239
251
  hash[key.to_s] = value
240
252
  when Symbol
241
253
  hash[camel_case(key.to_s)] = value
@@ -253,6 +265,7 @@ module Selenium
253
265
 
254
266
  def ==(other)
255
267
  return false unless other.is_a? self.class
268
+
256
269
  as_json == other.as_json
257
270
  end
258
271
  alias_method :eql?, :==
@@ -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
@@ -21,7 +23,7 @@ module Selenium
21
23
  module Http
22
24
  class Common
23
25
  MAX_REDIRECTS = 20 # same as chromium/gecko
24
- CONTENT_TYPE = 'application/json'.freeze
26
+ CONTENT_TYPE = 'application/json'
25
27
  DEFAULT_HEADERS = {
26
28
  'Accept' => CONTENT_TYPE,
27
29
  'Content-Type' => "#{CONTENT_TYPE}; charset=UTF-8",
@@ -50,7 +52,7 @@ module Selenium
50
52
 
51
53
  if command_hash
52
54
  payload = JSON.generate(command_hash)
53
- headers['Content-Length'] = payload.bytesize.to_s if [:post, :put].include?(verb)
55
+ headers['Content-Length'] = payload.bytesize.to_s if %i[post put].include?(verb)
54
56
 
55
57
  WebDriver.logger.info(" >>> #{url} | #{payload}")
56
58
  WebDriver.logger.debug(" > #{headers.inspect}")
@@ -66,6 +68,7 @@ module Selenium
66
68
 
67
69
  def server_url
68
70
  return @server_url if @server_url
71
+
69
72
  raise Error::WebDriverError, 'server_url not set'
70
73
  end
71
74
 
@@ -81,12 +84,16 @@ module Selenium
81
84
 
82
85
  if content_type.include? CONTENT_TYPE
83
86
  raise Error::WebDriverError, "empty body: #{content_type.inspect} (#{code})\n#{body}" if body.empty?
87
+
84
88
  Response.new(code, JSON.parse(body))
85
89
  elsif code == 204
86
90
  Response.new(code)
87
91
  else
88
- msg = "unexpected response, code=#{code}, content-type=#{content_type.inspect}"
89
- msg << "\n#{body}" unless body.empty?
92
+ msg = if body.empty?
93
+ "unexpected response, code=#{code}, content-type=#{content_type.inspect}"
94
+ else
95
+ "unexpected response, code=#{code}, content-type=#{content_type.inspect}\n#{body}"
96
+ end
90
97
 
91
98
  raise Error::WebDriverError, msg
92
99
  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
@@ -77,7 +79,7 @@ module Selenium
77
79
  end
78
80
 
79
81
  def client
80
- @client ||= (
82
+ @client ||= begin
81
83
  c = Curl::Easy.new
82
84
 
83
85
  c.max_redirects = MAX_REDIRECTS
@@ -86,7 +88,7 @@ module Selenium
86
88
  c.verbose = WebDriver.logger.info?
87
89
 
88
90
  c
89
- )
91
+ end
90
92
  end
91
93
  end # Curb
92
94
  end # Http
@@ -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,22 +50,26 @@ module Selenium
48
50
  self.read_timeout = value
49
51
  end
50
52
 
53
+ def close
54
+ @http&.finish
55
+ end
56
+
51
57
  private
52
58
 
53
59
  def http
54
- @http ||= (
55
- http = new_http_client
56
- if server_url.scheme == 'https'
57
- http.use_ssl = true
58
- http.verify_mode = OpenSSL::SSL::VERIFY_NONE
59
- end
60
+ @http ||= begin
61
+ http = new_http_client
62
+ if server_url.scheme == 'https'
63
+ http.use_ssl = true
64
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
65
+ end
60
66
 
61
- # Defaulting open_timeout to nil to be consistent with Ruby 2.2 and earlier.
62
- http.open_timeout = self.open_timeout
63
- http.read_timeout = self.read_timeout if self.read_timeout
67
+ # Defaulting open_timeout to nil to be consistent with Ruby 2.2 and earlier.
68
+ http.open_timeout = open_timeout
69
+ http.read_timeout = read_timeout if read_timeout
64
70
 
65
- http
66
- )
71
+ http.start
72
+ end
67
73
  end
68
74
 
69
75
  MAX_RETRIES = 3
@@ -83,22 +89,26 @@ module Selenium
83
89
  #
84
90
  # http://msdn.microsoft.com/en-us/library/aa560610%28v=bts.20%29.aspx
85
91
  raise if retries >= MAX_RETRIES
92
+
86
93
  retries += 1
87
94
  sleep 2
88
95
  retry
89
96
  rescue Errno::EADDRNOTAVAIL => ex
90
97
  # a retry is sometimes needed when the port becomes temporarily unavailable
91
98
  raise if retries >= MAX_RETRIES
99
+
92
100
  retries += 1
93
101
  sleep 2
94
102
  retry
95
103
  rescue Errno::ECONNREFUSED => ex
96
104
  raise ex.class, "using proxy: #{proxy.http}" if use_proxy?
105
+
97
106
  raise
98
107
  end
99
108
 
100
109
  if response.is_a? Net::HTTPRedirection
101
110
  raise Error::WebDriverError, 'too many redirects' if redirects >= MAX_REDIRECTS
111
+
102
112
  request(:get, URI.parse(response['Location']), DEFAULT_HEADERS.dup, nil, redirects + 1)
103
113
  else
104
114
  create_response response.code, response.body, response.content_type
@@ -108,9 +118,7 @@ module Selenium
108
118
  def new_request_for(verb, url, headers, payload)
109
119
  req = Net::HTTP.const_get(verb.to_s.capitalize).new(url.path, headers)
110
120
 
111
- if server_url.userinfo
112
- req.basic_auth server_url.user, server_url.password
113
- end
121
+ req.basic_auth server_url.user, server_url.password if server_url.userinfo
114
122
 
115
123
  req.body = payload if payload
116
124
 
@@ -124,9 +132,7 @@ module Selenium
124
132
  def new_http_client
125
133
  if use_proxy?
126
134
  url = @proxy.http
127
- unless proxy.respond_to?(:http) && url
128
- raise Error::WebDriverError, "expected HTTP proxy, got #{@proxy.inspect}"
129
- end
135
+ raise Error::WebDriverError, "expected HTTP proxy, got #{@proxy.inspect}" unless proxy.respond_to?(:http) && url
130
136
 
131
137
  proxy = URI.parse(url)
132
138
 
@@ -138,15 +144,15 @@ module Selenium
138
144
  end
139
145
 
140
146
  def proxy
141
- @proxy ||= (
142
- proxy = ENV['http_proxy'] || ENV['HTTP_PROXY']
143
- no_proxy = ENV['no_proxy'] || ENV['NO_PROXY']
147
+ @proxy ||= begin
148
+ proxy = ENV['http_proxy'] || ENV['HTTP_PROXY']
149
+ no_proxy = ENV['no_proxy'] || ENV['NO_PROXY']
144
150
 
145
- if proxy
146
- proxy = "http://#{proxy}" unless proxy.start_with?('http://')
147
- Proxy.new(http: proxy, no_proxy: no_proxy)
151
+ if proxy
152
+ proxy = "http://#{proxy}" unless proxy.start_with?('http://')
153
+ Proxy.new(http: proxy, no_proxy: no_proxy)
154
+ end
148
155
  end
149
- )
150
156
  end
151
157
 
152
158
  def use_proxy?
@@ -161,7 +167,7 @@ module Selenium
161
167
  rescue ArgumentError
162
168
  false
163
169
  end
164
- )
170
+ )
165
171
  end
166
172
 
167
173
  !ignored
@@ -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,7 +26,7 @@ module Selenium
24
26
  # @api private
25
27
  class Persistent < Default
26
28
  def close
27
- @http.shutdown if @http
29
+ @http&.shutdown
28
30
  end
29
31
 
30
32
  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
@@ -279,8 +281,8 @@ module Selenium
279
281
  # cookies
280
282
  #
281
283
 
282
- def options
283
- @options ||= WebDriver::Options.new(self)
284
+ def manage
285
+ @manage ||= WebDriver::Manager.new(self)
284
286
  end
285
287
 
286
288
  def add_cookie(cookie)
@@ -571,6 +573,7 @@ module Selenium
571
573
 
572
574
  def assert_javascript_enabled
573
575
  return if capabilities.javascript_enabled?
576
+
574
577
  raise Error::UnsupportedOperationError, 'underlying webdriver instance does not support javascript'
575
578
  end
576
579