selenium-webdriver 4.0.3 → 4.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +64 -0
  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 +20 -20
  10. data/lib/selenium/webdriver/common/action_builder.rb +108 -21
  11. data/lib/selenium/webdriver/common/driver.rb +2 -2
  12. data/lib/selenium/webdriver/common/driver_extensions/has_bidi.rb +38 -0
  13. data/lib/selenium/webdriver/common/driver_extensions/has_casting.rb +10 -0
  14. data/lib/selenium/webdriver/common/driver_extensions/has_context.rb +1 -2
  15. data/lib/selenium/webdriver/common/driver_extensions/has_log_events.rb +1 -1
  16. data/lib/selenium/webdriver/common/driver_extensions/has_pinned_scripts.rb +1 -1
  17. data/lib/selenium/webdriver/common/element.rb +1 -1
  18. data/lib/selenium/webdriver/common/error.rb +1 -1
  19. data/lib/selenium/webdriver/common/interactions/input_device.rb +10 -4
  20. data/lib/selenium/webdriver/common/interactions/interaction.rb +12 -25
  21. data/lib/selenium/webdriver/common/interactions/interactions.rb +24 -4
  22. data/lib/selenium/webdriver/common/interactions/key_actions.rb +5 -1
  23. data/lib/selenium/webdriver/common/interactions/key_input.rb +11 -27
  24. data/lib/selenium/webdriver/common/interactions/none_input.rb +10 -8
  25. data/lib/selenium/webdriver/common/interactions/pause.rb +49 -0
  26. data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +49 -43
  27. data/lib/selenium/webdriver/common/interactions/pointer_cancel.rb +45 -0
  28. data/lib/selenium/webdriver/common/interactions/pointer_event_properties.rb +63 -0
  29. data/lib/selenium/webdriver/common/interactions/pointer_input.rb +15 -84
  30. data/lib/selenium/webdriver/common/interactions/pointer_move.rb +60 -0
  31. data/lib/selenium/webdriver/common/interactions/pointer_press.rb +85 -0
  32. data/lib/selenium/webdriver/common/interactions/scroll.rb +57 -0
  33. data/lib/selenium/webdriver/common/interactions/scroll_origin.rb +48 -0
  34. data/lib/selenium/webdriver/common/interactions/typing_interaction.rb +54 -0
  35. data/lib/selenium/webdriver/common/interactions/wheel_actions.rb +113 -0
  36. data/lib/selenium/webdriver/common/interactions/wheel_input.rb +42 -0
  37. data/lib/selenium/webdriver/common/keys.rb +1 -0
  38. data/lib/selenium/webdriver/common/platform.rb +4 -4
  39. data/lib/selenium/webdriver/common/search_context.rb +0 -6
  40. data/lib/selenium/webdriver/common/service_manager.rb +2 -3
  41. data/lib/selenium/webdriver/common/shadow_root.rb +1 -1
  42. data/lib/selenium/webdriver/common/socket_poller.rb +1 -1
  43. data/lib/selenium/webdriver/common/websocket_connection.rb +149 -0
  44. data/lib/selenium/webdriver/common/zipper.rb +3 -1
  45. data/lib/selenium/webdriver/common.rb +14 -2
  46. data/lib/selenium/webdriver/devtools/request.rb +1 -1
  47. data/lib/selenium/webdriver/devtools/response.rb +1 -1
  48. data/lib/selenium/webdriver/devtools.rb +5 -101
  49. data/lib/selenium/webdriver/edge/features.rb +1 -0
  50. data/lib/selenium/webdriver/firefox/driver.rb +1 -0
  51. data/lib/selenium/webdriver/firefox/features.rb +2 -5
  52. data/lib/selenium/webdriver/firefox/options.rb +4 -2
  53. data/lib/selenium/webdriver/firefox/profile.rb +1 -5
  54. data/lib/selenium/webdriver/firefox/util.rb +46 -0
  55. data/lib/selenium/webdriver/firefox.rb +1 -0
  56. data/lib/selenium/webdriver/ie/options.rb +2 -2
  57. data/lib/selenium/webdriver/remote/bridge.rb +24 -19
  58. data/lib/selenium/webdriver/remote/commands.rb +0 -5
  59. data/lib/selenium/webdriver/remote/http/default.rb +6 -12
  60. data/lib/selenium/webdriver/remote/response.rb +2 -2
  61. data/lib/selenium/webdriver/remote.rb +6 -5
  62. data/lib/selenium/webdriver/support/cdp_client_generator.rb +4 -4
  63. data/lib/selenium/webdriver/support/color.rb +7 -7
  64. data/lib/selenium/webdriver/support/guards/guard_condition.rb +1 -1
  65. data/lib/selenium/webdriver/support/guards.rb +1 -1
  66. data/lib/selenium/webdriver/version.rb +1 -1
  67. data/lib/selenium/webdriver.rb +2 -1
  68. data/selenium-webdriver.gemspec +7 -4
  69. metadata +55 -5
@@ -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
@@ -23,13 +23,14 @@ require 'selenium/webdriver/remote/server_error'
23
23
  module Selenium
24
24
  module WebDriver
25
25
  module Remote
26
- autoload :Bridge, 'selenium/webdriver/remote/bridge'
27
- autoload :Driver, 'selenium/webdriver/remote/driver'
28
- autoload :Response, 'selenium/webdriver/remote/response'
26
+ autoload :Bridge, 'selenium/webdriver/remote/bridge'
27
+ autoload :Driver, 'selenium/webdriver/remote/driver'
28
+ autoload :Response, 'selenium/webdriver/remote/response'
29
29
  autoload :Capabilities, 'selenium/webdriver/remote/capabilities'
30
- autoload :COMMANDS, 'selenium/webdriver/remote/commands'
30
+ autoload :COMMANDS, 'selenium/webdriver/remote/commands'
31
+
31
32
  module Http
32
- autoload :Common, 'selenium/webdriver/remote/http/common'
33
+ autoload :Common, 'selenium/webdriver/remote/http/common'
33
34
  autoload :Default, 'selenium/webdriver/remote/http/default'
34
35
  end
35
36
  end
@@ -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.0.3'
22
+ VERSION = '4.2.1'
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'
@@ -75,7 +76,7 @@ module Selenium
75
76
  #
76
77
  # WebDriver.for :firefox, profile: 'some-profile'
77
78
  # WebDriver.for :firefox, profile: Profile.new
78
- # WebDriver.for :remote, url: "http://localhost:4444/wd/hub", desired_capabilities: caps
79
+ # WebDriver.for :remote, url: "http://localhost:4444/wd/hub", capabilities: caps
79
80
  #
80
81
  # One special argument is not passed on to the bridges, :listener.
81
82
  # You can pass a listener for this option to get notified of WebDriver events.
@@ -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.0.3
4
+ version: 4.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Rodionov
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2021-10-20 00:00:00.000000000 Z
13
+ date: 2022-05-31 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
@@ -291,8 +328,18 @@ files:
291
328
  - lib/selenium/webdriver/common/interactions/key_actions.rb
292
329
  - lib/selenium/webdriver/common/interactions/key_input.rb
293
330
  - lib/selenium/webdriver/common/interactions/none_input.rb
331
+ - lib/selenium/webdriver/common/interactions/pause.rb
294
332
  - lib/selenium/webdriver/common/interactions/pointer_actions.rb
333
+ - lib/selenium/webdriver/common/interactions/pointer_cancel.rb
334
+ - lib/selenium/webdriver/common/interactions/pointer_event_properties.rb
295
335
  - lib/selenium/webdriver/common/interactions/pointer_input.rb
336
+ - lib/selenium/webdriver/common/interactions/pointer_move.rb
337
+ - lib/selenium/webdriver/common/interactions/pointer_press.rb
338
+ - lib/selenium/webdriver/common/interactions/scroll.rb
339
+ - lib/selenium/webdriver/common/interactions/scroll_origin.rb
340
+ - lib/selenium/webdriver/common/interactions/typing_interaction.rb
341
+ - lib/selenium/webdriver/common/interactions/wheel_actions.rb
342
+ - lib/selenium/webdriver/common/interactions/wheel_input.rb
296
343
  - lib/selenium/webdriver/common/keys.rb
297
344
  - lib/selenium/webdriver/common/log_entry.rb
298
345
  - lib/selenium/webdriver/common/logger.rb
@@ -314,6 +361,7 @@ files:
314
361
  - lib/selenium/webdriver/common/target_locator.rb
315
362
  - lib/selenium/webdriver/common/timeouts.rb
316
363
  - lib/selenium/webdriver/common/wait.rb
364
+ - lib/selenium/webdriver/common/websocket_connection.rb
317
365
  - lib/selenium/webdriver/common/window.rb
318
366
  - lib/selenium/webdriver/common/zipper.rb
319
367
  - lib/selenium/webdriver/devtools.rb
@@ -337,6 +385,7 @@ files:
337
385
  - lib/selenium/webdriver/firefox/profile.rb
338
386
  - lib/selenium/webdriver/firefox/profiles_ini.rb
339
387
  - lib/selenium/webdriver/firefox/service.rb
388
+ - lib/selenium/webdriver/firefox/util.rb
340
389
  - lib/selenium/webdriver/ie.rb
341
390
  - lib/selenium/webdriver/ie/driver.rb
342
391
  - lib/selenium/webdriver/ie/options.rb
@@ -378,6 +427,7 @@ licenses:
378
427
  metadata:
379
428
  changelog_uri: https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES
380
429
  source_code_uri: https://github.com/SeleniumHQ/selenium/tree/trunk/rb
430
+ rubygems_mfa_required: 'true'
381
431
  post_install_message:
382
432
  rdoc_options: []
383
433
  require_paths:
@@ -386,7 +436,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
386
436
  requirements:
387
437
  - - ">="
388
438
  - !ruby/object:Gem::Version
389
- version: '2.6'
439
+ version: '2.7'
390
440
  required_rubygems_version: !ruby/object:Gem::Requirement
391
441
  requirements:
392
442
  - - ">"