selenium-webdriver 4.26.0 → 4.28.0

Sign up to get free protection for your applications and to get access to all the features.
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