playwright-ruby-client 1.31.1 → 1.33.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 (35) hide show
  1. checksums.yaml +4 -4
  2. data/documentation/docs/api/browser_context.md +7 -1
  3. data/documentation/docs/api/frame.md +10 -3
  4. data/documentation/docs/api/frame_locator.md +10 -3
  5. data/documentation/docs/api/locator.md +40 -4
  6. data/documentation/docs/api/page.md +17 -4
  7. data/documentation/docs/api/route.md +1 -0
  8. data/documentation/docs/api/tracing.md +1 -1
  9. data/documentation/docs/include/api_coverage.md +1 -0
  10. data/lib/playwright/channel.rb +1 -0
  11. data/lib/playwright/channel_owners/browser.rb +2 -8
  12. data/lib/playwright/channel_owners/browser_context.rb +12 -7
  13. data/lib/playwright/channel_owners/browser_type.rb +13 -6
  14. data/lib/playwright/channel_owners/frame.rb +14 -2
  15. data/lib/playwright/channel_owners/local_utils.rb +18 -6
  16. data/lib/playwright/channel_owners/page.rb +14 -4
  17. data/lib/playwright/channel_owners/request.rb +6 -1
  18. data/lib/playwright/channel_owners/route.rb +5 -2
  19. data/lib/playwright/channel_owners/tracing.rb +61 -15
  20. data/lib/playwright/connection.rb +23 -1
  21. data/lib/playwright/frame_locator_impl.rb +9 -3
  22. data/lib/playwright/locator_impl.rb +39 -10
  23. data/lib/playwright/version.rb +2 -2
  24. data/lib/playwright.rb +1 -1
  25. data/lib/playwright_api/android_device.rb +4 -4
  26. data/lib/playwright_api/browser_context.rb +13 -7
  27. data/lib/playwright_api/frame.rb +15 -8
  28. data/lib/playwright_api/frame_locator.rb +11 -4
  29. data/lib/playwright_api/locator.rb +38 -6
  30. data/lib/playwright_api/page.rb +24 -11
  31. data/lib/playwright_api/request.rb +4 -4
  32. data/lib/playwright_api/route.rb +2 -1
  33. data/lib/playwright_api/tracing.rb +2 -2
  34. data/sig/playwright.rbs +10 -9
  35. metadata +3 -3
@@ -22,6 +22,7 @@ module Playwright
22
22
  @callbacks = {} # Hash [ guid => Promise<ChannelOwner> ]
23
23
  @root_object = RootChannelOwner.new(self)
24
24
  @remote = false
25
+ @tracing_count = 0
25
26
  end
26
27
 
27
28
  attr_reader :local_utils
@@ -50,6 +51,14 @@ module Playwright
50
51
  ChannelOwners::Playwright.from(result['playwright'])
51
52
  end
52
53
 
54
+ def set_in_tracing(value)
55
+ if value
56
+ @tracing_count += 1
57
+ else
58
+ @tracing_count -= 1
59
+ end
60
+ end
61
+
53
62
  def async_send_message_to_server(guid, method, params, metadata: nil)
54
63
  callback = Concurrent::Promises.resolvable_future
55
64
 
@@ -58,12 +67,21 @@ module Playwright
58
67
  # @see https://github.com/YusukeIwaki/puppeteer-ruby/pull/34
59
68
  @callbacks[id] = callback
60
69
 
70
+ _metadata = {}
71
+ if metadata
72
+ _metadata[:wallTime] = metadata[:wallTime]
73
+ _metadata[:apiName] = metadata[:apiName]
74
+ _metadata[:location] = metadata[:stack].first
75
+ _metadata[:internal] = !metadata[:apiName]
76
+ end
77
+ _metadata.compact!
78
+
61
79
  message = {
62
80
  id: id,
63
81
  guid: guid,
64
82
  method: method,
65
83
  params: replace_channels_with_guids(params),
66
- metadata: metadata || {},
84
+ metadata: _metadata,
67
85
  }
68
86
 
69
87
  begin
@@ -73,6 +91,10 @@ module Playwright
73
91
  callback.reject(err)
74
92
  raise unless err.is_a?(Transport::AlreadyDisconnectedError)
75
93
  end
94
+
95
+ if @tracing_count > 0 && !metadata[:stack].empty? && guid != 'localUtils'
96
+ @local_utils.add_stack_to_tracing_no_reply(id, metadata[:stack])
97
+ end
76
98
  end
77
99
 
78
100
  callback
@@ -10,14 +10,20 @@ module Playwright
10
10
  @frame_selector = frame_selector
11
11
  end
12
12
 
13
- def locator(selector, hasText: nil, has: nil)
13
+ def locator(
14
+ selector,
15
+ has: nil,
16
+ hasNot: nil,
17
+ hasNotText: nil,
18
+ hasText: nil)
14
19
  LocatorImpl.new(
15
20
  frame: @frame,
16
21
  timeout_settings: @timeout_settings,
17
22
  selector: "#{@frame_selector} >> internal:control=enter-frame >> #{selector}",
18
- hasText: hasText,
19
23
  has: has,
20
- )
24
+ hasNot: hasNot,
25
+ hasNotText: hasNotText,
26
+ hasText: hasText)
21
27
  end
22
28
 
23
29
  def frame_locator(selector)
@@ -5,7 +5,7 @@ module Playwright
5
5
  define_api_implementation :LocatorImpl do
6
6
  include LocatorUtils
7
7
 
8
- def initialize(frame:, timeout_settings:, selector:, hasText: nil, has: nil)
8
+ def initialize(frame:, timeout_settings:, selector:, has: nil, hasNot: nil, hasNotText: nil, hasText: nil)
9
9
  @frame = frame
10
10
  @timeout_settings = timeout_settings
11
11
  selector_scopes = [selector]
@@ -16,11 +16,22 @@ module Playwright
16
16
 
17
17
  if has
18
18
  unless same_frame?(has)
19
- raise DifferentFrameError.new
19
+ raise DifferentFrameError.new('has')
20
20
  end
21
21
  selector_scopes << "internal:has=#{has.send(:selector_json)}"
22
22
  end
23
23
 
24
+ if hasNotText
25
+ selector_scopes << "internal:has-not-text=#{escape_for_text_selector(hasNotText, false)}"
26
+ end
27
+
28
+ if hasNot
29
+ unless same_frame?(hasNot)
30
+ raise DifferentFrameError.new('hasNot')
31
+ end
32
+ selector_scopes << "internal:has-not=#{hasNot.send(:selector_json)}"
33
+ end
34
+
24
35
  @selector = selector_scopes.join(' >> ')
25
36
  end
26
37
 
@@ -36,8 +47,8 @@ module Playwright
36
47
  end
37
48
 
38
49
  class DifferentFrameError < StandardError
39
- def initialize
40
- super('Inner "has" locator must belong to the same frame.')
50
+ def initialize(method_name)
51
+ super("Inner \"#{method_name}\" locator must belong to the same frame.")
41
52
  end
42
53
  end
43
54
 
@@ -190,14 +201,20 @@ module Playwright
190
201
  @frame.fill(@selector, '', strict: true, force: force, noWaitAfter: noWaitAfter, timeout: timeout)
191
202
  end
192
203
 
193
- def locator(selector, hasText: nil, has: nil)
204
+ def locator(
205
+ selector,
206
+ has: nil,
207
+ hasNot: nil,
208
+ hasNotText: nil,
209
+ hasText: nil)
194
210
  LocatorImpl.new(
195
211
  frame: @frame,
196
212
  timeout_settings: @timeout_settings,
197
213
  selector: "#{@selector} >> #{selector}",
198
- hasText: hasText,
199
214
  has: has,
200
- )
215
+ hasNot: hasNot,
216
+ hasNotText: hasNotText,
217
+ hasText: hasText)
201
218
  end
202
219
 
203
220
  def frame_locator(selector)
@@ -216,14 +233,15 @@ module Playwright
216
233
  @frame.query_selector_all(@selector)
217
234
  end
218
235
 
219
- def filter(has: nil, hasText: nil)
236
+ def filter(has: nil, hasNot: nil, hasNotText: nil, hasText: nil)
220
237
  LocatorImpl.new(
221
238
  frame: @frame,
222
239
  timeout_settings: @timeout_settings,
223
240
  selector: @selector,
224
- hasText: hasText,
225
241
  has: has,
226
- )
242
+ hasNot: hasNot,
243
+ hasNotText: hasNotText,
244
+ hasText: hasText)
227
245
  end
228
246
 
229
247
  def first
@@ -250,6 +268,17 @@ module Playwright
250
268
  )
251
269
  end
252
270
 
271
+ def or(locator)
272
+ unless same_frame?(locator)
273
+ raise DifferentFrameError.new('locator')
274
+ end
275
+ LocatorImpl.new(
276
+ frame: @frame,
277
+ timeout_settings: @timeout_settings,
278
+ selector: "#{@selector} >> internal:or=#{locator.send(:selector_json)}",
279
+ )
280
+ end
281
+
253
282
  def focus(timeout: nil)
254
283
  @frame.focus(@selector, strict: true, timeout: timeout)
255
284
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Playwright
4
- VERSION = '1.31.1'
5
- COMPATIBLE_PLAYWRIGHT_VERSION = '1.31.1'
4
+ VERSION = '1.33.0'
5
+ COMPATIBLE_PLAYWRIGHT_VERSION = '1.33.0'
6
6
  end
data/lib/playwright.rb CHANGED
@@ -159,8 +159,8 @@ module Playwright
159
159
  begin
160
160
  playwright = connection.initialize_playwright
161
161
  browser = playwright.send(:pre_launched_browser)
162
+ browser.browser_type.send(:did_launch_browser, browser)
162
163
  browser.should_close_connection_on_close!
163
- browser.send(:update_browser_type, browser.browser_type)
164
164
  Execution.new(connection, PlaywrightApi.wrap(playwright), PlaywrightApi.wrap(browser))
165
165
  rescue
166
166
  connection.stop
@@ -194,13 +194,13 @@ module Playwright
194
194
  end
195
195
 
196
196
  # @nodoc
197
- def should_close_connection_on_close!
198
- wrap_impl(@impl.should_close_connection_on_close!)
197
+ def tap_on(selector, duration: nil, timeout: nil)
198
+ wrap_impl(@impl.tap_on(unwrap_impl(selector), duration: unwrap_impl(duration), timeout: unwrap_impl(timeout)))
199
199
  end
200
200
 
201
201
  # @nodoc
202
- def tap_on(selector, duration: nil, timeout: nil)
203
- wrap_impl(@impl.tap_on(unwrap_impl(selector), duration: unwrap_impl(duration), timeout: unwrap_impl(timeout)))
202
+ def should_close_connection_on_close!
203
+ wrap_impl(@impl.should_close_connection_on_close!)
204
204
  end
205
205
 
206
206
  # -- inherited from EventEmitter --
@@ -302,8 +302,14 @@ module Playwright
302
302
  # If specified the network requests that are made in the context will be served from the HAR file. Read more about [Replaying from HAR](../network.md#replaying-from-har).
303
303
  #
304
304
  # Playwright will not serve requests intercepted by Service Worker from the HAR file. See [this](https://github.com/microsoft/playwright/issues/1090) issue. We recommend disabling Service Workers when using request interception by setting `Browser.newContext.serviceWorkers` to `'block'`.
305
- def route_from_har(har, notFound: nil, update: nil, url: nil)
306
- wrap_impl(@impl.route_from_har(unwrap_impl(har), notFound: unwrap_impl(notFound), update: unwrap_impl(update), url: unwrap_impl(url)))
305
+ def route_from_har(
306
+ har,
307
+ notFound: nil,
308
+ update: nil,
309
+ updateContent: nil,
310
+ updateMode: nil,
311
+ url: nil)
312
+ wrap_impl(@impl.route_from_har(unwrap_impl(har), notFound: unwrap_impl(notFound), update: unwrap_impl(update), updateContent: unwrap_impl(updateContent), updateMode: unwrap_impl(updateMode), url: unwrap_impl(url)))
307
313
  end
308
314
 
309
315
  #
@@ -428,11 +434,6 @@ module Playwright
428
434
  wrap_impl(@impl.options=(unwrap_impl(req)))
429
435
  end
430
436
 
431
- # @nodoc
432
- def browser=(req)
433
- wrap_impl(@impl.browser=(unwrap_impl(req)))
434
- end
435
-
436
437
  # @nodoc
437
438
  def owner_page=(req)
438
439
  wrap_impl(@impl.owner_page=(unwrap_impl(req)))
@@ -443,6 +444,11 @@ module Playwright
443
444
  wrap_impl(@impl.enable_debug_console!)
444
445
  end
445
446
 
447
+ # @nodoc
448
+ def browser=(req)
449
+ wrap_impl(@impl.browser=(unwrap_impl(req)))
450
+ end
451
+
446
452
  # -- inherited from EventEmitter --
447
453
  # @nodoc
448
454
  def off(event, callback)
@@ -378,18 +378,20 @@ module Playwright
378
378
  end
379
379
 
380
380
  #
381
- # Allows locating input elements by the text of the associated label.
381
+ # Allows locating input elements by the text of the associated `<label>` or `aria-labelledby` element, or by the `aria-label` attribute.
382
382
  #
383
383
  # **Usage**
384
384
  #
385
- # For example, this method will find the input by label text "Password" in the following DOM:
385
+ # For example, this method will find inputs by label "Username" and "Password" in the following DOM:
386
386
  #
387
387
  # ```html
388
+ # <input aria-label="Username">
388
389
  # <label for="password-input">Password:</label>
389
390
  # <input id="password-input">
390
391
  # ```
391
392
  #
392
393
  # ```python sync
394
+ # page.get_by_label("Username").fill("john")
393
395
  # page.get_by_label("Password").fill("secret")
394
396
  # ```
395
397
  def get_by_label(text, exact: nil)
@@ -662,8 +664,13 @@ module Playwright
662
664
  # [Learn more about locators](../locators.md).
663
665
  #
664
666
  # [Learn more about locators](../locators.md).
665
- def locator(selector, has: nil, hasText: nil)
666
- wrap_impl(@impl.locator(unwrap_impl(selector), has: unwrap_impl(has), hasText: unwrap_impl(hasText)))
667
+ def locator(
668
+ selector,
669
+ has: nil,
670
+ hasNot: nil,
671
+ hasNotText: nil,
672
+ hasText: nil)
673
+ wrap_impl(@impl.locator(unwrap_impl(selector), has: unwrap_impl(has), hasNot: unwrap_impl(hasNot), hasNotText: unwrap_impl(hasNotText), hasText: unwrap_impl(hasText)))
667
674
  end
668
675
 
669
676
  #
@@ -1031,13 +1038,13 @@ module Playwright
1031
1038
  end
1032
1039
 
1033
1040
  # @nodoc
1034
- def detached=(req)
1035
- wrap_impl(@impl.detached=(unwrap_impl(req)))
1041
+ def highlight(selector)
1042
+ wrap_impl(@impl.highlight(unwrap_impl(selector)))
1036
1043
  end
1037
1044
 
1038
1045
  # @nodoc
1039
- def highlight(selector)
1040
- wrap_impl(@impl.highlight(unwrap_impl(selector)))
1046
+ def detached=(req)
1047
+ wrap_impl(@impl.detached=(unwrap_impl(req)))
1041
1048
  end
1042
1049
 
1043
1050
  # -- inherited from EventEmitter --
@@ -60,18 +60,20 @@ module Playwright
60
60
  end
61
61
 
62
62
  #
63
- # Allows locating input elements by the text of the associated label.
63
+ # Allows locating input elements by the text of the associated `<label>` or `aria-labelledby` element, or by the `aria-label` attribute.
64
64
  #
65
65
  # **Usage**
66
66
  #
67
- # For example, this method will find the input by label text "Password" in the following DOM:
67
+ # For example, this method will find inputs by label "Username" and "Password" in the following DOM:
68
68
  #
69
69
  # ```html
70
+ # <input aria-label="Username">
70
71
  # <label for="password-input">Password:</label>
71
72
  # <input id="password-input">
72
73
  # ```
73
74
  #
74
75
  # ```python sync
76
+ # page.get_by_label("Username").fill("john")
75
77
  # page.get_by_label("Password").fill("secret")
76
78
  # ```
77
79
  def get_by_label(text, exact: nil)
@@ -239,8 +241,13 @@ module Playwright
239
241
  # The method finds an element matching the specified selector in the locator's subtree. It also accepts filter options, similar to [`method: Locator.filter`] method.
240
242
  #
241
243
  # [Learn more about locators](../locators.md).
242
- def locator(selector, has: nil, hasText: nil)
243
- wrap_impl(@impl.locator(unwrap_impl(selector), has: unwrap_impl(has), hasText: unwrap_impl(hasText)))
244
+ def locator(
245
+ selectorOrLocator,
246
+ has: nil,
247
+ hasNot: nil,
248
+ hasNotText: nil,
249
+ hasText: nil)
250
+ wrap_impl(@impl.locator(unwrap_impl(selectorOrLocator), has: unwrap_impl(has), hasNot: unwrap_impl(hasNot), hasNotText: unwrap_impl(hasNotText), hasText: unwrap_impl(hasText)))
244
251
  end
245
252
 
246
253
  #
@@ -10,6 +10,12 @@ module Playwright
10
10
  # When locator points to a list of elements, returns array of locators, pointing
11
11
  # to respective elements.
12
12
  #
13
+ # **NOTE**: [`method: Locator.all`] does not wait for elements to match the locator, and instead immediately returns whatever is present in the page.
14
+ #
15
+ # When the list of elements changes dynamically, [`method: Locator.all`] will produce unpredictable and flaky results.
16
+ #
17
+ # When the list of elements is stable, but loaded dynamically, wait for the full list to finish loading before calling [`method: Locator.all`].
18
+ #
13
19
  # **Usage**
14
20
  #
15
21
  # ```python sync
@@ -391,8 +397,8 @@ module Playwright
391
397
  # .filter(has=page.get_by_role("button", name="column 2 button"))
392
398
  # .screenshot()
393
399
  # ```
394
- def filter(has: nil, hasText: nil)
395
- wrap_impl(@impl.filter(has: unwrap_impl(has), hasText: unwrap_impl(hasText)))
400
+ def filter(has: nil, hasNot: nil, hasNotText: nil, hasText: nil)
401
+ wrap_impl(@impl.filter(has: unwrap_impl(has), hasNot: unwrap_impl(hasNot), hasNotText: unwrap_impl(hasNotText), hasText: unwrap_impl(hasText)))
396
402
  end
397
403
 
398
404
  #
@@ -447,18 +453,20 @@ module Playwright
447
453
  end
448
454
 
449
455
  #
450
- # Allows locating input elements by the text of the associated label.
456
+ # Allows locating input elements by the text of the associated `<label>` or `aria-labelledby` element, or by the `aria-label` attribute.
451
457
  #
452
458
  # **Usage**
453
459
  #
454
- # For example, this method will find the input by label text "Password" in the following DOM:
460
+ # For example, this method will find inputs by label "Username" and "Password" in the following DOM:
455
461
  #
456
462
  # ```html
463
+ # <input aria-label="Username">
457
464
  # <label for="password-input">Password:</label>
458
465
  # <input id="password-input">
459
466
  # ```
460
467
  #
461
468
  # ```python sync
469
+ # page.get_by_label("Username").fill("john")
462
470
  # page.get_by_label("Password").fill("secret")
463
471
  # ```
464
472
  def get_by_label(text, exact: nil)
@@ -769,8 +777,13 @@ module Playwright
769
777
  # The method finds an element matching the specified selector in the locator's subtree. It also accepts filter options, similar to [`method: Locator.filter`] method.
770
778
  #
771
779
  # [Learn more about locators](../locators.md).
772
- def locator(selector, has: nil, hasText: nil)
773
- wrap_impl(@impl.locator(unwrap_impl(selector), has: unwrap_impl(has), hasText: unwrap_impl(hasText)))
780
+ def locator(
781
+ selectorOrLocator,
782
+ has: nil,
783
+ hasNot: nil,
784
+ hasNotText: nil,
785
+ hasText: nil)
786
+ wrap_impl(@impl.locator(unwrap_impl(selectorOrLocator), has: unwrap_impl(has), hasNot: unwrap_impl(hasNot), hasNotText: unwrap_impl(hasNotText), hasText: unwrap_impl(hasText)))
774
787
  end
775
788
 
776
789
  #
@@ -785,6 +798,25 @@ module Playwright
785
798
  wrap_impl(@impl.nth(unwrap_impl(index)))
786
799
  end
787
800
 
801
+ #
802
+ # Creates a locator that matches either of the two locators.
803
+ #
804
+ # **Usage**
805
+ #
806
+ # Consider a scenario where you'd like to click on a "New email" button, but sometimes a security settings dialog shows up instead. In this case, you can wait for either a "New email" button, or a dialog and act accordingly.
807
+ #
808
+ # ```python sync
809
+ # new_email = page.get_by_role("button", name="New")
810
+ # dialog = page.get_by_text("Confirm security settings")
811
+ # expect(new_email.or_(dialog)).to_be_visible()
812
+ # if (dialog.is_visible())
813
+ # page.get_by_role("button", name="Dismiss").click()
814
+ # new_email.click()
815
+ # ```
816
+ def or(locator)
817
+ wrap_impl(@impl.or(unwrap_impl(locator)))
818
+ end
819
+
788
820
  #
789
821
  # A page this locator belongs to.
790
822
  def page
@@ -614,18 +614,20 @@ module Playwright
614
614
  end
615
615
 
616
616
  #
617
- # Allows locating input elements by the text of the associated label.
617
+ # Allows locating input elements by the text of the associated `<label>` or `aria-labelledby` element, or by the `aria-label` attribute.
618
618
  #
619
619
  # **Usage**
620
620
  #
621
- # For example, this method will find the input by label text "Password" in the following DOM:
621
+ # For example, this method will find inputs by label "Username" and "Password" in the following DOM:
622
622
  #
623
623
  # ```html
624
+ # <input aria-label="Username">
624
625
  # <label for="password-input">Password:</label>
625
626
  # <input id="password-input">
626
627
  # ```
627
628
  #
628
629
  # ```python sync
630
+ # page.get_by_label("Username").fill("john")
629
631
  # page.get_by_label("Password").fill("secret")
630
632
  # ```
631
633
  def get_by_label(text, exact: nil)
@@ -914,8 +916,13 @@ module Playwright
914
916
  # Locator is resolved to the element immediately before performing an action, so a series of actions on the same locator can in fact be performed on different DOM elements. That would happen if the DOM structure between those actions has changed.
915
917
  #
916
918
  # [Learn more about locators](../locators.md).
917
- def locator(selector, has: nil, hasText: nil)
918
- wrap_impl(@impl.locator(unwrap_impl(selector), has: unwrap_impl(has), hasText: unwrap_impl(hasText)))
919
+ def locator(
920
+ selector,
921
+ has: nil,
922
+ hasNot: nil,
923
+ hasNotText: nil,
924
+ hasText: nil)
925
+ wrap_impl(@impl.locator(unwrap_impl(selector), has: unwrap_impl(has), hasNot: unwrap_impl(hasNot), hasNotText: unwrap_impl(hasNotText), hasText: unwrap_impl(hasText)))
919
926
  end
920
927
 
921
928
  #
@@ -1129,8 +1136,14 @@ module Playwright
1129
1136
  # If specified the network requests that are made in the page will be served from the HAR file. Read more about [Replaying from HAR](../network.md#replaying-from-har).
1130
1137
  #
1131
1138
  # Playwright will not serve requests intercepted by Service Worker from the HAR file. See [this](https://github.com/microsoft/playwright/issues/1090) issue. We recommend disabling Service Workers when using request interception by setting `Browser.newContext.serviceWorkers` to `'block'`.
1132
- def route_from_har(har, notFound: nil, update: nil, url: nil)
1133
- wrap_impl(@impl.route_from_har(unwrap_impl(har), notFound: unwrap_impl(notFound), update: unwrap_impl(update), url: unwrap_impl(url)))
1139
+ def route_from_har(
1140
+ har,
1141
+ notFound: nil,
1142
+ update: nil,
1143
+ updateContent: nil,
1144
+ updateMode: nil,
1145
+ url: nil)
1146
+ wrap_impl(@impl.route_from_har(unwrap_impl(har), notFound: unwrap_impl(notFound), update: unwrap_impl(update), updateContent: unwrap_impl(updateContent), updateMode: unwrap_impl(updateMode), url: unwrap_impl(url)))
1134
1147
  end
1135
1148
 
1136
1149
  #
@@ -1659,6 +1672,11 @@ module Playwright
1659
1672
  raise NotImplementedError.new('wait_for_event is not implemented yet.')
1660
1673
  end
1661
1674
 
1675
+ # @nodoc
1676
+ def stop_css_coverage
1677
+ wrap_impl(@impl.stop_css_coverage)
1678
+ end
1679
+
1662
1680
  # @nodoc
1663
1681
  def owned_context=(req)
1664
1682
  wrap_impl(@impl.owned_context=(unwrap_impl(req)))
@@ -1684,11 +1702,6 @@ module Playwright
1684
1702
  wrap_impl(@impl.start_css_coverage(resetOnNavigation: unwrap_impl(resetOnNavigation), reportAnonymousScripts: unwrap_impl(reportAnonymousScripts)))
1685
1703
  end
1686
1704
 
1687
- # @nodoc
1688
- def stop_css_coverage
1689
- wrap_impl(@impl.stop_css_coverage)
1690
- end
1691
-
1692
1705
  # -- inherited from EventEmitter --
1693
1706
  # @nodoc
1694
1707
  def off(event, callback)
@@ -179,13 +179,13 @@ module Playwright
179
179
  end
180
180
 
181
181
  # @nodoc
182
- def header_values(name)
183
- wrap_impl(@impl.header_values(unwrap_impl(name)))
182
+ def apply_fallback_overrides(overrides)
183
+ wrap_impl(@impl.apply_fallback_overrides(unwrap_impl(overrides)))
184
184
  end
185
185
 
186
186
  # @nodoc
187
- def apply_fallback_overrides(overrides)
188
- wrap_impl(@impl.apply_fallback_overrides(unwrap_impl(overrides)))
187
+ def header_values(name)
188
+ wrap_impl(@impl.header_values(unwrap_impl(name)))
189
189
  end
190
190
 
191
191
  # -- inherited from EventEmitter --
@@ -119,8 +119,9 @@ module Playwright
119
119
  maxRedirects: nil,
120
120
  method: nil,
121
121
  postData: nil,
122
+ timeout: nil,
122
123
  url: nil)
123
- wrap_impl(@impl.fetch(headers: unwrap_impl(headers), maxRedirects: unwrap_impl(maxRedirects), method: unwrap_impl(method), postData: unwrap_impl(postData), url: unwrap_impl(url)))
124
+ wrap_impl(@impl.fetch(headers: unwrap_impl(headers), maxRedirects: unwrap_impl(maxRedirects), method: unwrap_impl(method), postData: unwrap_impl(postData), timeout: unwrap_impl(timeout), url: unwrap_impl(url)))
124
125
  end
125
126
 
126
127
  #
@@ -54,8 +54,8 @@ module Playwright
54
54
  # # Save a second trace file with different actions.
55
55
  # context.tracing.stop_chunk(path = "trace2.zip")
56
56
  # ```
57
- def start_chunk(title: nil)
58
- wrap_impl(@impl.start_chunk(title: unwrap_impl(title)))
57
+ def start_chunk(name: nil, title: nil)
58
+ wrap_impl(@impl.start_chunk(name: unwrap_impl(name), title: unwrap_impl(title)))
59
59
  end
60
60
 
61
61
  #
data/sig/playwright.rbs CHANGED
@@ -47,7 +47,7 @@ module Playwright
47
47
  def abort: (?errorCode: String) -> void
48
48
  def continue: (?headers: Hash[untyped, untyped], ?method: String, ?postData: (String | String | untyped), ?url: String) -> void
49
49
  def fallback: (?headers: Hash[untyped, untyped], ?method: String, ?postData: (String | String | untyped), ?url: String) -> void
50
- def fetch: (?headers: Hash[untyped, untyped], ?maxRedirects: Integer, ?method: String, ?postData: (String | String | untyped), ?url: String) -> APIResponse
50
+ def fetch: (?headers: Hash[untyped, untyped], ?maxRedirects: Integer, ?method: String, ?postData: (String | String | untyped), ?timeout: Float, ?url: String) -> APIResponse
51
51
  def fulfill: (?body: (String | String), ?contentType: String, ?headers: Hash[untyped, untyped], ?json: untyped, ?path: (String | File), ?response: APIResponse, ?status: Integer) -> void
52
52
  def request: -> Request
53
53
  end
@@ -184,7 +184,7 @@ module Playwright
184
184
  def enabled?: (String selector, ?strict: bool, ?timeout: Float) -> bool
185
185
  def hidden?: (String selector, ?strict: bool, ?timeout: Float) -> bool
186
186
  def visible?: (String selector, ?strict: bool, ?timeout: Float) -> bool
187
- def locator: (String selector, ?has: Locator, ?hasText: (String | Regexp)) -> Locator
187
+ def locator: (String selector, ?has: Locator, ?hasNot: Locator, ?hasNotText: (String | Regexp), ?hasText: (String | Regexp)) -> Locator
188
188
  def name: -> String
189
189
  def page: -> Page
190
190
  def parent_frame: -> (nil | Frame)
@@ -293,7 +293,7 @@ module Playwright
293
293
  def enabled?: (String selector, ?strict: bool, ?timeout: Float) -> bool
294
294
  def hidden?: (String selector, ?strict: bool, ?timeout: Float) -> bool
295
295
  def visible?: (String selector, ?strict: bool, ?timeout: Float) -> bool
296
- def locator: (String selector, ?has: Locator, ?hasText: (String | Regexp)) -> Locator
296
+ def locator: (String selector, ?has: Locator, ?hasNot: Locator, ?hasNotText: (String | Regexp), ?hasText: (String | Regexp)) -> Locator
297
297
  def main_frame: -> Frame
298
298
  def opener: -> (nil | Page)
299
299
  def pause: -> void
@@ -303,7 +303,7 @@ module Playwright
303
303
  def query_selector_all: (String selector) -> Array[untyped]
304
304
  def reload: (?timeout: Float, ?waitUntil: ("load" | "domcontentloaded" | "networkidle" | "commit")) -> (nil | Response)
305
305
  def route: ((String | Regexp | function) url, function handler, ?times: Integer) -> void
306
- def route_from_har: ((String | File) har, ?notFound: ("abort" | "fallback"), ?update: bool, ?url: (String | Regexp)) -> void
306
+ def route_from_har: ((String | File) har, ?notFound: ("abort" | "fallback"), ?update: bool, ?updateContent: ("embed" | "attach"), ?updateMode: ("full" | "minimal"), ?url: (String | Regexp)) -> void
307
307
  def screenshot: (?animations: ("disabled" | "allow"), ?caret: ("hide" | "initial"), ?clip: Hash[untyped, untyped], ?fullPage: bool, ?mask: Array[untyped], ?omitBackground: bool, ?path: (String | File), ?quality: Integer, ?scale: ("css" | "device"), ?timeout: Float, ?type: ("png" | "jpeg")) -> String
308
308
  def select_option: (String selector, ?element: (ElementHandle | Array[untyped]), ?index: (Integer | Array[untyped]), ?value: (String | Array[untyped]), ?label: (String | Array[untyped]), ?force: bool, ?noWaitAfter: bool, ?strict: bool, ?timeout: Float) -> Array[untyped]
309
309
  def set_checked: (String selector, bool checked, ?force: bool, ?noWaitAfter: bool, ?position: Hash[untyped, untyped], ?strict: bool, ?timeout: Float, ?trial: bool) -> void
@@ -368,7 +368,7 @@ module Playwright
368
368
  def new_page: () ?{ (Page) -> untyped } -> Page
369
369
  def pages: -> Array[untyped]
370
370
  def route: ((String | Regexp | function) url, function handler, ?times: Integer) -> void
371
- def route_from_har: ((String | File) har, ?notFound: ("abort" | "fallback"), ?update: bool, ?url: (String | Regexp)) -> void
371
+ def route_from_har: ((String | File) har, ?notFound: ("abort" | "fallback"), ?update: bool, ?updateContent: ("embed" | "attach"), ?updateMode: ("full" | "minimal"), ?url: (String | Regexp)) -> void
372
372
  def service_workers: -> Array[untyped]
373
373
  def set_default_navigation_timeout: (Float timeout) -> void
374
374
  def default_navigation_timeout=: (Float timeout) -> void
@@ -425,7 +425,7 @@ module Playwright
425
425
 
426
426
  class Tracing
427
427
  def start: (?name: String, ?screenshots: bool, ?snapshots: bool, ?sources: bool, ?title: String) -> void
428
- def start_chunk: (?title: String) -> void
428
+ def start_chunk: (?name: String, ?title: String) -> void
429
429
  def stop: (?path: (String | File)) -> void
430
430
  def stop_chunk: (?path: (String | File)) -> void
431
431
  end
@@ -449,7 +449,7 @@ module Playwright
449
449
  def evaluate_all: (String expression, ?arg: untyped) -> untyped
450
450
  def evaluate_handle: (String expression, ?arg: untyped, ?timeout: Float) -> JSHandle
451
451
  def fill: (String value, ?force: bool, ?noWaitAfter: bool, ?timeout: Float) -> void
452
- def filter: (?has: Locator, ?hasText: (String | Regexp)) -> Locator
452
+ def filter: (?has: Locator, ?hasNot: Locator, ?hasNotText: (String | Regexp), ?hasText: (String | Regexp)) -> Locator
453
453
  def first: -> Locator
454
454
  def focus: (?timeout: Float) -> void
455
455
  def frame_locator: (String selector) -> FrameLocator
@@ -474,8 +474,9 @@ module Playwright
474
474
  def hidden?: (?timeout: Float) -> bool
475
475
  def visible?: (?timeout: Float) -> bool
476
476
  def last: -> Locator
477
- def locator: (String selector, ?has: Locator, ?hasText: (String | Regexp)) -> Locator
477
+ def locator: ((String | Locator) selectorOrLocator, ?has: Locator, ?hasNot: Locator, ?hasNotText: (String | Regexp), ?hasText: (String | Regexp)) -> Locator
478
478
  def nth: (Integer index) -> Locator
479
+ def or: (Locator locator) -> Locator
479
480
  def page: -> Page
480
481
  def press: (String key, ?delay: Float, ?noWaitAfter: bool, ?timeout: Float) -> void
481
482
  def screenshot: (?animations: ("disabled" | "allow"), ?caret: ("hide" | "initial"), ?mask: Array[untyped], ?omitBackground: bool, ?path: (String | File), ?quality: Integer, ?scale: ("css" | "device"), ?timeout: Float, ?type: ("png" | "jpeg")) -> String
@@ -504,7 +505,7 @@ module Playwright
504
505
  def get_by_text: ((String | Regexp) text, ?exact: bool) -> Locator
505
506
  def get_by_title: ((String | Regexp) text, ?exact: bool) -> Locator
506
507
  def last: -> FrameLocator
507
- def locator: (String selector, ?has: Locator, ?hasText: (String | Regexp)) -> Locator
508
+ def locator: ((String | Locator) selectorOrLocator, ?has: Locator, ?hasNot: Locator, ?hasNotText: (String | Regexp), ?hasText: (String | Regexp)) -> Locator
508
509
  def nth: (Integer index) -> FrameLocator
509
510
  end
510
511