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.
- checksums.yaml +7 -0
- data/CHANGES +665 -8
- data/Gemfile +2 -0
- data/LICENSE +1 -1
- data/README.md +2 -3
- data/lib/selenium/server.rb +76 -73
- data/lib/selenium/webdriver/atoms/getAttribute.js +7 -0
- data/lib/selenium/webdriver/atoms/isDisplayed.js +102 -0
- data/lib/selenium/webdriver/{phantomjs.rb → atoms.rb} +10 -14
- data/lib/selenium/webdriver/chrome/bridge.rb +30 -101
- data/lib/selenium/webdriver/chrome/driver.rb +127 -0
- data/lib/selenium/webdriver/chrome/options.rb +190 -0
- data/lib/selenium/webdriver/chrome/profile.rb +21 -20
- data/lib/selenium/webdriver/chrome/service.rb +26 -93
- data/lib/selenium/webdriver/chrome.rb +15 -6
- data/lib/selenium/webdriver/common/action_builder.rb +52 -58
- data/lib/selenium/webdriver/common/alert.rb +7 -15
- data/lib/selenium/webdriver/common/bridge_helper.rb +18 -22
- data/lib/selenium/webdriver/common/driver.rb +72 -72
- data/lib/selenium/webdriver/common/driver_extensions/downloads_files.rb +45 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_addons.rb +50 -0
- data/lib/selenium/webdriver/common/driver_extensions/{has_input_devices.rb → has_debugger.rb} +11 -27
- data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +6 -10
- data/lib/selenium/webdriver/common/driver_extensions/has_network_conditions.rb +51 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +7 -8
- data/lib/selenium/webdriver/common/driver_extensions/has_permissions.rb +51 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +2 -4
- data/lib/selenium/webdriver/common/driver_extensions/has_session_id.rb +2 -4
- data/lib/selenium/webdriver/common/driver_extensions/has_touch_screen.rb +3 -5
- data/lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb +2 -5
- data/lib/selenium/webdriver/common/driver_extensions/rotatable.rb +6 -9
- data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +9 -7
- data/lib/selenium/webdriver/common/driver_extensions/uploads_files.rb +3 -8
- data/lib/selenium/webdriver/common/element.rb +59 -39
- data/lib/selenium/webdriver/common/error.rb +259 -104
- data/lib/selenium/webdriver/common/file_reaper.rb +6 -14
- data/lib/selenium/webdriver/common/html5/local_storage.rb +8 -10
- data/lib/selenium/webdriver/common/html5/session_storage.rb +8 -10
- data/lib/selenium/webdriver/common/html5/shared_web_storage.rb +8 -16
- data/lib/selenium/webdriver/common/interactions/input_device.rb +54 -0
- data/lib/selenium/webdriver/common/interactions/interaction.rb +53 -0
- data/lib/selenium/webdriver/{safari/browser.rb → common/interactions/interactions.rb} +17 -14
- data/lib/selenium/webdriver/common/interactions/key_actions.rb +145 -0
- data/lib/selenium/webdriver/common/interactions/key_input.rb +66 -0
- data/lib/selenium/webdriver/{android.rb → common/interactions/none_input.rb} +14 -6
- data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +363 -0
- data/lib/selenium/webdriver/common/interactions/pointer_input.rb +139 -0
- data/lib/selenium/webdriver/common/keyboard.rb +10 -14
- data/lib/selenium/webdriver/common/keys.rb +102 -82
- data/lib/selenium/webdriver/common/log_entry.rb +7 -8
- data/lib/selenium/webdriver/common/logger.rb +115 -0
- data/lib/selenium/webdriver/common/logs.rb +4 -6
- data/lib/selenium/webdriver/common/manager.rb +177 -0
- data/lib/selenium/webdriver/common/mouse.rb +12 -14
- data/lib/selenium/webdriver/common/navigation.rb +4 -6
- data/lib/selenium/webdriver/common/options.rb +26 -127
- data/lib/selenium/webdriver/common/platform.rb +75 -101
- data/lib/selenium/webdriver/common/port_prober.rb +7 -19
- data/lib/selenium/webdriver/common/profile_helper.rb +8 -11
- data/lib/selenium/webdriver/common/proxy.rb +68 -74
- data/lib/selenium/webdriver/common/search_context.rb +28 -37
- data/lib/selenium/webdriver/common/service.rb +219 -0
- data/lib/selenium/webdriver/common/socket_lock.rb +15 -16
- data/lib/selenium/webdriver/common/socket_poller.rb +30 -28
- data/lib/selenium/webdriver/common/target_locator.rb +16 -18
- data/lib/selenium/webdriver/common/timeouts.rb +6 -8
- data/lib/selenium/webdriver/common/touch_action_builder.rb +5 -10
- data/lib/selenium/webdriver/common/touch_screen.rb +22 -23
- data/lib/selenium/webdriver/common/w3c_action_builder.rb +212 -0
- data/lib/selenium/webdriver/common/w3c_manager.rb +45 -0
- data/lib/selenium/webdriver/common/wait.rb +17 -16
- data/lib/selenium/webdriver/common/window.rb +50 -17
- data/lib/selenium/webdriver/common/zipper.rb +9 -13
- data/lib/selenium/webdriver/common.rb +21 -7
- data/lib/selenium/webdriver/edge/bridge.rb +34 -63
- data/lib/selenium/webdriver/edge/driver.rb +66 -0
- data/lib/selenium/webdriver/edge/options.rb +80 -0
- data/lib/selenium/webdriver/edge/service.rb +23 -95
- data/lib/selenium/webdriver/edge.rb +13 -13
- data/lib/selenium/webdriver/firefox/binary.rb +45 -60
- data/lib/selenium/webdriver/firefox/driver.rb +50 -0
- data/lib/selenium/webdriver/firefox/extension/prefs.json +3 -12
- data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
- data/lib/selenium/webdriver/firefox/extension.rb +20 -10
- data/lib/selenium/webdriver/firefox/launcher.rb +16 -22
- data/lib/selenium/webdriver/firefox/legacy/driver.rb +83 -0
- data/lib/selenium/webdriver/firefox/marionette/bridge.rb +49 -0
- data/lib/selenium/webdriver/firefox/marionette/driver.rb +90 -0
- data/lib/selenium/webdriver/firefox/options.rb +162 -0
- data/lib/selenium/webdriver/firefox/profile.rb +47 -48
- data/lib/selenium/webdriver/firefox/profiles_ini.rb +11 -18
- data/lib/selenium/webdriver/firefox/service.rb +24 -95
- data/lib/selenium/webdriver/firefox/util.rb +2 -4
- data/lib/selenium/webdriver/firefox.rb +27 -12
- data/lib/selenium/webdriver/ie/driver.rb +85 -0
- data/lib/selenium/webdriver/ie/options.rb +138 -0
- data/lib/selenium/webdriver/ie/service.rb +54 -0
- data/lib/selenium/webdriver/ie.rb +12 -10
- data/lib/selenium/webdriver/remote/bridge.rb +100 -564
- data/lib/selenium/webdriver/remote/capabilities.rb +98 -100
- data/lib/selenium/webdriver/remote/driver.rb +51 -0
- data/lib/selenium/webdriver/remote/http/common.rb +34 -22
- data/lib/selenium/webdriver/remote/http/curb.rb +13 -14
- data/lib/selenium/webdriver/remote/http/default.rb +62 -43
- data/lib/selenium/webdriver/remote/http/persistent.rb +12 -9
- data/lib/selenium/webdriver/remote/oss/bridge.rb +594 -0
- data/lib/selenium/webdriver/remote/oss/commands.rb +223 -0
- data/lib/selenium/webdriver/remote/response.rb +48 -28
- data/lib/selenium/webdriver/remote/server_error.rb +3 -5
- data/lib/selenium/webdriver/remote/w3c/bridge.rb +605 -0
- data/lib/selenium/webdriver/remote/w3c/capabilities.rb +310 -0
- data/lib/selenium/webdriver/remote/w3c/commands.rb +157 -0
- data/lib/selenium/webdriver/remote.rb +10 -16
- data/lib/selenium/webdriver/safari/bridge.rb +17 -101
- data/lib/selenium/webdriver/{firefox/w3c_bridge.rb → safari/driver.rb} +27 -25
- data/lib/selenium/webdriver/safari/options.rb +29 -31
- data/lib/selenium/webdriver/safari/service.rb +38 -0
- data/lib/selenium/webdriver/safari.rb +27 -27
- data/lib/selenium/webdriver/support/abstract_event_listener.rb +19 -4
- data/lib/selenium/webdriver/support/block_event_listener.rb +3 -5
- data/lib/selenium/webdriver/support/color.rb +60 -43
- data/lib/selenium/webdriver/support/escaper.rb +43 -0
- data/lib/selenium/webdriver/support/event_firing_bridge.rb +39 -41
- data/lib/selenium/webdriver/support/select.rb +45 -97
- data/lib/selenium/webdriver/support.rb +3 -2
- data/lib/selenium/webdriver/{iphone.rb → version.rb} +3 -7
- data/lib/selenium/webdriver.rb +36 -23
- data/lib/selenium-webdriver.rb +2 -2
- data/selenium-webdriver.gemspec +42 -29
- metadata +331 -262
- data/lib/selenium/client/base.rb +0 -151
- data/lib/selenium/client/driver.rb +0 -29
- data/lib/selenium/client/errors.rb +0 -28
- data/lib/selenium/client/extensions.rb +0 -132
- data/lib/selenium/client/idiomatic.rb +0 -507
- data/lib/selenium/client/javascript_expression_builder.rb +0 -135
- data/lib/selenium/client/javascript_frameworks/jquery.rb +0 -32
- data/lib/selenium/client/javascript_frameworks/prototype.rb +0 -32
- data/lib/selenium/client/legacy_driver.rb +0 -1722
- data/lib/selenium/client/protocol.rb +0 -123
- data/lib/selenium/client/selenium_helper.rb +0 -49
- data/lib/selenium/client.rb +0 -57
- data/lib/selenium/rake/server_task.rb +0 -176
- data/lib/selenium/webdriver/android/bridge.rb +0 -68
- data/lib/selenium/webdriver/common/core_ext/base64.rb +0 -28
- data/lib/selenium/webdriver/common/core_ext/dir.rb +0 -61
- data/lib/selenium/webdriver/common/html5/location.rb +0 -19
- data/lib/selenium/webdriver/common/w3c_error.rb +0 -194
- data/lib/selenium/webdriver/edge/legacy_support.rb +0 -117
- data/lib/selenium/webdriver/firefox/bridge.rb +0 -89
- data/lib/selenium/webdriver/ie/bridge.rb +0 -88
- data/lib/selenium/webdriver/ie/server.rb +0 -133
- data/lib/selenium/webdriver/iphone/bridge.rb +0 -64
- data/lib/selenium/webdriver/phantomjs/bridge.rb +0 -78
- data/lib/selenium/webdriver/phantomjs/service.rb +0 -130
- data/lib/selenium/webdriver/remote/commands.rb +0 -211
- data/lib/selenium/webdriver/remote/w3c_bridge.rb +0 -668
- data/lib/selenium/webdriver/remote/w3c_capabilities.rb +0 -236
- data/lib/selenium/webdriver/remote/w3c_commands.rb +0 -132
- data/lib/selenium/webdriver/safari/resources/client.js +0 -7255
- data/lib/selenium/webdriver/safari/server.rb +0 -187
- data/lib/selenium-client.rb +0 -21
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
#
|
|
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
|
-
|
|
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 ==
|
|
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
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
-
|
|
81
|
-
|
|
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.
|
|
87
|
-
raise Error::WebDriverError,
|
|
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
|
-
|
|
113
|
-
|
|
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?(
|
|
132
|
-
Proxy.new(:
|
|
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(
|
|
142
|
-
host ==
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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
|
-
|
|
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
|
-
#
|
|
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
|
|
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)
|
|
41
|
-
|
|
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
|
|
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
|