playwright-ruby-client 0.6.6 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +26 -0
  3. data/documentation/docs/api/browser.md +18 -2
  4. data/documentation/docs/api/browser_context.md +10 -0
  5. data/documentation/docs/api/browser_type.md +1 -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/experimental/android_device.md +1 -0
  9. data/documentation/docs/api/frame.md +29 -1
  10. data/documentation/docs/api/keyboard.md +11 -20
  11. data/documentation/docs/api/page.md +48 -2
  12. data/documentation/docs/api/response.md +16 -0
  13. data/documentation/docs/api/web_socket.md +37 -0
  14. data/documentation/docs/article/guides/launch_browser.md +2 -0
  15. data/documentation/docs/article/guides/playwright_on_alpine_linux.md +91 -0
  16. data/documentation/docs/article/guides/rails_integration.md +1 -1
  17. data/documentation/docs/article/guides/semi_automation.md +71 -0
  18. data/documentation/docs/include/api_coverage.md +18 -11
  19. data/lib/playwright.rb +36 -3
  20. data/lib/playwright/channel_owners/artifact.rb +4 -0
  21. data/lib/playwright/channel_owners/browser.rb +5 -0
  22. data/lib/playwright/channel_owners/browser_context.rb +12 -3
  23. data/lib/playwright/channel_owners/cdp_session.rb +19 -0
  24. data/lib/playwright/channel_owners/element_handle.rb +11 -4
  25. data/lib/playwright/channel_owners/frame.rb +36 -4
  26. data/lib/playwright/channel_owners/page.rb +45 -16
  27. data/lib/playwright/channel_owners/response.rb +9 -1
  28. data/lib/playwright/channel_owners/web_socket.rb +83 -0
  29. data/lib/playwright/connection.rb +2 -4
  30. data/lib/playwright/download.rb +4 -0
  31. data/lib/playwright/route_handler_entry.rb +3 -2
  32. data/lib/playwright/transport.rb +0 -1
  33. data/lib/playwright/url_matcher.rb +12 -2
  34. data/lib/playwright/version.rb +2 -2
  35. data/lib/playwright/web_socket_client.rb +164 -0
  36. data/lib/playwright/web_socket_transport.rb +104 -0
  37. data/lib/playwright_api/android.rb +6 -6
  38. data/lib/playwright_api/android_device.rb +10 -9
  39. data/lib/playwright_api/browser.rb +17 -11
  40. data/lib/playwright_api/browser_context.rb +7 -7
  41. data/lib/playwright_api/browser_type.rb +8 -7
  42. data/lib/playwright_api/cdp_session.rb +30 -8
  43. data/lib/playwright_api/console_message.rb +6 -6
  44. data/lib/playwright_api/dialog.rb +6 -6
  45. data/lib/playwright_api/element_handle.rb +17 -11
  46. data/lib/playwright_api/frame.rb +30 -9
  47. data/lib/playwright_api/js_handle.rb +6 -6
  48. data/lib/playwright_api/page.rb +39 -18
  49. data/lib/playwright_api/playwright.rb +6 -6
  50. data/lib/playwright_api/request.rb +6 -6
  51. data/lib/playwright_api/response.rb +15 -10
  52. data/lib/playwright_api/route.rb +6 -6
  53. data/lib/playwright_api/selectors.rb +6 -6
  54. data/lib/playwright_api/web_socket.rb +12 -12
  55. data/lib/playwright_api/worker.rb +6 -6
  56. data/playwright.gemspec +2 -1
  57. metadata +37 -18
@@ -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
@@ -96,6 +96,7 @@ module Playwright
96
96
  userDataDir,
97
97
  acceptDownloads: nil,
98
98
  args: nil,
99
+ baseURL: nil,
99
100
  bypassCSP: nil,
100
101
  channel: nil,
101
102
  chromiumSandbox: nil,
@@ -135,7 +136,7 @@ module Playwright
135
136
  userAgent: nil,
136
137
  viewport: nil,
137
138
  &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)))
139
+ wrap_impl(@impl.launch_persistent_context(unwrap_impl(userDataDir), acceptDownloads: unwrap_impl(acceptDownloads), args: unwrap_impl(args), baseURL: unwrap_impl(baseURL), 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)))
139
140
  end
140
141
 
141
142
  # Returns browser name. For example: `'chromium'`, `'webkit'` or `'firefox'`.
@@ -145,20 +146,20 @@ module Playwright
145
146
 
146
147
  # -- inherited from EventEmitter --
147
148
  # @nodoc
148
- def once(event, callback)
149
- event_emitter_proxy.once(event, callback)
149
+ def off(event, callback)
150
+ event_emitter_proxy.off(event, callback)
150
151
  end
151
152
 
152
153
  # -- inherited from EventEmitter --
153
154
  # @nodoc
154
- def on(event, callback)
155
- event_emitter_proxy.on(event, callback)
155
+ def once(event, callback)
156
+ event_emitter_proxy.once(event, callback)
156
157
  end
157
158
 
158
159
  # -- inherited from EventEmitter --
159
160
  # @nodoc
160
- def off(event, callback)
161
- event_emitter_proxy.off(event, callback)
161
+ def on(event, callback)
162
+ event_emitter_proxy.on(event, callback)
162
163
  end
163
164
 
164
165
  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
@@ -160,6 +160,16 @@ module Playwright
160
160
  wrap_impl(@impl.dispatch_event(unwrap_impl(selector), unwrap_impl(type), eventInit: unwrap_impl(eventInit), timeout: unwrap_impl(timeout)))
161
161
  end
162
162
 
163
+ def drag_and_drop(
164
+ source,
165
+ target,
166
+ force: nil,
167
+ noWaitAfter: nil,
168
+ timeout: nil,
169
+ trial: nil)
170
+ wrap_impl(@impl.drag_and_drop(unwrap_impl(source), unwrap_impl(target), force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout), trial: unwrap_impl(trial)))
171
+ end
172
+
163
173
  # Returns the return value of `expression`.
164
174
  #
165
175
  # The method finds an element matching the specified selector within the frame and passes it as a first argument to
@@ -271,8 +281,13 @@ module Playwright
271
281
  # instead.
272
282
  #
273
283
  # 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)))
284
+ def fill(
285
+ selector,
286
+ value,
287
+ force: nil,
288
+ noWaitAfter: nil,
289
+ timeout: nil)
290
+ wrap_impl(@impl.fill(unwrap_impl(selector), unwrap_impl(value), force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
276
291
  end
277
292
 
278
293
  # This method fetches an element with `selector` and focuses it. If there's no element matching `selector`, the method
@@ -354,6 +369,11 @@ module Playwright
354
369
  wrap_impl(@impl.inner_text(unwrap_impl(selector), timeout: unwrap_impl(timeout)))
355
370
  end
356
371
 
372
+ # Returns `input.value` for the selected `<input>` or `<textarea>` element. Throws for non-input elements.
373
+ def input_value(selector, timeout: nil)
374
+ wrap_impl(@impl.input_value(unwrap_impl(selector), timeout: unwrap_impl(timeout)))
375
+ end
376
+
357
377
  # Returns whether the element is checked. Throws if the element is not a checkbox or radio input.
358
378
  def checked?(selector, timeout: nil)
359
379
  wrap_impl(@impl.checked?(unwrap_impl(selector), timeout: unwrap_impl(timeout)))
@@ -476,9 +496,10 @@ module Playwright
476
496
  index: nil,
477
497
  value: nil,
478
498
  label: nil,
499
+ force: nil,
479
500
  noWaitAfter: nil,
480
501
  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)))
502
+ 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
503
  end
483
504
 
484
505
  def set_content(html, timeout: nil, waitUntil: nil)
@@ -689,20 +710,20 @@ module Playwright
689
710
 
690
711
  # -- inherited from EventEmitter --
691
712
  # @nodoc
692
- def once(event, callback)
693
- event_emitter_proxy.once(event, callback)
713
+ def off(event, callback)
714
+ event_emitter_proxy.off(event, callback)
694
715
  end
695
716
 
696
717
  # -- inherited from EventEmitter --
697
718
  # @nodoc
698
- def on(event, callback)
699
- event_emitter_proxy.on(event, callback)
719
+ def once(event, callback)
720
+ event_emitter_proxy.once(event, callback)
700
721
  end
701
722
 
702
723
  # -- inherited from EventEmitter --
703
724
  # @nodoc
704
- def off(event, callback)
705
- event_emitter_proxy.off(event, callback)
725
+ def on(event, callback)
726
+ event_emitter_proxy.on(event, callback)
706
727
  end
707
728
 
708
729
  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
@@ -233,6 +233,16 @@ module Playwright
233
233
  wrap_impl(@impl.dispatch_event(unwrap_impl(selector), unwrap_impl(type), eventInit: unwrap_impl(eventInit), timeout: unwrap_impl(timeout)))
234
234
  end
235
235
 
236
+ def drag_and_drop(
237
+ source,
238
+ target,
239
+ force: nil,
240
+ noWaitAfter: nil,
241
+ timeout: nil,
242
+ trial: nil)
243
+ wrap_impl(@impl.drag_and_drop(unwrap_impl(source), unwrap_impl(target), force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout), trial: unwrap_impl(trial)))
244
+ end
245
+
236
246
  # This method changes the `CSS media type` through the `media` argument, and/or the `'prefers-colors-scheme'` media
237
247
  # feature, using the `colorScheme` argument.
238
248
  #
@@ -481,8 +491,13 @@ module Playwright
481
491
  # To send fine-grained keyboard events, use [`method: Page.type`].
482
492
  #
483
493
  # 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)))
494
+ def fill(
495
+ selector,
496
+ value,
497
+ force: nil,
498
+ noWaitAfter: nil,
499
+ timeout: nil)
500
+ wrap_impl(@impl.fill(unwrap_impl(selector), unwrap_impl(value), force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
486
501
  end
487
502
 
488
503
  # This method fetches an element with `selector` and focuses it. If there's no element matching `selector`, the method
@@ -588,6 +603,11 @@ module Playwright
588
603
  wrap_impl(@impl.inner_text(unwrap_impl(selector), timeout: unwrap_impl(timeout)))
589
604
  end
590
605
 
606
+ # Returns `input.value` for the selected `<input>` or `<textarea>` element. Throws for non-input elements.
607
+ def input_value(selector, timeout: nil)
608
+ wrap_impl(@impl.input_value(unwrap_impl(selector), timeout: unwrap_impl(timeout)))
609
+ end
610
+
591
611
  # Returns whether the element is checked. Throws if the element is not a checkbox or radio input.
592
612
  def checked?(selector, timeout: nil)
593
613
  wrap_impl(@impl.checked?(unwrap_impl(selector), timeout: unwrap_impl(timeout)))
@@ -855,9 +875,10 @@ module Playwright
855
875
  index: nil,
856
876
  value: nil,
857
877
  label: nil,
878
+ force: nil,
858
879
  noWaitAfter: nil,
859
880
  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)))
881
+ 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
882
  end
862
883
 
863
884
  def set_content(html, timeout: nil, waitUntil: nil)
@@ -1138,7 +1159,7 @@ module Playwright
1138
1159
  wrap_impl(@impl.expect_popup(predicate: unwrap_impl(predicate), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
1139
1160
  end
1140
1161
 
1141
- # Waits for the matching request and returns it. See [waiting for event](./events.md#waiting-for-event) for more details
1162
+ # Waits for the matching request and returns it. See [waiting for event](./events.md#waiting-for-event) for more details
1142
1163
  # about events.
1143
1164
  #
1144
1165
  # ```python sync
@@ -1158,8 +1179,8 @@ module Playwright
1158
1179
  # Performs action and waits for a `Request` to finish loading. If predicate is provided, it passes `Request` value into
1159
1180
  # the `predicate` function and waits for `predicate(request)` to return a truthy value. Will throw an error if the page is
1160
1181
  # 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.')
1182
+ def expect_request_finished(predicate: nil, timeout: nil, &block)
1183
+ wrap_impl(@impl.expect_request_finished(predicate: unwrap_impl(predicate), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
1163
1184
  end
1164
1185
 
1165
1186
  # Returns the matched response. See [waiting for event](./events.md#waiting-for-event) for more details about events.
@@ -1239,8 +1260,8 @@ module Playwright
1239
1260
  # Performs action and waits for a new `WebSocket`. If predicate is provided, it passes `WebSocket` value into the
1240
1261
  # `predicate` function and waits for `predicate(webSocket)` to return a truthy value. Will throw an error if the page is
1241
1262
  # 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.')
1263
+ def expect_websocket(predicate: nil, timeout: nil, &block)
1264
+ wrap_impl(@impl.expect_websocket(predicate: unwrap_impl(predicate), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
1244
1265
  end
1245
1266
 
1246
1267
  # Performs action and waits for a new `Worker`. If predicate is provided, it passes `Worker` value into the `predicate`
@@ -1272,6 +1293,11 @@ module Playwright
1272
1293
  wrap_impl(@impl.owned_context=(unwrap_impl(req)))
1273
1294
  end
1274
1295
 
1296
+ # @nodoc
1297
+ def start_js_coverage(resetOnNavigation: nil, reportAnonymousScripts: nil)
1298
+ wrap_impl(@impl.start_js_coverage(resetOnNavigation: unwrap_impl(resetOnNavigation), reportAnonymousScripts: unwrap_impl(reportAnonymousScripts)))
1299
+ end
1300
+
1275
1301
  # @nodoc
1276
1302
  def stop_js_coverage
1277
1303
  wrap_impl(@impl.stop_js_coverage)
@@ -1288,13 +1314,14 @@ module Playwright
1288
1314
  end
1289
1315
 
1290
1316
  # @nodoc
1291
- def start_js_coverage(resetOnNavigation: nil, reportAnonymousScripts: nil)
1292
- wrap_impl(@impl.start_js_coverage(resetOnNavigation: unwrap_impl(resetOnNavigation), reportAnonymousScripts: unwrap_impl(reportAnonymousScripts)))
1317
+ def guid
1318
+ wrap_impl(@impl.guid)
1293
1319
  end
1294
1320
 
1321
+ # -- inherited from EventEmitter --
1295
1322
  # @nodoc
1296
- def guid
1297
- wrap_impl(@impl.guid)
1323
+ def off(event, callback)
1324
+ event_emitter_proxy.off(event, callback)
1298
1325
  end
1299
1326
 
1300
1327
  # -- inherited from EventEmitter --
@@ -1309,12 +1336,6 @@ module Playwright
1309
1336
  event_emitter_proxy.on(event, callback)
1310
1337
  end
1311
1338
 
1312
- # -- inherited from EventEmitter --
1313
- # @nodoc
1314
- def off(event, callback)
1315
- event_emitter_proxy.off(event, callback)
1316
- end
1317
-
1318
1339
  private def event_emitter_proxy
1319
1340
  @event_emitter_proxy ||= EventEmitterProxy.new(self, @impl)
1320
1341
  end