selenium-webdriver 4.0.0.rc1 → 4.0.1
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 +4 -4
- data/CHANGES +60 -0
- data/README.md +1 -1
- data/lib/selenium/server.rb +62 -48
- data/lib/selenium/webdriver/atoms/findElements.js +2 -2
- data/lib/selenium/webdriver/atoms/getAttribute.js +25 -25
- data/lib/selenium/webdriver/chrome/driver.rb +3 -0
- data/lib/selenium/webdriver/chrome/features.rb +44 -4
- data/lib/selenium/webdriver/chrome/options.rb +24 -1
- data/lib/selenium/webdriver/common/driver.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_apple_permissions.rb +51 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_casting.rb +77 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_context.rb +45 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_launching.rb +38 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_network_conditions.rb +17 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_network_interception.rb +87 -18
- data/lib/selenium/webdriver/common/driver_extensions/has_permissions.rb +11 -11
- data/lib/selenium/webdriver/common/driver_extensions/prints_page.rb +1 -1
- data/lib/selenium/webdriver/common/log_entry.rb +2 -2
- data/lib/selenium/webdriver/common/manager.rb +3 -13
- data/lib/selenium/webdriver/common/options.rb +13 -5
- data/lib/selenium/webdriver/common/profile_helper.rb +1 -7
- data/lib/selenium/webdriver/common/socket_poller.rb +30 -19
- data/lib/selenium/webdriver/common/target_locator.rb +28 -0
- data/lib/selenium/webdriver/common/timeouts.rb +31 -4
- data/lib/selenium/webdriver/common/window.rb +0 -4
- data/lib/selenium/webdriver/common/zipper.rb +1 -9
- data/lib/selenium/webdriver/common.rb +4 -0
- data/lib/selenium/webdriver/devtools/request.rb +27 -17
- data/lib/selenium/webdriver/devtools/response.rb +66 -0
- data/lib/selenium/webdriver/devtools.rb +49 -12
- data/lib/selenium/webdriver/edge/features.rb +5 -0
- data/lib/selenium/webdriver/firefox/driver.rb +5 -0
- data/lib/selenium/webdriver/firefox/features.rb +14 -0
- data/lib/selenium/webdriver/firefox/options.rb +28 -1
- data/lib/selenium/webdriver/firefox.rb +0 -1
- data/lib/selenium/webdriver/remote/bridge.rb +9 -10
- data/lib/selenium/webdriver/remote/capabilities.rb +1 -0
- data/lib/selenium/webdriver/remote/commands.rb +1 -0
- data/lib/selenium/webdriver/remote/driver.rb +2 -1
- data/lib/selenium/webdriver/safari/driver.rb +1 -1
- data/lib/selenium/webdriver/safari/options.rb +7 -0
- data/lib/selenium/webdriver/version.rb +1 -1
- data/lib/selenium/webdriver.rb +1 -0
- data/selenium-webdriver.gemspec +2 -2
- metadata +14 -3
@@ -58,8 +58,10 @@ require 'selenium/webdriver/common/driver_extensions/has_remote_status'
|
|
58
58
|
require 'selenium/webdriver/common/driver_extensions/has_network_conditions'
|
59
59
|
require 'selenium/webdriver/common/driver_extensions/has_network_connection'
|
60
60
|
require 'selenium/webdriver/common/driver_extensions/has_network_interception'
|
61
|
+
require 'selenium/webdriver/common/driver_extensions/has_apple_permissions'
|
61
62
|
require 'selenium/webdriver/common/driver_extensions/has_permissions'
|
62
63
|
require 'selenium/webdriver/common/driver_extensions/has_debugger'
|
64
|
+
require 'selenium/webdriver/common/driver_extensions/has_context'
|
63
65
|
require 'selenium/webdriver/common/driver_extensions/prints_page'
|
64
66
|
require 'selenium/webdriver/common/driver_extensions/uploads_files'
|
65
67
|
require 'selenium/webdriver/common/driver_extensions/full_page_screenshot'
|
@@ -70,6 +72,8 @@ require 'selenium/webdriver/common/driver_extensions/has_logs'
|
|
70
72
|
require 'selenium/webdriver/common/driver_extensions/has_log_events'
|
71
73
|
require 'selenium/webdriver/common/driver_extensions/has_pinned_scripts'
|
72
74
|
require 'selenium/webdriver/common/driver_extensions/has_cdp'
|
75
|
+
require 'selenium/webdriver/common/driver_extensions/has_casting'
|
76
|
+
require 'selenium/webdriver/common/driver_extensions/has_launching'
|
73
77
|
require 'selenium/webdriver/common/keys'
|
74
78
|
require 'selenium/webdriver/common/profile_helper'
|
75
79
|
require 'selenium/webdriver/common/options'
|
@@ -22,33 +22,43 @@ module Selenium
|
|
22
22
|
class DevTools
|
23
23
|
class Request
|
24
24
|
|
25
|
-
|
25
|
+
attr_accessor :url, :method, :headers, :post_data
|
26
|
+
attr_reader :id
|
26
27
|
|
27
|
-
|
28
|
-
|
28
|
+
#
|
29
|
+
# Creates request from DevTools message.
|
30
|
+
# @api private
|
31
|
+
#
|
32
|
+
|
33
|
+
def self.from(id, params)
|
34
|
+
new(
|
35
|
+
id: id,
|
36
|
+
url: params.dig('request', 'url'),
|
37
|
+
method: params.dig('request', 'method'),
|
38
|
+
headers: params.dig('request', 'headers'),
|
39
|
+
post_data: params.dig('request', 'postData')
|
40
|
+
)
|
41
|
+
end
|
42
|
+
|
43
|
+
def initialize(id:, url:, method:, headers:, post_data:)
|
29
44
|
@id = id
|
30
45
|
@url = url
|
31
46
|
@method = method
|
32
47
|
@headers = headers
|
48
|
+
@post_data = post_data
|
33
49
|
end
|
34
50
|
|
35
|
-
def
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
body: Base64.strict_encode64(body),
|
43
|
-
response_code: code,
|
44
|
-
response_headers: headers.map do |k, v|
|
45
|
-
{name: k, value: v}
|
46
|
-
end
|
47
|
-
)
|
51
|
+
def ==(other)
|
52
|
+
self.class == other.class &&
|
53
|
+
id == other.id &&
|
54
|
+
url == other.url &&
|
55
|
+
method == other.method &&
|
56
|
+
headers == other.headers &&
|
57
|
+
post_data == other.post_data
|
48
58
|
end
|
49
59
|
|
50
60
|
def inspect
|
51
|
-
%(#<#{self.class.name} @method="#{method}" @url="#{url}")
|
61
|
+
%(#<#{self.class.name} @id="#{id}" @method="#{method}" @url="#{url}")
|
52
62
|
end
|
53
63
|
|
54
64
|
end # Request
|
@@ -0,0 +1,66 @@
|
|
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 DevTools
|
23
|
+
class Response
|
24
|
+
|
25
|
+
attr_accessor :code, :body, :headers
|
26
|
+
attr_reader :id
|
27
|
+
|
28
|
+
#
|
29
|
+
# Creates response from DevTools message.
|
30
|
+
# @api private
|
31
|
+
#
|
32
|
+
|
33
|
+
def self.from(id, encoded_body, params)
|
34
|
+
new(
|
35
|
+
id: id,
|
36
|
+
code: params['responseStatusCode'],
|
37
|
+
body: (Base64.strict_decode64(encoded_body) if encoded_body),
|
38
|
+
headers: params['responseHeaders'].each_with_object({}) do |header, hash|
|
39
|
+
hash[header['name']] = header['value']
|
40
|
+
end
|
41
|
+
)
|
42
|
+
end
|
43
|
+
|
44
|
+
def initialize(id:, code:, body:, headers:)
|
45
|
+
@id = id
|
46
|
+
@code = code
|
47
|
+
@body = body
|
48
|
+
@headers = headers
|
49
|
+
end
|
50
|
+
|
51
|
+
def ==(other)
|
52
|
+
self.class == other.class &&
|
53
|
+
id == other.id &&
|
54
|
+
code == other.code &&
|
55
|
+
body == other.body &&
|
56
|
+
headers == other.headers
|
57
|
+
end
|
58
|
+
|
59
|
+
def inspect
|
60
|
+
%(#<#{self.class.name} @id="#{id}" @code="#{code}")
|
61
|
+
end
|
62
|
+
|
63
|
+
end # Response
|
64
|
+
end # DevTools
|
65
|
+
end # WebDriver
|
66
|
+
end # Selenium
|
@@ -20,22 +20,34 @@
|
|
20
20
|
module Selenium
|
21
21
|
module WebDriver
|
22
22
|
class DevTools
|
23
|
+
RESPONSE_WAIT_TIMEOUT = 30
|
24
|
+
RESPONSE_WAIT_INTERVAL = 0.1
|
25
|
+
|
23
26
|
autoload :ConsoleEvent, 'selenium/webdriver/devtools/console_event'
|
24
27
|
autoload :ExceptionEvent, 'selenium/webdriver/devtools/exception_event'
|
25
28
|
autoload :MutationEvent, 'selenium/webdriver/devtools/mutation_event'
|
26
29
|
autoload :PinnedScript, 'selenium/webdriver/devtools/pinned_script'
|
27
30
|
autoload :Request, 'selenium/webdriver/devtools/request'
|
31
|
+
autoload :Response, 'selenium/webdriver/devtools/response'
|
28
32
|
|
29
33
|
def initialize(url:)
|
34
|
+
@callback_threads = ThreadGroup.new
|
35
|
+
|
30
36
|
@messages = []
|
31
37
|
@session_id = nil
|
32
38
|
@url = url
|
33
39
|
|
34
40
|
process_handshake
|
35
|
-
attach_socket_listener
|
41
|
+
@socket_thread = attach_socket_listener
|
36
42
|
start_session
|
37
43
|
end
|
38
44
|
|
45
|
+
def close
|
46
|
+
@callback_threads.list.each(&:exit)
|
47
|
+
@socket_thread.exit
|
48
|
+
socket.close
|
49
|
+
end
|
50
|
+
|
39
51
|
def callbacks
|
40
52
|
@callbacks ||= Hash.new { |callbacks, event| callbacks[event] = [] }
|
41
53
|
end
|
@@ -85,27 +97,24 @@ module Selenium
|
|
85
97
|
end
|
86
98
|
|
87
99
|
def attach_socket_listener
|
88
|
-
|
100
|
+
Thread.new do
|
101
|
+
Thread.current.abort_on_exception = true
|
102
|
+
Thread.current.report_on_exception = false
|
103
|
+
|
89
104
|
until socket.eof?
|
90
105
|
incoming_frame << socket.readpartial(1024)
|
91
106
|
|
92
107
|
while (frame = incoming_frame.next)
|
93
|
-
|
94
|
-
break if frame.to_s.empty?
|
95
|
-
|
96
|
-
message = JSON.parse(frame.to_s)
|
97
|
-
@messages << message
|
98
|
-
WebDriver.logger.debug "DevTools <- #{message}"
|
108
|
+
message = process_frame(frame)
|
99
109
|
next unless message['method']
|
100
110
|
|
111
|
+
params = message['params']
|
101
112
|
callbacks[message['method']].each do |callback|
|
102
|
-
params
|
103
|
-
Thread.new { callback.call(params) }
|
113
|
+
@callback_threads.add(callback_thread(params, &callback))
|
104
114
|
end
|
105
115
|
end
|
106
116
|
end
|
107
117
|
end
|
108
|
-
socket_listener.abort_on_exception = true
|
109
118
|
end
|
110
119
|
|
111
120
|
def start_session
|
@@ -119,8 +128,36 @@ module Selenium
|
|
119
128
|
@incoming_frame ||= WebSocket::Frame::Incoming::Client.new(version: ws.version)
|
120
129
|
end
|
121
130
|
|
131
|
+
def process_frame(frame)
|
132
|
+
message = frame.to_s
|
133
|
+
|
134
|
+
# Firefox will periodically fail on unparsable empty frame
|
135
|
+
return {} if message.empty?
|
136
|
+
|
137
|
+
message = JSON.parse(message)
|
138
|
+
@messages << message
|
139
|
+
WebDriver.logger.debug "DevTools <- #{message}"
|
140
|
+
|
141
|
+
message
|
142
|
+
end
|
143
|
+
|
144
|
+
def callback_thread(params)
|
145
|
+
Thread.new do
|
146
|
+
Thread.current.abort_on_exception = true
|
147
|
+
|
148
|
+
# We might end up blocked forever when we have an error in event.
|
149
|
+
# For example, if network interception event raises error,
|
150
|
+
# the browser will keep waiting for the request to be proceeded
|
151
|
+
# before returning back to the original thread. In this case,
|
152
|
+
# we should at least print the error.
|
153
|
+
Thread.current.report_on_exception = true
|
154
|
+
|
155
|
+
yield params
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
122
159
|
def wait
|
123
|
-
@wait ||= Wait.new(timeout:
|
160
|
+
@wait ||= Wait.new(timeout: RESPONSE_WAIT_TIMEOUT, interval: RESPONSE_WAIT_INTERVAL)
|
124
161
|
end
|
125
162
|
|
126
163
|
def socket
|
@@ -27,6 +27,11 @@ module Selenium
|
|
27
27
|
include WebDriver::Chrome::Features
|
28
28
|
|
29
29
|
EDGE_COMMANDS = {
|
30
|
+
get_cast_sinks: [:get, 'session/:session_id/ms/cast/get_sinks'],
|
31
|
+
set_cast_sink_to_use: [:post, 'session/:session_id/ms/cast/set_sink_to_use'],
|
32
|
+
start_cast_tab_mirroring: [:post, 'session/:session_id/ms/cast/start_tab_mirroring'],
|
33
|
+
get_cast_issue_message: [:get, 'session/:session_id/ms/cast/get_issue_message'],
|
34
|
+
stop_casting: [:post, 'session/:session_id/ms/cast/stop_casting'],
|
30
35
|
send_command: [:post, 'session/:session_id/ms/cdp/execute']
|
31
36
|
}.freeze
|
32
37
|
|
@@ -29,6 +29,7 @@ module Selenium
|
|
29
29
|
class Driver < WebDriver::Driver
|
30
30
|
EXTENSIONS = [DriverExtensions::HasAddons,
|
31
31
|
DriverExtensions::FullPageScreenshot,
|
32
|
+
DriverExtensions::HasContext,
|
32
33
|
DriverExtensions::HasDevTools,
|
33
34
|
DriverExtensions::HasLogEvents,
|
34
35
|
DriverExtensions::HasNetworkInterception,
|
@@ -42,6 +43,10 @@ module Selenium
|
|
42
43
|
private
|
43
44
|
|
44
45
|
def devtools_url
|
46
|
+
if capabilities['moz:debuggerAddress'].nil?
|
47
|
+
raise(Error::WebDriverError, "DevTools is not supported by this version of Firefox; use v85 or higher")
|
48
|
+
end
|
49
|
+
|
45
50
|
uri = URI("http://#{capabilities['moz:debuggerAddress']}")
|
46
51
|
response = Net::HTTP.get(uri.hostname, '/json/version', uri.port)
|
47
52
|
|
@@ -23,6 +23,8 @@ module Selenium
|
|
23
23
|
module Features
|
24
24
|
|
25
25
|
FIREFOX_COMMANDS = {
|
26
|
+
get_context: [:get, 'session/:session_id/moz/context'],
|
27
|
+
set_context: [:post, 'session/:session_id/moz/context'],
|
26
28
|
install_addon: [:post, 'session/:session_id/moz/addon/install'],
|
27
29
|
uninstall_addon: [:post, 'session/:session_id/moz/addon/uninstall'],
|
28
30
|
full_page_screenshot: [:get, 'session/:session_id/moz/screenshot/full']
|
@@ -33,6 +35,11 @@ module Selenium
|
|
33
35
|
end
|
34
36
|
|
35
37
|
def install_addon(path, temporary)
|
38
|
+
if @file_detector
|
39
|
+
local_file = @file_detector.call(path)
|
40
|
+
path = upload(local_file) if local_file
|
41
|
+
end
|
42
|
+
|
36
43
|
payload = {path: path}
|
37
44
|
payload[:temporary] = temporary unless temporary.nil?
|
38
45
|
execute :install_addon, {}, payload
|
@@ -46,6 +53,13 @@ module Selenium
|
|
46
53
|
execute :full_page_screenshot
|
47
54
|
end
|
48
55
|
|
56
|
+
def context=(context)
|
57
|
+
execute :set_context, {}, {context: context}
|
58
|
+
end
|
59
|
+
|
60
|
+
def context
|
61
|
+
execute :get_context
|
62
|
+
end
|
49
63
|
end # Bridge
|
50
64
|
end # Firefox
|
51
65
|
end # WebDriver
|
@@ -29,7 +29,11 @@ module Selenium
|
|
29
29
|
CAPABILITIES = {binary: 'binary',
|
30
30
|
args: 'args',
|
31
31
|
log: 'log',
|
32
|
-
prefs: 'prefs'
|
32
|
+
prefs: 'prefs',
|
33
|
+
android_package: 'androidPackage',
|
34
|
+
android_activity: 'androidActivity',
|
35
|
+
android_device_serial: 'androidDeviceSerial',
|
36
|
+
android_intent_arguments: 'androidIntentArguments'}.freeze
|
33
37
|
BROWSER = 'firefox'
|
34
38
|
|
35
39
|
# NOTE: special handling of 'profile' to validate when set instead of when used
|
@@ -131,6 +135,25 @@ module Selenium
|
|
131
135
|
@options[:log] = {level: level}
|
132
136
|
end
|
133
137
|
|
138
|
+
#
|
139
|
+
# Enables mobile browser use on Android.
|
140
|
+
#
|
141
|
+
# @see https://developer.mozilla.org/en-US/docs/Web/WebDriver/Capabilities/firefoxOptions#android
|
142
|
+
#
|
143
|
+
# @param [String] package The package name of the Chrome or WebView app.
|
144
|
+
# @param [String] serial_number The serial number of the device on which to launch the application.
|
145
|
+
# If not specified and multiple devices are attached, an error will be returned.
|
146
|
+
# @param [String] activity The fully qualified class name of the activity to be launched.
|
147
|
+
# @param [Array] intent_arguments Arguments to launch the intent with.
|
148
|
+
#
|
149
|
+
|
150
|
+
def enable_android(package: 'org.mozilla.firefox', serial_number: nil, activity: nil, intent_arguments: nil)
|
151
|
+
@options[:android_package] = package
|
152
|
+
@options[:android_activity] = activity unless activity.nil?
|
153
|
+
@options[:android_device_serial] = serial_number unless serial_number.nil?
|
154
|
+
@options[:android_intent_arguments] = intent_arguments unless intent_arguments.nil?
|
155
|
+
end
|
156
|
+
|
134
157
|
private
|
135
158
|
|
136
159
|
def process_browser_options(browser_options)
|
@@ -150,6 +173,10 @@ module Selenium
|
|
150
173
|
Profile.from_name(profile)
|
151
174
|
end
|
152
175
|
end
|
176
|
+
|
177
|
+
def camelize?(key)
|
178
|
+
key != :prefs
|
179
|
+
end
|
153
180
|
end # Options
|
154
181
|
end # Firefox
|
155
182
|
end # WebDriver
|
@@ -33,7 +33,6 @@ module Selenium
|
|
33
33
|
autoload :Service, 'selenium/webdriver/firefox/service'
|
34
34
|
|
35
35
|
DEFAULT_PORT = 7055
|
36
|
-
DEFAULT_ENABLE_NATIVE_EVENTS = Platform.os == :windows
|
37
36
|
DEFAULT_SECURE_SSL = false
|
38
37
|
DEFAULT_ASSUME_UNTRUSTED_ISSUER = true
|
39
38
|
DEFAULT_LOAD_NO_FOCUS_LIB = false
|
@@ -25,7 +25,7 @@ module Selenium
|
|
25
25
|
|
26
26
|
PORT = 4444
|
27
27
|
|
28
|
-
attr_accessor :
|
28
|
+
attr_accessor :http, :file_detector
|
29
29
|
attr_reader :capabilities
|
30
30
|
|
31
31
|
#
|
@@ -93,17 +93,16 @@ module Selenium
|
|
93
93
|
execute :get, {}, {url: url}
|
94
94
|
end
|
95
95
|
|
96
|
-
|
97
|
-
|
98
|
-
|
96
|
+
#
|
97
|
+
# timeouts
|
98
|
+
#
|
99
99
|
|
100
|
-
def
|
101
|
-
|
100
|
+
def timeouts
|
101
|
+
execute :get_timeouts, {}
|
102
102
|
end
|
103
103
|
|
104
|
-
def
|
105
|
-
|
106
|
-
execute :set_timeout, {}, {type => milliseconds}
|
104
|
+
def timeouts=(timeouts)
|
105
|
+
execute :set_timeout, {}, timeouts
|
107
106
|
end
|
108
107
|
|
109
108
|
#
|
@@ -658,7 +657,7 @@ module Selenium
|
|
658
657
|
# @see https://mathiasbynens.be/notes/css-escapes
|
659
658
|
def escape_css(string)
|
660
659
|
string = string.gsub(ESCAPE_CSS_REGEXP) { |match| "\\#{match}" }
|
661
|
-
string = "\\#{UNICODE_CODE_POINT + Integer(string[0])} #{string[1
|
660
|
+
string = "\\#{UNICODE_CODE_POINT + Integer(string[0])} #{string[1..]}" if string[0]&.match?(/[[:digit:]]/)
|
662
661
|
|
663
662
|
string
|
664
663
|
end
|
@@ -52,7 +52,8 @@ module Selenium
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def devtools_version
|
55
|
-
capabilities['se:cdpVersion']
|
55
|
+
capabilities['se:cdpVersion']&.split('.')&.first ||
|
56
|
+
raise(Error::WebDriverError, "DevTools is not supported by the Remote Server")
|
56
57
|
end
|
57
58
|
end # Driver
|
58
59
|
end # Remote
|
@@ -28,6 +28,13 @@ module Selenium
|
|
28
28
|
automatic_profiling: 'safari:automaticProfiling'}.freeze
|
29
29
|
BROWSER = 'safari'
|
30
30
|
|
31
|
+
def add_option(name, value = nil)
|
32
|
+
key = name.is_a?(Hash) ? name.keys.first : name
|
33
|
+
raise ArgumentError, 'Safari does not support options that are not namespaced' unless key.to_s.include?(':')
|
34
|
+
|
35
|
+
super
|
36
|
+
end
|
37
|
+
|
31
38
|
end # Options
|
32
39
|
end # Safari
|
33
40
|
end # WebDriver
|
data/lib/selenium/webdriver.rb
CHANGED
data/selenium-webdriver.gemspec
CHANGED
@@ -28,7 +28,7 @@ Gem::Specification.new do |s|
|
|
28
28
|
}
|
29
29
|
|
30
30
|
s.required_rubygems_version = Gem::Requirement.new('> 1.3.1') if s.respond_to? :required_rubygems_version=
|
31
|
-
s.required_ruby_version = Gem::Requirement.new('>= 2.
|
31
|
+
s.required_ruby_version = Gem::Requirement.new('>= 2.6')
|
32
32
|
|
33
33
|
s.files = [
|
34
34
|
'CHANGES',
|
@@ -45,7 +45,7 @@ Gem::Specification.new do |s|
|
|
45
45
|
s.require_paths = ['lib']
|
46
46
|
|
47
47
|
s.add_runtime_dependency 'childprocess', ['>= 0.5', '< 5.0']
|
48
|
-
s.add_runtime_dependency 'rexml', ['~> 3.2']
|
48
|
+
s.add_runtime_dependency 'rexml', ['~> 3.2', '>= 3.2.5']
|
49
49
|
s.add_runtime_dependency 'rubyzip', ['>= 1.2.2']
|
50
50
|
|
51
51
|
# childprocess requires ffi on windows but doesn't declare it in its dependencies
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: selenium-webdriver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.
|
4
|
+
version: 4.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Rodionov
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2021-
|
13
|
+
date: 2021-10-19 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: childprocess
|
@@ -39,6 +39,9 @@ dependencies:
|
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '3.2'
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 3.2.5
|
42
45
|
type: :runtime
|
43
46
|
prerelease: false
|
44
47
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -46,6 +49,9 @@ dependencies:
|
|
46
49
|
- - "~>"
|
47
50
|
- !ruby/object:Gem::Version
|
48
51
|
version: '3.2'
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 3.2.5
|
49
55
|
- !ruby/object:Gem::Dependency
|
50
56
|
name: rubyzip
|
51
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -252,10 +258,14 @@ files:
|
|
252
258
|
- lib/selenium/webdriver/common/driver_extensions/downloads_files.rb
|
253
259
|
- lib/selenium/webdriver/common/driver_extensions/full_page_screenshot.rb
|
254
260
|
- lib/selenium/webdriver/common/driver_extensions/has_addons.rb
|
261
|
+
- lib/selenium/webdriver/common/driver_extensions/has_apple_permissions.rb
|
255
262
|
- lib/selenium/webdriver/common/driver_extensions/has_authentication.rb
|
263
|
+
- lib/selenium/webdriver/common/driver_extensions/has_casting.rb
|
256
264
|
- lib/selenium/webdriver/common/driver_extensions/has_cdp.rb
|
265
|
+
- lib/selenium/webdriver/common/driver_extensions/has_context.rb
|
257
266
|
- lib/selenium/webdriver/common/driver_extensions/has_debugger.rb
|
258
267
|
- lib/selenium/webdriver/common/driver_extensions/has_devtools.rb
|
268
|
+
- lib/selenium/webdriver/common/driver_extensions/has_launching.rb
|
259
269
|
- lib/selenium/webdriver/common/driver_extensions/has_location.rb
|
260
270
|
- lib/selenium/webdriver/common/driver_extensions/has_log_events.rb
|
261
271
|
- lib/selenium/webdriver/common/driver_extensions/has_logs.rb
|
@@ -312,6 +322,7 @@ files:
|
|
312
322
|
- lib/selenium/webdriver/devtools/mutation_event.rb
|
313
323
|
- lib/selenium/webdriver/devtools/pinned_script.rb
|
314
324
|
- lib/selenium/webdriver/devtools/request.rb
|
325
|
+
- lib/selenium/webdriver/devtools/response.rb
|
315
326
|
- lib/selenium/webdriver/edge.rb
|
316
327
|
- lib/selenium/webdriver/edge/driver.rb
|
317
328
|
- lib/selenium/webdriver/edge/features.rb
|
@@ -375,7 +386,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
375
386
|
requirements:
|
376
387
|
- - ">="
|
377
388
|
- !ruby/object:Gem::Version
|
378
|
-
version: '2.
|
389
|
+
version: '2.6'
|
379
390
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
380
391
|
requirements:
|
381
392
|
- - ">"
|