selenium-webdriver 4.1.0 → 4.3.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 (73) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +70 -1
  3. data/LICENSE +1 -1
  4. data/NOTICE +1 -1
  5. data/lib/selenium/server.rb +14 -9
  6. data/lib/selenium/webdriver/bidi/session.rb +38 -0
  7. data/lib/selenium/webdriver/bidi.rb +55 -0
  8. data/lib/selenium/webdriver/chrome/features.rb +5 -0
  9. data/lib/selenium/webdriver/chrome/options.rb +19 -19
  10. data/lib/selenium/webdriver/chrome.rb +0 -14
  11. data/lib/selenium/webdriver/common/action_builder.rb +108 -21
  12. data/lib/selenium/webdriver/common/driver.rb +13 -55
  13. data/lib/selenium/webdriver/common/driver_extensions/{has_remote_status.rb → has_bidi.rb} +12 -5
  14. data/lib/selenium/webdriver/common/driver_extensions/has_casting.rb +10 -0
  15. data/lib/selenium/webdriver/common/driver_extensions/has_context.rb +1 -2
  16. data/lib/selenium/webdriver/common/driver_extensions/has_log_events.rb +1 -1
  17. data/lib/selenium/webdriver/common/driver_extensions/has_pinned_scripts.rb +1 -1
  18. data/lib/selenium/webdriver/common/element.rb +1 -1
  19. data/lib/selenium/webdriver/common/error.rb +1 -1
  20. data/lib/selenium/webdriver/common/interactions/input_device.rb +10 -4
  21. data/lib/selenium/webdriver/common/interactions/interaction.rb +12 -25
  22. data/lib/selenium/webdriver/common/interactions/interactions.rb +24 -4
  23. data/lib/selenium/webdriver/common/interactions/key_actions.rb +5 -1
  24. data/lib/selenium/webdriver/common/interactions/key_input.rb +11 -27
  25. data/lib/selenium/webdriver/common/interactions/none_input.rb +10 -8
  26. data/lib/selenium/webdriver/common/interactions/pause.rb +49 -0
  27. data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +56 -66
  28. data/lib/selenium/webdriver/common/interactions/pointer_cancel.rb +45 -0
  29. data/lib/selenium/webdriver/common/interactions/pointer_event_properties.rb +63 -0
  30. data/lib/selenium/webdriver/common/interactions/pointer_input.rb +15 -84
  31. data/lib/selenium/webdriver/common/interactions/pointer_move.rb +60 -0
  32. data/lib/selenium/webdriver/common/interactions/pointer_press.rb +85 -0
  33. data/lib/selenium/webdriver/common/interactions/scroll.rb +57 -0
  34. data/lib/selenium/webdriver/common/interactions/scroll_origin.rb +48 -0
  35. data/lib/selenium/webdriver/common/interactions/typing_interaction.rb +54 -0
  36. data/lib/selenium/webdriver/common/interactions/wheel_actions.rb +113 -0
  37. data/lib/selenium/webdriver/common/interactions/wheel_input.rb +42 -0
  38. data/lib/selenium/webdriver/common/keys.rb +1 -0
  39. data/lib/selenium/webdriver/common/manager.rb +0 -27
  40. data/lib/selenium/webdriver/common/options.rb +2 -9
  41. data/lib/selenium/webdriver/common/platform.rb +4 -4
  42. data/lib/selenium/webdriver/common/search_context.rb +0 -6
  43. data/lib/selenium/webdriver/common/service_manager.rb +2 -3
  44. data/lib/selenium/webdriver/common/shadow_root.rb +1 -1
  45. data/lib/selenium/webdriver/common/socket_poller.rb +1 -1
  46. data/lib/selenium/webdriver/common/websocket_connection.rb +149 -0
  47. data/lib/selenium/webdriver/common.rb +14 -3
  48. data/lib/selenium/webdriver/devtools/request.rb +1 -1
  49. data/lib/selenium/webdriver/devtools/response.rb +1 -1
  50. data/lib/selenium/webdriver/devtools.rb +5 -112
  51. data/lib/selenium/webdriver/edge/features.rb +1 -0
  52. data/lib/selenium/webdriver/firefox/driver.rb +1 -0
  53. data/lib/selenium/webdriver/firefox/features.rb +2 -5
  54. data/lib/selenium/webdriver/firefox/options.rb +3 -1
  55. data/lib/selenium/webdriver/firefox/profile.rb +1 -5
  56. data/lib/selenium/webdriver/firefox/util.rb +46 -0
  57. data/lib/selenium/webdriver/firefox.rb +1 -14
  58. data/lib/selenium/webdriver/ie.rb +0 -14
  59. data/lib/selenium/webdriver/remote/bridge.rb +21 -19
  60. data/lib/selenium/webdriver/remote/commands.rb +0 -5
  61. data/lib/selenium/webdriver/remote/driver.rb +0 -1
  62. data/lib/selenium/webdriver/remote/http/default.rb +6 -12
  63. data/lib/selenium/webdriver/remote/response.rb +2 -2
  64. data/lib/selenium/webdriver/safari.rb +0 -14
  65. data/lib/selenium/webdriver/support/cdp_client_generator.rb +4 -4
  66. data/lib/selenium/webdriver/support/color.rb +7 -7
  67. data/lib/selenium/webdriver/support/guards/guard_condition.rb +1 -1
  68. data/lib/selenium/webdriver/support/guards.rb +1 -1
  69. data/lib/selenium/webdriver/version.rb +1 -1
  70. data/lib/selenium/webdriver.rb +1 -0
  71. data/selenium-webdriver.gemspec +7 -4
  72. metadata +56 -8
  73. data/lib/selenium/webdriver/remote/http/persistent.rb +0 -65
@@ -23,20 +23,6 @@ module Selenium
23
23
  autoload :Driver, 'selenium/webdriver/ie/driver'
24
24
  autoload :Options, 'selenium/webdriver/ie/options'
25
25
  autoload :Service, 'selenium/webdriver/ie/service'
26
-
27
- def self.driver_path=(path)
28
- WebDriver.logger.deprecate 'Selenium::WebDriver::IE#driver_path=',
29
- 'Selenium::WebDriver::IE::Service#driver_path=',
30
- id: :driver_path
31
- Selenium::WebDriver::IE::Service.driver_path = path
32
- end
33
-
34
- def self.driver_path
35
- WebDriver.logger.deprecate 'Selenium::WebDriver::IE#driver_path',
36
- 'Selenium::WebDriver::IE::Service#driver_path',
37
- id: :driver_path
38
- Selenium::WebDriver::IE::Service.driver_path
39
- end
40
26
  end # IE
41
27
  end # WebDriver
42
28
  end # Selenium
@@ -30,8 +30,8 @@ module Selenium
30
30
 
31
31
  #
32
32
  # Initializes the bridge with the given server URL
33
- # @param [String, URI] :url url for the remote server
34
- # @param [Object] :http_client an HTTP client instance that implements the same protocol as Http::Default
33
+ # @param [String, URI] url url for the remote server
34
+ # @param [Object] http_client an HTTP client instance that implements the same protocol as Http::Default
35
35
  # @api private
36
36
  #
37
37
 
@@ -118,7 +118,7 @@ module Selenium
118
118
  end
119
119
 
120
120
  def alert=(keys)
121
- execute :send_alert_text, {}, {value: keys.split(//), text: keys}
121
+ execute :send_alert_text, {}, {value: keys.chars, text: keys}
122
122
  end
123
123
 
124
124
  def alert_text
@@ -146,9 +146,7 @@ module Selenium
146
146
  end
147
147
 
148
148
  def page_source
149
- execute_script('var source = document.documentElement.outerHTML;' \
150
- 'if (!source) { source = new XMLSerializer().serializeToString(document); }' \
151
- 'return source;')
149
+ execute :get_page_source
152
150
  end
153
151
 
154
152
  #
@@ -369,11 +367,8 @@ module Selenium
369
367
  # actions
370
368
  #
371
369
 
372
- def action(async = false)
373
- ActionBuilder.new self,
374
- Interactions.pointer(:mouse, name: 'mouse'),
375
- Interactions.key('keyboard'),
376
- async
370
+ def action(deprecated_async = nil, async: false, devices: [], duration: 250)
371
+ ActionBuilder.new self, nil, nil, deprecated_async, async: async, devices: devices, duration: duration
377
372
  end
378
373
  alias_method :actions, :action
379
374
 
@@ -412,8 +407,8 @@ module Selenium
412
407
  end
413
408
 
414
409
  # Keep .split(//) for backward compatibility for now
415
- text = keys.join('')
416
- execute :element_send_keys, {id: element}, {value: text.split(//), text: text}
410
+ text = keys.join
411
+ execute :element_send_keys, {id: element}, {value: text.chars, text: text}
417
412
  end
418
413
 
419
414
  def upload(local_file)
@@ -430,10 +425,19 @@ module Selenium
430
425
  end
431
426
 
432
427
  def submit_element(element)
433
- form = find_element_by('xpath', "./ancestor-or-self::form", [:element, element])
434
- execute_script("var e = arguments[0].ownerDocument.createEvent('Event');" \
435
- "e.initEvent('submit', true, true);" \
436
- 'if (arguments[0].dispatchEvent(e)) { arguments[0].submit() }', form.as_json)
428
+ script = "var form = arguments[0];\n" \
429
+ "while (form.nodeName != \"FORM\" && form.parentNode) {\n" \
430
+ " form = form.parentNode;\n" \
431
+ "}\n" \
432
+ "if (!form) { throw Error('Unable to find containing form element'); }\n" \
433
+ "if (!form.ownerDocument) { throw Error('Unable to find owning document'); }\n" \
434
+ "var e = form.ownerDocument.createEvent('Event');\n" \
435
+ "e.initEvent('submit', true, true);\n" \
436
+ "if (form.dispatchEvent(e)) { HTMLFormElement.prototype.submit.call(form) }\n"
437
+
438
+ execute_script(script, Element::ELEMENT_KEY => element)
439
+ rescue Error::JavascriptError
440
+ raise Error::UnsupportedOperationError, "To submit an element, it must be nested inside a form element"
437
441
  end
438
442
 
439
443
  #
@@ -639,8 +643,6 @@ module Selenium
639
643
  when 'name'
640
644
  how = 'css selector'
641
645
  what = "*[name='#{escape_css(what.to_s)}']"
642
- when 'tag name'
643
- how = 'css selector'
644
646
  end
645
647
 
646
648
  if what.is_a?(Hash)
@@ -60,10 +60,6 @@ module Selenium
60
60
  fullscreen_window: [:post, 'session/:session_id/window/fullscreen'],
61
61
  minimize_window: [:post, 'session/:session_id/window/minimize'],
62
62
  maximize_window: [:post, 'session/:session_id/window/maximize'],
63
- set_window_size: [:post, 'session/:session_id/window/size'],
64
- get_window_size: [:get, 'session/:session_id/window/size'],
65
- set_window_position: [:post, 'session/:session_id/window/position'],
66
- get_window_position: [:get, 'session/:session_id/window/position'],
67
63
  set_window_rect: [:post, 'session/:session_id/window/rect'],
68
64
  get_window_rect: [:get, 'session/:session_id/window/rect'],
69
65
  switch_to_frame: [:post, 'session/:session_id/frame'],
@@ -130,7 +126,6 @@ module Selenium
130
126
  #
131
127
 
132
128
  element_click: [:post, 'session/:session_id/element/:id/click'],
133
- element_tap: [:post, 'session/:session_id/element/:id/tap'],
134
129
  element_clear: [:post, 'session/:session_id/element/:id/clear'],
135
130
  element_send_keys: [:post, 'session/:session_id/element/:id/value'],
136
131
 
@@ -29,7 +29,6 @@ module Selenium
29
29
  class Driver < WebDriver::Driver
30
30
  include DriverExtensions::UploadsFiles
31
31
  include DriverExtensions::HasSessionId
32
- include DriverExtensions::HasRemoteStatus
33
32
 
34
33
  def initialize(bridge: nil, listener: nil, **opts)
35
34
  desired_capabilities = opts[:desired_capabilities]
@@ -75,9 +75,10 @@ module Selenium
75
75
  begin
76
76
  request = new_request_for(verb, url, headers, payload)
77
77
  response = response_for(request)
78
- rescue Errno::ECONNABORTED, Errno::ECONNRESET, Errno::EADDRINUSE
79
- # a retry is sometimes needed on Windows XP where we may quickly
80
- # run out of ephemeral ports
78
+ rescue Errno::ECONNABORTED, Errno::ECONNRESET, Errno::EADDRINUSE, Errno::EADDRNOTAVAIL
79
+ # a retry is sometimes needed:
80
+ # on Windows XP where we may quickly run out of ephemeral ports
81
+ # when the port becomes temporarily unavailable
81
82
  #
82
83
  # A more robust solution is bumping the MaxUserPort setting
83
84
  # as described here:
@@ -85,13 +86,6 @@ module Selenium
85
86
  # http://msdn.microsoft.com/en-us/library/aa560610%28v=bts.20%29.aspx
86
87
  raise if retries >= MAX_RETRIES
87
88
 
88
- retries += 1
89
- sleep 2
90
- retry
91
- rescue Errno::EADDRNOTAVAIL => e
92
- # a retry is sometimes needed when the port becomes temporarily unavailable
93
- raise if retries >= MAX_RETRIES
94
-
95
89
  retries += 1
96
90
  sleep 2
97
91
  retry
@@ -142,8 +136,8 @@ module Selenium
142
136
 
143
137
  def proxy
144
138
  @proxy ||= begin
145
- proxy = ENV['http_proxy'] || ENV['HTTP_PROXY']
146
- no_proxy = ENV['no_proxy'] || ENV['NO_PROXY']
139
+ proxy = ENV.fetch('http_proxy', nil) || ENV.fetch('HTTP_PROXY', nil)
140
+ no_proxy = ENV.fetch('no_proxy', nil) || ENV.fetch('NO_PROXY', nil)
147
141
 
148
142
  if proxy
149
143
  proxy = "http://#{proxy}" unless proxy.start_with?('http://')
@@ -74,7 +74,7 @@ module Selenium
74
74
  end
75
75
 
76
76
  def backtrace_from_remote(server_trace)
77
- server_trace.map { |frame|
77
+ server_trace.filter_map do |frame|
78
78
  next unless frame.is_a?(Hash)
79
79
 
80
80
  file = frame['fileName']
@@ -87,7 +87,7 @@ module Selenium
87
87
  meth = 'unknown' if meth.nil? || meth.empty?
88
88
 
89
89
  "[remote server] #{file}:#{line}:in `#{meth}'"
90
- }.compact
90
+ end
91
91
  end
92
92
 
93
93
  def process_error
@@ -53,20 +53,6 @@ module Selenium
53
53
 
54
54
  raise Error::WebDriverError, 'Unable to find Safari'
55
55
  end
56
-
57
- def driver_path=(path)
58
- WebDriver.logger.deprecate 'Selenium::WebDriver::Safari#driver_path=',
59
- 'Selenium::WebDriver::Safari::Service#driver_path=',
60
- id: :driver_path
61
- Selenium::WebDriver::Safari::Service.driver_path = path
62
- end
63
-
64
- def driver_path
65
- WebDriver.logger.deprecate 'Selenium::WebDriver::Safari#driver_path',
66
- 'Selenium::WebDriver::Safari::Service#driver_path',
67
- id: :driver_path
68
- Selenium::WebDriver::Safari::Service.driver_path
69
- end
70
56
  end
71
57
  end # Safari
72
58
  end # WebDriver
@@ -44,8 +44,8 @@ module Selenium
44
44
 
45
45
  FileUtils.mkdir_p(@output_dir)
46
46
 
47
- browser_protocol[:domains].each(&method(:process_domain))
48
- js_protocol[:domains].each(&method(:process_domain))
47
+ browser_protocol[:domains].each { |domain| process_domain(domain) }
48
+ js_protocol[:domains].each { |domain| process_domain(domain) }
49
49
  require_file
50
50
  end
51
51
 
@@ -79,7 +79,7 @@ module Selenium
79
79
  end
80
80
 
81
81
  def remove_empty_lines(string)
82
- string.split("\n").reject { |l| l =~ /^\s+$/ }.join("\n")
82
+ string.split("\n").grep_v(/^\s+$/).join("\n")
83
83
  end
84
84
 
85
85
  def require_file
@@ -88,7 +88,7 @@ module Selenium
88
88
  # rubocop:enable Lint/InterpolationCheck
89
89
 
90
90
  require_all = "Dir.glob(\"#{dynamic_location}/#{@version}/*\", &method(:require))"
91
- File.open(@loader_path, 'w') { |file| file.write(require_all) }
91
+ File.write(@loader_path, require_all)
92
92
  end
93
93
  end
94
94
  end
@@ -83,12 +83,12 @@ module Selenium
83
83
  g = r
84
84
  b = r
85
85
  else
86
- luminocity2 = l < 0.5 ? l * (1 + s) : l + s - l * s
87
- luminocity1 = 2 * l - luminocity2
86
+ luminocity2 = l < 0.5 ? l * (1 + s) : l + s - (l * s)
87
+ luminocity1 = (2 * l) - luminocity2
88
88
 
89
- r = hue_to_rgb(luminocity1, luminocity2, h + 1.0 / 3.0)
89
+ r = hue_to_rgb(luminocity1, luminocity2, h + (1.0 / 3.0))
90
90
  g = hue_to_rgb(luminocity1, luminocity2, h)
91
- b = hue_to_rgb(luminocity1, luminocity2, h - 1.0 / 3.0)
91
+ b = hue_to_rgb(luminocity1, luminocity2, h - (1.0 / 3.0))
92
92
  end
93
93
 
94
94
  new (r * 255).round, (g * 255).round, (b * 255).round, a
@@ -99,11 +99,11 @@ module Selenium
99
99
  hue -= 1 if hue > 1.0
100
100
 
101
101
  if hue < 1.0 / 6.0
102
- (lum1 + (lum2 - lum1) * 6.0 * hue)
102
+ (lum1 + ((lum2 - lum1) * 6.0 * hue))
103
103
  elsif hue < 1.0 / 2.0
104
104
  lum2
105
105
  elsif hue < 2.0 / 3.0
106
- lum1 + (lum2 - lum1) * ((2.0 / 3.0) - hue) * 6.0
106
+ lum1 + ((lum2 - lum1) * ((2.0 / 3.0) - hue) * 6.0)
107
107
  else
108
108
  lum1
109
109
  end
@@ -125,7 +125,7 @@ module Selenium
125
125
  alias_method :eql?, :==
126
126
 
127
127
  def hash
128
- [red, green, blue, alpha].hash ^ self.class.hash
128
+ [red, green, blue, alpha, self.class].hash
129
129
  end
130
130
 
131
131
  def rgb
@@ -32,7 +32,7 @@ module Selenium
32
32
 
33
33
  def initialize(name, condition = nil, &blk)
34
34
  @name = name
35
- @execution = if block_given?
35
+ @execution = if blk
36
36
  proc(&blk)
37
37
  else
38
38
  proc { |guarded| guarded.include?(condition) }
@@ -48,7 +48,7 @@ module Selenium
48
48
  def disposition
49
49
  if !skipping_guard.nil?
50
50
  [:skip, skipping_guard.message]
51
- elsif !pending_guard.nil? && ENV['SKIP_PENDING']
51
+ elsif !pending_guard.nil? && ENV.fetch('SKIP_PENDING', nil)
52
52
  [:skip, pending_guard.message]
53
53
  elsif !pending_guard.nil?
54
54
  [:pending, pending_guard.message]
@@ -19,6 +19,6 @@
19
19
 
20
20
  module Selenium
21
21
  module WebDriver
22
- VERSION = '4.1.0'
22
+ VERSION = '4.3.0'
23
23
  end # WebDriver
24
24
  end # Selenium
@@ -36,6 +36,7 @@ module Selenium
36
36
  Rectangle = Struct.new(:x, :y, :width, :height)
37
37
  Location = Struct.new(:latitude, :longitude, :altitude)
38
38
 
39
+ autoload :BiDi, 'selenium/webdriver/bidi'
39
40
  autoload :Chrome, 'selenium/webdriver/chrome'
40
41
  autoload :DevTools, 'selenium/webdriver/devtools'
41
42
  autoload :Edge, 'selenium/webdriver/edge'
@@ -24,11 +24,12 @@ Gem::Specification.new do |s|
24
24
  s.homepage = 'https://selenium.dev'
25
25
  s.metadata = {
26
26
  'changelog_uri' => 'https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES',
27
- 'source_code_uri' => 'https://github.com/SeleniumHQ/selenium/tree/trunk/rb'
27
+ 'source_code_uri' => 'https://github.com/SeleniumHQ/selenium/tree/trunk/rb',
28
+ 'rubygems_mfa_required' => 'true'
28
29
  }
29
30
 
30
31
  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.6')
32
+ s.required_ruby_version = Gem::Requirement.new('>= 2.7')
32
33
 
33
34
  s.files = [
34
35
  'CHANGES',
@@ -46,7 +47,8 @@ Gem::Specification.new do |s|
46
47
 
47
48
  s.add_runtime_dependency 'childprocess', ['>= 0.5', '< 5.0']
48
49
  s.add_runtime_dependency 'rexml', ['~> 3.2', '>= 3.2.5']
49
- s.add_runtime_dependency 'rubyzip', ['>= 1.2.2']
50
+ s.add_runtime_dependency 'rubyzip', ['>= 1.2.2', '< 3.0']
51
+ s.add_runtime_dependency 'websocket', ['~> 1.0']
50
52
 
51
53
  # childprocess requires ffi on windows but doesn't declare it in its dependencies
52
54
  s.add_development_dependency 'ffi'
@@ -54,8 +56,9 @@ Gem::Specification.new do |s|
54
56
  s.add_development_dependency 'rack', ['~> 2.0']
55
57
  s.add_development_dependency 'rake'
56
58
  s.add_development_dependency 'rspec', ['~> 3.0']
57
- s.add_development_dependency 'rubocop', ['~> 1.8.0']
59
+ s.add_development_dependency 'rubocop', ['~> 1.22']
58
60
  s.add_development_dependency 'rubocop-performance'
61
+ s.add_development_dependency 'rubocop-rake'
59
62
  s.add_development_dependency 'rubocop-rspec'
60
63
  s.add_development_dependency 'webmock', ['~> 3.5']
61
64
  s.add_development_dependency 'webrick', ['~> 1.7']
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.1.0
4
+ version: 4.3.0
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-11-22 00:00:00.000000000 Z
13
+ date: 2022-06-23 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: childprocess
@@ -59,6 +59,9 @@ dependencies:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: 1.2.2
62
+ - - "<"
63
+ - !ruby/object:Gem::Version
64
+ version: '3.0'
62
65
  type: :runtime
63
66
  prerelease: false
64
67
  version_requirements: !ruby/object:Gem::Requirement
@@ -66,6 +69,23 @@ dependencies:
66
69
  - - ">="
67
70
  - !ruby/object:Gem::Version
68
71
  version: 1.2.2
72
+ - - "<"
73
+ - !ruby/object:Gem::Version
74
+ version: '3.0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: websocket
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '1.0'
82
+ type: :runtime
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '1.0'
69
89
  - !ruby/object:Gem::Dependency
70
90
  name: ffi
71
91
  requirement: !ruby/object:Gem::Requirement
@@ -142,14 +162,14 @@ dependencies:
142
162
  requirements:
143
163
  - - "~>"
144
164
  - !ruby/object:Gem::Version
145
- version: 1.8.0
165
+ version: '1.22'
146
166
  type: :development
147
167
  prerelease: false
148
168
  version_requirements: !ruby/object:Gem::Requirement
149
169
  requirements:
150
170
  - - "~>"
151
171
  - !ruby/object:Gem::Version
152
- version: 1.8.0
172
+ version: '1.22'
153
173
  - !ruby/object:Gem::Dependency
154
174
  name: rubocop-performance
155
175
  requirement: !ruby/object:Gem::Requirement
@@ -164,6 +184,20 @@ dependencies:
164
184
  - - ">="
165
185
  - !ruby/object:Gem::Version
166
186
  version: '0'
187
+ - !ruby/object:Gem::Dependency
188
+ name: rubocop-rake
189
+ requirement: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ type: :development
195
+ prerelease: false
196
+ version_requirements: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - ">="
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
167
201
  - !ruby/object:Gem::Dependency
168
202
  name: rubocop-rspec
169
203
  requirement: !ruby/object:Gem::Requirement
@@ -245,6 +279,8 @@ files:
245
279
  - lib/selenium/webdriver/atoms/getAttribute.js
246
280
  - lib/selenium/webdriver/atoms/isDisplayed.js
247
281
  - lib/selenium/webdriver/atoms/mutationListener.js
282
+ - lib/selenium/webdriver/bidi.rb
283
+ - lib/selenium/webdriver/bidi/session.rb
248
284
  - lib/selenium/webdriver/chrome.rb
249
285
  - lib/selenium/webdriver/chrome/driver.rb
250
286
  - lib/selenium/webdriver/chrome/features.rb
@@ -260,6 +296,7 @@ files:
260
296
  - lib/selenium/webdriver/common/driver_extensions/has_addons.rb
261
297
  - lib/selenium/webdriver/common/driver_extensions/has_apple_permissions.rb
262
298
  - lib/selenium/webdriver/common/driver_extensions/has_authentication.rb
299
+ - lib/selenium/webdriver/common/driver_extensions/has_bidi.rb
263
300
  - lib/selenium/webdriver/common/driver_extensions/has_casting.rb
264
301
  - lib/selenium/webdriver/common/driver_extensions/has_cdp.rb
265
302
  - lib/selenium/webdriver/common/driver_extensions/has_context.rb
@@ -274,7 +311,6 @@ files:
274
311
  - lib/selenium/webdriver/common/driver_extensions/has_network_interception.rb
275
312
  - lib/selenium/webdriver/common/driver_extensions/has_permissions.rb
276
313
  - lib/selenium/webdriver/common/driver_extensions/has_pinned_scripts.rb
277
- - lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb
278
314
  - lib/selenium/webdriver/common/driver_extensions/has_session_id.rb
279
315
  - lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb
280
316
  - lib/selenium/webdriver/common/driver_extensions/prints_page.rb
@@ -291,8 +327,18 @@ files:
291
327
  - lib/selenium/webdriver/common/interactions/key_actions.rb
292
328
  - lib/selenium/webdriver/common/interactions/key_input.rb
293
329
  - lib/selenium/webdriver/common/interactions/none_input.rb
330
+ - lib/selenium/webdriver/common/interactions/pause.rb
294
331
  - lib/selenium/webdriver/common/interactions/pointer_actions.rb
332
+ - lib/selenium/webdriver/common/interactions/pointer_cancel.rb
333
+ - lib/selenium/webdriver/common/interactions/pointer_event_properties.rb
295
334
  - lib/selenium/webdriver/common/interactions/pointer_input.rb
335
+ - lib/selenium/webdriver/common/interactions/pointer_move.rb
336
+ - lib/selenium/webdriver/common/interactions/pointer_press.rb
337
+ - lib/selenium/webdriver/common/interactions/scroll.rb
338
+ - lib/selenium/webdriver/common/interactions/scroll_origin.rb
339
+ - lib/selenium/webdriver/common/interactions/typing_interaction.rb
340
+ - lib/selenium/webdriver/common/interactions/wheel_actions.rb
341
+ - lib/selenium/webdriver/common/interactions/wheel_input.rb
296
342
  - lib/selenium/webdriver/common/keys.rb
297
343
  - lib/selenium/webdriver/common/log_entry.rb
298
344
  - lib/selenium/webdriver/common/logger.rb
@@ -314,6 +360,7 @@ files:
314
360
  - lib/selenium/webdriver/common/target_locator.rb
315
361
  - lib/selenium/webdriver/common/timeouts.rb
316
362
  - lib/selenium/webdriver/common/wait.rb
363
+ - lib/selenium/webdriver/common/websocket_connection.rb
317
364
  - lib/selenium/webdriver/common/window.rb
318
365
  - lib/selenium/webdriver/common/zipper.rb
319
366
  - lib/selenium/webdriver/devtools.rb
@@ -337,6 +384,7 @@ files:
337
384
  - lib/selenium/webdriver/firefox/profile.rb
338
385
  - lib/selenium/webdriver/firefox/profiles_ini.rb
339
386
  - lib/selenium/webdriver/firefox/service.rb
387
+ - lib/selenium/webdriver/firefox/util.rb
340
388
  - lib/selenium/webdriver/ie.rb
341
389
  - lib/selenium/webdriver/ie/driver.rb
342
390
  - lib/selenium/webdriver/ie/options.rb
@@ -349,7 +397,6 @@ files:
349
397
  - lib/selenium/webdriver/remote/http/common.rb
350
398
  - lib/selenium/webdriver/remote/http/curb.rb
351
399
  - lib/selenium/webdriver/remote/http/default.rb
352
- - lib/selenium/webdriver/remote/http/persistent.rb
353
400
  - lib/selenium/webdriver/remote/response.rb
354
401
  - lib/selenium/webdriver/remote/server_error.rb
355
402
  - lib/selenium/webdriver/safari.rb
@@ -378,6 +425,7 @@ licenses:
378
425
  metadata:
379
426
  changelog_uri: https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES
380
427
  source_code_uri: https://github.com/SeleniumHQ/selenium/tree/trunk/rb
428
+ rubygems_mfa_required: 'true'
381
429
  post_install_message:
382
430
  rdoc_options: []
383
431
  require_paths:
@@ -386,14 +434,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
386
434
  requirements:
387
435
  - - ">="
388
436
  - !ruby/object:Gem::Version
389
- version: '2.6'
437
+ version: '2.7'
390
438
  required_rubygems_version: !ruby/object:Gem::Requirement
391
439
  requirements:
392
440
  - - ">"
393
441
  - !ruby/object:Gem::Version
394
442
  version: 1.3.1
395
443
  requirements: []
396
- rubygems_version: 3.0.3
444
+ rubygems_version: 3.0.3.1
397
445
  signing_key:
398
446
  specification_version: 4
399
447
  summary: Selenium is a browser automation tool for automated testing of webapps and
@@ -1,65 +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
- require 'net/http/persistent'
21
-
22
- module Selenium
23
- module WebDriver
24
- module Remote
25
- module Http
26
- # @api private
27
- class Persistent < Default
28
- def initialize(open_timeout: nil, read_timeout: nil)
29
- WebDriver.logger.deprecate("Selenium::WebDriver::Remote::Http::Persistent",
30
- id: :http_persistent) { "The default HTTP client now uses persistence." }
31
- super
32
- end
33
-
34
- def close
35
- @http&.shutdown
36
- end
37
-
38
- private
39
-
40
- def start(*)
41
- # no need to explicitly start connection
42
- end
43
-
44
- def new_http_client
45
- proxy = nil
46
-
47
- if @proxy
48
- unless @proxy.respond_to?(:http)
49
- url = @proxy.http
50
- raise Error::WebDriverError, "expected HTTP proxy, got #{@proxy.inspect}" unless url
51
- end
52
- proxy = URI.parse(url)
53
- end
54
-
55
- Net::HTTP::Persistent.new name: 'webdriver', proxy: proxy
56
- end
57
-
58
- def response_for(request)
59
- http.request server_url, request
60
- end
61
- end # Persistent
62
- end # Http
63
- end # Remote
64
- end # WebDriver
65
- end # Selenium