playwright-ruby-client 0.6.4 → 0.8.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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +26 -0
  3. data/documentation/docs/api/browser.md +10 -0
  4. data/documentation/docs/api/browser_context.md +10 -0
  5. data/documentation/docs/api/browser_type.md +53 -0
  6. data/documentation/docs/api/cdp_session.md +41 -1
  7. data/documentation/docs/api/element_handle.md +11 -2
  8. data/documentation/docs/api/frame.md +15 -1
  9. data/documentation/docs/api/page.md +33 -1
  10. data/documentation/docs/api/response.md +16 -0
  11. data/documentation/docs/api/route.md +20 -21
  12. data/documentation/docs/api/web_socket.md +38 -1
  13. data/documentation/docs/article/guides/launch_browser.md +2 -0
  14. data/documentation/docs/article/guides/rails_integration.md +2 -2
  15. data/documentation/docs/article/guides/semi_automation.md +67 -0
  16. data/documentation/docs/include/api_coverage.md +19 -13
  17. data/lib/playwright.rb +36 -3
  18. data/lib/playwright/channel_owners/browser.rb +5 -0
  19. data/lib/playwright/channel_owners/browser_context.rb +5 -0
  20. data/lib/playwright/channel_owners/browser_type.rb +18 -0
  21. data/lib/playwright/channel_owners/cdp_session.rb +19 -0
  22. data/lib/playwright/channel_owners/element_handle.rb +11 -4
  23. data/lib/playwright/channel_owners/frame.rb +14 -2
  24. data/lib/playwright/channel_owners/page.rb +21 -2
  25. data/lib/playwright/channel_owners/response.rb +9 -1
  26. data/lib/playwright/channel_owners/web_socket.rb +87 -0
  27. data/lib/playwright/connection.rb +2 -4
  28. data/lib/playwright/transport.rb +0 -1
  29. data/lib/playwright/version.rb +2 -2
  30. data/lib/playwright/web_socket_client.rb +164 -0
  31. data/lib/playwright/web_socket_transport.rb +104 -0
  32. data/lib/playwright_api/android.rb +6 -6
  33. data/lib/playwright_api/android_device.rb +8 -8
  34. data/lib/playwright_api/browser.rb +7 -7
  35. data/lib/playwright_api/browser_context.rb +7 -7
  36. data/lib/playwright_api/browser_type.rb +9 -8
  37. data/lib/playwright_api/cdp_session.rb +30 -8
  38. data/lib/playwright_api/console_message.rb +6 -6
  39. data/lib/playwright_api/dialog.rb +6 -6
  40. data/lib/playwright_api/element_handle.rb +17 -11
  41. data/lib/playwright_api/frame.rb +20 -9
  42. data/lib/playwright_api/js_handle.rb +6 -6
  43. data/lib/playwright_api/page.rb +28 -17
  44. data/lib/playwright_api/playwright.rb +6 -6
  45. data/lib/playwright_api/request.rb +6 -6
  46. data/lib/playwright_api/response.rb +15 -10
  47. data/lib/playwright_api/route.rb +11 -6
  48. data/lib/playwright_api/selectors.rb +6 -6
  49. data/lib/playwright_api/web_socket.rb +28 -6
  50. data/lib/playwright_api/worker.rb +6 -6
  51. data/playwright.gemspec +2 -1
  52. metadata +37 -18
@@ -50,7 +50,7 @@ module Playwright
50
50
  #
51
51
  # Returns the newly created browser session.
52
52
  def new_browser_cdp_session
53
- raise NotImplementedError.new('new_browser_cdp_session is not implemented yet.')
53
+ wrap_impl(@impl.new_browser_cdp_session)
54
54
  end
55
55
 
56
56
  # Creates a new browser context. It won't share cookies/cache with other browser contexts.
@@ -158,20 +158,20 @@ module Playwright
158
158
 
159
159
  # -- inherited from EventEmitter --
160
160
  # @nodoc
161
- def once(event, callback)
162
- event_emitter_proxy.once(event, callback)
161
+ def off(event, callback)
162
+ event_emitter_proxy.off(event, callback)
163
163
  end
164
164
 
165
165
  # -- inherited from EventEmitter --
166
166
  # @nodoc
167
- def on(event, callback)
168
- event_emitter_proxy.on(event, callback)
167
+ def once(event, callback)
168
+ event_emitter_proxy.once(event, callback)
169
169
  end
170
170
 
171
171
  # -- inherited from EventEmitter --
172
172
  # @nodoc
173
- def off(event, callback)
174
- event_emitter_proxy.off(event, callback)
173
+ def on(event, callback)
174
+ event_emitter_proxy.on(event, callback)
175
175
  end
176
176
 
177
177
  private def event_emitter_proxy
@@ -204,7 +204,7 @@ module Playwright
204
204
  #
205
205
  # Returns the newly created session.
206
206
  def new_cdp_session(page)
207
- raise NotImplementedError.new('new_cdp_session is not implemented yet.')
207
+ wrap_impl(@impl.new_cdp_session(unwrap_impl(page)))
208
208
  end
209
209
 
210
210
  # Creates a new page in the browser context.
@@ -384,20 +384,20 @@ module Playwright
384
384
 
385
385
  # -- inherited from EventEmitter --
386
386
  # @nodoc
387
- def once(event, callback)
388
- event_emitter_proxy.once(event, callback)
387
+ def off(event, callback)
388
+ event_emitter_proxy.off(event, callback)
389
389
  end
390
390
 
391
391
  # -- inherited from EventEmitter --
392
392
  # @nodoc
393
- def on(event, callback)
394
- event_emitter_proxy.on(event, callback)
393
+ def once(event, callback)
394
+ event_emitter_proxy.once(event, callback)
395
395
  end
396
396
 
397
397
  # -- inherited from EventEmitter --
398
398
  # @nodoc
399
- def off(event, callback)
400
- event_emitter_proxy.off(event, callback)
399
+ def on(event, callback)
400
+ event_emitter_proxy.on(event, callback)
401
401
  end
402
402
 
403
403
  private def event_emitter_proxy
@@ -133,8 +133,9 @@ module Playwright
133
133
  timezoneId: nil,
134
134
  tracesDir: nil,
135
135
  userAgent: nil,
136
- viewport: nil)
137
- raise NotImplementedError.new('launch_persistent_context is not implemented yet.')
136
+ viewport: nil,
137
+ &block)
138
+ wrap_impl(@impl.launch_persistent_context(unwrap_impl(userDataDir), acceptDownloads: unwrap_impl(acceptDownloads), args: unwrap_impl(args), bypassCSP: unwrap_impl(bypassCSP), channel: unwrap_impl(channel), chromiumSandbox: unwrap_impl(chromiumSandbox), colorScheme: unwrap_impl(colorScheme), deviceScaleFactor: unwrap_impl(deviceScaleFactor), devtools: unwrap_impl(devtools), downloadsPath: unwrap_impl(downloadsPath), env: unwrap_impl(env), executablePath: unwrap_impl(executablePath), extraHTTPHeaders: unwrap_impl(extraHTTPHeaders), geolocation: unwrap_impl(geolocation), handleSIGHUP: unwrap_impl(handleSIGHUP), handleSIGINT: unwrap_impl(handleSIGINT), handleSIGTERM: unwrap_impl(handleSIGTERM), hasTouch: unwrap_impl(hasTouch), headless: unwrap_impl(headless), httpCredentials: unwrap_impl(httpCredentials), ignoreDefaultArgs: unwrap_impl(ignoreDefaultArgs), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), isMobile: unwrap_impl(isMobile), javaScriptEnabled: unwrap_impl(javaScriptEnabled), locale: unwrap_impl(locale), noViewport: unwrap_impl(noViewport), offline: unwrap_impl(offline), permissions: unwrap_impl(permissions), proxy: unwrap_impl(proxy), record_har_omit_content: unwrap_impl(record_har_omit_content), record_har_path: unwrap_impl(record_har_path), record_video_dir: unwrap_impl(record_video_dir), record_video_size: unwrap_impl(record_video_size), reducedMotion: unwrap_impl(reducedMotion), screen: unwrap_impl(screen), slowMo: unwrap_impl(slowMo), timeout: unwrap_impl(timeout), timezoneId: unwrap_impl(timezoneId), tracesDir: unwrap_impl(tracesDir), userAgent: unwrap_impl(userAgent), viewport: unwrap_impl(viewport), &wrap_block_call(block)))
138
139
  end
139
140
 
140
141
  # Returns browser name. For example: `'chromium'`, `'webkit'` or `'firefox'`.
@@ -144,20 +145,20 @@ module Playwright
144
145
 
145
146
  # -- inherited from EventEmitter --
146
147
  # @nodoc
147
- def once(event, callback)
148
- event_emitter_proxy.once(event, callback)
148
+ def off(event, callback)
149
+ event_emitter_proxy.off(event, callback)
149
150
  end
150
151
 
151
152
  # -- inherited from EventEmitter --
152
153
  # @nodoc
153
- def on(event, callback)
154
- event_emitter_proxy.on(event, callback)
154
+ def once(event, callback)
155
+ event_emitter_proxy.once(event, callback)
155
156
  end
156
157
 
157
158
  # -- inherited from EventEmitter --
158
159
  # @nodoc
159
- def off(event, callback)
160
- event_emitter_proxy.off(event, callback)
160
+ def on(event, callback)
161
+ event_emitter_proxy.on(event, callback)
161
162
  end
162
163
 
163
164
  private def event_emitter_proxy
@@ -13,12 +13,12 @@ module Playwright
13
13
  #
14
14
  # ```python sync
15
15
  # client = page.context().new_cdp_session(page)
16
- # client.send("animation.enable")
17
- # client.on("animation.animation_created", lambda: print("animation created!"))
18
- # response = client.send("animation.get_playback_rate")
19
- # print("playback rate is " + response["playback_rate"])
20
- # client.send("animation.set_playback_rate", {
21
- # playback_rate: response["playback_rate"] / 2
16
+ # client.send("Animation.enable")
17
+ # client.on("Animation.animationCreated", lambda: print("animation created!"))
18
+ # response = client.send("Animation.getPlaybackRate")
19
+ # print("playback rate is " + str(response["playbackRate"]))
20
+ # client.send("Animation.setPlaybackRate", {
21
+ # playbackRate: response["playbackRate"] / 2
22
22
  # })
23
23
  # ```
24
24
  class CDPSession < PlaywrightApi
@@ -26,11 +26,33 @@ module Playwright
26
26
  # Detaches the CDPSession from the target. Once detached, the CDPSession object won't emit any events and can't be used to
27
27
  # send messages.
28
28
  def detach
29
- raise NotImplementedError.new('detach is not implemented yet.')
29
+ wrap_impl(@impl.detach)
30
30
  end
31
31
 
32
32
  def send_message(method, params: nil)
33
- raise NotImplementedError.new('send_message is not implemented yet.')
33
+ wrap_impl(@impl.send_message(unwrap_impl(method), params: unwrap_impl(params)))
34
+ end
35
+
36
+ # -- inherited from EventEmitter --
37
+ # @nodoc
38
+ def off(event, callback)
39
+ event_emitter_proxy.off(event, callback)
40
+ end
41
+
42
+ # -- inherited from EventEmitter --
43
+ # @nodoc
44
+ def once(event, callback)
45
+ event_emitter_proxy.once(event, callback)
46
+ end
47
+
48
+ # -- inherited from EventEmitter --
49
+ # @nodoc
50
+ def on(event, callback)
51
+ event_emitter_proxy.on(event, callback)
52
+ end
53
+
54
+ private def event_emitter_proxy
55
+ @event_emitter_proxy ||= EventEmitterProxy.new(self, @impl)
34
56
  end
35
57
  end
36
58
  end
@@ -25,20 +25,20 @@ module Playwright
25
25
 
26
26
  # -- inherited from EventEmitter --
27
27
  # @nodoc
28
- def once(event, callback)
29
- event_emitter_proxy.once(event, callback)
28
+ def off(event, callback)
29
+ event_emitter_proxy.off(event, callback)
30
30
  end
31
31
 
32
32
  # -- inherited from EventEmitter --
33
33
  # @nodoc
34
- def on(event, callback)
35
- event_emitter_proxy.on(event, callback)
34
+ def once(event, callback)
35
+ event_emitter_proxy.once(event, callback)
36
36
  end
37
37
 
38
38
  # -- inherited from EventEmitter --
39
39
  # @nodoc
40
- def off(event, callback)
41
- event_emitter_proxy.off(event, callback)
40
+ def on(event, callback)
41
+ event_emitter_proxy.on(event, callback)
42
42
  end
43
43
 
44
44
  private def event_emitter_proxy
@@ -60,20 +60,20 @@ module Playwright
60
60
 
61
61
  # -- inherited from EventEmitter --
62
62
  # @nodoc
63
- def once(event, callback)
64
- event_emitter_proxy.once(event, callback)
63
+ def off(event, callback)
64
+ event_emitter_proxy.off(event, callback)
65
65
  end
66
66
 
67
67
  # -- inherited from EventEmitter --
68
68
  # @nodoc
69
- def on(event, callback)
70
- event_emitter_proxy.on(event, callback)
69
+ def once(event, callback)
70
+ event_emitter_proxy.once(event, callback)
71
71
  end
72
72
 
73
73
  # -- inherited from EventEmitter --
74
74
  # @nodoc
75
- def off(event, callback)
76
- event_emitter_proxy.off(event, callback)
75
+ def on(event, callback)
76
+ event_emitter_proxy.on(event, callback)
77
77
  end
78
78
 
79
79
  private def event_emitter_proxy
@@ -210,8 +210,8 @@ module Playwright
210
210
  # instead.
211
211
  #
212
212
  # To send fine-grained keyboard events, use [`method: ElementHandle.type`].
213
- def fill(value, noWaitAfter: nil, timeout: nil)
214
- wrap_impl(@impl.fill(unwrap_impl(value), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
213
+ def fill(value, force: nil, noWaitAfter: nil, timeout: nil)
214
+ wrap_impl(@impl.fill(unwrap_impl(value), force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
215
215
  end
216
216
 
217
217
  # Calls [focus](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus) on the element.
@@ -254,6 +254,11 @@ module Playwright
254
254
  wrap_impl(@impl.inner_text)
255
255
  end
256
256
 
257
+ # Returns `input.value` for `<input>` or `<textarea>` element. Throws for non-input elements.
258
+ def input_value(timeout: nil)
259
+ wrap_impl(@impl.input_value(timeout: unwrap_impl(timeout)))
260
+ end
261
+
257
262
  # Returns whether the element is checked. Throws if the element is not a checkbox or radio input.
258
263
  def checked?
259
264
  wrap_impl(@impl.checked?)
@@ -381,15 +386,16 @@ module Playwright
381
386
  index: nil,
382
387
  value: nil,
383
388
  label: nil,
389
+ force: nil,
384
390
  noWaitAfter: nil,
385
391
  timeout: nil)
386
- wrap_impl(@impl.select_option(element: unwrap_impl(element), index: unwrap_impl(index), value: unwrap_impl(value), label: unwrap_impl(label), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
392
+ wrap_impl(@impl.select_option(element: unwrap_impl(element), index: unwrap_impl(index), value: unwrap_impl(value), label: unwrap_impl(label), force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
387
393
  end
388
394
 
389
395
  # This method waits for [actionability](./actionability.md) checks, then focuses the element and selects all its text
390
396
  # content.
391
- def select_text(timeout: nil)
392
- wrap_impl(@impl.select_text(timeout: unwrap_impl(timeout)))
397
+ def select_text(force: nil, timeout: nil)
398
+ wrap_impl(@impl.select_text(force: unwrap_impl(force), timeout: unwrap_impl(timeout)))
393
399
  end
394
400
 
395
401
  # This method expects `elementHandle` to point to an
@@ -511,20 +517,20 @@ module Playwright
511
517
 
512
518
  # -- inherited from EventEmitter --
513
519
  # @nodoc
514
- def once(event, callback)
515
- event_emitter_proxy.once(event, callback)
520
+ def off(event, callback)
521
+ event_emitter_proxy.off(event, callback)
516
522
  end
517
523
 
518
524
  # -- inherited from EventEmitter --
519
525
  # @nodoc
520
- def on(event, callback)
521
- event_emitter_proxy.on(event, callback)
526
+ def once(event, callback)
527
+ event_emitter_proxy.once(event, callback)
522
528
  end
523
529
 
524
530
  # -- inherited from EventEmitter --
525
531
  # @nodoc
526
- def off(event, callback)
527
- event_emitter_proxy.off(event, callback)
532
+ def on(event, callback)
533
+ event_emitter_proxy.on(event, callback)
528
534
  end
529
535
 
530
536
  private def event_emitter_proxy
@@ -271,8 +271,13 @@ module Playwright
271
271
  # instead.
272
272
  #
273
273
  # To send fine-grained keyboard events, use [`method: Frame.type`].
274
- def fill(selector, value, noWaitAfter: nil, timeout: nil)
275
- wrap_impl(@impl.fill(unwrap_impl(selector), unwrap_impl(value), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
274
+ def fill(
275
+ selector,
276
+ value,
277
+ force: nil,
278
+ noWaitAfter: nil,
279
+ timeout: nil)
280
+ wrap_impl(@impl.fill(unwrap_impl(selector), unwrap_impl(value), force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
276
281
  end
277
282
 
278
283
  # This method fetches an element with `selector` and focuses it. If there's no element matching `selector`, the method
@@ -354,6 +359,11 @@ module Playwright
354
359
  wrap_impl(@impl.inner_text(unwrap_impl(selector), timeout: unwrap_impl(timeout)))
355
360
  end
356
361
 
362
+ # Returns `input.value` for the selected `<input>` or `<textarea>` element. Throws for non-input elements.
363
+ def input_value(selector, timeout: nil)
364
+ wrap_impl(@impl.input_value(unwrap_impl(selector), timeout: unwrap_impl(timeout)))
365
+ end
366
+
357
367
  # Returns whether the element is checked. Throws if the element is not a checkbox or radio input.
358
368
  def checked?(selector, timeout: nil)
359
369
  wrap_impl(@impl.checked?(unwrap_impl(selector), timeout: unwrap_impl(timeout)))
@@ -476,9 +486,10 @@ module Playwright
476
486
  index: nil,
477
487
  value: nil,
478
488
  label: nil,
489
+ force: nil,
479
490
  noWaitAfter: nil,
480
491
  timeout: nil)
481
- wrap_impl(@impl.select_option(unwrap_impl(selector), element: unwrap_impl(element), index: unwrap_impl(index), value: unwrap_impl(value), label: unwrap_impl(label), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
492
+ wrap_impl(@impl.select_option(unwrap_impl(selector), element: unwrap_impl(element), index: unwrap_impl(index), value: unwrap_impl(value), label: unwrap_impl(label), force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
482
493
  end
483
494
 
484
495
  def set_content(html, timeout: nil, waitUntil: nil)
@@ -689,20 +700,20 @@ module Playwright
689
700
 
690
701
  # -- inherited from EventEmitter --
691
702
  # @nodoc
692
- def once(event, callback)
693
- event_emitter_proxy.once(event, callback)
703
+ def off(event, callback)
704
+ event_emitter_proxy.off(event, callback)
694
705
  end
695
706
 
696
707
  # -- inherited from EventEmitter --
697
708
  # @nodoc
698
- def on(event, callback)
699
- event_emitter_proxy.on(event, callback)
709
+ def once(event, callback)
710
+ event_emitter_proxy.once(event, callback)
700
711
  end
701
712
 
702
713
  # -- inherited from EventEmitter --
703
714
  # @nodoc
704
- def off(event, callback)
705
- event_emitter_proxy.off(event, callback)
715
+ def on(event, callback)
716
+ event_emitter_proxy.on(event, callback)
706
717
  end
707
718
 
708
719
  private def event_emitter_proxy
@@ -90,20 +90,20 @@ module Playwright
90
90
 
91
91
  # -- inherited from EventEmitter --
92
92
  # @nodoc
93
- def once(event, callback)
94
- event_emitter_proxy.once(event, callback)
93
+ def off(event, callback)
94
+ event_emitter_proxy.off(event, callback)
95
95
  end
96
96
 
97
97
  # -- inherited from EventEmitter --
98
98
  # @nodoc
99
- def on(event, callback)
100
- event_emitter_proxy.on(event, callback)
99
+ def once(event, callback)
100
+ event_emitter_proxy.once(event, callback)
101
101
  end
102
102
 
103
103
  # -- inherited from EventEmitter --
104
104
  # @nodoc
105
- def off(event, callback)
106
- event_emitter_proxy.off(event, callback)
105
+ def on(event, callback)
106
+ event_emitter_proxy.on(event, callback)
107
107
  end
108
108
 
109
109
  private def event_emitter_proxy
@@ -481,8 +481,13 @@ module Playwright
481
481
  # To send fine-grained keyboard events, use [`method: Page.type`].
482
482
  #
483
483
  # Shortcut for main frame's [`method: Frame.fill`].
484
- def fill(selector, value, noWaitAfter: nil, timeout: nil)
485
- wrap_impl(@impl.fill(unwrap_impl(selector), unwrap_impl(value), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
484
+ def fill(
485
+ selector,
486
+ value,
487
+ force: nil,
488
+ noWaitAfter: nil,
489
+ timeout: nil)
490
+ wrap_impl(@impl.fill(unwrap_impl(selector), unwrap_impl(value), force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
486
491
  end
487
492
 
488
493
  # This method fetches an element with `selector` and focuses it. If there's no element matching `selector`, the method
@@ -588,6 +593,11 @@ module Playwright
588
593
  wrap_impl(@impl.inner_text(unwrap_impl(selector), timeout: unwrap_impl(timeout)))
589
594
  end
590
595
 
596
+ # Returns `input.value` for the selected `<input>` or `<textarea>` element. Throws for non-input elements.
597
+ def input_value(selector, timeout: nil)
598
+ wrap_impl(@impl.input_value(unwrap_impl(selector), timeout: unwrap_impl(timeout)))
599
+ end
600
+
591
601
  # Returns whether the element is checked. Throws if the element is not a checkbox or radio input.
592
602
  def checked?(selector, timeout: nil)
593
603
  wrap_impl(@impl.checked?(unwrap_impl(selector), timeout: unwrap_impl(timeout)))
@@ -855,9 +865,10 @@ module Playwright
855
865
  index: nil,
856
866
  value: nil,
857
867
  label: nil,
868
+ force: nil,
858
869
  noWaitAfter: nil,
859
870
  timeout: nil)
860
- wrap_impl(@impl.select_option(unwrap_impl(selector), element: unwrap_impl(element), index: unwrap_impl(index), value: unwrap_impl(value), label: unwrap_impl(label), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
871
+ wrap_impl(@impl.select_option(unwrap_impl(selector), element: unwrap_impl(element), index: unwrap_impl(index), value: unwrap_impl(value), label: unwrap_impl(label), force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
861
872
  end
862
873
 
863
874
  def set_content(html, timeout: nil, waitUntil: nil)
@@ -1158,8 +1169,8 @@ module Playwright
1158
1169
  # Performs action and waits for a `Request` to finish loading. If predicate is provided, it passes `Request` value into
1159
1170
  # the `predicate` function and waits for `predicate(request)` to return a truthy value. Will throw an error if the page is
1160
1171
  # closed before the [`event: Page.requestFinished`] event is fired.
1161
- def expect_request_finished(predicate: nil, timeout: nil)
1162
- raise NotImplementedError.new('expect_request_finished is not implemented yet.')
1172
+ def expect_request_finished(predicate: nil, timeout: nil, &block)
1173
+ wrap_impl(@impl.expect_request_finished(predicate: unwrap_impl(predicate), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
1163
1174
  end
1164
1175
 
1165
1176
  # Returns the matched response. See [waiting for event](./events.md#waiting-for-event) for more details about events.
@@ -1239,8 +1250,8 @@ module Playwright
1239
1250
  # Performs action and waits for a new `WebSocket`. If predicate is provided, it passes `WebSocket` value into the
1240
1251
  # `predicate` function and waits for `predicate(webSocket)` to return a truthy value. Will throw an error if the page is
1241
1252
  # closed before the WebSocket event is fired.
1242
- def expect_websocket(predicate: nil, timeout: nil)
1243
- raise NotImplementedError.new('expect_websocket is not implemented yet.')
1253
+ def expect_websocket(predicate: nil, timeout: nil, &block)
1254
+ wrap_impl(@impl.expect_websocket(predicate: unwrap_impl(predicate), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
1244
1255
  end
1245
1256
 
1246
1257
  # Performs action and waits for a new `Worker`. If predicate is provided, it passes `Worker` value into the `predicate`
@@ -1277,6 +1288,11 @@ module Playwright
1277
1288
  wrap_impl(@impl.start_js_coverage(resetOnNavigation: unwrap_impl(resetOnNavigation), reportAnonymousScripts: unwrap_impl(reportAnonymousScripts)))
1278
1289
  end
1279
1290
 
1291
+ # @nodoc
1292
+ def stop_js_coverage
1293
+ wrap_impl(@impl.stop_js_coverage)
1294
+ end
1295
+
1280
1296
  # @nodoc
1281
1297
  def start_css_coverage(resetOnNavigation: nil, reportAnonymousScripts: nil)
1282
1298
  wrap_impl(@impl.start_css_coverage(resetOnNavigation: unwrap_impl(resetOnNavigation), reportAnonymousScripts: unwrap_impl(reportAnonymousScripts)))
@@ -1288,13 +1304,14 @@ module Playwright
1288
1304
  end
1289
1305
 
1290
1306
  # @nodoc
1291
- def stop_js_coverage
1292
- wrap_impl(@impl.stop_js_coverage)
1307
+ def guid
1308
+ wrap_impl(@impl.guid)
1293
1309
  end
1294
1310
 
1311
+ # -- inherited from EventEmitter --
1295
1312
  # @nodoc
1296
- def guid
1297
- wrap_impl(@impl.guid)
1313
+ def off(event, callback)
1314
+ event_emitter_proxy.off(event, callback)
1298
1315
  end
1299
1316
 
1300
1317
  # -- inherited from EventEmitter --
@@ -1309,12 +1326,6 @@ module Playwright
1309
1326
  event_emitter_proxy.on(event, callback)
1310
1327
  end
1311
1328
 
1312
- # -- inherited from EventEmitter --
1313
- # @nodoc
1314
- def off(event, callback)
1315
- event_emitter_proxy.off(event, callback)
1316
- end
1317
-
1318
1329
  private def event_emitter_proxy
1319
1330
  @event_emitter_proxy ||= EventEmitterProxy.new(self, @impl)
1320
1331
  end