playwright-ruby-client 1.51.0 → 1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3f0c4c8f2c68d03a9009e450794670263e74a7bff0f94307ac38222ac402b06b
4
- data.tar.gz: a21fee77abeef39269d2d84b511a37ac3df6a6f9bb0b3e881be20bd4fb055073
3
+ metadata.gz: 6bcda43c43e75e840a897607afdc89d2b01cd463b937944ad33522d7a36713a1
4
+ data.tar.gz: f92d747e11ef4c55cc9769bc053194a18c2183d13862fe1c7bbb641a6ab6cbfd
5
5
  SHA512:
6
- metadata.gz: c744d68230d2f37b6ce1894d55156ecfc943739c8d713332098ed73eb2c12533fab814685eaf3efdabd5561227c1deef042aad50e22e98b91e3be2e61f9974a2
7
- data.tar.gz: 8b1e2a83b1eac587c1df0963c586a64361191384018175972bf40eab3dcdb86d9b01a3d202f9d24e6b611f250ca8ead38f112252970ed0f292e4bd2fa5b5f27e
6
+ metadata.gz: 246d118dcb834c6d6a266286c1b2758d57e1480f8c40ffec06e2d08401f1e0b87934a8d1701c400053a5a226a81c22a2a4994ce3615a21e46d8ec689cd1289a2
7
+ data.tar.gz: 1537e5f55e68ff8c11c5d23a1dd1cb973e6aa3df9f8d528e6e93ecc4c744b663a75b8e0cafd38650b39d50d33cd930c3b1c87ebd889ef0cdb7a1481a7ee1c0c2
@@ -87,7 +87,7 @@ button = page.get_by_role("button").and(page.get_by_title("Subscribe"))
87
87
  ## aria_snapshot
88
88
 
89
89
  ```
90
- def aria_snapshot(timeout: nil)
90
+ def aria_snapshot(ref: nil, timeout: nil)
91
91
  ```
92
92
 
93
93
 
@@ -116,6 +116,15 @@ expect(locator).not_to be_visible(timeout: nil, visible: nil)
116
116
 
117
117
  The opposite of [LocatorAssertions#to_be_visible](./locator_assertions#to_be_visible).
118
118
 
119
+ ## not_to_contain_class
120
+
121
+ ```ruby
122
+ expect(locator).not_to contain_class(expected, timeout: nil)
123
+ ```
124
+
125
+
126
+ The opposite of [LocatorAssertions#to_contain_class](./locator_assertions#to_contain_class).
127
+
119
128
  ## not_to_contain_text
120
129
 
121
130
  ```ruby
@@ -436,6 +445,43 @@ expect(
436
445
  ).to be_visible
437
446
  ```
438
447
 
448
+ ## to_contain_class
449
+
450
+ ```ruby
451
+ expect(locator).to contain_class(expected, timeout: nil)
452
+ ```
453
+
454
+
455
+ Ensures the [Locator](./locator) points to an element with given CSS classes. All classes from the asserted value, separated by spaces, must be present in the [Element.classList](https://developer.mozilla.org/en-US/docs/Web/API/Element/classList) in any order.
456
+
457
+ **Usage**
458
+
459
+ ```html
460
+ <div class='middle selected row' id='component'></div>
461
+ ```
462
+
463
+ ```ruby
464
+ locator = page.locator("#component")
465
+ expect(locator).to contain_class("middle selected row")
466
+ expect(locator).to contain_class("selected")
467
+ expect(locator).to contain_class("row middle")
468
+ ```
469
+
470
+ When an array is passed, the method asserts that the list of elements located matches the corresponding list of expected class lists. Each element's class attribute is matched against the corresponding class in the array:
471
+
472
+ ```html
473
+ <div class='list'></div>
474
+ <div class='component inactive'></div>
475
+ <div class='component active'></div>
476
+ <div class='component inactive'></div>
477
+ </div>
478
+ ```
479
+
480
+ ```ruby
481
+ locator = page.locator(".list > .component")
482
+ expect(locator).to contain_class(["inactive", "active", "inactive"])
483
+ ```
484
+
439
485
  ## to_contain_text
440
486
 
441
487
  ```ruby
@@ -561,7 +607,7 @@ expect(locator).to have_class(expected, timeout: nil)
561
607
  ```
562
608
 
563
609
 
564
- Ensures the [Locator](./locator) points to an element with given CSS classes. When a string is provided, it must fully match the element's `class` attribute. To match individual classes or perform partial matches, use a regular expression:
610
+ Ensures the [Locator](./locator) points to an element with given CSS classes. When a string is provided, it must fully match the element's `class` attribute. To match individual classes use [LocatorAssertions#to_contain_class](./locator_assertions#to_contain_class).
565
611
 
566
612
  **Usage**
567
613
 
@@ -569,10 +615,13 @@ Ensures the [Locator](./locator) points to an element with given CSS classes. Wh
569
615
  <div class='middle selected row' id='component'></div>
570
616
  ```
571
617
 
572
- ```ruby
618
+ ```python title="example_a596f37c41d76277b59ed7eb46969c178c89770d0da91bdff20f36d438aa32cd.py"
619
+ from playwright.sync_api import expect
620
+
573
621
  locator = page.locator("#component")
574
- expect(locator).to have_class(/(^|\s)selected(\s|$)/)
575
- expect(locator).to have_class("middle selected row")
622
+ expect(locator).to_have_class("middle selected row")
623
+ expect(locator).to_have_class(re.compile(r"(^|\\s)selected(\\s|$)"))
624
+
576
625
  ```
577
626
 
578
627
  When an array is passed, the method asserts that the list of elements located matches the corresponding list of expected class values. Each element's class attribute is matched against the corresponding string or regular expression in the array:
@@ -49,6 +49,8 @@ The `headers` option applies to both the routed request and any redirects it ini
49
49
 
50
50
  [Route#continue](./route#continue) will immediately send the request to the network, other matching handlers won't be invoked. Use [Route#fallback](./route#fallback) If you want next matching handler in the chain to be invoked.
51
51
 
52
+ **NOTE**: The `Cookie` header cannot be overridden using this method. If a value is provided, it will be ignored, and the cookie will be loaded from the browser's cookie store. To set custom cookies, use [BrowserContext#add_cookies](./browser_context#add_cookies).
53
+
52
54
  ## fallback
53
55
 
54
56
  ```
@@ -563,6 +563,7 @@
563
563
  * not_to_be_hidden
564
564
  * not_to_be_in_viewport
565
565
  * not_to_be_visible
566
+ * not_to_contain_class
566
567
  * not_to_contain_text
567
568
  * not_to_have_accessible_description
568
569
  * not_to_have_accessible_error_message
@@ -588,6 +589,7 @@
588
589
  * to_be_hidden
589
590
  * to_be_in_viewport
590
591
  * to_be_visible
592
+ * to_contain_class
591
593
  * to_contain_text
592
594
  * to_have_accessible_description
593
595
  * to_have_accessible_error_message
@@ -1,4 +1,5 @@
1
- require 'date'
1
+ require 'base64'
2
+ require 'time'
2
3
 
3
4
  module Playwright
4
5
  module JavaScript
@@ -45,7 +46,7 @@ module Playwright
45
46
  end
46
47
 
47
48
  if hash.key?('d')
48
- return DateTime.parse(hash['d'])
49
+ return Time.parse(hash['d'])
49
50
  end
50
51
 
51
52
  if hash.key?('u')
@@ -105,6 +106,57 @@ module Playwright
105
106
  return @handles[hash['h']]
106
107
  end
107
108
 
109
+ if hash.key?('ta')
110
+ encoded_bytes = hash['ta']['b']
111
+ decoded_bytes = Base64.strict_decode64(encoded_bytes)
112
+ array_type = hash['ta']['k']
113
+
114
+ if array_type == 'i8'
115
+ word_size = 1
116
+ unpack_format = 'c*' # signed char
117
+ elsif array_type == 'ui8' || array_type == 'ui8c'
118
+ word_size = 1
119
+ unpack_format = 'C*' # unsigned char
120
+ elsif array_type == 'i16'
121
+ word_size = 2
122
+ unpack_format = 's<*' # signed short, little-endian
123
+ elsif array_type == 'ui16'
124
+ word_size = 2
125
+ unpack_format = 'S<*' # unsigned short, little-endian
126
+ elsif array_type == 'i32'
127
+ word_size = 4
128
+ unpack_format = 'l<*' # signed long, little-endian
129
+ elsif array_type == 'ui32'
130
+ word_size = 4
131
+ unpack_format = 'L<*' # unsigned long, little-endian
132
+ elsif array_type == 'f32'
133
+ word_size = 4
134
+ unpack_format = 'e*' # float, little-endian
135
+ elsif array_type == 'f64'
136
+ word_size = 8
137
+ unpack_format = 'E*' # double, little-endian
138
+ elsif array_type == 'bi64'
139
+ word_size = 8
140
+ unpack_format = 'q<*' # signed long long, little-endian
141
+ elsif array_type == 'bui64'
142
+ word_size = 8
143
+ unpack_format = 'Q<*' # unsigned long long, little-endian
144
+ else
145
+ raise ArgumentError, "Unsupported array type: #{array_type}"
146
+ end
147
+
148
+ byte_len = decoded_bytes.bytesize
149
+ if byte_len.zero?
150
+ return []
151
+ end
152
+
153
+ if byte_len % word_size != 0
154
+ raise ArgumentError, "Decoded bytes length #{byte_len} is not a multiple of word size #{word_size} for type #{array_type}"
155
+ end
156
+
157
+ return decoded_bytes.unpack(unpack_format)
158
+ end
159
+
108
160
  raise ArgumentError.new("Unexpected value: #{hash}")
109
161
  end
110
162
  end
@@ -232,6 +232,39 @@ module Playwright
232
232
  end
233
233
  _define_negation :to_have_class
234
234
 
235
+ def to_contain_class(expected, timeout: nil)
236
+ if expected.is_a?(Enumerable)
237
+ if expected.any? { |e| e.is_a?(Regexp) }
238
+ raise ArgumentError.new('"expected" argument in toContainClass cannot contain RegExp values')
239
+ end
240
+ expected_text = to_expected_text_values(expected)
241
+ expect_impl(
242
+ "to.contain.class.array",
243
+ {
244
+ expectedText: expected_text,
245
+ timeout: timeout,
246
+ },
247
+ expected,
248
+ "Locator expected to contain class names"
249
+ )
250
+ else # Single string
251
+ if expected.is_a?(Regexp)
252
+ raise ArgumentError.new('"expected" argument in toContainClass cannot be a RegExp value')
253
+ end
254
+ expected_text = to_expected_text_values([expected])
255
+ expect_impl(
256
+ "to.contain.class",
257
+ {
258
+ expectedText: expected_text,
259
+ timeout: timeout,
260
+ },
261
+ expected,
262
+ "Locator expected to contain class"
263
+ )
264
+ end
265
+ end
266
+ _define_negation :to_contain_class
267
+
235
268
  def to_have_count(count, timeout: nil)
236
269
  expect_impl(
237
270
  "to.have.count",
@@ -397,10 +397,11 @@ module Playwright
397
397
  end
398
398
  end
399
399
 
400
- def aria_snapshot(timeout: nil)
400
+ def aria_snapshot(timeout: nil, ref: nil)
401
401
  @frame.channel.send_message_to_server('ariaSnapshot', {
402
402
  selector: @selector,
403
403
  timeout: timeout,
404
+ ref: ref,
404
405
  }.compact)
405
406
  end
406
407
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Playwright
4
- VERSION = '1.51.0'
5
- COMPATIBLE_PLAYWRIGHT_VERSION = '1.51.0'
4
+ VERSION = '1.52.0'
5
+ COMPATIBLE_PLAYWRIGHT_VERSION = '1.52.0'
6
6
  end
@@ -15,6 +15,7 @@ module Playwright
15
15
  failOnStatusCode: nil,
16
16
  httpCredentials: nil,
17
17
  ignoreHTTPSErrors: nil,
18
+ maxRedirects: nil,
18
19
  proxy: nil,
19
20
  storageState: nil,
20
21
  timeout: nil,
@@ -463,16 +463,6 @@ module Playwright
463
463
  raise NotImplementedError.new('wait_for_event is not implemented yet.')
464
464
  end
465
465
 
466
- # @nodoc
467
- def owner_page=(req)
468
- wrap_impl(@impl.owner_page=(unwrap_impl(req)))
469
- end
470
-
471
- # @nodoc
472
- def options=(req)
473
- wrap_impl(@impl.options=(unwrap_impl(req)))
474
- end
475
-
476
466
  # @nodoc
477
467
  def enable_debug_console!
478
468
  wrap_impl(@impl.enable_debug_console!)
@@ -488,6 +478,16 @@ module Playwright
488
478
  wrap_impl(@impl.browser=(unwrap_impl(req)))
489
479
  end
490
480
 
481
+ # @nodoc
482
+ def options=(req)
483
+ wrap_impl(@impl.options=(unwrap_impl(req)))
484
+ end
485
+
486
+ # @nodoc
487
+ def owner_page=(req)
488
+ wrap_impl(@impl.owner_page=(unwrap_impl(req)))
489
+ end
490
+
491
491
  # -- inherited from EventEmitter --
492
492
  # @nodoc
493
493
  def on(event, callback)
@@ -103,8 +103,8 @@ module Playwright
103
103
  # - listitem:
104
104
  # - link "About"
105
105
  # ```
106
- def aria_snapshot(timeout: nil)
107
- wrap_impl(@impl.aria_snapshot(timeout: unwrap_impl(timeout)))
106
+ def aria_snapshot(ref: nil, timeout: nil)
107
+ wrap_impl(@impl.aria_snapshot(ref: unwrap_impl(ref), timeout: unwrap_impl(timeout)))
108
108
  end
109
109
 
110
110
  #
@@ -72,6 +72,12 @@ module Playwright
72
72
  wrap_impl(@impl.not_to_be_visible(timeout: unwrap_impl(timeout), visible: unwrap_impl(visible)))
73
73
  end
74
74
 
75
+ #
76
+ # The opposite of [`method: LocatorAssertions.toContainClass`].
77
+ def not_to_contain_class(expected, timeout: nil)
78
+ wrap_impl(@impl.not_to_contain_class(unwrap_impl(expected), timeout: unwrap_impl(timeout)))
79
+ end
80
+
75
81
  #
76
82
  # The opposite of [`method: LocatorAssertions.toContainText`].
77
83
  def not_to_contain_text(expected, ignoreCase: nil, timeout: nil, useInnerText: nil)
@@ -328,6 +334,44 @@ module Playwright
328
334
  wrap_impl(@impl.to_be_visible(timeout: unwrap_impl(timeout), visible: unwrap_impl(visible)))
329
335
  end
330
336
 
337
+ #
338
+ # Ensures the `Locator` points to an element with given CSS classes. All classes from the asserted value, separated by spaces, must be present in the [Element.classList](https://developer.mozilla.org/en-US/docs/Web/API/Element/classList) in any order.
339
+ #
340
+ # **Usage**
341
+ #
342
+ # ```html
343
+ # <div class='middle selected row' id='component'></div>
344
+ # ```
345
+ #
346
+ # ```python sync
347
+ # from playwright.sync_api import expect
348
+ #
349
+ # locator = page.locator("#component")
350
+ # expect(locator).to_contain_class("middle selected row")
351
+ # expect(locator).to_contain_class("selected")
352
+ # expect(locator).to_contain_class("row middle")
353
+ # ```
354
+ #
355
+ # When an array is passed, the method asserts that the list of elements located matches the corresponding list of expected class lists. Each element's class attribute is matched against the corresponding class in the array:
356
+ #
357
+ # ```html
358
+ # <div class='list'></div>
359
+ # <div class='component inactive'></div>
360
+ # <div class='component active'></div>
361
+ # <div class='component inactive'></div>
362
+ # </div>
363
+ # ```
364
+ #
365
+ # ```python sync
366
+ # from playwright.sync_api import expect
367
+ #
368
+ # locator = page.locator("list > .component")
369
+ # await expect(locator).to_contain_class(["inactive", "active", "inactive"])
370
+ # ```
371
+ def to_contain_class(expected, timeout: nil)
372
+ wrap_impl(@impl.to_contain_class(unwrap_impl(expected), timeout: unwrap_impl(timeout)))
373
+ end
374
+
331
375
  #
332
376
  # Ensures the `Locator` points to an element that contains the given text. All nested elements will be considered when computing the text content of the element. You can use regular expressions for the value as well.
333
377
  #
@@ -439,7 +483,7 @@ module Playwright
439
483
  end
440
484
 
441
485
  #
442
- # Ensures the `Locator` points to an element with given CSS classes. When a string is provided, it must fully match the element's `class` attribute. To match individual classes or perform partial matches, use a regular expression:
486
+ # Ensures the `Locator` points to an element with given CSS classes. When a string is provided, it must fully match the element's `class` attribute. To match individual classes use [`method: LocatorAssertions.toContainClass`].
443
487
  #
444
488
  # **Usage**
445
489
  #
@@ -451,8 +495,8 @@ module Playwright
451
495
  # from playwright.sync_api import expect
452
496
  #
453
497
  # locator = page.locator("#component")
454
- # expect(locator).to_have_class(re.compile(r"(^|\\s)selected(\\s|$)"))
455
498
  # expect(locator).to_have_class("middle selected row")
499
+ # expect(locator).to_have_class(re.compile(r"(^|\\s)selected(\\s|$)"))
456
500
  # ```
457
501
  #
458
502
  # When an array is passed, the method asserts that the list of elements located matches the corresponding list of expected class values. Each element's class attribute is matched against the corresponding string or regular expression in the array:
@@ -1792,16 +1792,6 @@ module Playwright
1792
1792
  raise NotImplementedError.new('wait_for_event is not implemented yet.')
1793
1793
  end
1794
1794
 
1795
- # @nodoc
1796
- def owned_context=(req)
1797
- wrap_impl(@impl.owned_context=(unwrap_impl(req)))
1798
- end
1799
-
1800
- # @nodoc
1801
- def guid
1802
- wrap_impl(@impl.guid)
1803
- end
1804
-
1805
1795
  # @nodoc
1806
1796
  def start_js_coverage(resetOnNavigation: nil, reportAnonymousScripts: nil)
1807
1797
  wrap_impl(@impl.start_js_coverage(resetOnNavigation: unwrap_impl(resetOnNavigation), reportAnonymousScripts: unwrap_impl(reportAnonymousScripts)))
@@ -1822,6 +1812,16 @@ module Playwright
1822
1812
  wrap_impl(@impl.stop_css_coverage)
1823
1813
  end
1824
1814
 
1815
+ # @nodoc
1816
+ def owned_context=(req)
1817
+ wrap_impl(@impl.owned_context=(unwrap_impl(req)))
1818
+ end
1819
+
1820
+ # @nodoc
1821
+ def guid
1822
+ wrap_impl(@impl.guid)
1823
+ end
1824
+
1825
1825
  # -- inherited from EventEmitter --
1826
1826
  # @nodoc
1827
1827
  def on(event, callback)
@@ -196,13 +196,13 @@ module Playwright
196
196
  end
197
197
 
198
198
  # @nodoc
199
- def apply_fallback_overrides(overrides)
200
- wrap_impl(@impl.apply_fallback_overrides(unwrap_impl(overrides)))
199
+ def header_values(name)
200
+ wrap_impl(@impl.header_values(unwrap_impl(name)))
201
201
  end
202
202
 
203
203
  # @nodoc
204
- def header_values(name)
205
- wrap_impl(@impl.header_values(unwrap_impl(name)))
204
+ def apply_fallback_overrides(overrides)
205
+ wrap_impl(@impl.apply_fallback_overrides(unwrap_impl(overrides)))
206
206
  end
207
207
 
208
208
  # -- inherited from EventEmitter --
@@ -35,6 +35,8 @@ module Playwright
35
35
  # The `headers` option applies to both the routed request and any redirects it initiates. However, `url`, `method`, and `postData` only apply to the original request and are not carried over to redirected requests.
36
36
  #
37
37
  # [`method: Route.continue`] will immediately send the request to the network, other matching handlers won't be invoked. Use [`method: Route.fallback`] If you want next matching handler in the chain to be invoked.
38
+ #
39
+ # **NOTE**: The `Cookie` header cannot be overridden using this method. If a value is provided, it will be ignored, and the cookie will be loaded from the browser's cookie store. To set custom cookies, use [`method: BrowserContext.addCookies`].
38
40
  def continue(headers: nil, method: nil, postData: nil, url: nil)
39
41
  wrap_impl(@impl.continue(headers: unwrap_impl(headers), method: unwrap_impl(method), postData: unwrap_impl(postData), url: unwrap_impl(url)))
40
42
  end
@@ -47,13 +47,13 @@ module Playwright
47
47
  end
48
48
 
49
49
  # @nodoc
50
- def page=(req)
51
- wrap_impl(@impl.page=(unwrap_impl(req)))
50
+ def context=(req)
51
+ wrap_impl(@impl.context=(unwrap_impl(req)))
52
52
  end
53
53
 
54
54
  # @nodoc
55
- def context=(req)
56
- wrap_impl(@impl.context=(unwrap_impl(req)))
55
+ def page=(req)
56
+ wrap_impl(@impl.page=(unwrap_impl(req)))
57
57
  end
58
58
 
59
59
  # -- inherited from EventEmitter --
data/sig/playwright.rbs CHANGED
@@ -456,7 +456,7 @@ module Playwright
456
456
  def all_inner_texts: -> Array[untyped]
457
457
  def all_text_contents: -> Array[untyped]
458
458
  def and: (Locator locator) -> Locator
459
- def aria_snapshot: (?timeout: Float) -> String
459
+ def aria_snapshot: (?ref: bool, ?timeout: Float) -> String
460
460
  def blur: (?timeout: Float) -> void
461
461
  def bounding_box: (?timeout: Float) -> (nil | Hash[untyped, untyped])
462
462
  def check: (?force: bool, ?noWaitAfter: bool, ?position: Hash[untyped, untyped], ?timeout: Float, ?trial: bool) -> void
@@ -570,6 +570,7 @@ module Playwright
570
570
  def not_to_be_hidden: (?timeout: Float) -> void
571
571
  def not_to_be_in_viewport: (?ratio: Float, ?timeout: Float) -> void
572
572
  def not_to_be_visible: (?timeout: Float, ?visible: bool) -> void
573
+ def not_to_contain_class: ((String | Array[untyped]) expected, ?timeout: Float) -> void
573
574
  def not_to_contain_text: ((String | Regexp | Array[untyped] | Array[untyped] | Array[untyped]) expected, ?ignoreCase: bool, ?timeout: Float, ?useInnerText: bool) -> void
574
575
  def not_to_have_accessible_description: ((String | Regexp) name, ?ignoreCase: bool, ?timeout: Float) -> void
575
576
  def not_to_have_accessible_error_message: ((String | Regexp) errorMessage, ?ignoreCase: bool, ?timeout: Float) -> void
@@ -595,6 +596,7 @@ module Playwright
595
596
  def to_be_hidden: (?timeout: Float) -> void
596
597
  def to_be_in_viewport: (?ratio: Float, ?timeout: Float) -> void
597
598
  def to_be_visible: (?timeout: Float, ?visible: bool) -> void
599
+ def to_contain_class: ((String | Array[untyped]) expected, ?timeout: Float) -> void
598
600
  def to_contain_text: ((String | Regexp | Array[untyped] | Array[untyped] | Array[untyped]) expected, ?ignoreCase: bool, ?timeout: Float, ?useInnerText: bool) -> void
599
601
  def to_have_accessible_description: ((String | Regexp) description, ?ignoreCase: bool, ?timeout: Float) -> void
600
602
  def to_have_accessible_error_message: ((String | Regexp) errorMessage, ?ignoreCase: bool, ?timeout: Float) -> void
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: playwright-ruby-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.51.0
4
+ version: 1.52.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - YusukeIwaki
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-03-17 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: concurrent-ruby
@@ -407,7 +407,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
407
407
  - !ruby/object:Gem::Version
408
408
  version: '0'
409
409
  requirements: []
410
- rubygems_version: 3.6.2
410
+ rubygems_version: 3.6.7
411
411
  specification_version: 4
412
- summary: The Ruby binding of playwright driver 1.51.0
412
+ summary: The Ruby binding of playwright driver 1.52.0
413
413
  test_files: []