selenium-webdriver 2.53.3 → 3.142.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGES +665 -8
  3. data/Gemfile +2 -0
  4. data/LICENSE +1 -1
  5. data/README.md +2 -3
  6. data/lib/selenium/server.rb +76 -73
  7. data/lib/selenium/webdriver/atoms/getAttribute.js +7 -0
  8. data/lib/selenium/webdriver/atoms/isDisplayed.js +102 -0
  9. data/lib/selenium/webdriver/{phantomjs.rb → atoms.rb} +10 -14
  10. data/lib/selenium/webdriver/chrome/bridge.rb +30 -101
  11. data/lib/selenium/webdriver/chrome/driver.rb +127 -0
  12. data/lib/selenium/webdriver/chrome/options.rb +190 -0
  13. data/lib/selenium/webdriver/chrome/profile.rb +21 -20
  14. data/lib/selenium/webdriver/chrome/service.rb +26 -93
  15. data/lib/selenium/webdriver/chrome.rb +15 -6
  16. data/lib/selenium/webdriver/common/action_builder.rb +52 -58
  17. data/lib/selenium/webdriver/common/alert.rb +7 -15
  18. data/lib/selenium/webdriver/common/bridge_helper.rb +18 -22
  19. data/lib/selenium/webdriver/common/driver.rb +72 -72
  20. data/lib/selenium/webdriver/common/driver_extensions/downloads_files.rb +45 -0
  21. data/lib/selenium/webdriver/common/driver_extensions/has_addons.rb +50 -0
  22. data/lib/selenium/webdriver/common/driver_extensions/{has_input_devices.rb → has_debugger.rb} +11 -27
  23. data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +6 -10
  24. data/lib/selenium/webdriver/common/driver_extensions/has_network_conditions.rb +51 -0
  25. data/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +7 -8
  26. data/lib/selenium/webdriver/common/driver_extensions/has_permissions.rb +51 -0
  27. data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +2 -4
  28. data/lib/selenium/webdriver/common/driver_extensions/has_session_id.rb +2 -4
  29. data/lib/selenium/webdriver/common/driver_extensions/has_touch_screen.rb +3 -5
  30. data/lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb +2 -5
  31. data/lib/selenium/webdriver/common/driver_extensions/rotatable.rb +6 -9
  32. data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +9 -7
  33. data/lib/selenium/webdriver/common/driver_extensions/uploads_files.rb +3 -8
  34. data/lib/selenium/webdriver/common/element.rb +59 -39
  35. data/lib/selenium/webdriver/common/error.rb +259 -104
  36. data/lib/selenium/webdriver/common/file_reaper.rb +6 -14
  37. data/lib/selenium/webdriver/common/html5/local_storage.rb +8 -10
  38. data/lib/selenium/webdriver/common/html5/session_storage.rb +8 -10
  39. data/lib/selenium/webdriver/common/html5/shared_web_storage.rb +8 -16
  40. data/lib/selenium/webdriver/common/interactions/input_device.rb +54 -0
  41. data/lib/selenium/webdriver/common/interactions/interaction.rb +53 -0
  42. data/lib/selenium/webdriver/{safari/browser.rb → common/interactions/interactions.rb} +17 -14
  43. data/lib/selenium/webdriver/common/interactions/key_actions.rb +145 -0
  44. data/lib/selenium/webdriver/common/interactions/key_input.rb +66 -0
  45. data/lib/selenium/webdriver/{android.rb → common/interactions/none_input.rb} +14 -6
  46. data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +363 -0
  47. data/lib/selenium/webdriver/common/interactions/pointer_input.rb +139 -0
  48. data/lib/selenium/webdriver/common/keyboard.rb +10 -14
  49. data/lib/selenium/webdriver/common/keys.rb +102 -82
  50. data/lib/selenium/webdriver/common/log_entry.rb +7 -8
  51. data/lib/selenium/webdriver/common/logger.rb +115 -0
  52. data/lib/selenium/webdriver/common/logs.rb +4 -6
  53. data/lib/selenium/webdriver/common/manager.rb +177 -0
  54. data/lib/selenium/webdriver/common/mouse.rb +12 -14
  55. data/lib/selenium/webdriver/common/navigation.rb +4 -6
  56. data/lib/selenium/webdriver/common/options.rb +26 -127
  57. data/lib/selenium/webdriver/common/platform.rb +75 -101
  58. data/lib/selenium/webdriver/common/port_prober.rb +7 -19
  59. data/lib/selenium/webdriver/common/profile_helper.rb +8 -11
  60. data/lib/selenium/webdriver/common/proxy.rb +68 -74
  61. data/lib/selenium/webdriver/common/search_context.rb +28 -37
  62. data/lib/selenium/webdriver/common/service.rb +219 -0
  63. data/lib/selenium/webdriver/common/socket_lock.rb +15 -16
  64. data/lib/selenium/webdriver/common/socket_poller.rb +30 -28
  65. data/lib/selenium/webdriver/common/target_locator.rb +16 -18
  66. data/lib/selenium/webdriver/common/timeouts.rb +6 -8
  67. data/lib/selenium/webdriver/common/touch_action_builder.rb +5 -10
  68. data/lib/selenium/webdriver/common/touch_screen.rb +22 -23
  69. data/lib/selenium/webdriver/common/w3c_action_builder.rb +212 -0
  70. data/lib/selenium/webdriver/common/w3c_manager.rb +45 -0
  71. data/lib/selenium/webdriver/common/wait.rb +17 -16
  72. data/lib/selenium/webdriver/common/window.rb +50 -17
  73. data/lib/selenium/webdriver/common/zipper.rb +9 -13
  74. data/lib/selenium/webdriver/common.rb +21 -7
  75. data/lib/selenium/webdriver/edge/bridge.rb +34 -63
  76. data/lib/selenium/webdriver/edge/driver.rb +66 -0
  77. data/lib/selenium/webdriver/edge/options.rb +80 -0
  78. data/lib/selenium/webdriver/edge/service.rb +23 -95
  79. data/lib/selenium/webdriver/edge.rb +13 -13
  80. data/lib/selenium/webdriver/firefox/binary.rb +45 -60
  81. data/lib/selenium/webdriver/firefox/driver.rb +50 -0
  82. data/lib/selenium/webdriver/firefox/extension/prefs.json +3 -12
  83. data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
  84. data/lib/selenium/webdriver/firefox/extension.rb +20 -10
  85. data/lib/selenium/webdriver/firefox/launcher.rb +16 -22
  86. data/lib/selenium/webdriver/firefox/legacy/driver.rb +83 -0
  87. data/lib/selenium/webdriver/firefox/marionette/bridge.rb +49 -0
  88. data/lib/selenium/webdriver/firefox/marionette/driver.rb +90 -0
  89. data/lib/selenium/webdriver/firefox/options.rb +162 -0
  90. data/lib/selenium/webdriver/firefox/profile.rb +47 -48
  91. data/lib/selenium/webdriver/firefox/profiles_ini.rb +11 -18
  92. data/lib/selenium/webdriver/firefox/service.rb +24 -95
  93. data/lib/selenium/webdriver/firefox/util.rb +2 -4
  94. data/lib/selenium/webdriver/firefox.rb +27 -12
  95. data/lib/selenium/webdriver/ie/driver.rb +85 -0
  96. data/lib/selenium/webdriver/ie/options.rb +138 -0
  97. data/lib/selenium/webdriver/ie/service.rb +54 -0
  98. data/lib/selenium/webdriver/ie.rb +12 -10
  99. data/lib/selenium/webdriver/remote/bridge.rb +100 -564
  100. data/lib/selenium/webdriver/remote/capabilities.rb +98 -100
  101. data/lib/selenium/webdriver/remote/driver.rb +51 -0
  102. data/lib/selenium/webdriver/remote/http/common.rb +34 -22
  103. data/lib/selenium/webdriver/remote/http/curb.rb +13 -14
  104. data/lib/selenium/webdriver/remote/http/default.rb +62 -43
  105. data/lib/selenium/webdriver/remote/http/persistent.rb +12 -9
  106. data/lib/selenium/webdriver/remote/oss/bridge.rb +594 -0
  107. data/lib/selenium/webdriver/remote/oss/commands.rb +223 -0
  108. data/lib/selenium/webdriver/remote/response.rb +48 -28
  109. data/lib/selenium/webdriver/remote/server_error.rb +3 -5
  110. data/lib/selenium/webdriver/remote/w3c/bridge.rb +605 -0
  111. data/lib/selenium/webdriver/remote/w3c/capabilities.rb +310 -0
  112. data/lib/selenium/webdriver/remote/w3c/commands.rb +157 -0
  113. data/lib/selenium/webdriver/remote.rb +10 -16
  114. data/lib/selenium/webdriver/safari/bridge.rb +17 -101
  115. data/lib/selenium/webdriver/{firefox/w3c_bridge.rb → safari/driver.rb} +27 -25
  116. data/lib/selenium/webdriver/safari/options.rb +29 -31
  117. data/lib/selenium/webdriver/safari/service.rb +38 -0
  118. data/lib/selenium/webdriver/safari.rb +27 -27
  119. data/lib/selenium/webdriver/support/abstract_event_listener.rb +19 -4
  120. data/lib/selenium/webdriver/support/block_event_listener.rb +3 -5
  121. data/lib/selenium/webdriver/support/color.rb +60 -43
  122. data/lib/selenium/webdriver/support/escaper.rb +43 -0
  123. data/lib/selenium/webdriver/support/event_firing_bridge.rb +39 -41
  124. data/lib/selenium/webdriver/support/select.rb +45 -97
  125. data/lib/selenium/webdriver/support.rb +3 -2
  126. data/lib/selenium/webdriver/{iphone.rb → version.rb} +3 -7
  127. data/lib/selenium/webdriver.rb +36 -23
  128. data/lib/selenium-webdriver.rb +2 -2
  129. data/selenium-webdriver.gemspec +42 -29
  130. metadata +331 -262
  131. data/lib/selenium/client/base.rb +0 -151
  132. data/lib/selenium/client/driver.rb +0 -29
  133. data/lib/selenium/client/errors.rb +0 -28
  134. data/lib/selenium/client/extensions.rb +0 -132
  135. data/lib/selenium/client/idiomatic.rb +0 -507
  136. data/lib/selenium/client/javascript_expression_builder.rb +0 -135
  137. data/lib/selenium/client/javascript_frameworks/jquery.rb +0 -32
  138. data/lib/selenium/client/javascript_frameworks/prototype.rb +0 -32
  139. data/lib/selenium/client/legacy_driver.rb +0 -1722
  140. data/lib/selenium/client/protocol.rb +0 -123
  141. data/lib/selenium/client/selenium_helper.rb +0 -49
  142. data/lib/selenium/client.rb +0 -57
  143. data/lib/selenium/rake/server_task.rb +0 -176
  144. data/lib/selenium/webdriver/android/bridge.rb +0 -68
  145. data/lib/selenium/webdriver/common/core_ext/base64.rb +0 -28
  146. data/lib/selenium/webdriver/common/core_ext/dir.rb +0 -61
  147. data/lib/selenium/webdriver/common/html5/location.rb +0 -19
  148. data/lib/selenium/webdriver/common/w3c_error.rb +0 -194
  149. data/lib/selenium/webdriver/edge/legacy_support.rb +0 -117
  150. data/lib/selenium/webdriver/firefox/bridge.rb +0 -89
  151. data/lib/selenium/webdriver/ie/bridge.rb +0 -88
  152. data/lib/selenium/webdriver/ie/server.rb +0 -133
  153. data/lib/selenium/webdriver/iphone/bridge.rb +0 -64
  154. data/lib/selenium/webdriver/phantomjs/bridge.rb +0 -78
  155. data/lib/selenium/webdriver/phantomjs/service.rb +0 -130
  156. data/lib/selenium/webdriver/remote/commands.rb +0 -211
  157. data/lib/selenium/webdriver/remote/w3c_bridge.rb +0 -668
  158. data/lib/selenium/webdriver/remote/w3c_capabilities.rb +0 -236
  159. data/lib/selenium/webdriver/remote/w3c_commands.rb +0 -132
  160. data/lib/selenium/webdriver/safari/resources/client.js +0 -7255
  161. data/lib/selenium/webdriver/safari/server.rb +0 -187
  162. data/lib/selenium-client.rb +0 -21
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
4
  # or more contributor license agreements. See the NOTICE file
5
5
  # distributed with this work for additional information
@@ -24,28 +24,52 @@ module Selenium
24
24
  module WebDriver
25
25
  module Remote
26
26
  module Http
27
-
28
27
  # @api private
29
28
  class Default < Common
30
- attr_accessor :proxy
29
+ attr_writer :proxy
30
+
31
+ attr_accessor :open_timeout
32
+ attr_accessor :read_timeout
33
+
34
+ # Initializes object.
35
+ # Warning: Setting {#open_timeout} to non-nil values will cause a separate thread to spawn.
36
+ # Debuggers that freeze the process will not be able to evaluate any operations if that happens.
37
+ # @param [Numeric] open_timeout - Open timeout to apply to HTTP client.
38
+ # @param [Numeric] read_timeout - Read timeout (seconds) to apply to HTTP client.
39
+ def initialize(open_timeout: nil, read_timeout: nil)
40
+ @open_timeout = open_timeout
41
+ @read_timeout = read_timeout
42
+ end
43
+
44
+ # Maintaining backward compatibility.
45
+ # @param [Numeric] value - Timeout in seconds to apply to both open timeout and read timeouts.
46
+ # @deprecated Please set the specific desired timeout {#read_timeout} or {#open_timeout} directly.
47
+ def timeout=(value)
48
+ WebDriver.logger.deprecate ':timeout=', '#read_timeout= and #open_timeout='
49
+ self.open_timeout = value
50
+ self.read_timeout = value
51
+ end
52
+
53
+ def close
54
+ @http&.finish
55
+ end
31
56
 
32
57
  private
33
58
 
34
59
  def http
35
- @http ||= (
60
+ @http ||= begin
36
61
  http = new_http_client
37
- if server_url.scheme == "https"
62
+ if server_url.scheme == 'https'
38
63
  http.use_ssl = true
39
64
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
40
65
  end
41
66
 
42
- if @timeout
43
- http.open_timeout = @timeout
44
- http.read_timeout = @timeout
45
- end
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
46
70
 
47
- http
48
- )
71
+ http.start
72
+ end
49
73
  end
50
74
 
51
75
  MAX_RETRIES = 3
@@ -65,26 +89,26 @@ module Selenium
65
89
  #
66
90
  # http://msdn.microsoft.com/en-us/library/aa560610%28v=bts.20%29.aspx
67
91
  raise if retries >= MAX_RETRIES
68
- retries += 1
69
92
 
93
+ retries += 1
94
+ sleep 2
70
95
  retry
71
96
  rescue Errno::EADDRNOTAVAIL => ex
72
97
  # a retry is sometimes needed when the port becomes temporarily unavailable
73
98
  raise if retries >= MAX_RETRIES
99
+
74
100
  retries += 1
75
101
  sleep 2
76
102
  retry
77
-
78
103
  rescue Errno::ECONNREFUSED => ex
79
- if use_proxy?
80
- raise ex.class, "using proxy: #{proxy.http}"
81
- else
82
- raise
83
- end
104
+ raise ex.class, "using proxy: #{proxy.http}" if use_proxy?
105
+
106
+ raise
84
107
  end
85
108
 
86
- if response.kind_of? Net::HTTPRedirection
87
- raise Error::WebDriverError, "too many redirects" if redirects >= MAX_REDIRECTS
109
+ if response.is_a? Net::HTTPRedirection
110
+ raise Error::WebDriverError, 'too many redirects' if redirects >= MAX_REDIRECTS
111
+
88
112
  request(:get, URI.parse(response['Location']), DEFAULT_HEADERS.dup, nil, redirects + 1)
89
113
  else
90
114
  create_response response.code, response.body, response.content_type
@@ -94,9 +118,7 @@ module Selenium
94
118
  def new_request_for(verb, url, headers, payload)
95
119
  req = Net::HTTP.const_get(verb.to_s.capitalize).new(url.path, headers)
96
120
 
97
- if server_url.userinfo
98
- req.basic_auth server_url.user, server_url.password
99
- end
121
+ req.basic_auth server_url.user, server_url.password if server_url.userinfo
100
122
 
101
123
  req.body = payload if payload
102
124
 
@@ -109,9 +131,8 @@ module Selenium
109
131
 
110
132
  def new_http_client
111
133
  if use_proxy?
112
- unless proxy.respond_to?(:http) && url = @proxy.http
113
- raise Error::WebDriverError, "expected HTTP proxy, got #{@proxy.inspect}"
114
- end
134
+ url = @proxy.http
135
+ raise Error::WebDriverError, "expected HTTP proxy, got #{@proxy.inspect}" unless proxy.respond_to?(:http) && url
115
136
 
116
137
  proxy = URI.parse(url)
117
138
 
@@ -123,39 +144,37 @@ module Selenium
123
144
  end
124
145
 
125
146
  def proxy
126
- @proxy ||= (
147
+ @proxy ||= begin
127
148
  proxy = ENV['http_proxy'] || ENV['HTTP_PROXY']
128
149
  no_proxy = ENV['no_proxy'] || ENV['NO_PROXY']
129
150
 
130
151
  if proxy
131
- proxy = "http://#{proxy}" unless proxy.start_with?("http://")
132
- Proxy.new(:http => proxy, :no_proxy => no_proxy)
152
+ proxy = "http://#{proxy}" unless proxy.start_with?('http://')
153
+ Proxy.new(http: proxy, no_proxy: no_proxy)
133
154
  end
134
- )
155
+ end
135
156
  end
136
157
 
137
158
  def use_proxy?
138
159
  return false if proxy.nil?
139
160
 
140
161
  if proxy.no_proxy
141
- ignored = proxy.no_proxy.split(",").any? do |host|
142
- host == "*" ||
143
- host == server_url.host || (
144
- begin
145
- IPAddr.new(host).include?(server_url.host)
146
- rescue ArgumentError
147
- false
148
- end
149
- )
150
-
162
+ ignored = proxy.no_proxy.split(',').any? do |host|
163
+ host == '*' ||
164
+ host == server_url.host || (
165
+ begin
166
+ IPAddr.new(host).include?(server_url.host)
167
+ rescue ArgumentError
168
+ false
169
+ end
170
+ )
151
171
  end
152
172
 
153
- not ignored
173
+ !ignored
154
174
  else
155
175
  true
156
176
  end
157
177
  end
158
-
159
178
  end # Default
160
179
  end # Http
161
180
  end # Remote
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
4
  # or more contributor license agreements. See the NOTICE file
5
5
  # distributed with this work for additional information
@@ -23,12 +23,10 @@ module Selenium
23
23
  module WebDriver
24
24
  module Remote
25
25
  module Http
26
-
27
26
  # @api private
28
27
  class Persistent < Default
29
-
30
28
  def close
31
- @http.shutdown if @http
29
+ @http&.shutdown
32
30
  end
33
31
 
34
32
  private
@@ -37,19 +35,24 @@ module Selenium
37
35
  proxy = nil
38
36
 
39
37
  if @proxy
40
- unless @proxy.respond_to?(:http) && url = @proxy.http
41
- raise Error::WebDriverError, "expected HTTP proxy, got #{@proxy.inspect}"
38
+ unless @proxy.respond_to?(:http)
39
+ url = @proxy.http
40
+ raise Error::WebDriverError, "expected HTTP proxy, got #{@proxy.inspect}" unless url
42
41
  end
43
42
  proxy = URI.parse(url)
44
43
  end
45
44
 
46
- Net::HTTP::Persistent.new "webdriver", proxy
45
+ if Net::HTTP::Persistent::VERSION >= '3'
46
+ Net::HTTP::Persistent.new name: 'webdriver', proxy: proxy
47
+ else
48
+ WebDriver.logger.warn 'Support for this version of net-http-persistent is deprecated. Please upgrade.'
49
+ Net::HTTP::Persistent.new 'webdriver', proxy
50
+ end
47
51
  end
48
52
 
49
53
  def response_for(request)
50
54
  http.request server_url, request
51
55
  end
52
-
53
56
  end # Persistent
54
57
  end # Http
55
58
  end # Remote