selenium-webdriver 4.0.0.rc3 → 4.13.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (158) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +338 -0
  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 +90 -79
  11. data/lib/selenium/webdriver/atoms/findElements.js +5 -6
  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 +2 -3
  16. data/lib/selenium/webdriver/bidi/browsing_context.rb +88 -0
  17. data/lib/selenium/webdriver/bidi/browsing_context_info.rb +35 -0
  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 +51 -0
  26. data/lib/selenium/webdriver/bidi.rb +56 -0
  27. data/lib/selenium/webdriver/chrome/driver.rb +9 -29
  28. data/lib/selenium/webdriver/chrome/features.rb +6 -68
  29. data/lib/selenium/webdriver/chrome/options.rb +3 -223
  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 -16
  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 +62 -22
  39. data/lib/selenium/webdriver/common/child_process.rb +124 -0
  40. data/lib/selenium/webdriver/common/driver.rb +31 -81
  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_remote_status.rb → has_bidi.rb} +10 -5
  47. data/lib/selenium/webdriver/common/driver_extensions/has_casting.rb +10 -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 +1 -4
  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 +1 -2
  54. data/lib/selenium/webdriver/common/driver_extensions/has_network_conditions.rb +9 -2
  55. data/lib/selenium/webdriver/common/driver_extensions/has_network_interception.rb +2 -69
  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 +1 -3
  58. data/lib/selenium/webdriver/common/driver_finder.rb +45 -0
  59. data/lib/selenium/webdriver/common/element.rb +8 -8
  60. data/lib/selenium/webdriver/common/error.rb +28 -5
  61. data/lib/selenium/webdriver/common/html5/shared_web_storage.rb +2 -2
  62. data/lib/selenium/webdriver/common/interactions/input_device.rb +10 -4
  63. data/lib/selenium/webdriver/common/interactions/interaction.rb +12 -25
  64. data/lib/selenium/webdriver/common/interactions/interactions.rb +24 -4
  65. data/lib/selenium/webdriver/common/interactions/key_actions.rb +5 -1
  66. data/lib/selenium/webdriver/common/interactions/key_input.rb +11 -27
  67. data/lib/selenium/webdriver/common/interactions/none_input.rb +10 -8
  68. data/lib/selenium/webdriver/common/interactions/pause.rb +49 -0
  69. data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +59 -70
  70. data/lib/selenium/webdriver/common/{driver_extensions/has_network_connection.rb → interactions/pointer_cancel.rb} +19 -11
  71. data/lib/selenium/webdriver/common/interactions/pointer_event_properties.rb +63 -0
  72. data/lib/selenium/webdriver/common/interactions/pointer_input.rb +15 -84
  73. data/lib/selenium/webdriver/common/interactions/pointer_move.rb +60 -0
  74. data/lib/selenium/webdriver/common/interactions/pointer_press.rb +85 -0
  75. data/lib/selenium/webdriver/common/interactions/scroll.rb +59 -0
  76. data/lib/selenium/webdriver/common/interactions/scroll_origin.rb +48 -0
  77. data/lib/selenium/webdriver/common/interactions/typing_interaction.rb +54 -0
  78. data/lib/selenium/webdriver/common/interactions/wheel_actions.rb +113 -0
  79. data/lib/selenium/webdriver/common/interactions/wheel_input.rb +42 -0
  80. data/lib/selenium/webdriver/common/keys.rb +1 -0
  81. data/lib/selenium/webdriver/common/local_driver.rb +46 -0
  82. data/lib/selenium/webdriver/common/logger.rb +90 -25
  83. data/lib/selenium/webdriver/common/manager.rb +0 -27
  84. data/lib/selenium/webdriver/common/options.rb +14 -20
  85. data/lib/selenium/webdriver/common/platform.rb +5 -51
  86. data/lib/selenium/webdriver/common/port_prober.rb +1 -1
  87. data/lib/selenium/webdriver/common/profile_helper.rb +2 -8
  88. data/lib/selenium/webdriver/common/proxy.rb +2 -2
  89. data/lib/selenium/webdriver/common/search_context.rb +0 -6
  90. data/lib/selenium/webdriver/common/selenium_manager.rb +134 -0
  91. data/lib/selenium/webdriver/common/service.rb +21 -30
  92. data/lib/selenium/webdriver/common/service_manager.rb +8 -15
  93. data/lib/selenium/webdriver/common/shadow_root.rb +2 -3
  94. data/lib/selenium/webdriver/common/socket_lock.rb +3 -3
  95. data/lib/selenium/webdriver/common/socket_poller.rb +31 -20
  96. data/lib/selenium/webdriver/common/takes_screenshot.rb +2 -3
  97. data/lib/selenium/webdriver/common/target_locator.rb +2 -3
  98. data/lib/selenium/webdriver/common/timeouts.rb +2 -2
  99. data/lib/selenium/webdriver/common/virtual_authenticator/credential.rb +85 -0
  100. data/lib/selenium/webdriver/common/virtual_authenticator/virtual_authenticator.rb +72 -0
  101. data/lib/selenium/webdriver/common/virtual_authenticator/virtual_authenticator_options.rb +62 -0
  102. data/lib/selenium/webdriver/common/websocket_connection.rb +164 -0
  103. data/lib/selenium/webdriver/common/window.rb +6 -6
  104. data/lib/selenium/webdriver/common/zipper.rb +4 -10
  105. data/lib/selenium/webdriver/common.rb +21 -5
  106. data/lib/selenium/webdriver/devtools/console_event.rb +0 -2
  107. data/lib/selenium/webdriver/devtools/exception_event.rb +0 -2
  108. data/lib/selenium/webdriver/devtools/mutation_event.rb +0 -2
  109. data/lib/selenium/webdriver/devtools/network_interceptor.rb +173 -0
  110. data/lib/selenium/webdriver/devtools/pinned_script.rb +0 -2
  111. data/lib/selenium/webdriver/devtools/request.rb +1 -3
  112. data/lib/selenium/webdriver/devtools/response.rb +1 -3
  113. data/lib/selenium/webdriver/devtools.rb +17 -103
  114. data/lib/selenium/webdriver/edge/driver.rb +9 -3
  115. data/lib/selenium/webdriver/edge/features.rb +4 -4
  116. data/lib/selenium/webdriver/edge/options.rb +17 -5
  117. data/lib/selenium/webdriver/edge/profile.rb +2 -2
  118. data/lib/selenium/webdriver/edge/service.rb +8 -7
  119. data/lib/selenium/webdriver/edge.rb +0 -2
  120. data/lib/selenium/webdriver/firefox/driver.rb +9 -2
  121. data/lib/selenium/webdriver/firefox/features.rb +6 -6
  122. data/lib/selenium/webdriver/firefox/options.rb +9 -14
  123. data/lib/selenium/webdriver/firefox/profile.rb +8 -12
  124. data/lib/selenium/webdriver/firefox/service.rb +0 -18
  125. data/lib/selenium/webdriver/firefox/util.rb +46 -0
  126. data/lib/selenium/webdriver/firefox.rb +1 -14
  127. data/lib/selenium/webdriver/ie/driver.rb +7 -1
  128. data/lib/selenium/webdriver/ie/options.rb +2 -1
  129. data/lib/selenium/webdriver/ie/service.rb +0 -22
  130. data/lib/selenium/webdriver/ie.rb +0 -14
  131. data/lib/selenium/webdriver/remote/{commands.rb → bridge/commands.rb} +15 -8
  132. data/lib/selenium/webdriver/remote/bridge.rb +70 -37
  133. data/lib/selenium/webdriver/remote/capabilities.rb +3 -53
  134. data/lib/selenium/webdriver/remote/driver.rb +31 -14
  135. data/lib/selenium/webdriver/remote/http/common.rb +3 -3
  136. data/lib/selenium/webdriver/remote/http/curb.rb +1 -3
  137. data/lib/selenium/webdriver/remote/http/default.rb +8 -14
  138. data/lib/selenium/webdriver/remote/response.rb +2 -3
  139. data/lib/selenium/webdriver/remote/server_error.rb +1 -1
  140. data/lib/selenium/webdriver/remote.rb +5 -5
  141. data/lib/selenium/webdriver/safari/driver.rb +7 -1
  142. data/lib/selenium/webdriver/safari/features.rb +0 -2
  143. data/lib/selenium/webdriver/safari/options.rb +5 -1
  144. data/lib/selenium/webdriver/safari/service.rb +10 -4
  145. data/lib/selenium/webdriver/safari.rb +1 -15
  146. data/lib/selenium/webdriver/support/color.rb +22 -22
  147. data/lib/selenium/webdriver/support/guards/guard.rb +0 -2
  148. data/lib/selenium/webdriver/support/guards/guard_condition.rb +1 -3
  149. data/lib/selenium/webdriver/support/guards.rb +1 -1
  150. data/lib/selenium/webdriver/support/relative_locator.rb +0 -1
  151. data/lib/selenium/webdriver/support/select.rb +4 -2
  152. data/lib/selenium/webdriver/version.rb +1 -1
  153. data/lib/selenium/webdriver.rb +7 -5
  154. data/selenium-webdriver.gemspec +15 -13
  155. metadata +79 -65
  156. data/lib/selenium/webdriver/remote/http/persistent.rb +0 -65
  157. data/lib/selenium/webdriver/support/cdp/domain.rb.erb +0 -63
  158. 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: 2ab22cf48ce547f745515fdd60b09f44788f92bc7a6a339c43462c53d8161cab
4
- data.tar.gz: 898185398832035b0c29294eb83f05883650ff3e61a5ecdc3da8842a454c28bd
3
+ metadata.gz: f0544a2a33a422ec747811de5284f488ffa033490b571bf05d99c58b6ef98df7
4
+ data.tar.gz: f3f20f45c293b1aec1067f3abccbbb8355b7c44e2c14afd10d435767da669027
5
5
  SHA512:
6
- metadata.gz: 9147cc75bbabff4744ba484bbf23e4fd5a6d683e201315eb42f536f07f35789a78151f3b5abc53da60624c5681f90e064da5ec5dd30117bbb8d33b71f1b37b6a
7
- data.tar.gz: 173788de6fc1b98ac83255f49cf8e03a5e7d1b7c68853077a7a6d6b96880e768daad66aaa2f228e72d8f76db4c8c13070c762860a6ecccbaf98e4190c1ccf990
6
+ metadata.gz: 72d61b0203d4dd018067e401c1f49e6cd996c21f95bc86de96a8d3d0f4516ffabe648d7c56de3c0f883d17b415acf3df5a0d3b1bd9b9b4b572ec99699394a58b
7
+ data.tar.gz: 932f4e0381c3c7ce9f690f9a64d9d75e6eb63102c6413e8a2696366683676e09ec984703b9d9acc176ca1a2411f14c356f9676eaf9c190a8c30341a027ec913f
data/CHANGES CHANGED
@@ -1,3 +1,341 @@
1
+ 4.13.1 (2023-09-25)
2
+ =========================
3
+ Ruby:
4
+ * Fix bug preventing logging chromedriver to file
5
+
6
+ 4.13.0 (2023-09-25)
7
+ =========================
8
+ Ruby:
9
+ * Fix bug preventing using performance logging with chromium
10
+ * Allow users to set Selenium Manager path by environment variable (#12752)
11
+ * Allow service to be started before the driver
12
+ * remove deprecated driver extensions for location and network connection
13
+
14
+ BiDi:
15
+ * Released selenium-devtools 0.117.0 (supports CDP v85, v115, v116, v117)
16
+
17
+ 4.12.0 (2023-08-31)
18
+ =========================
19
+ Ruby:
20
+ * Fix bug preventing good error messages in Selenium Manager when stdout empty
21
+ * Fix bug with Firefox not loading net/http library by default (#12506)
22
+ * Remove support for using capabilities in local drivers
23
+
24
+ BiDi:
25
+ * Released selenium-devtools 0.116.0 (supports CDP v85, v114, v115, v116)
26
+
27
+ 4.11.0 (2023-07-31)
28
+ =========================
29
+ Ruby:
30
+ * Made network interception threads fail silently (#12226)
31
+ * Have Selenium Manager binary locate drivers on PATH (#12345)
32
+ * Add browser output from selenium manager to options (#12398)
33
+ * Remove deprecated code (#12417)
34
+ BiDi:
35
+ * Released selenium-devtools 0.115.0 (supports CDP v85, v113, v114, v115)
36
+ Edge:
37
+ * Adding ignore process match for IE Mode across bindings (#12279)
38
+
39
+ 4.10.0 (2023-06-07)
40
+ =========================
41
+ Ruby:
42
+ * Implement proxy support for Selenium Manager
43
+ * Prevent setting driver log level in Safari
44
+ * Change all Selenium Manager logging to :debug (#12145)
45
+ * Error messages include links to documentation
46
+ * Add custom error class for driver location and improve error logic
47
+
48
+ BiDi:
49
+ * Released selenium-devtools 0.114.0 (supports CDP v85, v112, v113, v114)
50
+
51
+ Edge:
52
+ * Add support for webview2
53
+
54
+ 4.9.1 (2023-05-08)
55
+ =========================
56
+ Ruby:
57
+ * Allow users to specify driver process output in Service class (#11964)
58
+ * Updated minimum required Ruby version to 3.0
59
+ * Selenium Logger defaults to :info and all debugging is now logged as :debug (#11967)
60
+ * Every logging entry can be ignored based on ID, not just warnings
61
+ * Logging entries can be filtered to allow or ignore specific IDs
62
+
63
+ BiDi:
64
+ * Fix bug with loading devtools (#11931) (thanks Boris Petrov!)
65
+ * Released selenium-devtools 0.113.0 (supports CDP v85, v111, v112, v113)
66
+
67
+ 4.9.0 (2023-04-21)
68
+ =========================
69
+ Ruby:
70
+ * Fix devtools version fallback (#11869)
71
+ * Fix bug in selenium manager escaping back slashes in Windows (#11884)
72
+
73
+ BiDi:
74
+ * Released selenium-devtools 0.112.0 (supports CDP v85, v110, v111, v112)
75
+
76
+ 4.8.6 (2023-03-29)
77
+ =========================
78
+ Ruby:
79
+ * Properly escape arguments passed to Selenium Manager
80
+
81
+ 4.8.5 (2023-03-28)
82
+ =========================
83
+ Ruby:
84
+ * Wrapping browser name in quotes when calling Selenium Manager
85
+
86
+ 4.8.4 (2023-03-28)
87
+ =========================
88
+ Ruby:
89
+ * Update the selenium-manager versions to fix an IE naming issue (#11828)
90
+
91
+ 4.8.3 (2023-03-26)
92
+ =========================
93
+ Ruby:
94
+ * Still need to use driver finder when using capabilities parameter
95
+ * Accommodate Driver Finder being sent something other than an Options instance
96
+
97
+ 4.8.2 (2023-03-24)
98
+ =========================
99
+ Ruby:
100
+ * Ruby driver finder (#11523)
101
+ * Using json output with Selenium Manager
102
+
103
+ BiDi:
104
+ * Released selenium-devtools 0.111.0 (supports CDP v85, v109, v110, v111)
105
+
106
+ 4.8.1 (2023-02-17)
107
+ =========================
108
+ Ruby:
109
+ * Fix autoload of WebDriver::Remote::Bridge::COMMANDS
110
+ * Subclass is setting value before the superclass is setting it to nil
111
+ * Updating Selenium Manager binaries for 4.8.1 release
112
+
113
+ BiDi:
114
+ * Released selenium-devtools 0.110.0 (supports CDP v85, v108, v109, v110)
115
+ * Close BiDi session on closing the last top-level browsing context
116
+ * Add filtering capability to LogInspector
117
+
118
+ 4.8.0 (2023-01-23)
119
+ =========================
120
+ Ruby:
121
+ * Allow updating instance variables on service classes
122
+ * Deprecate extract_service_args processing in service classes
123
+ * Fix bug preventing sending nil to #send_keys with Remote Driver
124
+ * Fix bug with IE specific methods not available to IE Driver
125
+ * Created Chromium superclass for Chrome and Edge
126
+ * Deprecated platform and version setters/getters in Capabilities class
127
+ * Revamped driver constructor logic
128
+ * Fix bug preventing using Safari Technology Preview when using SafariOptions
129
+ * Fix bug preventing more than one driver type to access Selenium Manager
130
+ * Defaults to using Options instead of Capabilities
131
+ * Make Options classes more strict for allowed arguments and types
132
+ * Removed previously deprecated actions class parameters
133
+ * Removed Location struct
134
+ * Add comment with name of large JS executions (#11038)
135
+ * update logger with link on how to use it (#11478)
136
+ * Deprecate #add_option for Option classes in favor of constructor and attr_accessor
137
+ * Deprecate all unrecognized capabilities for Options classes
138
+ * Deprecate support for :capabilities for local drivers
139
+ * Deprecate browser class methods for Capabilities
140
+ * Deprecate #headless! for Chrome and Firefox
141
+
142
+ BiDi:
143
+ * Released selenium-devtools 0.109.0 (supports CDP v85, v107, v108, v109)
144
+ * Add LogInspector (#11368)
145
+ * Add Browsing context commands (#11446)
146
+
147
+ 4.7.1 (2022-12-02)
148
+ =========================
149
+ Ruby:
150
+ * Fix bug preventing selenium manager from using Internet Explorer
151
+
152
+ 4.7.0 (2022-12-01)
153
+ =========================
154
+ BiDi:
155
+ * Released selenium-devtools 0.108.0 (supports CDP v85, v106, v107, v108)
156
+ * Fix bug with socket stability
157
+
158
+ Ruby:
159
+ * Remove dependency on ChildProcess gem in favor of native Process.spawn (#11251)
160
+ * Add support for Selenium Manager to work with IE Driver
161
+ * Improve error handling for Selenium Manager
162
+
163
+ Safari:
164
+ * Fix bug preventing Safari Options from being used with Safari Technology Preview
165
+
166
+ 4.6.1 (2022-11-04)
167
+ =========================
168
+ Ruby:
169
+ * fix bug preventing selenium-manager from being executable by default
170
+
171
+ 4.6.0 (2022-11-04)
172
+ =========================
173
+ BiDi:
174
+ * Released selenium-devtools 0.107.0 (supports CDP v85, v105, v106, v107)
175
+
176
+ Ruby:
177
+ * firefox scroll by amount is only failing on mac
178
+ * add initial support for selenium manager
179
+ * Revert "[rb] do not allow Select class to work with disabled selects"
180
+ * Make sure selenium-manager is packed into gem
181
+ * Fix platform list in #scroll_by guard
182
+
183
+ 4.5.0 (2022-09-28)
184
+ =========================
185
+
186
+ BiDi:
187
+ * Released selenium-devtools 0.105.0 (supports CDP v85, v103, v104, v105)
188
+ * Released selenium-devtools 0.106.0 (supports CDP v85, v104, v105, v106)
189
+ * Add HasBiDi support to Chrome
190
+
191
+ Ruby:
192
+ * Fix bug in Platform code
193
+ * Update Select class to error when elements are disabled (#10812)
194
+
195
+ Firefox:
196
+ * Add support for installing unsigned add-ons (#10265, thanks TamsilAmani!)
197
+ * Change accept_insecure_certificates to true by default (to match other bindings)
198
+ * Set debugger_address option to true by default
199
+
200
+ Server:
201
+ * Add support for initializing server class with arguments and log level
202
+
203
+ 4.4.0 (2022-08-09)
204
+ =========================
205
+
206
+ BiDi:
207
+ * Released selenium-devtools 0.103.1 to fix websocket dependency requirement
208
+ * Released selenium-devtools 0.104.0 (supports CDP v85, v102, v103, v104)
209
+ * Have network interceptor ignore cancelled requests (#10856)
210
+ * Improve websocket message handling
211
+
212
+ Chromium:
213
+ * Prevent users from setting w3c: false and warn for true (thanks Tamsil Amani!)
214
+
215
+ Ruby:
216
+ * Implement Virtual Authenticator (#10903, #10541) (thanks Tamsil Amani!)
217
+
218
+ 4.3.0 (2022-06-23)
219
+ =========================
220
+
221
+ BiDi:
222
+ * Released selenium-devtools 0.103.0 (supports CDP v85, v101, v102, v103)
223
+
224
+ Ruby:
225
+ * Allow specifying which button is clicked in pointer action class methods
226
+ * Remove deprecated `Persistent` http class
227
+ * Remove deprecated HasRemoteStatus module
228
+ * Remove deprecated `Manager#new_window` and `Manager#logs`
229
+ * `ActionBuilder#move_to` no longer attempts to move to top left corner of element
230
+ * Remove deprecated support for sending Service parameters directly to Driver constructor
231
+ * Remove deprecated setters and getters for driver path on Browser modules
232
+ * Remove deprecated support for passing in options argument to Options class
233
+ * Allow `:options` parameter to take `Options` instance argument like other languages
234
+ * Remove deprecated support for `:desired_capabilities` & `:options` with `Hash` argument
235
+
236
+ 4.2.1 (2022-05-31)
237
+ =========================
238
+
239
+ Ruby
240
+ * Fix bug in setting default duration in Actions constructor
241
+
242
+ 4.2.0 (2022-05-27)
243
+ =========================
244
+
245
+ BiDi:
246
+ * Released selenium-devtools 0.97.0 (supports CDP v85, v95, v96, v97)
247
+ * Released selenium-devtools 0.98.0 (supports CDP v85, v96, v97, v98)
248
+ * Released selenium-devtools 0.99.0 (supports CDP v85, v97, v98, v99)
249
+ * Released selenium-devtools 0.100.0 (supports CDP v85, v98, v99, v100)
250
+ * Released selenium-devtools 0.101.0 (supports CDP v85, v99, v100, v101)
251
+ * Released selenium-devtools 0.102.0 (supports CDP v85, v100, v101, v102)
252
+ * Implement simple BiDi connection
253
+ * Fix bug in initial BiDi implementation (thanks Boris Petrov!)
254
+ * Fix bug with mutating headers in request interception (#10574)
255
+ * Fix bug with empty response headers (thanks Viren Negi!)
256
+
257
+ Firefox:
258
+ * Add support to Firefox Options for environment capability
259
+ * Use addon parameter instead of path parameter to avoid using file detector
260
+ * Restore #from_name method to Firefox profile (#10146)
261
+
262
+ Chromium:
263
+ * Add support for casting desktop
264
+
265
+ Ruby:
266
+ * Updated minimum required Ruby version to 2.7
267
+ * Fix bug by not attempting to stop service process when it's not started (#10015)
268
+ * Fix bug to not stop service process when it's not started (thanks Atsushi Tatsuma!)
269
+ * Use driver endpoint to get page source instead of JavaScript
270
+ * Add zenkaku_hankaku key support
271
+ * Fix download support of Selenium Server
272
+ * Do not convert Tag Name to CSS Selector
273
+
274
+ ActionBuilder:
275
+ * Raise error if input device not found
276
+ * Move `TypingInteraction` from `Interactions::KeyInput` to `Interactions` module
277
+ * Throw better errors for `PointerInput` methods
278
+ * Allow each action interaction class to validate its own source
279
+ * Set all Interactions classes to private
280
+ * Allow device names to use a default id if one is not specified
281
+ * Deprecate default mouse and keyboard values in constructor, favoring devices parameter
282
+ * Add support for pointer event properties
283
+ * Implement scroll wheel support
284
+ * Deprecate ordered pair parameters for pause method in favor of keywords
285
+ * Deprecate move to element with offset changing origin to top left of element
286
+
287
+ 4.1.0 (2021-11-22)
288
+ =========================
289
+
290
+ DevTools:
291
+ * Released selenium-devtools 0.95.0 (supports CDP v85, v93, v94, v95)
292
+ * Released selenium-devtools 0.96.0 (supports CDP v85, v94, v95, v96)
293
+ * Added support for secure websockets (#10017)
294
+
295
+ Ruby:
296
+ * Execute Script supports ShadowRoots (#10019)
297
+ * Fixed bug preventing zipping temp files on Windows (#9987)
298
+ * Sang Pumpkin Carol (thanks Jari!)
299
+
300
+ 4.0.3 (2021-10-20)
301
+ =========================
302
+
303
+ Firefox:
304
+ * Fixed bug avoiding camel casing prefs (#9944 thanks @glaszig)
305
+
306
+ Ruby:
307
+ * Fixed bug in Select class for finding by index (#9945)
308
+
309
+ Remote:
310
+ * Fixed bug preventing sending keys with an empty value
311
+
312
+ 4.0.2 (2021-10-19)
313
+ =========================
314
+
315
+ Server:
316
+ * Fixed bug in new download code.
317
+
318
+ 4.0.1 (2021-10-19)
319
+ =========================
320
+
321
+ Server:
322
+ * Fixed download by pointing to new storage location.
323
+ - Only supports Selenium 4 versions
324
+ * Added default value for Server::get and Server::download to use the latest server version
325
+
326
+ 4.0.0 (2021-10-13)
327
+ =========================
328
+
329
+ Ruby:
330
+ * Updated minimum required Ruby version to 2.6
331
+ * Updated minimum required rexml gem version due to vulnerability
332
+
333
+ Chrome:
334
+ * Added default values for Network Conditions so no longer need to specify everything
335
+
336
+ Firefox:
337
+ * Fixed bug where Firefox prefs were converting snake case to camel case
338
+
1
339
  4.0.0.rc3 (2021-10-08)
2
340
  =========================
3
341
 
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 2021 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-2021 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.5
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.5
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
 
@@ -57,48 +58,42 @@ module Selenium
57
58
 
58
59
  CL_RESET = WebDriver::Platform.windows? ? '' : "\r\e[0K"
59
60
 
60
- def self.get(required_version, opts = {})
61
- new(download(required_version), opts)
62
- end
61
+ class << self
62
+ #
63
+ # Download the given version of the selenium-server jar and return instance
64
+ #
65
+ # @param [String, Symbol] required_version X.Y.Z defaults to ':latest'
66
+ # @param [Hash] opts
67
+ # @return [Selenium::Server]
68
+ #
63
69
 
64
- #
65
- # Download the given version of the selenium-server-standalone jar.
66
- #
70
+ def get(required_version = :latest, opts = {})
71
+ new(download(required_version), opts)
72
+ end
67
73
 
68
- class << self
69
- def download(required_version)
74
+ #
75
+ # Download the given version of the selenium-server jar and return location
76
+ #
77
+ # @param [String, Symbol] required_version X.Y.Z defaults to ':latest'
78
+ # @return [String] location of downloaded file
79
+ #
80
+
81
+ def download(required_version = :latest)
70
82
  required_version = latest if required_version == :latest
71
- download_file_name = "selenium-server-standalone-#{required_version}.jar"
83
+ download_file_name = "selenium-server-#{required_version}.jar"
72
84
 
73
85
  return download_file_name if File.exist? download_file_name
74
86
 
75
87
  begin
76
- File.open(download_file_name, 'wb') do |destination|
77
- net_http_start('selenium-release.storage.googleapis.com') do |http|
78
- resp = http.request_get("/#{required_version[/(\d+\.\d+)\./, 1]}/#{download_file_name}") do |response|
79
- total = response.content_length
80
- progress = 0
81
- segment_count = 0
82
-
83
- response.read_body do |segment|
84
- progress += segment.length
85
- segment_count += 1
86
-
87
- if (segment_count % 15).zero?
88
- percent = progress.fdiv(total) * 100
89
- print "#{CL_RESET}Downloading #{download_file_name}: #{percent.to_i}% (#{progress} / #{total})"
90
- segment_count = 0
91
- end
88
+ download_location = available_assets[download_file_name]['browser_download_url']
89
+ released = Net::HTTP.get_response(URI.parse(download_location))
90
+ redirected = URI.parse released.header['location']
92
91
 
93
- destination.write(segment)
94
- end
95
- end
96
-
97
- raise Error, "#{resp.code} for #{download_file_name}" unless resp.is_a? Net::HTTPSuccess
98
- end
92
+ File.open(download_file_name, 'wb') do |destination|
93
+ download_server(redirected, destination)
99
94
  end
100
95
  rescue StandardError
101
- FileUtils.rm download_file_name if File.exist? download_file_name
96
+ FileUtils.rm_rf download_file_name
102
97
  raise
103
98
  end
104
99
 
@@ -106,30 +101,62 @@ module Selenium
106
101
  end
107
102
 
108
103
  #
109
- # Ask Google Code what the latest selenium-server-standalone version is.
104
+ # Ask GitHub what the latest selenium-server version is.
110
105
  #
111
106
 
112
107
  def latest
113
- require 'rexml/document'
114
- net_http_start('selenium-release.storage.googleapis.com') do |http|
115
- versions = REXML::Document.new(http.get('/').body).root.get_elements('//Contents/Key').map do |e|
116
- e.text[/selenium-server-standalone-(\d+\.\d+\.\d+)\.jar/, 1]
117
- end
108
+ @latest ||= begin
109
+ available = available_assets.keys.map { |key| key[/selenium-server-(\d+\.\d+\.\d+)\.jar/, 1] }
110
+ available.map { |asset| Gem::Version.new(asset) }.max.to_s
111
+ end
112
+ end
113
+
114
+ # @api private
118
115
 
119
- versions.compact.map { |version| Gem::Version.new(version) }.max.version
116
+ def available_assets
117
+ @available_assets ||= net_http_start('api.github.com') do |http|
118
+ json = http.get('/repos/seleniumhq/selenium/releases').body
119
+ all_assets = JSON.parse(json).map { |release| release['assets'] }.flatten
120
+ server_assets = all_assets.select { |asset| asset['name'].match(/selenium-server-(\d+\.\d+\.\d+)\.jar/) }
121
+ server_assets.each_with_object({}) { |asset, hash| hash[asset.delete('name')] = asset }
120
122
  end
121
123
  end
122
124
 
123
125
  def net_http_start(address, &block)
124
- http_proxy = ENV['http_proxy'] || ENV['HTTP_PROXY']
125
-
126
+ http_proxy = ENV.fetch('http_proxy', nil) || ENV.fetch('HTTP_PROXY', nil)
126
127
  if http_proxy
127
128
  http_proxy = "http://#{http_proxy}" unless http_proxy.start_with?('http://')
128
129
  uri = URI.parse(http_proxy)
129
130
 
130
131
  Net::HTTP.start(address, nil, uri.host, uri.port, &block)
131
132
  else
132
- Net::HTTP.start(address, &block)
133
+ Net::HTTP.start(address, use_ssl: true, &block)
134
+ end
135
+ end
136
+
137
+ def download_server(uri, destination)
138
+ net_http_start('github-releases.githubusercontent.com') do |http|
139
+ request = Net::HTTP::Get.new uri
140
+ resp = http.request(request) do |response|
141
+ total = response.content_length
142
+ progress = 0
143
+ segment_count = 0
144
+
145
+ response.read_body do |segment|
146
+ progress += segment.length
147
+ segment_count += 1
148
+
149
+ if (segment_count % 15).zero?
150
+ percent = progress.fdiv(total) * 100
151
+ print "#{CL_RESET}Downloading #{destination.path}: #{percent.to_i}% (#{progress} / #{total})"
152
+ segment_count = 0
153
+ end
154
+
155
+ destination.write(segment)
156
+ end
157
+ end
158
+
159
+ raise Error, "#{resp.code} for #{destination.path}" unless resp.is_a? Net::HTTPSuccess
133
160
  end
134
161
  end
135
162
  end
@@ -139,7 +166,7 @@ module Selenium
139
166
  # :standalone, #hub, #node
140
167
  #
141
168
 
142
- attr_accessor :role, :port, :timeout, :background, :log
169
+ attr_accessor :role, :host, :port, :timeout, :background, :log
143
170
 
144
171
  #
145
172
  # @param [String] jar Path to the server jar.
@@ -156,15 +183,21 @@ module Selenium
156
183
  def initialize(jar, opts = {})
157
184
  raise Errno::ENOENT, jar unless File.exist?(jar)
158
185
 
159
- @jar = jar
160
- @host = '127.0.0.1'
161
- @role = opts.fetch(:role, 'standalone')
162
- @port = opts.fetch(:port, 4444)
163
- @timeout = opts.fetch(:timeout, 30)
186
+ @jar = jar
187
+ @host = '127.0.0.1'
188
+ @role = opts.fetch(:role, 'standalone')
189
+ @port = opts.fetch(:port, WebDriver::PortProber.above(4444))
190
+ @timeout = opts.fetch(:timeout, 30)
164
191
  @background = opts.fetch(:background, false)
165
- @log = opts[:log]
166
- @log_file = nil
167
- @additional_args = []
192
+ @additional_args = opts.fetch(:args, [])
193
+ @log = opts[:log]
194
+ if opts[:log_level]
195
+ @log ||= true
196
+ @additional_args << '--log-level'
197
+ @additional_args << opts[:log_level].to_s
198
+ end
199
+
200
+ @log_file = nil
168
201
  end
169
202
 
170
203
  def start
@@ -175,11 +208,6 @@ module Selenium
175
208
  end
176
209
 
177
210
  def stop
178
- begin
179
- Net::HTTP.get(@host, '/selenium-server/driver/?cmd=shutDownSeleniumServer', @port)
180
- rescue Errno::ECONNREFUSED
181
- end
182
-
183
211
  stop_process if @process
184
212
  poll_for_shutdown
185
213
 
@@ -200,18 +228,8 @@ module Selenium
200
228
 
201
229
  private
202
230
 
203
- def selenium4?
204
- @jar.match?(/[^.]4\./) || @jar.include?('deploy')
205
- end
206
-
207
231
  def stop_process
208
- return unless @process.alive?
209
-
210
- begin
211
- @process.poll_for_exit(5)
212
- rescue ChildProcess::TimeoutError
213
- @process.stop
214
- end
232
+ @process.stop
215
233
  rescue Errno::ECHILD
216
234
  # already dead
217
235
  ensure
@@ -222,21 +240,14 @@ module Selenium
222
240
  @process ||= begin
223
241
  # extract any additional_args that start with -D as options
224
242
  properties = @additional_args.dup - @additional_args.delete_if { |arg| arg[/^-D/] }
225
- args = ['-jar', @jar]
226
- args << @role if selenium4?
227
- args << (selenium4? ? '--port' : '-port')
228
- args << @port.to_s
243
+ args = ['-jar', @jar, @role, '--port', @port.to_s]
229
244
  server_command = ['java'] + properties + args + @additional_args
230
- cp = ChildProcess.build(*server_command)
231
- WebDriver.logger.debug("Executing Process #{server_command}")
232
-
233
- io = cp.io
245
+ cp = WebDriver::ChildProcess.build(*server_command)
234
246
 
235
247
  if @log.is_a?(String)
236
- @log_file = File.open(@log, 'w')
237
- io.stdout = io.stderr = @log_file
248
+ cp.io = @log
238
249
  elsif @log
239
- io.inherit!
250
+ cp.io = :out
240
251
  end
241
252
 
242
253
  cp.detach = @background