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.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +20 -0
  3. data/LICENSE +1 -1
  4. data/NOTICE +1 -1
  5. data/README.md +1 -1
  6. data/bin/linux/selenium-manager +0 -0
  7. data/bin/macos/selenium-manager +0 -0
  8. data/bin/windows/selenium-manager.exe +0 -0
  9. data/lib/selenium/server.rb +3 -3
  10. data/lib/selenium/webdriver/atoms/findElements.js +41 -39
  11. data/lib/selenium/webdriver/bidi/browsing_context.rb +61 -49
  12. data/lib/selenium/webdriver/bidi/log_handler.rb +2 -0
  13. data/lib/selenium/webdriver/bidi/log_inspector.rb +4 -4
  14. data/lib/selenium/webdriver/bidi/network.rb +82 -0
  15. data/lib/selenium/webdriver/bidi/struct.rb +2 -4
  16. data/lib/selenium/webdriver/bidi.rb +3 -2
  17. data/lib/selenium/webdriver/common/child_process.rb +20 -14
  18. data/lib/selenium/webdriver/common/driver.rb +9 -0
  19. data/lib/selenium/webdriver/common/driver_extensions/has_log_events.rb +7 -0
  20. data/lib/selenium/webdriver/common/driver_extensions/has_network_interception.rb +9 -2
  21. data/lib/selenium/webdriver/common/error.rb +3 -1
  22. data/lib/selenium/webdriver/common/fedcm/account.rb +2 -3
  23. data/lib/selenium/webdriver/common/logger.rb +2 -2
  24. data/lib/selenium/webdriver/common/manager.rb +1 -1
  25. data/lib/selenium/webdriver/common/network.rb +64 -0
  26. data/lib/selenium/webdriver/common/script.rb +4 -4
  27. data/lib/selenium/webdriver/common/service_manager.rb +1 -0
  28. data/lib/selenium/webdriver/common/target_locator.rb +2 -0
  29. data/lib/selenium/webdriver/common.rb +1 -0
  30. data/lib/selenium/webdriver/remote/bidi_bridge.rb +22 -0
  31. data/lib/selenium/webdriver/remote/bridge.rb +3 -3
  32. data/lib/selenium/webdriver/remote/http/common.rb +2 -0
  33. data/lib/selenium/webdriver/support/guards.rb +2 -2
  34. data/lib/selenium/webdriver/version.rb +1 -1
  35. data/selenium-webdriver.gemspec +4 -2
  36. metadata +11 -9
  37. data/lib/selenium/webdriver/bidi/browsing_context_info.rb +0 -35
  38. 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(*args) do
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, &block)
42
- @ws.add_callback(event, &block)
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
- WebDriver.logger.debug("Sending TERM to process: #{@pid}", id: :process)
68
- terminate(@pid)
69
- poll_for_exit(timeout)
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(&block)
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(&block)
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&.split('::')&.last&.to_sym
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
- # Initializes a new account with the provided attributes.
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 (@ignored & id).any?
197
- return if @allowed.any? && (@allowed & id).none?
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, nil] the cookie, or nil if it wasn't found.
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(&block)
29
- @log_handler.add_message_handler('console', &block)
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(&block)
34
- @log_handler.add_message_handler('javascript', &block)
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
@@ -102,3 +102,4 @@ require 'selenium/webdriver/common/child_process'
102
102
  require 'selenium/webdriver/common/script'
103
103
  require 'selenium/webdriver/common/fedcm/account'
104
104
  require 'selenium/webdriver/common/fedcm/dialog'
105
+ require 'selenium/webdriver/common/network'
@@ -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, &block)
38
+ def add_command(name, verb, url, &)
39
39
  @extra_commands ||= {}
40
40
  @extra_commands[name] = [verb, url]
41
- define_method(name, &block)
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::Parser) ? URI::DEFAULT_PARSER : 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, &blk)
41
- @guard_conditions << GuardCondition.new(name, condition, &blk)
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)
@@ -19,6 +19,6 @@
19
19
 
20
20
  module Selenium
21
21
  module WebDriver
22
- VERSION = '4.26.0'
22
+ VERSION = '4.28.0'
23
23
  end # WebDriver
24
24
  end # Selenium
@@ -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.0')
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.26.0
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: 2024-10-30 00:00:00.000000000 Z
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/navigate_result.rb
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
- post_install_message:
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.0'
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.2.33
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