selenium-webdriver 4.26.0 → 4.28.0
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 +20 -0
- data/LICENSE +1 -1
- data/NOTICE +1 -1
- data/README.md +1 -1
- data/bin/linux/selenium-manager +0 -0
- data/bin/macos/selenium-manager +0 -0
- data/bin/windows/selenium-manager.exe +0 -0
- data/lib/selenium/server.rb +3 -3
- data/lib/selenium/webdriver/atoms/findElements.js +41 -39
- data/lib/selenium/webdriver/bidi/browsing_context.rb +61 -49
- data/lib/selenium/webdriver/bidi/log_handler.rb +2 -0
- data/lib/selenium/webdriver/bidi/log_inspector.rb +4 -4
- data/lib/selenium/webdriver/bidi/network.rb +82 -0
- data/lib/selenium/webdriver/bidi/struct.rb +2 -4
- data/lib/selenium/webdriver/bidi.rb +3 -2
- data/lib/selenium/webdriver/common/child_process.rb +20 -14
- data/lib/selenium/webdriver/common/driver.rb +9 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_log_events.rb +7 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_network_interception.rb +9 -2
- data/lib/selenium/webdriver/common/error.rb +3 -1
- data/lib/selenium/webdriver/common/fedcm/account.rb +2 -3
- data/lib/selenium/webdriver/common/logger.rb +2 -2
- data/lib/selenium/webdriver/common/manager.rb +1 -1
- data/lib/selenium/webdriver/common/network.rb +64 -0
- data/lib/selenium/webdriver/common/script.rb +4 -4
- data/lib/selenium/webdriver/common/service_manager.rb +1 -0
- data/lib/selenium/webdriver/common/target_locator.rb +2 -0
- data/lib/selenium/webdriver/common.rb +1 -0
- data/lib/selenium/webdriver/remote/bidi_bridge.rb +22 -0
- data/lib/selenium/webdriver/remote/bridge.rb +3 -3
- data/lib/selenium/webdriver/remote/http/common.rb +2 -0
- data/lib/selenium/webdriver/support/guards.rb +2 -2
- data/lib/selenium/webdriver/version.rb +1 -1
- data/selenium-webdriver.gemspec +4 -2
- metadata +11 -9
- data/lib/selenium/webdriver/bidi/browsing_context_info.rb +0 -35
- data/lib/selenium/webdriver/bidi/navigate_result.rb +0 -33
@@ -0,0 +1,82 @@
|
|
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 BiDi
|
23
|
+
class Network
|
24
|
+
EVENTS = {
|
25
|
+
before_request: 'network.beforeRequestSent',
|
26
|
+
response_started: 'network.responseStarted',
|
27
|
+
response_completed: 'network.responseCompleted',
|
28
|
+
auth_required: 'network.authRequired',
|
29
|
+
fetch_error: 'network.fetchError'
|
30
|
+
}.freeze
|
31
|
+
|
32
|
+
PHASES = {
|
33
|
+
before_request: 'beforeRequestSent',
|
34
|
+
response_started: 'responseStarted',
|
35
|
+
auth_required: 'authRequired'
|
36
|
+
}.freeze
|
37
|
+
|
38
|
+
def initialize(bidi)
|
39
|
+
@bidi = bidi
|
40
|
+
end
|
41
|
+
|
42
|
+
def add_intercept(phases: [], contexts: nil, url_patterns: nil)
|
43
|
+
@bidi.send_cmd('network.addIntercept', phases: phases, contexts: contexts, urlPatterns: url_patterns)
|
44
|
+
end
|
45
|
+
|
46
|
+
def remove_intercept(intercept)
|
47
|
+
@bidi.send_cmd('network.removeIntercept', intercept: intercept)
|
48
|
+
end
|
49
|
+
|
50
|
+
def continue_with_auth(request_id, username, password)
|
51
|
+
@bidi.send_cmd(
|
52
|
+
'network.continueWithAuth',
|
53
|
+
'request' => request_id,
|
54
|
+
'action' => 'provideCredentials',
|
55
|
+
'credentials' => {
|
56
|
+
'type' => 'password',
|
57
|
+
'username' => username,
|
58
|
+
'password' => password
|
59
|
+
}
|
60
|
+
)
|
61
|
+
end
|
62
|
+
|
63
|
+
def continue_with_request(**args)
|
64
|
+
@bidi.send_cmd(
|
65
|
+
'network.continueWithRequest',
|
66
|
+
request: args[:request_id],
|
67
|
+
'body' => args[:body],
|
68
|
+
'cookies' => args[:cookies],
|
69
|
+
'headers' => args[:headers],
|
70
|
+
'method' => args[:method],
|
71
|
+
'url' => args[:url]
|
72
|
+
)
|
73
|
+
end
|
74
|
+
|
75
|
+
def on(event, &)
|
76
|
+
event = EVENTS[event] if event.is_a?(Symbol)
|
77
|
+
@bidi.add_callback(event, &)
|
78
|
+
end
|
79
|
+
end # Network
|
80
|
+
end # BiDi
|
81
|
+
end # WebDriver
|
82
|
+
end # Selenium
|
@@ -23,7 +23,7 @@ module Selenium
|
|
23
23
|
class Struct < ::Struct
|
24
24
|
class << self
|
25
25
|
def new(*args, &block)
|
26
|
-
super
|
26
|
+
super do
|
27
27
|
define_method(:initialize) do |**kwargs|
|
28
28
|
converted_kwargs = kwargs.transform_keys { |key| self.class.camel_to_snake(key.to_s).to_sym }
|
29
29
|
super(*converted_kwargs.values_at(*self.class.members))
|
@@ -37,8 +37,6 @@ module Selenium
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
end
|
40
|
-
end
|
41
|
-
|
42
|
-
# BiDi
|
40
|
+
end # BiDi
|
43
41
|
end # WebDriver
|
44
42
|
end # Selenium
|
@@ -25,6 +25,7 @@ module Selenium
|
|
25
25
|
autoload :LogHandler, 'selenium/webdriver/bidi/log_handler'
|
26
26
|
autoload :BrowsingContext, 'selenium/webdriver/bidi/browsing_context'
|
27
27
|
autoload :Struct, 'selenium/webdriver/bidi/struct'
|
28
|
+
autoload :Network, 'selenium/webdriver/bidi/network'
|
28
29
|
|
29
30
|
def initialize(url:)
|
30
31
|
@ws = WebSocketConnection.new(url: url)
|
@@ -38,8 +39,8 @@ module Selenium
|
|
38
39
|
@ws.callbacks
|
39
40
|
end
|
40
41
|
|
41
|
-
def add_callback(event, &
|
42
|
-
@ws.add_callback(event, &
|
42
|
+
def add_callback(event, &)
|
43
|
+
@ws.add_callback(event, &)
|
43
44
|
end
|
44
45
|
|
45
46
|
def remove_callback(event, id)
|
@@ -64,16 +64,10 @@ module Selenium
|
|
64
64
|
return unless @pid
|
65
65
|
return if exited?
|
66
66
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
WebDriver.logger.debug(" -> stopped #{@pid}", id: :process)
|
72
|
-
rescue TimeoutError, Errno::EINVAL
|
73
|
-
WebDriver.logger.debug(" -> sending KILL to process: #{@pid}", id: :process)
|
74
|
-
kill(@pid)
|
75
|
-
wait
|
76
|
-
WebDriver.logger.debug(" -> killed #{@pid}", id: :process)
|
67
|
+
terminate_and_wait_else_kill(timeout)
|
68
|
+
rescue Errno::ECHILD, Errno::ESRCH => e
|
69
|
+
# Process exited earlier than terminate/kill could catch
|
70
|
+
WebDriver.logger.debug(" -> process: #{@pid} does not exist (#{e.class.name})", id: :process)
|
77
71
|
end
|
78
72
|
|
79
73
|
def alive?
|
@@ -91,6 +85,9 @@ module Selenium
|
|
91
85
|
WebDriver.logger.debug(" -> exit code is #{exit_code.inspect}", id: :process)
|
92
86
|
|
93
87
|
!!exit_code
|
88
|
+
rescue Errno::ECHILD, Errno::ESRCH
|
89
|
+
WebDriver.logger.debug(" -> process: #{@pid} already finished", id: :process)
|
90
|
+
true
|
94
91
|
end
|
95
92
|
|
96
93
|
def poll_for_exit(timeout)
|
@@ -110,20 +107,29 @@ module Selenium
|
|
110
107
|
|
111
108
|
private
|
112
109
|
|
110
|
+
def terminate_and_wait_else_kill(timeout)
|
111
|
+
WebDriver.logger.debug("Sending TERM to process: #{@pid}", id: :process)
|
112
|
+
terminate(@pid)
|
113
|
+
poll_for_exit(timeout)
|
114
|
+
|
115
|
+
WebDriver.logger.debug(" -> stopped #{@pid}", id: :process)
|
116
|
+
rescue TimeoutError, Errno::EINVAL
|
117
|
+
WebDriver.logger.debug(" -> sending KILL to process: #{@pid}", id: :process)
|
118
|
+
kill(@pid)
|
119
|
+
wait
|
120
|
+
WebDriver.logger.debug(" -> killed #{@pid}", id: :process)
|
121
|
+
end
|
122
|
+
|
113
123
|
def terminate(pid)
|
114
124
|
Process.kill(SIGTERM, pid)
|
115
125
|
end
|
116
126
|
|
117
127
|
def kill(pid)
|
118
128
|
Process.kill(SIGKILL, pid)
|
119
|
-
rescue Errno::ECHILD, Errno::ESRCH
|
120
|
-
# already dead
|
121
129
|
end
|
122
130
|
|
123
131
|
def waitpid2(pid, flags = 0)
|
124
132
|
Process.waitpid2(pid, flags)
|
125
|
-
rescue Errno::ECHILD
|
126
|
-
# already dead
|
127
133
|
end
|
128
134
|
end # ChildProcess
|
129
135
|
end # WebDriver
|
@@ -264,6 +264,15 @@ module Selenium
|
|
264
264
|
bridge.add_virtual_authenticator(options)
|
265
265
|
end
|
266
266
|
|
267
|
+
#
|
268
|
+
# @return [Network]
|
269
|
+
# @see Network
|
270
|
+
#
|
271
|
+
|
272
|
+
def network
|
273
|
+
@network ||= WebDriver::Network.new(bridge)
|
274
|
+
end
|
275
|
+
|
267
276
|
#-------------------------------- sugar --------------------------------
|
268
277
|
|
269
278
|
#
|
@@ -57,6 +57,13 @@ module Selenium
|
|
57
57
|
#
|
58
58
|
|
59
59
|
def on_log_event(kind, &block)
|
60
|
+
if browser == :firefox
|
61
|
+
WebDriver.logger.deprecate(
|
62
|
+
'Driver#on_log_event on Firefox',
|
63
|
+
'the script.add_console_message_handler or the script.add_javascript_error_handler methods',
|
64
|
+
id: :on_log_event
|
65
|
+
)
|
66
|
+
end
|
60
67
|
raise Error::WebDriverError, "Don't know how to handle #{kind} events" unless KINDS.include?(kind)
|
61
68
|
|
62
69
|
enabled = log_listeners[kind].any?
|
@@ -59,9 +59,16 @@ module Selenium
|
|
59
59
|
# @yieldparam [Proc] continue block which proceeds with the request and optionally yields response
|
60
60
|
#
|
61
61
|
|
62
|
-
def intercept(&
|
62
|
+
def intercept(&)
|
63
|
+
if browser == :firefox
|
64
|
+
WebDriver.logger.deprecate(
|
65
|
+
'Driver#intercept on Firefox',
|
66
|
+
'the new bidi.network.add_intercept method',
|
67
|
+
id: :intercept
|
68
|
+
)
|
69
|
+
end
|
63
70
|
@interceptor ||= DevTools::NetworkInterceptor.new(devtools)
|
64
|
-
@interceptor.intercept(&
|
71
|
+
@interceptor.intercept(&)
|
65
72
|
end
|
66
73
|
end # HasNetworkInterception
|
67
74
|
end # DriverExtensions
|
@@ -50,9 +50,11 @@ module Selenium
|
|
50
50
|
super(URLS[class_name] ? "#{msg}; #{SUPPORT_MSG} #{URLS[class_name]}" : msg)
|
51
51
|
end
|
52
52
|
|
53
|
+
# steep:ignore:start
|
53
54
|
def class_name
|
54
|
-
self.class.name
|
55
|
+
self.class.name.split('::')&.last&.to_sym
|
55
56
|
end
|
57
|
+
# steep:ignore:end
|
56
58
|
end
|
57
59
|
|
58
60
|
#
|
@@ -30,9 +30,7 @@ module Selenium
|
|
30
30
|
attr_reader :account_id, :email, :name, :given_name, :picture_url,
|
31
31
|
:idp_config_url, :login_state, :terms_of_service_url, :privacy_policy_url
|
32
32
|
|
33
|
-
#
|
34
|
-
#
|
35
|
-
# @param [Hash]
|
33
|
+
# steep:ignore:start
|
36
34
|
def initialize(**args)
|
37
35
|
@account_id = args['accountId']
|
38
36
|
@email = args['email']
|
@@ -44,6 +42,7 @@ module Selenium
|
|
44
42
|
@terms_of_service_url = args['termsOfServiceUrl']
|
45
43
|
@privacy_policy_url = args['privacyPolicyUrl']
|
46
44
|
end
|
45
|
+
# steep:ignore:end
|
47
46
|
end # Account
|
48
47
|
end # FedCM
|
49
48
|
end # WebDriver
|
@@ -193,8 +193,8 @@ module Selenium
|
|
193
193
|
|
194
194
|
def discard_or_log(level, message, id)
|
195
195
|
id = Array(id)
|
196
|
-
return if
|
197
|
-
return if @allowed.any? && (
|
196
|
+
return if @ignored.intersect?(id)
|
197
|
+
return if @allowed.any? && !@allowed.intersect?(id)
|
198
198
|
|
199
199
|
return if ::Logger::Severity.const_get(level.upcase) < @logger.level
|
200
200
|
|
@@ -65,7 +65,7 @@ module Selenium
|
|
65
65
|
# Get the cookie with the given name
|
66
66
|
#
|
67
67
|
# @param [String] name the name of the cookie
|
68
|
-
# @return [Hash
|
68
|
+
# @return [Hash] the cookie, or throws a NoSuchCookieError if it wasn't found.
|
69
69
|
#
|
70
70
|
|
71
71
|
def cookie_named(name)
|
@@ -0,0 +1,64 @@
|
|
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 Network
|
23
|
+
attr_reader :callbacks
|
24
|
+
|
25
|
+
def initialize(bridge)
|
26
|
+
@network = BiDi::Network.new(bridge.bidi)
|
27
|
+
@callbacks = {}
|
28
|
+
end
|
29
|
+
|
30
|
+
def add_authentication_handler(username, password)
|
31
|
+
intercept = @network.add_intercept(phases: [BiDi::Network::PHASES[:auth_required]])
|
32
|
+
auth_id = @network.on(:auth_required) do |event|
|
33
|
+
request_id = event['requestId']
|
34
|
+
@network.continue_with_auth(request_id, username, password)
|
35
|
+
end
|
36
|
+
@callbacks[auth_id] = intercept
|
37
|
+
|
38
|
+
auth_id
|
39
|
+
end
|
40
|
+
|
41
|
+
def remove_handler(id)
|
42
|
+
intercept = @callbacks[id]
|
43
|
+
@network.remove_intercept(intercept['intercept'])
|
44
|
+
@callbacks.delete(id)
|
45
|
+
end
|
46
|
+
|
47
|
+
def clear_handlers
|
48
|
+
@callbacks.each_key { |id| remove_handler(id) }
|
49
|
+
end
|
50
|
+
|
51
|
+
def add_request_handler
|
52
|
+
intercept = @network.add_intercept(phases: [BiDi::Network::PHASES[:before_request]])
|
53
|
+
request_id = @network.on(:before_request) do |event|
|
54
|
+
request_id = event['requestId']
|
55
|
+
@network.continue_with_request(request_id: request_id)
|
56
|
+
end
|
57
|
+
|
58
|
+
@callbacks[request_id] = intercept
|
59
|
+
|
60
|
+
request_id
|
61
|
+
end
|
62
|
+
end # Network
|
63
|
+
end # WebDriver
|
64
|
+
end # Selenium
|
@@ -25,13 +25,13 @@ module Selenium
|
|
25
25
|
end
|
26
26
|
|
27
27
|
# @return [int] id of the handler
|
28
|
-
def add_console_message_handler(&
|
29
|
-
@log_handler.add_message_handler('console', &
|
28
|
+
def add_console_message_handler(&)
|
29
|
+
@log_handler.add_message_handler('console', &)
|
30
30
|
end
|
31
31
|
|
32
32
|
# @return [int] id of the handler
|
33
|
-
def add_javascript_error_handler(&
|
34
|
-
@log_handler.add_message_handler('javascript', &
|
33
|
+
def add_javascript_error_handler(&)
|
34
|
+
@log_handler.add_message_handler('javascript', &)
|
35
35
|
end
|
36
36
|
|
37
37
|
# @param [int] id of the handler previously added
|
@@ -113,6 +113,7 @@ module Selenium
|
|
113
113
|
def stop_server
|
114
114
|
connect_to_server do |http|
|
115
115
|
headers = WebDriver::Remote::Http::Common::DEFAULT_HEADERS.dup
|
116
|
+
WebDriver.logger.debug('Sending shutdown request to server', id: :driver_service)
|
116
117
|
http.get('/shutdown', headers)
|
117
118
|
end
|
118
119
|
end
|
@@ -50,6 +50,7 @@ module Selenium
|
|
50
50
|
# @param type either :tab or :window
|
51
51
|
#
|
52
52
|
|
53
|
+
# steep:ignore:start
|
53
54
|
def new_window(type = :window)
|
54
55
|
raise ArgumentError, "Valid types are :tab and :window, received: #{type.inspect}" unless %i[window
|
55
56
|
tab].include?(type)
|
@@ -70,6 +71,7 @@ module Selenium
|
|
70
71
|
window(handle)
|
71
72
|
end
|
72
73
|
end
|
74
|
+
# steep:ignore:end
|
73
75
|
|
74
76
|
#
|
75
77
|
# switch to the given window handle
|
@@ -29,6 +29,22 @@ module Selenium
|
|
29
29
|
@bidi = Selenium::WebDriver::BiDi.new(url: socket_url)
|
30
30
|
end
|
31
31
|
|
32
|
+
def get(url)
|
33
|
+
browsing_context.navigate(url)
|
34
|
+
end
|
35
|
+
|
36
|
+
def go_back
|
37
|
+
browsing_context.traverse_history(-1)
|
38
|
+
end
|
39
|
+
|
40
|
+
def go_forward
|
41
|
+
browsing_context.traverse_history(1)
|
42
|
+
end
|
43
|
+
|
44
|
+
def refresh
|
45
|
+
browsing_context.reload
|
46
|
+
end
|
47
|
+
|
32
48
|
def quit
|
33
49
|
super
|
34
50
|
ensure
|
@@ -38,6 +54,12 @@ module Selenium
|
|
38
54
|
def close
|
39
55
|
execute(:close_window).tap { |handles| bidi.close if handles.empty? }
|
40
56
|
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def browsing_context
|
61
|
+
@browsing_context ||= WebDriver::BiDi::BrowsingContext.new(self)
|
62
|
+
end
|
41
63
|
end # BiDiBridge
|
42
64
|
end # Remote
|
43
65
|
end # WebDriver
|
@@ -35,10 +35,10 @@ module Selenium
|
|
35
35
|
attr_reader :extra_commands
|
36
36
|
attr_writer :element_class, :locator_converter
|
37
37
|
|
38
|
-
def add_command(name, verb, url, &
|
38
|
+
def add_command(name, verb, url, &)
|
39
39
|
@extra_commands ||= {}
|
40
40
|
@extra_commands[name] = [verb, url]
|
41
|
-
define_method(name, &
|
41
|
+
define_method(name, &)
|
42
42
|
end
|
43
43
|
|
44
44
|
def locator_converter
|
@@ -686,7 +686,7 @@ module Selenium
|
|
686
686
|
end
|
687
687
|
|
688
688
|
def escaper
|
689
|
-
@escaper ||= defined?(URI::
|
689
|
+
@escaper ||= defined?(URI::RFC2396_PARSER) ? URI::RFC2396_PARSER : URI::DEFAULT_PARSER
|
690
690
|
end
|
691
691
|
|
692
692
|
def commands(command)
|
@@ -48,6 +48,7 @@ module Selenium
|
|
48
48
|
# hook for subclasses - will be called on Driver#quit
|
49
49
|
end
|
50
50
|
|
51
|
+
# steep:ignore:start
|
51
52
|
def call(verb, url, command_hash)
|
52
53
|
url = server_url.merge(url) unless url.is_a?(URI)
|
53
54
|
headers = common_headers.dup
|
@@ -66,6 +67,7 @@ module Selenium
|
|
66
67
|
|
67
68
|
request verb, url, headers, payload
|
68
69
|
end
|
70
|
+
# steep:ignore:end
|
69
71
|
|
70
72
|
private
|
71
73
|
|
@@ -37,8 +37,8 @@ module Selenium
|
|
37
37
|
@messages = {}
|
38
38
|
end
|
39
39
|
|
40
|
-
def add_condition(name, condition = nil, &
|
41
|
-
@guard_conditions << GuardCondition.new(name, condition, &
|
40
|
+
def add_condition(name, condition = nil, &)
|
41
|
+
@guard_conditions << GuardCondition.new(name, condition, &)
|
42
42
|
end
|
43
43
|
|
44
44
|
def add_message(name, message)
|
data/selenium-webdriver.gemspec
CHANGED
@@ -22,13 +22,15 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.homepage = 'https://selenium.dev'
|
23
23
|
s.metadata = {
|
24
24
|
'changelog_uri' => 'https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES',
|
25
|
+
'documentation_uri' => 'https://www.selenium.dev/documentation/?tab=ruby',
|
25
26
|
'github_repo' => 'ssh://github.com/SeleniumHQ/selenium',
|
26
27
|
'source_code_uri' => 'https://github.com/SeleniumHQ/selenium/tree/trunk/rb',
|
27
|
-
'rubygems_mfa_required' => 'true'
|
28
|
+
'rubygems_mfa_required' => 'true',
|
29
|
+
'funding_uri' => 'https://github.com/sponsors/SeleniumHQ'
|
28
30
|
}
|
29
31
|
|
30
32
|
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('>= 3.
|
33
|
+
s.required_ruby_version = Gem::Requirement.new('>= 3.1')
|
32
34
|
|
33
35
|
s.files = [
|
34
36
|
'CHANGES',
|
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: selenium-webdriver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.28.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Rodionov
|
8
8
|
- Titus Fortner
|
9
9
|
- Thomas Walpole
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2025-01-20 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: base64
|
@@ -290,7 +290,6 @@ files:
|
|
290
290
|
- lib/selenium/webdriver/atoms/mutationListener.js
|
291
291
|
- lib/selenium/webdriver/bidi.rb
|
292
292
|
- lib/selenium/webdriver/bidi/browsing_context.rb
|
293
|
-
- lib/selenium/webdriver/bidi/browsing_context_info.rb
|
294
293
|
- lib/selenium/webdriver/bidi/log/base_log_entry.rb
|
295
294
|
- lib/selenium/webdriver/bidi/log/console_log_entry.rb
|
296
295
|
- lib/selenium/webdriver/bidi/log/filter_by.rb
|
@@ -298,7 +297,7 @@ files:
|
|
298
297
|
- lib/selenium/webdriver/bidi/log/javascript_log_entry.rb
|
299
298
|
- lib/selenium/webdriver/bidi/log_handler.rb
|
300
299
|
- lib/selenium/webdriver/bidi/log_inspector.rb
|
301
|
-
- lib/selenium/webdriver/bidi/
|
300
|
+
- lib/selenium/webdriver/bidi/network.rb
|
302
301
|
- lib/selenium/webdriver/bidi/session.rb
|
303
302
|
- lib/selenium/webdriver/bidi/struct.rb
|
304
303
|
- lib/selenium/webdriver/chrome.rb
|
@@ -376,6 +375,7 @@ files:
|
|
376
375
|
- lib/selenium/webdriver/common/logs.rb
|
377
376
|
- lib/selenium/webdriver/common/manager.rb
|
378
377
|
- lib/selenium/webdriver/common/navigation.rb
|
378
|
+
- lib/selenium/webdriver/common/network.rb
|
379
379
|
- lib/selenium/webdriver/common/options.rb
|
380
380
|
- lib/selenium/webdriver/common/platform.rb
|
381
381
|
- lib/selenium/webdriver/common/port_prober.rb
|
@@ -463,10 +463,12 @@ licenses:
|
|
463
463
|
- Apache-2.0
|
464
464
|
metadata:
|
465
465
|
changelog_uri: https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES
|
466
|
+
documentation_uri: https://www.selenium.dev/documentation/?tab=ruby
|
466
467
|
github_repo: ssh://github.com/SeleniumHQ/selenium
|
467
468
|
source_code_uri: https://github.com/SeleniumHQ/selenium/tree/trunk/rb
|
468
469
|
rubygems_mfa_required: 'true'
|
469
|
-
|
470
|
+
funding_uri: https://github.com/sponsors/SeleniumHQ
|
471
|
+
post_install_message:
|
470
472
|
rdoc_options: []
|
471
473
|
require_paths:
|
472
474
|
- lib
|
@@ -474,15 +476,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
474
476
|
requirements:
|
475
477
|
- - ">="
|
476
478
|
- !ruby/object:Gem::Version
|
477
|
-
version: '3.
|
479
|
+
version: '3.1'
|
478
480
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
479
481
|
requirements:
|
480
482
|
- - ">"
|
481
483
|
- !ruby/object:Gem::Version
|
482
484
|
version: 1.3.1
|
483
485
|
requirements: []
|
484
|
-
rubygems_version: 3.
|
485
|
-
signing_key:
|
486
|
+
rubygems_version: 3.3.27
|
487
|
+
signing_key:
|
486
488
|
specification_version: 4
|
487
489
|
summary: Selenium is a browser automation tool for automated testing of webapps and
|
488
490
|
more
|
@@ -1,35 +0,0 @@
|
|
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 BiDi
|
23
|
-
class BrowsingContextInfo
|
24
|
-
attr_accessor :id, :url, :children, :parent_browsing_context
|
25
|
-
|
26
|
-
def initialize(id:, url:, children:, parent_context:)
|
27
|
-
@id = id
|
28
|
-
@url = url
|
29
|
-
@children = children
|
30
|
-
@parent_browsing_context = parent_context
|
31
|
-
end
|
32
|
-
end # BrowsingContextInfo
|
33
|
-
end # BiDi
|
34
|
-
end # WebDriver
|
35
|
-
end # Selenium
|
@@ -1,33 +0,0 @@
|
|
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 BiDi
|
23
|
-
class NavigateResult
|
24
|
-
attr_accessor :url, :navigation_id
|
25
|
-
|
26
|
-
def initialize(url:, navigation_id:)
|
27
|
-
@url = url
|
28
|
-
@navigation_id = navigation_id
|
29
|
-
end
|
30
|
-
end # NavigateResult
|
31
|
-
end # BiDi
|
32
|
-
end # WebDriver
|
33
|
-
end # Selenium
|