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
@@ -45,16 +47,21 @@ module Selenium
45
47
  private
46
48
 
47
49
  def lock
48
- max_time = Time.now + @timeout
50
+ max_time = current_time + @timeout
49
51
 
50
- sleep 0.1 until can_lock? || Time.now >= max_time
52
+ sleep 0.1 until can_lock? || current_time >= max_time
51
53
 
52
54
  return if did_lock?
55
+
53
56
  raise Error::WebDriverError, "unable to bind to locking port #{@port} within #{@timeout} seconds"
54
57
  end
55
58
 
59
+ def current_time
60
+ Process.clock_gettime(Process::CLOCK_MONOTONIC)
61
+ end
62
+
56
63
  def release
57
- @server && @server.close
64
+ @server&.close
58
65
  end
59
66
 
60
67
  def can_lock?
@@ -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
@@ -54,64 +56,59 @@ module Selenium
54
56
 
55
57
  CONNECT_TIMEOUT = 5
56
58
 
57
- NOT_CONNECTED_ERRORS = [Errno::ECONNREFUSED, Errno::ENOTCONN, SocketError]
58
- NOT_CONNECTED_ERRORS << Errno::EPERM if Platform.cygwin?
59
-
60
- CONNECTED_ERRORS = [Errno::EISCONN]
61
- CONNECTED_ERRORS << Errno::EINVAL if Platform.windows?
62
- CONNECTED_ERRORS << Errno::EALREADY if Platform.wsl?
63
-
64
- if Platform.jruby?
65
- # we use a plain TCPSocket here since JRuby has issues select()ing on a connecting socket
66
- # see http://jira.codehaus.org/browse/JRUBY-5165
67
- def listening?
68
- TCPSocket.new(@host, @port).close
69
- true
70
- rescue *NOT_CONNECTED_ERRORS
71
- false
72
- end
73
- else
74
- def listening?
75
- addr = Socket.getaddrinfo(@host, @port, Socket::AF_INET, Socket::SOCK_STREAM)
76
- sock = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
77
- sockaddr = Socket.pack_sockaddr_in(@port, addr[0][3])
78
-
79
- begin
80
- sock.connect_nonblock sockaddr
81
- rescue Errno::EINPROGRESS
82
- retry if IO.select(nil, [sock], nil, CONNECT_TIMEOUT)
83
- raise Errno::ECONNREFUSED
84
- rescue *CONNECTED_ERRORS
85
- # yay!
86
- end
87
-
88
- sock.close
89
- true
90
- rescue *NOT_CONNECTED_ERRORS
91
- sock.close if sock
92
- WebDriver.logger.debug("polling for socket on #{[@host, @port].inspect}")
93
- false
59
+ NOT_CONNECTED_ERRORS = [Errno::ECONNREFUSED, Errno::ENOTCONN, SocketError].tap { |arr|
60
+ arr << Errno::EPERM if Platform.cygwin?
61
+ }.freeze
62
+
63
+ CONNECTED_ERRORS = [Errno::EISCONN].tap { |arr|
64
+ arr << Errno::EINVAL if Platform.windows?
65
+ arr << Errno::EALREADY if Platform.wsl?
66
+ }.freeze
67
+
68
+ def listening?
69
+ addr = Socket.getaddrinfo(@host, @port, Socket::AF_INET, Socket::SOCK_STREAM)
70
+ sock = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
71
+ sockaddr = Socket.pack_sockaddr_in(@port, addr[0][3])
72
+
73
+ begin
74
+ sock.connect_nonblock sockaddr
75
+ rescue Errno::EINPROGRESS
76
+ retry if socket_writable?(sock) && conn_completed?(sock)
77
+ raise Errno::ECONNREFUSED
78
+ rescue *CONNECTED_ERRORS
79
+ # yay!
94
80
  end
81
+
82
+ sock.close
83
+ true
84
+ rescue *NOT_CONNECTED_ERRORS
85
+ sock&.close
86
+ WebDriver.logger.debug("polling for socket on #{[@host, @port].inspect}")
87
+ false
88
+ end
89
+
90
+ def socket_writable?(sock)
91
+ IO.select(nil, [sock], nil, CONNECT_TIMEOUT)
92
+ end
93
+
94
+ def conn_completed?(sock)
95
+ sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_ERROR).int.zero?
95
96
  end
96
97
 
97
98
  def with_timeout
98
- max_time = time_now + @timeout
99
+ max_time = current_time + @timeout
99
100
 
100
- (
101
+ until current_time > max_time
101
102
  return true if yield
102
- wait
103
- ) until time_now > max_time
104
103
 
105
- false
106
- end
104
+ sleep @interval
105
+ end
107
106
 
108
- def wait
109
- sleep @interval
107
+ false
110
108
  end
111
109
 
112
- # for testability
113
- def time_now
114
- Time.now
110
+ def current_time
111
+ Process.clock_gettime(Process::CLOCK_MONOTONIC)
115
112
  end
116
113
  end # SocketPoller
117
114
  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
@@ -55,10 +57,10 @@ module Selenium
55
57
  def window(id)
56
58
  if block_given?
57
59
  original = begin
58
- @bridge.window_handle
59
- rescue Error::NoSuchWindowError
60
- nil
61
- end
60
+ @bridge.window_handle
61
+ rescue Error::NoSuchWindowError
62
+ nil
63
+ end
62
64
 
63
65
  unless @bridge.window_handles.include? id
64
66
  raise Error::NoSuchWindowError, "The specified identifier '#{id}' is not found in the window handle list"
@@ -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,23 +25,20 @@ module Selenium
23
25
  #
24
26
 
25
27
  def initialize(mouse, keyboard, touch_screen)
28
+ WebDriver.logger.deprecate(self.class.name)
26
29
  super(mouse, keyboard)
27
30
  @devices[:touch_screen] = touch_screen
28
31
  end
29
32
 
30
33
  def scroll(*args)
31
- unless [2, 3].include? args.size
32
- raise ArgumentError, "wrong number of arguments, expected 2..3, got #{args.size}"
33
- end
34
+ raise ArgumentError, "wrong number of arguments, expected 2..3, got #{args.size}" unless [2, 3].include? args.size
34
35
 
35
36
  @actions << [:touch_screen, :scroll, args]
36
37
  self
37
38
  end
38
39
 
39
40
  def flick(*args)
40
- unless [2, 4].include? args.size
41
- raise ArgumentError, "wrong number of arguments, expected 2 or 4, got #{args.size}"
42
- end
41
+ raise ArgumentError, "wrong number of arguments, expected 2 or 4, got #{args.size}" unless [2, 4].include? args.size
43
42
 
44
43
  @actions << [:touch_screen, :flick, args]
45
44
  self
@@ -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
@@ -82,7 +84,7 @@ module Selenium
82
84
 
83
85
  assert_element element
84
86
 
85
- if (speed.is_a?(String) || speed.is_a?(Symbol)) && FLICK_SPEED.keys.include?(speed.to_sym)
87
+ if (speed.is_a?(String) || speed.is_a?(Symbol)) && FLICK_SPEED.key?(speed.to_sym)
86
88
  WebDriver.logger.deprecate "Passing #{speed.inspect} speed",
87
89
  "Integer or Selenium::WebDriver::TouchScreen::FLICK_SPEED[:#{speed}]"
88
90
  speed = FLICK_SPEED[speed.to_sym]
@@ -113,6 +115,7 @@ module Selenium
113
115
 
114
116
  def assert_element(element)
115
117
  return if element.is_a? Element
118
+
116
119
  raise TypeError, "expected #{Element}, got #{element.inspect}:#{element.class}"
117
120
  end
118
121
  end # TouchScreen
@@ -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
@@ -190,6 +192,7 @@ module Selenium
190
192
 
191
193
  def tick(*action_devices)
192
194
  return if @async
195
+
193
196
  @devices.each { |device| device.create_pause unless action_devices.include? device }
194
197
  end
195
198
 
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Licensed to the Software Freedom Conservancy (SFC) under one
4
+ # or more contributor license agreements. See the NOTICE file
5
+ # distributed with this work for additional information
6
+ # regarding copyright ownership. The SFC licenses this file
7
+ # to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance
9
+ # with the License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing,
14
+ # software distributed under the License is distributed on an
15
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ # KIND, either express or implied. See the License for the
17
+ # specific language governing permissions and limitations
18
+ # under the License.
19
+
20
+ module Selenium
21
+ module WebDriver
22
+ class W3CManager < Manager
23
+
24
+ #
25
+ # Get the cookie with the given name
26
+ #
27
+ # @param [String] name the name of the cookie
28
+ # @return [Hash, nil] the cookie, or nil if it wasn't found.
29
+ #
30
+
31
+ def cookie_named(name)
32
+ convert_cookie(@bridge.cookie(name))
33
+ end
34
+
35
+ #
36
+ # Delete all cookies
37
+ #
38
+
39
+ def delete_all_cookies
40
+ @bridge.delete_all_cookies
41
+ end
42
+
43
+ end # WC3Options
44
+ end # WebDriver
45
+ 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
@@ -46,10 +48,10 @@ module Selenium
46
48
  #
47
49
 
48
50
  def until
49
- end_time = Time.now + @timeout
51
+ end_time = current_time + @timeout
50
52
  last_error = nil
51
53
 
52
- until Time.now > end_time
54
+ until current_time > end_time
53
55
  begin
54
56
  result = yield
55
57
  return result if result
@@ -63,13 +65,19 @@ module Selenium
63
65
  msg = if @message
64
66
  @message.dup
65
67
  else
66
- "timed out after #{@timeout} seconds"
68
+ +"timed out after #{@timeout} seconds"
67
69
  end
68
70
 
69
71
  msg << " (#{last_error.message})" if last_error
70
72
 
71
73
  raise Error::TimeOutError, msg
72
74
  end
75
+
76
+ private
77
+
78
+ def current_time
79
+ Process.clock_gettime(Process::CLOCK_MONOTONIC)
80
+ end
73
81
  end # Wait
74
82
  end # WebDriver
75
83
  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
@@ -50,9 +52,7 @@ module Selenium
50
52
  def zip(path)
51
53
  with_tmp_zip do |zip|
52
54
  ::Find.find(path) do |file|
53
- unless File.directory?(file)
54
- add_zip_entry zip, file, file.sub("#{path}/", '')
55
- end
55
+ add_zip_entry zip, file, file.sub("#{path}/", '') unless File.directory?(file)
56
56
  end
57
57
 
58
58
  zip.commit
@@ -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
@@ -20,19 +22,23 @@ require 'net/http'
20
22
  require 'selenium/webdriver/edge/bridge'
21
23
  require 'selenium/webdriver/edge/driver'
22
24
  require 'selenium/webdriver/edge/options'
23
- require 'selenium/webdriver/edge/service'
24
25
 
25
26
  module Selenium
26
27
  module WebDriver
27
28
  module Edge
28
29
  def self.driver_path=(path)
29
- Platform.assert_executable path
30
- @driver_path = path
30
+ WebDriver.logger.deprecate 'Selenium::WebDriver::Edge#driver_path=',
31
+ 'Selenium::WebDriver::Edge::Service#driver_path='
32
+ Selenium::WebDriver::Edge::Service.driver_path = path
31
33
  end
32
34
 
33
- def self.driver_path(warning = true)
34
- @driver_path ||= nil
35
+ def self.driver_path
36
+ WebDriver.logger.deprecate 'Selenium::WebDriver::Edge#driver_path',
37
+ 'Selenium::WebDriver::Edge::Service#driver_path'
38
+ Selenium::WebDriver::Edge::Service.driver_path
35
39
  end
36
40
  end # Edge
37
41
  end # WebDriver
38
42
  end # Selenium
43
+
44
+ require 'selenium/webdriver/edge/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
@@ -28,18 +30,9 @@ module Selenium
28
30
  include DriverExtensions::TakesScreenshot
29
31
 
30
32
  def initialize(opts = {})
31
- opts[:desired_capabilities] ||= Remote::W3C::Capabilities.edge
32
-
33
- unless opts.key?(:url)
34
- driver_path = opts.delete(:driver_path) || Edge.driver_path
35
- driver_opts = opts.delete(:driver_opts) || {}
36
- port = opts.delete(:port) || Service::DEFAULT_PORT
33
+ opts[:desired_capabilities] ||= Remote::Capabilities.edge
37
34
 
38
- @service = Service.new(driver_path, port, driver_opts)
39
- @service.host = 'localhost' if @service.host == '127.0.0.1'
40
- @service.start
41
- opts[:url] = @service.uri
42
- end
35
+ opts[:url] ||= service_url(opts)
43
36
 
44
37
  listener = opts.delete(:listener)
45
38
 
@@ -64,7 +57,7 @@ module Selenium
64
57
  def quit
65
58
  super
66
59
  ensure
67
- @service.stop if @service
60
+ @service&.stop
68
61
  end
69
62
 
70
63
  end # Driver
@@ -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
@@ -55,6 +57,7 @@ module Selenium
55
57
 
56
58
  def add_extension_path(path)
57
59
  raise Error::WebDriverError, "could not find extension at #{path.inspect}" unless File.directory?(path)
60
+
58
61
  @extension_paths << path
59
62
  end
60
63