selenium-webdriver 4.51.0 → 4.52.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 (38) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +15 -0
  3. data/Gemfile +14 -0
  4. data/README.md +20 -0
  5. data/bin/linux-arm64/selenium-manager +0 -0
  6. data/bin/linux-x86_64/selenium-manager +0 -0
  7. data/bin/macos/selenium-manager +0 -0
  8. data/bin/selenium-manager-THIRD-PARTY-NOTICES.txt +543 -226
  9. data/bin/selenium-manager.cdx.json +804 -722
  10. data/bin/windows/selenium-manager.exe +0 -0
  11. data/lib/selenium/webdriver/atoms/findElements.js +960 -250
  12. data/lib/selenium/webdriver/atoms/getAttribute.js +153 -127
  13. data/lib/selenium/webdriver/atoms/isDisplayed.js +433 -364
  14. data/lib/selenium/webdriver/atoms.rb +4 -1
  15. data/lib/selenium/webdriver/bidi/protocol/bluetooth.rb +6 -6
  16. data/lib/selenium/webdriver/bidi/protocol/browser.rb +21 -9
  17. data/lib/selenium/webdriver/bidi/protocol/browsing_context.rb +109 -39
  18. data/lib/selenium/webdriver/bidi/protocol/emulation.rb +89 -44
  19. data/lib/selenium/webdriver/bidi/protocol/input.rb +95 -31
  20. data/lib/selenium/webdriver/bidi/protocol/log.rb +4 -4
  21. data/lib/selenium/webdriver/bidi/protocol/moz_debugging.rb +12 -10
  22. data/lib/selenium/webdriver/bidi/protocol/moz_profiler.rb +4 -4
  23. data/lib/selenium/webdriver/bidi/protocol/network.rb +82 -39
  24. data/lib/selenium/webdriver/bidi/protocol/script.rb +38 -24
  25. data/lib/selenium/webdriver/bidi/protocol/session.rb +61 -8
  26. data/lib/selenium/webdriver/bidi/protocol/storage.rb +3 -3
  27. data/lib/selenium/webdriver/bidi/protocol/user_agent_client_hints.rb +3 -3
  28. data/lib/selenium/webdriver/bidi/protocol/web_extension.rb +17 -9
  29. data/lib/selenium/webdriver/bidi/serialization/record.rb +66 -24
  30. data/lib/selenium/webdriver/bidi/serialization.rb +2 -2
  31. data/lib/selenium/webdriver/bidi/support/bidi_generate.rb +228 -150
  32. data/lib/selenium/webdriver/common/client_config.rb +4 -1
  33. data/lib/selenium/webdriver/common/driver_finder.rb +5 -2
  34. data/lib/selenium/webdriver/common/websocket_connection.rb +51 -13
  35. data/lib/selenium/webdriver/remote/http/default.rb +17 -1
  36. data/lib/selenium/webdriver/version.rb +1 -1
  37. data/selenium-webdriver.gemspec +0 -12
  38. metadata +6 -163
@@ -103,11 +103,11 @@ module Selenium
103
103
  context: {wire_key: 'context', nullable: true, primitive: 'string'},
104
104
  is_blocked: {wire_key: 'isBlocked', primitive: 'boolean'},
105
105
  navigation: {wire_key: 'navigation', nullable: true, primitive: 'string'},
106
- redirect_count: {wire_key: 'redirectCount', primitive: 'integer'},
106
+ redirect_count: {wire_key: 'redirectCount', primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
107
107
  request: {wire_key: 'request', ref: 'Network::RequestData'},
108
- timestamp: {wire_key: 'timestamp', primitive: 'integer'},
108
+ timestamp: {wire_key: 'timestamp', primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
109
109
  user_context: {wire_key: 'userContext', required: false, nullable: true, primitive: 'string'},
110
- intercepts: {wire_key: 'intercepts', required: false, list: true}
110
+ intercepts: {wire_key: 'intercepts', required: false, list: true, primitive: 'string'}
111
111
  )
112
112
 
113
113
  # @api private
@@ -149,11 +149,11 @@ module Selenium
149
149
  value: {wire_key: 'value', ref: 'Network::BytesValue'},
150
150
  domain: {wire_key: 'domain', primitive: 'string'},
151
151
  path: {wire_key: 'path', primitive: 'string'},
152
- size: {wire_key: 'size', primitive: 'integer'},
152
+ size: {wire_key: 'size', primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
153
153
  http_only: {wire_key: 'httpOnly', primitive: 'boolean'},
154
154
  secure: {wire_key: 'secure', primitive: 'boolean'},
155
155
  same_site: {wire_key: 'sameSite', enum: 'Network::SAME_SITE'},
156
- expiry: {wire_key: 'expiry', required: false, primitive: 'integer'},
156
+ expiry: {wire_key: 'expiry', required: false, primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
157
157
  extensible: true
158
158
  )
159
159
 
@@ -196,8 +196,20 @@ module Selenium
196
196
  # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
197
197
  # @see https://w3c.github.io/webdriver-bidi/#type-network-Initiator
198
198
  Initiator = Serialization::Record.define(
199
- column_number: {wire_key: 'columnNumber', required: false, primitive: 'integer'},
200
- line_number: {wire_key: 'lineNumber', required: false, primitive: 'integer'},
199
+ column_number: {
200
+ wire_key: 'columnNumber',
201
+ required: false,
202
+ primitive: 'integer',
203
+ min: 0,
204
+ max: 9_007_199_254_740_991
205
+ },
206
+ line_number: {
207
+ wire_key: 'lineNumber',
208
+ required: false,
209
+ primitive: 'integer',
210
+ min: 0,
211
+ max: 9_007_199_254_740_991
212
+ },
201
213
  request: {wire_key: 'request', required: false, primitive: 'string'},
202
214
  stack_trace: {wire_key: 'stackTrace', required: false, ref: 'Script::StackTrace'},
203
215
  type: {wire_key: 'type', required: false, enum: 'Network::INITIATOR_TYPE'}
@@ -212,8 +224,8 @@ module Selenium
212
224
  method_: {wire_key: 'method', primitive: 'string'},
213
225
  headers: {wire_key: 'headers', ref: 'Network::Header', list: true},
214
226
  cookies: {wire_key: 'cookies', ref: 'Network::Cookie', list: true},
215
- headers_size: {wire_key: 'headersSize', primitive: 'integer'},
216
- body_size: {wire_key: 'bodySize', nullable: true, primitive: 'integer'},
227
+ headers_size: {wire_key: 'headersSize', primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
228
+ body_size: {wire_key: 'bodySize', nullable: true, primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
217
229
  destination: {wire_key: 'destination', primitive: 'string'},
218
230
  initiator_type: {wire_key: 'initiatorType', nullable: true, primitive: 'string'},
219
231
  timings: {wire_key: 'timings', ref: 'Network::FetchTimingInfo'}
@@ -222,7 +234,9 @@ module Selenium
222
234
  # @api private
223
235
  # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
224
236
  # @see https://w3c.github.io/webdriver-bidi/#type-network-ResponseContent
225
- ResponseContent = Serialization::Record.define(size: {wire_key: 'size', primitive: 'integer'})
237
+ ResponseContent = Serialization::Record.define(
238
+ size: {wire_key: 'size', primitive: 'integer', min: 0, max: 9_007_199_254_740_991}
239
+ )
226
240
 
227
241
  # @api private
228
242
  # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
@@ -230,14 +244,20 @@ module Selenium
230
244
  ResponseData = Serialization::Record.define(
231
245
  url: {wire_key: 'url', primitive: 'string'},
232
246
  protocol: {wire_key: 'protocol', primitive: 'string'},
233
- status: {wire_key: 'status', primitive: 'integer'},
247
+ status: {wire_key: 'status', primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
234
248
  status_text: {wire_key: 'statusText', primitive: 'string'},
235
249
  from_cache: {wire_key: 'fromCache', primitive: 'boolean'},
236
250
  headers: {wire_key: 'headers', ref: 'Network::Header', list: true},
237
251
  mime_type: {wire_key: 'mimeType', primitive: 'string'},
238
- bytes_received: {wire_key: 'bytesReceived', primitive: 'integer'},
239
- headers_size: {wire_key: 'headersSize', nullable: true, primitive: 'integer'},
240
- body_size: {wire_key: 'bodySize', nullable: true, primitive: 'integer'},
252
+ bytes_received: {wire_key: 'bytesReceived', primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
253
+ headers_size: {
254
+ wire_key: 'headersSize',
255
+ nullable: true,
256
+ primitive: 'integer',
257
+ min: 0,
258
+ max: 9_007_199_254_740_991
259
+ },
260
+ body_size: {wire_key: 'bodySize', nullable: true, primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
241
261
  content: {wire_key: 'content', ref: 'Network::ResponseContent'},
242
262
  auth_challenges: {wire_key: 'authChallenges', required: false, ref: 'Network::AuthChallenge', list: true}
243
263
  )
@@ -251,7 +271,13 @@ module Selenium
251
271
  domain: {wire_key: 'domain', required: false, primitive: 'string'},
252
272
  http_only: {wire_key: 'httpOnly', required: false, primitive: 'boolean'},
253
273
  expiry: {wire_key: 'expiry', required: false, primitive: 'string'},
254
- max_age: {wire_key: 'maxAge', required: false, primitive: 'integer'},
274
+ max_age: {
275
+ wire_key: 'maxAge',
276
+ required: false,
277
+ primitive: 'integer',
278
+ min: -9_007_199_254_740_991,
279
+ max: 9_007_199_254_740_991
280
+ },
255
281
  path: {wire_key: 'path', required: false, primitive: 'string'},
256
282
  same_site: {wire_key: 'sameSite', required: false, enum: 'Network::SAME_SITE'},
257
283
  secure: {wire_key: 'secure', required: false, primitive: 'boolean'}
@@ -297,10 +323,15 @@ module Selenium
297
323
  # @see https://w3c.github.io/webdriver-bidi/#cddl-type-networkadddatacollectorparameters
298
324
  AddDataCollectorParameters = Serialization::Record.define(
299
325
  data_types: {wire_key: 'dataTypes', list: true, enum: 'Network::DATA_TYPE'},
300
- max_encoded_data_size: {wire_key: 'maxEncodedDataSize', primitive: 'integer'},
326
+ max_encoded_data_size: {
327
+ wire_key: 'maxEncodedDataSize',
328
+ primitive: 'integer',
329
+ min: 0,
330
+ max: 9_007_199_254_740_991
331
+ },
301
332
  collector_type: {wire_key: 'collectorType', required: false, enum: 'Network::COLLECTOR_TYPE'},
302
- contexts: {wire_key: 'contexts', required: false, list: true},
303
- user_contexts: {wire_key: 'userContexts', required: false, list: true}
333
+ contexts: {wire_key: 'contexts', required: false, list: true, primitive: 'string'},
334
+ user_contexts: {wire_key: 'userContexts', required: false, list: true, primitive: 'string'}
304
335
  )
305
336
 
306
337
  # @api private
@@ -313,7 +344,7 @@ module Selenium
313
344
  # @see https://w3c.github.io/webdriver-bidi/#cddl-type-networkaddinterceptparameters
314
345
  AddInterceptParameters = Serialization::Record.define(
315
346
  phases: {wire_key: 'phases', list: true, enum: 'Network::INTERCEPT_PHASE'},
316
- contexts: {wire_key: 'contexts', required: false, list: true},
347
+ contexts: {wire_key: 'contexts', required: false, list: true, primitive: 'string'},
317
348
  url_patterns: {wire_key: 'urlPatterns', required: false, ref: 'Network::UrlPattern', list: true}
318
349
  )
319
350
 
@@ -343,7 +374,13 @@ module Selenium
343
374
  credentials: {wire_key: 'credentials', required: false, ref: 'Network::AuthCredentials'},
344
375
  headers: {wire_key: 'headers', required: false, ref: 'Network::Header', list: true},
345
376
  reason_phrase: {wire_key: 'reasonPhrase', required: false, primitive: 'string'},
346
- status_code: {wire_key: 'statusCode', required: false, primitive: 'integer'}
377
+ status_code: {
378
+ wire_key: 'statusCode',
379
+ required: false,
380
+ primitive: 'integer',
381
+ min: 0,
382
+ max: 9_007_199_254_740_991
383
+ }
347
384
  )
348
385
 
349
386
  # @api private
@@ -413,7 +450,13 @@ module Selenium
413
450
  cookies: {wire_key: 'cookies', required: false, ref: 'Network::SetCookieHeader', list: true},
414
451
  headers: {wire_key: 'headers', required: false, ref: 'Network::Header', list: true},
415
452
  reason_phrase: {wire_key: 'reasonPhrase', required: false, primitive: 'string'},
416
- status_code: {wire_key: 'statusCode', required: false, primitive: 'integer'}
453
+ status_code: {
454
+ wire_key: 'statusCode',
455
+ required: false,
456
+ primitive: 'integer',
457
+ min: 0,
458
+ max: 9_007_199_254_740_991
459
+ }
417
460
  )
418
461
 
419
462
  # @api private
@@ -435,7 +478,7 @@ module Selenium
435
478
  # @see https://w3c.github.io/webdriver-bidi/#cddl-type-networksetcachebehaviorparameters
436
479
  SetCacheBehaviorParameters = Serialization::Record.define(
437
480
  cache_behavior: {wire_key: 'cacheBehavior', enum: 'Network::SET_CACHE_BEHAVIOR_PARAMETERS_CACHE_BEHAVIOR'},
438
- contexts: {wire_key: 'contexts', required: false, list: true}
481
+ contexts: {wire_key: 'contexts', required: false, list: true, primitive: 'string'}
439
482
  )
440
483
 
441
484
  # @api private
@@ -443,8 +486,8 @@ module Selenium
443
486
  # @see https://w3c.github.io/webdriver-bidi/#cddl-type-networksetextraheadersparameters
444
487
  SetExtraHeadersParameters = Serialization::Record.define(
445
488
  headers: {wire_key: 'headers', ref: 'Network::Header', list: true},
446
- contexts: {wire_key: 'contexts', required: false, list: true},
447
- user_contexts: {wire_key: 'userContexts', required: false, list: true}
489
+ contexts: {wire_key: 'contexts', required: false, list: true, primitive: 'string'},
490
+ user_contexts: {wire_key: 'userContexts', required: false, list: true, primitive: 'string'}
448
491
  )
449
492
 
450
493
  # @api private
@@ -454,11 +497,11 @@ module Selenium
454
497
  context: {wire_key: 'context', nullable: true, primitive: 'string'},
455
498
  is_blocked: {wire_key: 'isBlocked', primitive: 'boolean'},
456
499
  navigation: {wire_key: 'navigation', nullable: true, primitive: 'string'},
457
- redirect_count: {wire_key: 'redirectCount', primitive: 'integer'},
500
+ redirect_count: {wire_key: 'redirectCount', primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
458
501
  request: {wire_key: 'request', ref: 'Network::RequestData'},
459
- timestamp: {wire_key: 'timestamp', primitive: 'integer'},
502
+ timestamp: {wire_key: 'timestamp', primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
460
503
  user_context: {wire_key: 'userContext', required: false, nullable: true, primitive: 'string'},
461
- intercepts: {wire_key: 'intercepts', required: false, list: true},
504
+ intercepts: {wire_key: 'intercepts', required: false, list: true, primitive: 'string'},
462
505
  response: {wire_key: 'response', ref: 'Network::ResponseData'}
463
506
  )
464
507
 
@@ -469,11 +512,11 @@ module Selenium
469
512
  context: {wire_key: 'context', nullable: true, primitive: 'string'},
470
513
  is_blocked: {wire_key: 'isBlocked', primitive: 'boolean'},
471
514
  navigation: {wire_key: 'navigation', nullable: true, primitive: 'string'},
472
- redirect_count: {wire_key: 'redirectCount', primitive: 'integer'},
515
+ redirect_count: {wire_key: 'redirectCount', primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
473
516
  request: {wire_key: 'request', ref: 'Network::RequestData'},
474
- timestamp: {wire_key: 'timestamp', primitive: 'integer'},
517
+ timestamp: {wire_key: 'timestamp', primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
475
518
  user_context: {wire_key: 'userContext', required: false, nullable: true, primitive: 'string'},
476
- intercepts: {wire_key: 'intercepts', required: false, list: true},
519
+ intercepts: {wire_key: 'intercepts', required: false, list: true, primitive: 'string'},
477
520
  initiator: {wire_key: 'initiator', required: false, ref: 'Network::Initiator'}
478
521
  )
479
522
 
@@ -484,11 +527,11 @@ module Selenium
484
527
  context: {wire_key: 'context', nullable: true, primitive: 'string'},
485
528
  is_blocked: {wire_key: 'isBlocked', primitive: 'boolean'},
486
529
  navigation: {wire_key: 'navigation', nullable: true, primitive: 'string'},
487
- redirect_count: {wire_key: 'redirectCount', primitive: 'integer'},
530
+ redirect_count: {wire_key: 'redirectCount', primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
488
531
  request: {wire_key: 'request', ref: 'Network::RequestData'},
489
- timestamp: {wire_key: 'timestamp', primitive: 'integer'},
532
+ timestamp: {wire_key: 'timestamp', primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
490
533
  user_context: {wire_key: 'userContext', required: false, nullable: true, primitive: 'string'},
491
- intercepts: {wire_key: 'intercepts', required: false, list: true},
534
+ intercepts: {wire_key: 'intercepts', required: false, list: true, primitive: 'string'},
492
535
  error_text: {wire_key: 'errorText', primitive: 'string'}
493
536
  )
494
537
 
@@ -499,11 +542,11 @@ module Selenium
499
542
  context: {wire_key: 'context', nullable: true, primitive: 'string'},
500
543
  is_blocked: {wire_key: 'isBlocked', primitive: 'boolean'},
501
544
  navigation: {wire_key: 'navigation', nullable: true, primitive: 'string'},
502
- redirect_count: {wire_key: 'redirectCount', primitive: 'integer'},
545
+ redirect_count: {wire_key: 'redirectCount', primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
503
546
  request: {wire_key: 'request', ref: 'Network::RequestData'},
504
- timestamp: {wire_key: 'timestamp', primitive: 'integer'},
547
+ timestamp: {wire_key: 'timestamp', primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
505
548
  user_context: {wire_key: 'userContext', required: false, nullable: true, primitive: 'string'},
506
- intercepts: {wire_key: 'intercepts', required: false, list: true},
549
+ intercepts: {wire_key: 'intercepts', required: false, list: true, primitive: 'string'},
507
550
  response: {wire_key: 'response', ref: 'Network::ResponseData'}
508
551
  )
509
552
 
@@ -514,11 +557,11 @@ module Selenium
514
557
  context: {wire_key: 'context', nullable: true, primitive: 'string'},
515
558
  is_blocked: {wire_key: 'isBlocked', primitive: 'boolean'},
516
559
  navigation: {wire_key: 'navigation', nullable: true, primitive: 'string'},
517
- redirect_count: {wire_key: 'redirectCount', primitive: 'integer'},
560
+ redirect_count: {wire_key: 'redirectCount', primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
518
561
  request: {wire_key: 'request', ref: 'Network::RequestData'},
519
- timestamp: {wire_key: 'timestamp', primitive: 'integer'},
562
+ timestamp: {wire_key: 'timestamp', primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
520
563
  user_context: {wire_key: 'userContext', required: false, nullable: true, primitive: 'string'},
521
- intercepts: {wire_key: 'intercepts', required: false, list: true},
564
+ intercepts: {wire_key: 'intercepts', required: false, list: true, primitive: 'string'},
522
565
  response: {wire_key: 'response', ref: 'Network::ResponseData'}
523
566
  )
524
567
 
@@ -94,23 +94,23 @@ module Selenium
94
94
 
95
95
  # @api private
96
96
  # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
97
- # @see https://w3c.github.io/webdriver-bidi/#type-script-EvaluateResult
98
- class EvaluateResult < Serialization::Union
97
+ # @see https://w3c.github.io/webdriver-bidi/#type-script-EvaluationResult
98
+ class EvaluationResult < Serialization::Union
99
99
  discriminator 'type', {success: 'success', exception: 'exception'}
100
100
  variants(
101
- success: 'Script::EvaluateResultSuccess',
102
- exception: 'Script::EvaluateResultException'
101
+ success: 'Script::EvaluationResultSuccess',
102
+ exception: 'Script::EvaluationResultException'
103
103
  )
104
104
  object_only
105
105
 
106
- def self.success(**) = Script::EvaluateResultSuccess.new(**)
107
- def self.exception(**) = Script::EvaluateResultException.new(**)
106
+ def self.success(**) = Script::EvaluationResultSuccess.new(**)
107
+ def self.exception(**) = Script::EvaluationResultException.new(**)
108
108
  end
109
109
 
110
110
  # @api private
111
111
  # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
112
- # @see https://w3c.github.io/webdriver-bidi/#cddl-type-scriptevaluateresultsuccess
113
- EvaluateResultSuccess = Serialization::Record.define(
112
+ # @see https://w3c.github.io/webdriver-bidi/#cddl-type-scriptevaluationresultsuccess
113
+ EvaluationResultSuccess = Serialization::Record.define(
114
114
  type: {fixed: 'success'},
115
115
  result: {wire_key: 'result', ref: 'Script::RemoteValue'},
116
116
  realm: {wire_key: 'realm', primitive: 'string'}
@@ -118,8 +118,8 @@ module Selenium
118
118
 
119
119
  # @api private
120
120
  # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
121
- # @see https://w3c.github.io/webdriver-bidi/#cddl-type-scriptevaluateresultexception
122
- EvaluateResultException = Serialization::Record.define(
121
+ # @see https://w3c.github.io/webdriver-bidi/#cddl-type-scriptevaluationresultexception
122
+ EvaluationResultException = Serialization::Record.define(
123
123
  type: {fixed: 'exception'},
124
124
  exception_details: {wire_key: 'exceptionDetails', ref: 'Script::ExceptionDetails'},
125
125
  realm: {wire_key: 'realm', primitive: 'string'}
@@ -129,9 +129,9 @@ module Selenium
129
129
  # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
130
130
  # @see https://w3c.github.io/webdriver-bidi/#type-script-ExceptionDetails
131
131
  ExceptionDetails = Serialization::Record.define(
132
- column_number: {wire_key: 'columnNumber', primitive: 'integer'},
132
+ column_number: {wire_key: 'columnNumber', primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
133
133
  exception: {wire_key: 'exception', ref: 'Script::RemoteValue'},
134
- line_number: {wire_key: 'lineNumber', primitive: 'integer'},
134
+ line_number: {wire_key: 'lineNumber', primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
135
135
  stack_trace: {wire_key: 'stackTrace', ref: 'Script::StackTrace'},
136
136
  text: {wire_key: 'text', primitive: 'string'}
137
137
  )
@@ -376,7 +376,7 @@ module Selenium
376
376
  type: {fixed: 'dedicated-worker'},
377
377
  realm: {wire_key: 'realm', primitive: 'string'},
378
378
  origin: {wire_key: 'origin', primitive: 'string'},
379
- owners: {wire_key: 'owners', list: true}
379
+ owners: {wire_key: 'owners', list: true, primitive: 'string'}
380
380
  )
381
381
 
382
382
  # @api private
@@ -737,8 +737,8 @@ module Selenium
737
737
  # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
738
738
  # @see https://w3c.github.io/webdriver-bidi/#cddl-type-scriptnodeproperties
739
739
  NodeProperties = Serialization::Record.define(
740
- node_type: {wire_key: 'nodeType', primitive: 'integer'},
741
- child_node_count: {wire_key: 'childNodeCount', primitive: 'integer'},
740
+ node_type: {wire_key: 'nodeType', primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
741
+ child_node_count: {wire_key: 'childNodeCount', primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
742
742
  attributes: {wire_key: 'attributes', required: false, map: 'string'},
743
743
  children: {wire_key: 'children', required: false, ref: 'Script::NodeRemoteValue', list: true},
744
744
  local_name: {wire_key: 'localName', required: false, primitive: 'string'},
@@ -767,8 +767,22 @@ module Selenium
767
767
  # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
768
768
  # @see https://w3c.github.io/webdriver-bidi/#type-script-SerializationOptions
769
769
  SerializationOptions = Serialization::Record.define(
770
- max_dom_depth: {wire_key: 'maxDomDepth', required: false, nullable: true, primitive: 'integer'},
771
- max_object_depth: {wire_key: 'maxObjectDepth', required: false, nullable: true, primitive: 'integer'},
770
+ max_dom_depth: {
771
+ wire_key: 'maxDomDepth',
772
+ required: false,
773
+ nullable: true,
774
+ primitive: 'integer',
775
+ min: 0,
776
+ max: 9_007_199_254_740_991
777
+ },
778
+ max_object_depth: {
779
+ wire_key: 'maxObjectDepth',
780
+ required: false,
781
+ nullable: true,
782
+ primitive: 'integer',
783
+ min: 0,
784
+ max: 9_007_199_254_740_991
785
+ },
772
786
  include_shadow_tree: {
773
787
  wire_key: 'includeShadowTree',
774
788
  required: false,
@@ -780,9 +794,9 @@ module Selenium
780
794
  # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
781
795
  # @see https://w3c.github.io/webdriver-bidi/#type-script-StackFrame
782
796
  StackFrame = Serialization::Record.define(
783
- column_number: {wire_key: 'columnNumber', primitive: 'integer'},
797
+ column_number: {wire_key: 'columnNumber', primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
784
798
  function_name: {wire_key: 'functionName', primitive: 'string'},
785
- line_number: {wire_key: 'lineNumber', primitive: 'integer'},
799
+ line_number: {wire_key: 'lineNumber', primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
786
800
  url: {wire_key: 'url', primitive: 'string'}
787
801
  )
788
802
 
@@ -832,8 +846,8 @@ module Selenium
832
846
  AddPreloadScriptParameters = Serialization::Record.define(
833
847
  function_declaration: {wire_key: 'functionDeclaration', primitive: 'string'},
834
848
  arguments: {wire_key: 'arguments', required: false, ref: 'Script::ChannelValue', list: true},
835
- contexts: {wire_key: 'contexts', required: false, list: true},
836
- user_contexts: {wire_key: 'userContexts', required: false, list: true},
849
+ contexts: {wire_key: 'contexts', required: false, list: true, primitive: 'string'},
850
+ user_contexts: {wire_key: 'userContexts', required: false, list: true, primitive: 'string'},
837
851
  sandbox: {wire_key: 'sandbox', required: false, primitive: 'string'}
838
852
  )
839
853
 
@@ -846,7 +860,7 @@ module Selenium
846
860
  # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
847
861
  # @see https://w3c.github.io/webdriver-bidi/#cddl-type-scriptdisownparameters
848
862
  DisownParameters = Serialization::Record.define(
849
- handles: {wire_key: 'handles', list: true},
863
+ handles: {wire_key: 'handles', list: true, primitive: 'string'},
850
864
  target: {wire_key: 'target', ref: 'Script::Target'}
851
865
  )
852
866
 
@@ -995,7 +1009,7 @@ module Selenium
995
1009
  this: this,
996
1010
  user_activation: user_activation
997
1011
  )
998
- execute(cmd: 'script.callFunction', params: params, result: Script::EvaluateResult)
1012
+ execute(cmd: 'script.callFunction', params: params, result: Script::EvaluationResult)
999
1013
  end
1000
1014
 
1001
1015
  # @api private
@@ -1026,7 +1040,7 @@ module Selenium
1026
1040
  serialization_options: serialization_options,
1027
1041
  user_activation: user_activation
1028
1042
  )
1029
- execute(cmd: 'script.evaluate', params: params, result: Script::EvaluateResult)
1043
+ execute(cmd: 'script.evaluate', params: params, result: Script::EvaluationResult)
1030
1044
  end
1031
1045
 
1032
1046
  # @api private
@@ -35,6 +35,16 @@ module Selenium
35
35
  ignore: 'ignore'
36
36
  }.freeze
37
37
 
38
+ CAPABILITY_REQUEST_FIREFOX_OPTIONS_LEVEL = {
39
+ trace: 'trace',
40
+ debug: 'debug',
41
+ config: 'config',
42
+ info: 'info',
43
+ warn: 'warn',
44
+ error: 'error',
45
+ fatal: 'fatal'
46
+ }.freeze
47
+
38
48
  # @api private
39
49
  # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
40
50
  # @see https://w3c.github.io/webdriver-bidi/#type-session-CapabilitiesRequest
@@ -57,6 +67,11 @@ module Selenium
57
67
  required: false,
58
68
  ref: 'Session::UserPromptHandler'
59
69
  },
70
+ moz_firefox_options: {
71
+ wire_key: 'moz:firefoxOptions',
72
+ required: false,
73
+ ref: 'Session::CapabilityRequestFirefoxOptions'
74
+ },
60
75
  extensible: true
61
76
  )
62
77
 
@@ -131,8 +146,8 @@ module Selenium
131
146
  http_proxy: {wire_key: 'httpProxy', required: false, primitive: 'string'},
132
147
  ssl_proxy: {wire_key: 'sslProxy', required: false, primitive: 'string'},
133
148
  socks_proxy: {wire_key: 'socksProxy', primitive: 'string'},
134
- socks_version: {wire_key: 'socksVersion', primitive: 'integer'},
135
- no_proxy: {wire_key: 'noProxy', required: false, list: true},
149
+ socks_version: {wire_key: 'socksVersion', primitive: 'integer', min: 0, max: 255},
150
+ no_proxy: {wire_key: 'noProxy', required: false, list: true, primitive: 'string'},
136
151
  extensible: true
137
152
  )
138
153
 
@@ -141,7 +156,7 @@ module Selenium
141
156
  # @see https://w3c.github.io/webdriver-bidi/#cddl-type-sessionsocksproxyconfiguration
142
157
  SocksProxyConfiguration = Serialization::Record.define(
143
158
  socks_proxy: {wire_key: 'socksProxy', primitive: 'string'},
144
- socks_version: {wire_key: 'socksVersion', primitive: 'integer'}
159
+ socks_version: {wire_key: 'socksVersion', primitive: 'integer', min: 0, max: 255}
145
160
  )
146
161
 
147
162
  # @api private
@@ -177,20 +192,24 @@ module Selenium
177
192
  # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
178
193
  # @see https://w3c.github.io/webdriver-bidi/#cddl-type-sessionsubscribeparameters
179
194
  SubscribeParameters = Serialization::Record.define(
180
- events: {wire_key: 'events', list: true},
181
- contexts: {wire_key: 'contexts', required: false, list: true},
182
- user_contexts: {wire_key: 'userContexts', required: false, list: true}
195
+ events: {wire_key: 'events', list: true, primitive: 'string'},
196
+ contexts: {wire_key: 'contexts', required: false, list: true, primitive: 'string'},
197
+ user_contexts: {wire_key: 'userContexts', required: false, list: true, primitive: 'string'}
183
198
  )
184
199
 
185
200
  # @api private
186
201
  # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
187
202
  # @see https://w3c.github.io/webdriver-bidi/#type-session-UnsubscribeByIDRequest
188
- UnsubscribeByIDRequest = Serialization::Record.define(subscriptions: {wire_key: 'subscriptions', list: true})
203
+ UnsubscribeByIDRequest = Serialization::Record.define(
204
+ subscriptions: {wire_key: 'subscriptions', list: true, primitive: 'string'}
205
+ )
189
206
 
190
207
  # @api private
191
208
  # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
192
209
  # @see https://w3c.github.io/webdriver-bidi/#type-session-UnsubscribeByAttributesRequest
193
- UnsubscribeByAttributesRequest = Serialization::Record.define(events: {wire_key: 'events', list: true})
210
+ UnsubscribeByAttributesRequest = Serialization::Record.define(
211
+ events: {wire_key: 'events', list: true, primitive: 'string'}
212
+ )
194
213
 
195
214
  # @api private
196
215
  # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
@@ -231,6 +250,38 @@ module Selenium
231
250
  object_only
232
251
  end
233
252
 
253
+ # @api private
254
+ # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
255
+ CapabilityRequestFirefoxOptions = Serialization::Record.define(
256
+ android_package: {wire_key: 'androidPackage', required: false, primitive: 'string'},
257
+ android_activity: {wire_key: 'androidActivity', required: false, primitive: 'string'},
258
+ android_device_serial: {wire_key: 'androidDeviceSerial', required: false, primitive: 'string'},
259
+ android_intent_arguments: {
260
+ wire_key: 'androidIntentArguments',
261
+ required: false,
262
+ list: true,
263
+ primitive: 'string'
264
+ },
265
+ args: {wire_key: 'args', required: false, list: true, primitive: 'string'},
266
+ binary: {wire_key: 'binary', required: false, primitive: 'string'},
267
+ env: {wire_key: 'env', required: false, map: 'string'},
268
+ log: {wire_key: 'log', required: false, ref: 'Session::CapabilityRequestFirefoxOptions::Log'},
269
+ prefs: {
270
+ wire_key: 'prefs',
271
+ required: false,
272
+ map: %w[string boolean integer],
273
+ min: -9_007_199_254_740_991,
274
+ max: 9_007_199_254_740_991
275
+ },
276
+ profile: {wire_key: 'profile', required: false, primitive: 'string'}
277
+ )
278
+
279
+ # @api private
280
+ # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
281
+ CapabilityRequestFirefoxOptions::Log = Serialization::Record.define(
282
+ level: {wire_key: 'level', required: false, enum: 'Session::CAPABILITY_REQUEST_FIREFOX_OPTIONS_LEVEL'}
283
+ )
284
+
234
285
  def capabilities_request(**) = CapabilitiesRequest.new(**)
235
286
  def capability_request(**) = CapabilityRequest.new(**)
236
287
  def proxy_configuration = ProxyConfiguration
@@ -242,6 +293,8 @@ module Selenium
242
293
  def user_prompt_handler(**) = UserPromptHandler.new(**)
243
294
  def unsubscribe_by_id_request(**) = UnsubscribeByIDRequest.new(**)
244
295
  def unsubscribe_by_attributes_request(**) = UnsubscribeByAttributesRequest.new(**)
296
+ def capability_request_firefox_options(**) = CapabilityRequestFirefoxOptions.new(**)
297
+ def capability_request_firefox_options_log(**) = CapabilityRequestFirefoxOptions::Log.new(**)
245
298
 
246
299
  # @api private
247
300
  # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
@@ -45,11 +45,11 @@ module Selenium
45
45
  value: {wire_key: 'value', required: false, ref: 'Network::BytesValue'},
46
46
  domain: {wire_key: 'domain', required: false, primitive: 'string'},
47
47
  path: {wire_key: 'path', required: false, primitive: 'string'},
48
- size: {wire_key: 'size', required: false, primitive: 'integer'},
48
+ size: {wire_key: 'size', required: false, primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
49
49
  http_only: {wire_key: 'httpOnly', required: false, primitive: 'boolean'},
50
50
  secure: {wire_key: 'secure', required: false, primitive: 'boolean'},
51
51
  same_site: {wire_key: 'sameSite', required: false, enum: 'Network::SAME_SITE'},
52
- expiry: {wire_key: 'expiry', required: false, primitive: 'integer'},
52
+ expiry: {wire_key: 'expiry', required: false, primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
53
53
  extensible: true
54
54
  )
55
55
 
@@ -113,7 +113,7 @@ module Selenium
113
113
  http_only: {wire_key: 'httpOnly', required: false, primitive: 'boolean'},
114
114
  secure: {wire_key: 'secure', required: false, primitive: 'boolean'},
115
115
  same_site: {wire_key: 'sameSite', required: false, enum: 'Network::SAME_SITE'},
116
- expiry: {wire_key: 'expiry', required: false, primitive: 'integer'},
116
+ expiry: {wire_key: 'expiry', required: false, primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
117
117
  extensible: true
118
118
  )
119
119
 
@@ -45,7 +45,7 @@ module Selenium
45
45
  mobile: {wire_key: 'mobile', required: false, primitive: 'boolean'},
46
46
  bitness: {wire_key: 'bitness', required: false, primitive: 'string'},
47
47
  wow64: {wire_key: 'wow64', required: false, primitive: 'boolean'},
48
- form_factors: {wire_key: 'formFactors', required: false, list: true}
48
+ form_factors: {wire_key: 'formFactors', required: false, list: true, primitive: 'string'}
49
49
  )
50
50
 
51
51
  # @api private
@@ -60,8 +60,8 @@ module Selenium
60
60
  # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
61
61
  SetClientHintsOverrideCommandParams = Serialization::Record.define(
62
62
  client_hints: {wire_key: 'clientHints', nullable: true, ref: 'UserAgentClientHints::ClientHintsMetadata'},
63
- contexts: {wire_key: 'contexts', required: false, list: true},
64
- user_contexts: {wire_key: 'userContexts', required: false, list: true}
63
+ contexts: {wire_key: 'contexts', required: false, list: true, primitive: 'string'},
64
+ user_contexts: {wire_key: 'userContexts', required: false, list: true, primitive: 'string'}
65
65
  )
66
66
 
67
67
  def client_hints_metadata(**) = ClientHintsMetadata.new(**)
@@ -32,8 +32,7 @@ module Selenium
32
32
  # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
33
33
  # @see https://w3c.github.io/webdriver-bidi/#cddl-type-webextensioninstallparameters
34
34
  InstallParameters = Serialization::Record.define(
35
- extension_data: {wire_key: 'extensionData', ref: 'WebExtension::ExtensionData'},
36
- extensible: true
35
+ extension_data: {wire_key: 'extensionData', ref: 'WebExtension::ExtensionData'}
37
36
  )
38
37
 
39
38
  # @api private
@@ -99,7 +98,7 @@ module Selenium
99
98
  id: {wire_key: 'id', primitive: 'string'},
100
99
  name: {wire_key: 'name', primitive: 'string'},
101
100
  version: {wire_key: 'version', primitive: 'string'},
102
- manifest_version: {wire_key: 'manifestVersion', primitive: 'integer'},
101
+ manifest_version: {wire_key: 'manifestVersion', primitive: 'integer', min: 0, max: 9_007_199_254_740_991},
103
102
  is_active: {wire_key: 'isActive', primitive: 'boolean'},
104
103
  is_system: {wire_key: 'isSystem', primitive: 'boolean'},
105
104
  hidden: {wire_key: 'hidden', primitive: 'boolean'},
@@ -114,7 +113,7 @@ module Selenium
114
113
  uuid: {wire_key: 'uuid', primitive: 'string'},
115
114
  base_url: {wire_key: 'baseURL', primitive: 'string'},
116
115
  extension_url: {wire_key: 'extensionURL', primitive: 'string'},
117
- background_scripts: {wire_key: 'backgroundScripts', list: true}
116
+ background_scripts: {wire_key: 'backgroundScripts', list: true, primitive: 'string'}
118
117
  )
119
118
 
120
119
  def extension_data = ExtensionData
@@ -143,15 +142,24 @@ module Selenium
143
142
  # moz: vendor variant of WebExtension, with browser-specific commands and params.
144
143
  # Construct Moz.new(source) for a matching session; other sessions use WebExtension.
145
144
  class Moz < WebExtension
145
+ # @api private
146
+ # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
147
+ # @see https://w3c.github.io/webdriver-bidi/#cddl-type-webextensioninstallparameters
148
+ InstallParameters = Serialization::Record.define(
149
+ extension_data: {wire_key: 'extensionData', ref: 'WebExtension::ExtensionData'},
150
+ allow_private_browsing: {wire_key: 'moz:allowPrivateBrowsing', required: false, primitive: 'boolean'},
151
+ permanent: {wire_key: 'moz:permanent', required: false, primitive: 'boolean'}
152
+ )
153
+
146
154
  # @api private
147
155
  # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
148
156
  # @see https://w3c.github.io/webdriver-bidi/#command-webExtension-install
149
157
  def install(extension_data:, allow_private_browsing: Serialization::UNSET, permanent: Serialization::UNSET)
150
- extensions = {
151
- 'moz:allowPrivateBrowsing' => allow_private_browsing,
152
- 'moz:permanent' => permanent
153
- }.reject { |_, value| Serialization::UNSET.equal?(value) }
154
- params = InstallParameters.new(extension_data: extension_data, extensions: extensions)
158
+ params = InstallParameters.new(
159
+ extension_data: extension_data,
160
+ allow_private_browsing: allow_private_browsing,
161
+ permanent: permanent
162
+ )
155
163
  execute(cmd: 'webExtension.install', params: params, result: WebExtension::InstallResult)
156
164
  end
157
165