selenium-webdriver 4.5.0 → 4.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (133) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +191 -1
  3. data/Gemfile +2 -0
  4. data/LICENSE +1 -1
  5. data/NOTICE +1 -1
  6. data/README.md +2 -2
  7. data/bin/linux/selenium-manager +0 -0
  8. data/bin/macos/selenium-manager +0 -0
  9. data/bin/windows/selenium-manager.exe +0 -0
  10. data/lib/selenium/server.rb +8 -22
  11. data/lib/selenium/webdriver/atoms/findElements.js +3 -4
  12. data/lib/selenium/webdriver/atoms/getAttribute.js +0 -0
  13. data/lib/selenium/webdriver/atoms/isDisplayed.js +0 -0
  14. data/lib/selenium/webdriver/atoms/mutationListener.js +0 -0
  15. data/lib/selenium/webdriver/atoms.rb +5 -3
  16. data/lib/selenium/webdriver/bidi/browsing_context.rb +88 -0
  17. data/lib/selenium/webdriver/{common/driver_extensions/has_network_connection.rb → bidi/browsing_context_info.rb} +10 -12
  18. data/lib/selenium/webdriver/bidi/log/base_log_entry.rb +35 -0
  19. data/lib/selenium/webdriver/bidi/log/console_log_entry.rb +35 -0
  20. data/lib/selenium/webdriver/{common/driver_extensions/has_location.rb → bidi/log/filter_by.rb} +14 -11
  21. data/lib/selenium/webdriver/bidi/log/generic_log_entry.rb +33 -0
  22. data/lib/selenium/webdriver/bidi/log/javascript_log_entry.rb +33 -0
  23. data/lib/selenium/webdriver/bidi/log_inspector.rb +143 -0
  24. data/lib/selenium/webdriver/bidi/navigate_result.rb +33 -0
  25. data/lib/selenium/webdriver/bidi/session.rb +13 -0
  26. data/lib/selenium/webdriver/bidi.rb +3 -2
  27. data/lib/selenium/webdriver/chrome/driver.rb +9 -30
  28. data/lib/selenium/webdriver/chrome/features.rb +5 -72
  29. data/lib/selenium/webdriver/chrome/options.rb +3 -237
  30. data/lib/selenium/webdriver/chrome/profile.rb +3 -83
  31. data/lib/selenium/webdriver/chrome/service.rb +4 -19
  32. data/lib/selenium/webdriver/chrome.rb +0 -2
  33. data/lib/selenium/webdriver/chromium/driver.rb +60 -0
  34. data/lib/selenium/webdriver/chromium/features.rb +103 -0
  35. data/lib/selenium/webdriver/chromium/options.rb +243 -0
  36. data/lib/selenium/webdriver/chromium/profile.rb +113 -0
  37. data/lib/selenium/webdriver/chromium.rb +29 -0
  38. data/lib/selenium/webdriver/common/action_builder.rb +11 -58
  39. data/lib/selenium/webdriver/common/child_process.rb +124 -0
  40. data/lib/selenium/webdriver/common/driver.rb +19 -36
  41. data/lib/selenium/webdriver/common/driver_extensions/downloads_files.rb +0 -2
  42. data/lib/selenium/webdriver/common/driver_extensions/full_page_screenshot.rb +0 -1
  43. data/lib/selenium/webdriver/common/driver_extensions/has_addons.rb +0 -2
  44. data/lib/selenium/webdriver/common/driver_extensions/has_apple_permissions.rb +0 -2
  45. data/lib/selenium/webdriver/common/driver_extensions/has_authentication.rb +0 -2
  46. data/lib/selenium/webdriver/common/driver_extensions/has_bidi.rb +0 -2
  47. data/lib/selenium/webdriver/common/driver_extensions/has_casting.rb +0 -1
  48. data/lib/selenium/webdriver/common/driver_extensions/has_cdp.rb +0 -2
  49. data/lib/selenium/webdriver/common/driver_extensions/has_context.rb +0 -2
  50. data/lib/selenium/webdriver/common/driver_extensions/has_debugger.rb +0 -2
  51. data/lib/selenium/webdriver/common/driver_extensions/has_devtools.rb +0 -2
  52. data/lib/selenium/webdriver/common/driver_extensions/has_launching.rb +0 -2
  53. data/lib/selenium/webdriver/common/driver_extensions/has_log_events.rb +0 -1
  54. data/lib/selenium/webdriver/common/driver_extensions/has_network_conditions.rb +0 -2
  55. data/lib/selenium/webdriver/common/driver_extensions/has_network_interception.rb +0 -2
  56. data/lib/selenium/webdriver/common/driver_extensions/has_permissions.rb +0 -2
  57. data/lib/selenium/webdriver/common/driver_extensions/has_pinned_scripts.rb +0 -2
  58. data/lib/selenium/webdriver/common/driver_finder.rb +45 -0
  59. data/lib/selenium/webdriver/common/element.rb +6 -6
  60. data/lib/selenium/webdriver/common/error.rb +27 -4
  61. data/lib/selenium/webdriver/common/html5/shared_web_storage.rb +2 -2
  62. data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +3 -3
  63. data/lib/selenium/webdriver/common/interactions/pointer_move.rb +2 -2
  64. data/lib/selenium/webdriver/common/interactions/scroll.rb +7 -5
  65. data/lib/selenium/webdriver/common/local_driver.rb +46 -0
  66. data/lib/selenium/webdriver/common/logger.rb +90 -25
  67. data/lib/selenium/webdriver/common/options.rb +11 -8
  68. data/lib/selenium/webdriver/common/platform.rb +4 -49
  69. data/lib/selenium/webdriver/common/port_prober.rb +1 -1
  70. data/lib/selenium/webdriver/common/profile_helper.rb +1 -1
  71. data/lib/selenium/webdriver/common/proxy.rb +2 -2
  72. data/lib/selenium/webdriver/common/selenium_manager.rb +134 -0
  73. data/lib/selenium/webdriver/common/service.rb +21 -30
  74. data/lib/selenium/webdriver/common/service_manager.rb +6 -12
  75. data/lib/selenium/webdriver/common/shadow_root.rb +1 -2
  76. data/lib/selenium/webdriver/common/socket_lock.rb +3 -3
  77. data/lib/selenium/webdriver/common/socket_poller.rb +1 -1
  78. data/lib/selenium/webdriver/common/takes_screenshot.rb +2 -3
  79. data/lib/selenium/webdriver/common/target_locator.rb +2 -3
  80. data/lib/selenium/webdriver/common/timeouts.rb +2 -2
  81. data/lib/selenium/webdriver/common/virtual_authenticator/credential.rb +8 -6
  82. data/lib/selenium/webdriver/common/virtual_authenticator/virtual_authenticator.rb +0 -1
  83. data/lib/selenium/webdriver/common/virtual_authenticator/virtual_authenticator_options.rb +16 -16
  84. data/lib/selenium/webdriver/common/websocket_connection.rb +12 -4
  85. data/lib/selenium/webdriver/common.rb +4 -2
  86. data/lib/selenium/webdriver/devtools/console_event.rb +0 -2
  87. data/lib/selenium/webdriver/devtools/exception_event.rb +0 -2
  88. data/lib/selenium/webdriver/devtools/mutation_event.rb +0 -2
  89. data/lib/selenium/webdriver/devtools/network_interceptor.rb +4 -7
  90. data/lib/selenium/webdriver/devtools/pinned_script.rb +0 -2
  91. data/lib/selenium/webdriver/devtools/request.rb +0 -2
  92. data/lib/selenium/webdriver/devtools/response.rb +0 -2
  93. data/lib/selenium/webdriver/devtools.rb +11 -2
  94. data/lib/selenium/webdriver/edge/driver.rb +9 -3
  95. data/lib/selenium/webdriver/edge/features.rb +3 -4
  96. data/lib/selenium/webdriver/edge/options.rb +17 -5
  97. data/lib/selenium/webdriver/edge/profile.rb +2 -2
  98. data/lib/selenium/webdriver/edge/service.rb +8 -7
  99. data/lib/selenium/webdriver/edge.rb +0 -2
  100. data/lib/selenium/webdriver/firefox/driver.rb +8 -2
  101. data/lib/selenium/webdriver/firefox/features.rb +0 -1
  102. data/lib/selenium/webdriver/firefox/options.rb +2 -14
  103. data/lib/selenium/webdriver/firefox/profile.rb +7 -7
  104. data/lib/selenium/webdriver/firefox/service.rb +0 -18
  105. data/lib/selenium/webdriver/ie/driver.rb +7 -1
  106. data/lib/selenium/webdriver/ie/options.rb +4 -3
  107. data/lib/selenium/webdriver/ie/service.rb +0 -22
  108. data/lib/selenium/webdriver/remote/{commands.rb → bridge/commands.rb} +0 -2
  109. data/lib/selenium/webdriver/remote/bridge.rb +15 -20
  110. data/lib/selenium/webdriver/remote/capabilities.rb +3 -53
  111. data/lib/selenium/webdriver/remote/driver.rb +31 -13
  112. data/lib/selenium/webdriver/remote/http/common.rb +3 -3
  113. data/lib/selenium/webdriver/remote/http/curb.rb +1 -3
  114. data/lib/selenium/webdriver/remote/http/default.rb +2 -2
  115. data/lib/selenium/webdriver/remote/response.rb +0 -1
  116. data/lib/selenium/webdriver/remote/server_error.rb +1 -1
  117. data/lib/selenium/webdriver/remote.rb +0 -1
  118. data/lib/selenium/webdriver/safari/driver.rb +7 -1
  119. data/lib/selenium/webdriver/safari/features.rb +0 -2
  120. data/lib/selenium/webdriver/safari/options.rb +5 -1
  121. data/lib/selenium/webdriver/safari/service.rb +10 -4
  122. data/lib/selenium/webdriver/safari.rb +1 -1
  123. data/lib/selenium/webdriver/support/color.rb +17 -17
  124. data/lib/selenium/webdriver/support/guards/guard.rb +0 -2
  125. data/lib/selenium/webdriver/support/guards/guard_condition.rb +0 -2
  126. data/lib/selenium/webdriver/support/relative_locator.rb +0 -1
  127. data/lib/selenium/webdriver/support/select.rb +2 -5
  128. data/lib/selenium/webdriver/version.rb +1 -1
  129. data/lib/selenium/webdriver.rb +5 -4
  130. data/selenium-webdriver.gemspec +10 -11
  131. metadata +40 -84
  132. data/lib/selenium/webdriver/support/cdp/domain.rb.erb +0 -63
  133. data/lib/selenium/webdriver/support/cdp_client_generator.rb +0 -108
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d753308296c6105d6bdbe84f0bbff8f61064fcf44c40694fbe9c4d8758ff7d21
4
- data.tar.gz: 6b277eedd4f26e9baf17b95a7034b7940f4c41c041ba646edda4247c7edaf57c
3
+ metadata.gz: dc5fa0275bc4e0f7675b6579bb652cb2efc20bc47797407a3c1da5cd3ac61959
4
+ data.tar.gz: 35d845b2fab6603c02c7c6d56f8b2e2e21aa956ed1fcbe01adc0ec0e1b4627d6
5
5
  SHA512:
6
- metadata.gz: 42dbe1ef868e3be3fddac2add30d0b8bf17a6ae2febff15a6e3d0ce79c3f46122d9e3616a1e1e8e370744e008c4c06ad531b382410753ab6daa3d147c66a8552
7
- data.tar.gz: 8e841646f3a38364c55fb5020e0eb30a9076f3fb5ace99e42175f9f07d1634c59ad52dcf84d01530fbc43282d5e7b48fc9058edc905d0eac10cf98babb2ed029
6
+ metadata.gz: 61ce01ca9e41da013f55b0a970f3c4fe68e496132fd3f70c7a4770e1874dfdbc3a0102e530cbc01e9e4cfc4dd02614eee6120366471e2e07da9cb0d097222e78
7
+ data.tar.gz: 00ebdefe7adc44e8d535a6ab2099ea6233d6a2d9d5c2960a93ac001c34657a7860857e3387c3c93053f034bcccda4dc8120325c105c16bd0ba7151acb8e1211e
data/CHANGES CHANGED
@@ -1,4 +1,194 @@
1
- 4.5.0 (Unreleased)
1
+ 4.14.0 (Unreleased)
2
+ =========================
3
+ Ruby:
4
+ * allow users to access the full script of the atom directly
5
+
6
+ BiDi:
7
+ * Released selenium-devtools 0.118.0 (supports CDP v85, v116, v117, v118)
8
+
9
+ 4.13.1 (2023-09-25)
10
+ =========================
11
+ Ruby:
12
+ * Fix bug preventing logging chromedriver to file
13
+
14
+ 4.13.0 (2023-09-25)
15
+ =========================
16
+ Ruby:
17
+ * Fix bug preventing using performance logging with chromium
18
+ * Allow users to set Selenium Manager path by environment variable (#12752)
19
+ * Allow service to be started before the driver
20
+ * remove deprecated driver extensions for location and network connection
21
+
22
+ BiDi:
23
+ * Released selenium-devtools 0.117.0 (supports CDP v85, v115, v116, v117)
24
+
25
+ 4.12.0 (2023-08-31)
26
+ =========================
27
+ Ruby:
28
+ * Fix bug preventing good error messages in Selenium Manager when stdout empty
29
+ * Fix bug with Firefox not loading net/http library by default (#12506)
30
+ * Remove support for using capabilities in local drivers
31
+
32
+ BiDi:
33
+ * Released selenium-devtools 0.116.0 (supports CDP v85, v114, v115, v116)
34
+
35
+ 4.11.0 (2023-07-31)
36
+ =========================
37
+ Ruby:
38
+ * Made network interception threads fail silently (#12226)
39
+ * Have Selenium Manager binary locate drivers on PATH (#12345)
40
+ * Add browser output from selenium manager to options (#12398)
41
+ * Remove deprecated code (#12417)
42
+ BiDi:
43
+ * Released selenium-devtools 0.115.0 (supports CDP v85, v113, v114, v115)
44
+ Edge:
45
+ * Adding ignore process match for IE Mode across bindings (#12279)
46
+
47
+ 4.10.0 (2023-06-07)
48
+ =========================
49
+ Ruby:
50
+ * Implement proxy support for Selenium Manager
51
+ * Prevent setting driver log level in Safari
52
+ * Change all Selenium Manager logging to :debug (#12145)
53
+ * Error messages include links to documentation
54
+ * Add custom error class for driver location and improve error logic
55
+
56
+ BiDi:
57
+ * Released selenium-devtools 0.114.0 (supports CDP v85, v112, v113, v114)
58
+
59
+ Edge:
60
+ * Add support for webview2
61
+
62
+ 4.9.1 (2023-05-08)
63
+ =========================
64
+ Ruby:
65
+ * Allow users to specify driver process output in Service class (#11964)
66
+ * Updated minimum required Ruby version to 3.0
67
+ * Selenium Logger defaults to :info and all debugging is now logged as :debug (#11967)
68
+ * Every logging entry can be ignored based on ID, not just warnings
69
+ * Logging entries can be filtered to allow or ignore specific IDs
70
+
71
+ BiDi:
72
+ * Fix bug with loading devtools (#11931) (thanks Boris Petrov!)
73
+ * Released selenium-devtools 0.113.0 (supports CDP v85, v111, v112, v113)
74
+
75
+ 4.9.0 (2023-04-21)
76
+ =========================
77
+ Ruby:
78
+ * Fix devtools version fallback (#11869)
79
+ * Fix bug in selenium manager escaping back slashes in Windows (#11884)
80
+
81
+ BiDi:
82
+ * Released selenium-devtools 0.112.0 (supports CDP v85, v110, v111, v112)
83
+
84
+ 4.8.6 (2023-03-29)
85
+ =========================
86
+ Ruby:
87
+ * Properly escape arguments passed to Selenium Manager
88
+
89
+ 4.8.5 (2023-03-28)
90
+ =========================
91
+ Ruby:
92
+ * Wrapping browser name in quotes when calling Selenium Manager
93
+
94
+ 4.8.4 (2023-03-28)
95
+ =========================
96
+ Ruby:
97
+ * Update the selenium-manager versions to fix an IE naming issue (#11828)
98
+
99
+ 4.8.3 (2023-03-26)
100
+ =========================
101
+ Ruby:
102
+ * Still need to use driver finder when using capabilities parameter
103
+ * Accommodate Driver Finder being sent something other than an Options instance
104
+
105
+ 4.8.2 (2023-03-24)
106
+ =========================
107
+ Ruby:
108
+ * Ruby driver finder (#11523)
109
+ * Using json output with Selenium Manager
110
+
111
+ BiDi:
112
+ * Released selenium-devtools 0.111.0 (supports CDP v85, v109, v110, v111)
113
+
114
+ 4.8.1 (2023-02-17)
115
+ =========================
116
+ Ruby:
117
+ * Fix autoload of WebDriver::Remote::Bridge::COMMANDS
118
+ * Subclass is setting value before the superclass is setting it to nil
119
+ * Updating Selenium Manager binaries for 4.8.1 release
120
+
121
+ BiDi:
122
+ * Released selenium-devtools 0.110.0 (supports CDP v85, v108, v109, v110)
123
+ * Close BiDi session on closing the last top-level browsing context
124
+ * Add filtering capability to LogInspector
125
+
126
+ 4.8.0 (2023-01-23)
127
+ =========================
128
+ Ruby:
129
+ * Allow updating instance variables on service classes
130
+ * Deprecate extract_service_args processing in service classes
131
+ * Fix bug preventing sending nil to #send_keys with Remote Driver
132
+ * Fix bug with IE specific methods not available to IE Driver
133
+ * Created Chromium superclass for Chrome and Edge
134
+ * Deprecated platform and version setters/getters in Capabilities class
135
+ * Revamped driver constructor logic
136
+ * Fix bug preventing using Safari Technology Preview when using SafariOptions
137
+ * Fix bug preventing more than one driver type to access Selenium Manager
138
+ * Defaults to using Options instead of Capabilities
139
+ * Make Options classes more strict for allowed arguments and types
140
+ * Removed previously deprecated actions class parameters
141
+ * Removed Location struct
142
+ * Add comment with name of large JS executions (#11038)
143
+ * update logger with link on how to use it (#11478)
144
+ * Deprecate #add_option for Option classes in favor of constructor and attr_accessor
145
+ * Deprecate all unrecognized capabilities for Options classes
146
+ * Deprecate support for :capabilities for local drivers
147
+ * Deprecate browser class methods for Capabilities
148
+ * Deprecate #headless! for Chrome and Firefox
149
+
150
+ BiDi:
151
+ * Released selenium-devtools 0.109.0 (supports CDP v85, v107, v108, v109)
152
+ * Add LogInspector (#11368)
153
+ * Add Browsing context commands (#11446)
154
+
155
+ 4.7.1 (2022-12-02)
156
+ =========================
157
+ Ruby:
158
+ * Fix bug preventing selenium manager from using Internet Explorer
159
+
160
+ 4.7.0 (2022-12-01)
161
+ =========================
162
+ BiDi:
163
+ * Released selenium-devtools 0.108.0 (supports CDP v85, v106, v107, v108)
164
+ * Fix bug with socket stability
165
+
166
+ Ruby:
167
+ * Remove dependency on ChildProcess gem in favor of native Process.spawn (#11251)
168
+ * Add support for Selenium Manager to work with IE Driver
169
+ * Improve error handling for Selenium Manager
170
+
171
+ Safari:
172
+ * Fix bug preventing Safari Options from being used with Safari Technology Preview
173
+
174
+ 4.6.1 (2022-11-04)
175
+ =========================
176
+ Ruby:
177
+ * fix bug preventing selenium-manager from being executable by default
178
+
179
+ 4.6.0 (2022-11-04)
180
+ =========================
181
+ BiDi:
182
+ * Released selenium-devtools 0.107.0 (supports CDP v85, v105, v106, v107)
183
+
184
+ Ruby:
185
+ * firefox scroll by amount is only failing on mac
186
+ * add initial support for selenium manager
187
+ * Revert "[rb] do not allow Select class to work with disabled selects"
188
+ * Make sure selenium-manager is packed into gem
189
+ * Fix platform list in #scroll_by guard
190
+
191
+ 4.5.0 (2022-09-28)
2
192
  =========================
3
193
 
4
194
  BiDi:
data/Gemfile CHANGED
@@ -4,3 +4,5 @@ source 'https://rubygems.org'
4
4
  Dir["#{__dir__}/*.gemspec"].each do |spec|
5
5
  gemspec name: File.basename(spec, '.gemspec')
6
6
  end
7
+
8
+ gem 'debug', '~> 1.7', require: false, platforms: %i[mri mingw x64_mingw]
data/LICENSE CHANGED
@@ -187,7 +187,7 @@
187
187
  same "printed page" as the copyright notice for easier
188
188
  identification within third-party archives.
189
189
 
190
- Copyright 2022 Software Freedom Conservancy (SFC)
190
+ Copyright 2023 Software Freedom Conservancy (SFC)
191
191
 
192
192
  Licensed under the Apache License, Version 2.0 (the "License");
193
193
  you may not use this file except in compliance with the License.
data/NOTICE CHANGED
@@ -1,2 +1,2 @@
1
- Copyright 2011-2022 Software Freedom Conservancy
1
+ Copyright 2011-2023 Software Freedom Conservancy
2
2
  Copyright 2004-2011 Selenium committers
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # selenium-webdriver
2
2
 
3
- This gem provides Ruby bindings for Selenium and supports MRI >= 2.6
3
+ This gem provides Ruby bindings for Selenium and supports MRI >= 3.0.
4
4
 
5
5
  ## Install
6
6
 
@@ -15,7 +15,7 @@ This gem provides Ruby bindings for Selenium and supports MRI >= 2.6
15
15
 
16
16
  ## License
17
17
 
18
- Copyright 2009-2021 Software Freedom Conservancy
18
+ Copyright 2009-2023 Software Freedom Conservancy
19
19
 
20
20
  Licensed to the Software Freedom Conservancy (SFC) under one
21
21
  or more contributor license agreements. See the NOTICE file
Binary file
Binary file
Binary file
@@ -17,7 +17,8 @@
17
17
  # specific language governing permissions and limitations
18
18
  # under the License.
19
19
 
20
- require 'childprocess'
20
+ require 'selenium/webdriver/common/child_process'
21
+ require 'selenium/webdriver/common/port_prober'
21
22
  require 'selenium/webdriver/common/socket_poller'
22
23
  require 'net/http'
23
24
 
@@ -165,7 +166,7 @@ module Selenium
165
166
  # :standalone, #hub, #node
166
167
  #
167
168
 
168
- attr_accessor :role, :port, :timeout, :background, :log
169
+ attr_accessor :role, :host, :port, :timeout, :background, :log
169
170
 
170
171
  #
171
172
  # @param [String] jar Path to the server jar.
@@ -185,7 +186,7 @@ module Selenium
185
186
  @jar = jar
186
187
  @host = '127.0.0.1'
187
188
  @role = opts.fetch(:role, 'standalone')
188
- @port = opts.fetch(:port, 4444)
189
+ @port = opts.fetch(:port, WebDriver::PortProber.above(4444))
189
190
  @timeout = opts.fetch(:timeout, 30)
190
191
  @background = opts.fetch(:background, false)
191
192
  @additional_args = opts.fetch(:args, [])
@@ -207,11 +208,6 @@ module Selenium
207
208
  end
208
209
 
209
210
  def stop
210
- begin
211
- Net::HTTP.get(@host, '/selenium-server/driver/?cmd=shutDownSeleniumServer', @port)
212
- rescue Errno::ECONNREFUSED
213
- end
214
-
215
211
  stop_process if @process
216
212
  poll_for_shutdown
217
213
 
@@ -233,13 +229,7 @@ module Selenium
233
229
  private
234
230
 
235
231
  def stop_process
236
- return unless @process.alive?
237
-
238
- begin
239
- @process.poll_for_exit(5)
240
- rescue ChildProcess::TimeoutError
241
- @process.stop
242
- end
232
+ @process.stop
243
233
  rescue Errno::ECHILD
244
234
  # already dead
245
235
  ensure
@@ -252,16 +242,12 @@ module Selenium
252
242
  properties = @additional_args.dup - @additional_args.delete_if { |arg| arg[/^-D/] }
253
243
  args = ['-jar', @jar, @role, '--port', @port.to_s]
254
244
  server_command = ['java'] + properties + args + @additional_args
255
- cp = ChildProcess.build(*server_command)
256
- WebDriver.logger.debug("Executing Process #{server_command}")
257
-
258
- io = cp.io
245
+ cp = WebDriver::ChildProcess.build(*server_command)
259
246
 
260
247
  if @log.is_a?(String)
261
- @log_file = File.open(@log, 'w')
262
- io.stdout = io.stderr = @log_file
248
+ cp.io = @log
263
249
  elsif @log
264
- io.inherit!
250
+ cp.io = :out
265
251
  end
266
252
 
267
253
  cp.detach = @background
@@ -113,10 +113,9 @@ function nd(a,b,c,d){a=a.nodeValue.replace(/[\u200b\u200e\u200f]/g,"");a=a.repla
113
113
  function pd(a,b,c,d,e){if(3==a.nodeType&&c)nd(a,b,d,e);else if(S(a))if(S(a,"CONTENT")||S(a,"SLOT")){for(var f=a;f.parentNode;)f=f.parentNode;f instanceof ShadowRoot?(a=S(a,"CONTENT")?a.getDistributedNodes():a.assignedNodes(),l(a,function(g){pd(g,b,c,d,e)})):jd(a,b)}else if(S(a,"SHADOW")){for(f=a;f.parentNode;)f=f.parentNode;if(f instanceof ShadowRoot&&(a=f))for(a=a.olderShadowRoot;a;)l(a.childNodes,function(g){pd(g,b,c,d,e)}),a=a.olderShadowRoot}else jd(a,b)}
114
114
  function jd(a,b){a.shadowRoot&&l(a.shadowRoot.childNodes,function(c){pd(c,b,!0,null,null)});ld(a,b,function(c,d,e,f,g){var h=null;1==c.nodeType?h=c:3==c.nodeType&&(h=c);null!=h&&(null!=h.assignedSlot||h.getDestinationInsertionPoints&&0<h.getDestinationInsertionPoints().length)||pd(c,d,e,f,g)})};var qd={C:function(a,b){return!(!a.querySelectorAll||!a.querySelector)&&!/^\d.*/.test(b)},o:function(a,b){var c=eb(b),d="string"===typeof a?c.a.getElementById(a):a;return d?Uc(d,"id")==a&&b!=d&&hb(b,d)?d:ua(mb(c,"*"),function(e){return Uc(e,"id")==a&&b!=e&&hb(b,e)}):null},j:function(a,b){if(!a)return[];if(qd.C(b,a))try{return b.querySelectorAll("#"+qd.T(a))}catch(c){return[]}b=mb(eb(b),"*",null,b);return pa(b,function(c){return Uc(c,"id")==a})},T:function(a){return a.replace(/([\s'"\\#.:;,!?+<>=~*^$|%&@`{}\-\/\[\]\(\)])/g,
115
115
  "\\$1")}};var Y={},rd={};Y.N=function(a,b,c){try{var d=Nc.j("a",b)}catch(e){d=mb(eb(b),"A",null,b)}return ua(d,function(e){e=id(e);e=e.replace(/^[\s]+|[\s]+$/g,"");return c&&-1!=e.indexOf(a)||e==a})};Y.K=function(a,b,c){try{var d=Nc.j("a",b)}catch(e){d=mb(eb(b),"A",null,b)}return pa(d,function(e){e=id(e);e=e.replace(/^[\s]+|[\s]+$/g,"");return c&&-1!=e.indexOf(a)||e==a})};Y.o=function(a,b){return Y.N(a,b,!1)};Y.j=function(a,b){return Y.K(a,b,!1)};rd.o=function(a,b){return Y.N(a,b,!0)};
116
- rd.j=function(a,b){return Y.K(a,b,!0)};var Z={F:function(a,b){return function(c){var d=Z.u(a);d=W(d);c=W(c);return b.call(null,d,c)}},R:function(a){return Z.F(a,function(b,c){return c.b+c.height<b.b})},S:function(a){return Z.F(a,function(b,c){return b.b+b.height<c.b})},V:function(a){return Z.F(a,function(b,c){return c.a+c.width<b.a})},aa:function(a){return Z.F(a,function(b,c){return b.a+b.width<c.a})},W:function(a,b){var c;b?c=b:"number"==typeof a.distance&&(c=a.distance);c||(c=100);return function(d){var e=Z.u(a);if(e===d)return!1;e=
117
- W(e);d=W(d);var f=Math.abs(e.a+e.width-d.a),g=Math.abs(e.b+e.height-d.b);g=Math.abs(e.b-(d.b+d.height))<=c||g<=c;return(Math.abs(e.a-(d.a+d.width))<=c||f<=c)&&g?!0:Math.sqrt(Math.pow(Math.abs(e.a+e.width/2-(d.a+d.width/2)),2)+Math.pow(Math.abs(e.b+e.height/2-(d.b+d.height/2)),2))<=c}},u:function(a){if(ha(a)&&1==a.nodeType)return a;if(ea(a))return Z.u(a.call(null));if(ha(a)){var b;a:{if(b=sd(a)){var c=td[b];if(c&&ea(c.o)){b=c.o(a[b],Bc.document);break a}}throw new P(61,"Unsupported locator strategy: "+
118
- b);}if(!b)throw new P(7,"No element has been found by "+JSON.stringify(a));return b}throw new P(61,"Selector is of wrong type: "+JSON.stringify(a));}};Z.P={left:Z.V,right:Z.aa,above:Z.R,below:Z.S,near:Z.W};Z.O={left:Z.u,right:Z.u,above:Z.u,below:Z.u,near:Z.u};
119
- Z.U=function(a,b){var c=[];l(a,function(e){e&&ta(b,function(f){var g=f.kind,h=Z.P[g];if(!h)throw new P(61,"Cannot find filter suitable for "+g);return h.apply(null,f.args)(e)},null)&&c.push(e)},null);a=b[b.length-1];var d=Z.O[a?a.kind:"unknown"];return d?(a=d.apply(null,a.args))?Z.ba(a,c):c:c};
116
+ rd.j=function(a,b){return Y.K(a,b,!0)};var Z={F:function(a,b){return function(c){var d=Z.u(a);d=W(d);c=W(c);return b.call(null,d,c)}},R:function(a){return Z.F(a,function(b,c){return c.b+c.height<b.b})},S:function(a){return Z.F(a,function(b,c){return b.b+b.height<c.b})},V:function(a){return Z.F(a,function(b,c){return c.a+c.width<b.a})},aa:function(a){return Z.F(a,function(b,c){return b.a+b.width<c.a})},W:function(a,b){var c;b?c=b:"number"==typeof a.distance&&(c=a.distance);c||(c=50);return function(d){var e=Z.u(a);if(e===d)return!1;e=W(e);
117
+ d=W(d);e=new U(e.a-c,e.b-c,e.width+2*c,e.height+2*c);return e.a<=d.a+d.width&&d.a<=e.a+e.width&&e.b<=d.b+d.height&&d.b<=e.b+e.height}},u:function(a){if(ha(a)&&1==a.nodeType)return a;if(ea(a))return Z.u(a.call(null));if(ha(a)){var b;a:{if(b=sd(a)){var c=td[b];if(c&&ea(c.o)){b=c.o(a[b],Bc.document);break a}}throw new P(61,"Unsupported locator strategy: "+b);}if(!b)throw new P(7,"No element has been found by "+JSON.stringify(a));return b}throw new P(61,"Selector is of wrong type: "+JSON.stringify(a));
118
+ }};Z.P={left:Z.V,right:Z.aa,above:Z.R,below:Z.S,near:Z.W};Z.O={left:Z.u,right:Z.u,above:Z.u,below:Z.u,near:Z.u};Z.U=function(a,b){var c=[];l(a,function(e){e&&ta(b,function(f){var g=f.kind,h=Z.P[g];if(!h)throw new P(61,"Cannot find filter suitable for "+g);return h.apply(null,f.args)(e)},null)&&c.push(e)},null);a=b[b.length-1];var d=Z.O[a?a.kind:"unknown"];return d?(a=d.apply(null,a.args))?Z.ba(a,c):c:c};
120
119
  Z.ba=function(a,b){function c(f){f=W(f);return Math.sqrt(Math.pow(d-(f.a+Math.max(1,f.width)/2),2)+Math.pow(e-(f.b+Math.max(1,f.height)/2),2))}a=W(a);var d=a.a+Math.max(1,a.width)/2,e=a.b+Math.max(1,a.height)/2;xa(b,function(f,g){return c(f)-c(g)});return b};Z.o=function(a,b){a=Z.j(a,b);return 0==a.length?null:a[0]};
121
120
  Z.j=function(a,b){if(!a.hasOwnProperty("root")||!a.hasOwnProperty("filters"))throw new P(61,"Locator not suitable for relative locators: "+JSON.stringify(a));var c=a.filters,d=da(c);if("array"!=d&&("object"!=d||"number"!=typeof c.length))throw new P(61,"Targets should be an array: "+JSON.stringify(a));var e;S(a.root)?e=[a.root]:e=ud(a.root,b);return 0==e.length?[]:Z.U(e,a.filters)};var vd={o:function(a,b){if(""===a)throw new P(32,'Unable to locate an element with the tagName ""');return b.getElementsByTagName(a)[0]||null},j:function(a,b){if(""===a)throw new P(32,'Unable to locate an element with the tagName ""');return b.getElementsByTagName(a)}};var td={className:Dc,"class name":Dc,css:Nc,"css selector":Nc,relative:Z,id:qd,linkText:Y,"link text":Y,name:{o:function(a,b){b=mb(eb(b),"*",null,b);return ua(b,function(c){return Uc(c,"name")==a})},j:function(a,b){b=mb(eb(b),"*",null,b);return pa(b,function(c){return Uc(c,"name")==a})}},partialLinkText:rd,"partial link text":rd,tagName:vd,"tag name":vd,xpath:T};function sd(a){for(var b in a)if(a.hasOwnProperty(b))return b;return null}
122
121
  function ud(a,b){var c=sd(a);if(c){var d=td[c];if(d&&ea(d.j))return d.j(a[c],b||Bc.document)}throw new P(61,"Unsupported locator strategy: "+c);};ca("_",ud);; return this._.apply(null,arguments);}).apply({navigator:typeof window!='undefined'?window.navigator:null,document:typeof window!='undefined'?window.document:null}, arguments);}
File without changes
File without changes
File without changes
@@ -20,6 +20,10 @@
20
20
  module Selenium
21
21
  module WebDriver
22
22
  module Atoms
23
+ def atom_script(function_name)
24
+ format("/* #{function_name} */return (%<atom>s).apply(null, arguments)",
25
+ atom: read_atom(function_name))
26
+ end
23
27
 
24
28
  private
25
29
 
@@ -28,10 +32,8 @@ module Selenium
28
32
  end
29
33
 
30
34
  def execute_atom(function_name, *arguments)
31
- script = format("return (%<atom>s).apply(null, arguments)", atom: read_atom(function_name))
32
- execute_script(script, *arguments)
35
+ execute_script(atom_script(function_name), *arguments)
33
36
  end
34
-
35
37
  end # Atoms
36
38
  end # WebDriver
37
39
  end # Selenium
@@ -0,0 +1,88 @@
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_relative 'navigate_result'
21
+ require_relative 'browsing_context_info'
22
+
23
+ module Selenium
24
+ module WebDriver
25
+ class BiDi
26
+ class BrowsingContext
27
+ attr_accessor :id
28
+
29
+ READINESS_STATE = {
30
+ none: 'none',
31
+ interactive: 'interactive',
32
+ complete: 'complete'
33
+ }.freeze
34
+
35
+ def initialize(driver:, browsing_context_id: nil, type: nil, reference_context: nil)
36
+ unless driver.capabilities.web_socket_url
37
+ raise Error::WebDriverError,
38
+ 'WebDriver instance must support BiDi protocol'
39
+ end
40
+
41
+ unless type.nil? || %i[window tab].include?(type)
42
+ raise ArgumentError,
43
+ "Valid types are :window & :tab. Received: #{type.inspect}"
44
+ end
45
+
46
+ @bidi = driver.bidi
47
+ @id = browsing_context_id.nil? ? create(type, reference_context)['context'] : browsing_context_id
48
+ end
49
+
50
+ def navigate(url:, readiness_state: nil)
51
+ unless readiness_state.nil? || READINESS_STATE.key?(readiness_state)
52
+ raise ArgumentError,
53
+ "Valid readiness states are :none, :interactive & :complete. Received: #{readiness_state.inspect}"
54
+ end
55
+
56
+ navigate_result = @bidi.send_cmd('browsingContext.navigate', context: @id, url: url,
57
+ wait: READINESS_STATE[readiness_state])
58
+
59
+ NavigateResult.new(
60
+ url: navigate_result['url'],
61
+ navigation_id: navigate_result['navigation']
62
+ )
63
+ end
64
+
65
+ def get_tree(max_depth: nil)
66
+ result = @bidi.send_cmd('browsingContext.getTree', root: @id, maxDepth: max_depth).dig('contexts', 0)
67
+
68
+ BrowsingContextInfo.new(
69
+ id: result['context'],
70
+ url: result['url'],
71
+ children: result['children'],
72
+ parent_context: result['parent']
73
+ )
74
+ end
75
+
76
+ def close
77
+ @bidi.send_cmd('browsingContext.close', context: @id)
78
+ end
79
+
80
+ private
81
+
82
+ def create(type, reference_context)
83
+ @bidi.send_cmd('browsingContext.create', type: type.to_s, referenceContext: reference_context)
84
+ end
85
+ end # BrowsingContext
86
+ end # BiDi
87
+ end # WebDriver
88
+ end # Selenium
@@ -17,21 +17,19 @@
17
17
  # specific language governing permissions and limitations
18
18
  # under the License.
19
19
 
20
- # TODO: Deprecated; Delete after 4.0 release
21
20
  module Selenium
22
21
  module WebDriver
23
- module DriverExtensions
24
- module HasNetworkConnection
25
- def network_connection_type
26
- raise Error::UnsupportedOperationError,
27
- 'The W3C standard does not currently support getting network connection'
28
- end
22
+ class BiDi
23
+ class BrowsingContextInfo
24
+ attr_accessor :id, :url, :children, :parent_browsing_context
29
25
 
30
- def network_connection_type=(*)
31
- raise Error::UnsupportedOperationError,
32
- 'The W3C standard does not currently support setting network connection'
26
+ def initialize(id:, url:, children:, parent_context:)
27
+ @id = id
28
+ @url = url
29
+ @children = children
30
+ @parent_browsing_context = parent_context
33
31
  end
34
- end # HasNetworkConnection
35
- end # DriverExtensions
32
+ end # BrowsingContextInfo
33
+ end # BiDi
36
34
  end # WebDriver
37
35
  end # Selenium
@@ -0,0 +1,35 @@
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 BaseLogEntry
24
+ attr_accessor :level, :text, :timestamp, :stack_trace
25
+
26
+ def initialize(level:, text:, timestamp:, stack_trace:)
27
+ @level = level
28
+ @text = text
29
+ @timestamp = timestamp
30
+ @stack_trace = stack_trace
31
+ end
32
+ end # BaseLogEntry
33
+ end # BiDi
34
+ end # WebDriver
35
+ end # Selenium
@@ -0,0 +1,35 @@
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 ConsoleLogEntry < GenericLogEntry
24
+ attr_accessor :method, :realm, :args
25
+
26
+ def initialize(method:, realm:, args:, **opts)
27
+ super(**opts)
28
+ @method = method
29
+ @realm = realm
30
+ @args = args
31
+ end
32
+ end # ConsoleLogEntry
33
+ end # BiDi
34
+ end # WebDriver
35
+ end # Selenium
@@ -17,21 +17,24 @@
17
17
  # specific language governing permissions and limitations
18
18
  # under the License.
19
19
 
20
- # TODO: Deprecated; Delete after 4.0 release
21
20
  module Selenium
22
21
  module WebDriver
23
- module DriverExtensions
24
- module HasLocation
25
- def location
26
- raise Error::UnsupportedOperationError, 'The W3C standard does not currently support getting location'
27
- end
22
+ class BiDi
23
+ class FilterBy
24
+ attr_accessor :level
28
25
 
29
- def location=(*)
30
- raise Error::UnsupportedOperationError, 'The W3C standard does not currently support setting location'
26
+ def initialize(level)
27
+ @level = level
31
28
  end
32
- alias_method :set_location, :location
33
29
 
34
- end # HasLocation
35
- end # DriverExtensions
30
+ def self.log_level(level = nil)
31
+ unless %w[debug error info warning].include?(level)
32
+ raise Error::WebDriverError,
33
+ "Valid log levels are 'debug', 'error', 'info' and 'warning'. Received: #{level}"
34
+ end
35
+ FilterBy.new(level)
36
+ end
37
+ end # FilterBy
38
+ end # BiDi
36
39
  end # WebDriver
37
40
  end # Selenium
@@ -0,0 +1,33 @@
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 GenericLogEntry < BaseLogEntry
24
+ attr_accessor :type
25
+
26
+ def initialize(level:, text:, timestamp:, type:, stack_trace:)
27
+ super(level: level, text: text, timestamp: timestamp, stack_trace: stack_trace)
28
+ @type = type
29
+ end
30
+ end # GenericLogEntry
31
+ end # BiDi
32
+ end # WebDriver
33
+ end # Selenium