playwright-ruby-client 0.0.8 → 0.0.9

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.
@@ -3,17 +3,25 @@ module Playwright
3
3
  #
4
4
  #
5
5
  # ```js
6
- # page.on('filechooser', async (fileChooser) => {
7
- # await fileChooser.setFiles('/tmp/myfile.pdf');
8
- # });
6
+ # const [fileChooser] = await Promise.all([
7
+ # page.waitForEvent('filechooser'),
8
+ # page.click('upload')
9
+ # ]);
10
+ # await fileChooser.setFiles('myfile.pdf');
9
11
  # ```
10
12
  #
11
13
  # ```python async
12
- # page.on("filechooser", lambda file_chooser: file_chooser.set_files("/tmp/myfile.pdf"))
14
+ # async with page.expect_file_chooser() as fc_info:
15
+ # await page.click("upload")
16
+ # file_chooser = await fc_info.value
17
+ # await file_chooser.set_files("myfile.pdf")
13
18
  # ```
14
19
  #
15
20
  # ```python sync
16
- # page.on("filechooser", lambda file_chooser: file_chooser.set_files("/tmp/myfile.pdf"))
21
+ # with page.expect_file_chooser() as fc_info:
22
+ # page.click("upload")
23
+ # file_chooser = fc_info.value
24
+ # file_chooser.set_files("myfile.pdf")
17
25
  # ```
18
26
  class FileChooser < PlaywrightApi
19
27
 
@@ -75,82 +75,6 @@ module Playwright
75
75
  # ```
76
76
  class Frame < PlaywrightApi
77
77
 
78
- # Returns the ElementHandle pointing to the frame element.
79
- #
80
- # The method finds an element matching the specified selector within the frame. See
81
- # [Working with selectors](./selectors.md#working-with-selectors) for more details. If no elements match the selector,
82
- # returns `null`.
83
- def query_selector(selector)
84
- wrap_impl(@impl.query_selector(unwrap_impl(selector)))
85
- end
86
-
87
- # Returns the ElementHandles pointing to the frame elements.
88
- #
89
- # The method finds all elements matching the specified selector within the frame. See
90
- # [Working with selectors](./selectors.md#working-with-selectors) for more details. If no elements match the selector,
91
- # returns empty array.
92
- def query_selector_all(selector)
93
- wrap_impl(@impl.query_selector_all(unwrap_impl(selector)))
94
- end
95
-
96
- # Returns the return value of `pageFunction`
97
- #
98
- # The method finds an element matching the specified selector within the frame and passes it as a first argument to
99
- # `pageFunction`. See [Working with selectors](./selectors.md#working-with-selectors) for more details. If no elements
100
- # match the selector, the method throws an error.
101
- #
102
- # If `pageFunction` returns a [Promise], then `frame.$eval` would wait for the promise to resolve and return its value.
103
- #
104
- # Examples:
105
- #
106
- #
107
- # ```js
108
- # const searchValue = await frame.$eval('#search', el => el.value);
109
- # const preloadHref = await frame.$eval('link[rel=preload]', el => el.href);
110
- # const html = await frame.$eval('.main-container', (e, suffix) => e.outerHTML + suffix, 'hello');
111
- # ```
112
- #
113
- # ```python async
114
- # search_value = await frame.eval_on_selector("#search", "el => el.value")
115
- # preload_href = await frame.eval_on_selector("link[rel=preload]", "el => el.href")
116
- # html = await frame.eval_on_selector(".main-container", "(e, suffix) => e.outerHTML + suffix", "hello")
117
- # ```
118
- #
119
- # ```python sync
120
- # search_value = frame.eval_on_selector("#search", "el => el.value")
121
- # preload_href = frame.eval_on_selector("link[rel=preload]", "el => el.href")
122
- # html = frame.eval_on_selector(".main-container", "(e, suffix) => e.outerHTML + suffix", "hello")
123
- # ```
124
- def eval_on_selector(selector, pageFunction, arg: nil)
125
- wrap_impl(@impl.eval_on_selector(unwrap_impl(selector), unwrap_impl(pageFunction), arg: unwrap_impl(arg)))
126
- end
127
-
128
- # Returns the return value of `pageFunction`
129
- #
130
- # The method finds all elements matching the specified selector within the frame and passes an array of matched elements
131
- # as a first argument to `pageFunction`. See [Working with selectors](./selectors.md#working-with-selectors) for more
132
- # details.
133
- #
134
- # If `pageFunction` returns a [Promise], then `frame.$$eval` would wait for the promise to resolve and return its value.
135
- #
136
- # Examples:
137
- #
138
- #
139
- # ```js
140
- # const divsCounts = await frame.$$eval('div', (divs, min) => divs.length >= min, 10);
141
- # ```
142
- #
143
- # ```python async
144
- # divs_counts = await frame.eval_on_selector_all("div", "(divs, min) => divs.length >= min", 10)
145
- # ```
146
- #
147
- # ```python sync
148
- # divs_counts = frame.eval_on_selector_all("div", "(divs, min) => divs.length >= min", 10)
149
- # ```
150
- def eval_on_selector_all(selector, pageFunction, arg: nil)
151
- wrap_impl(@impl.eval_on_selector_all(unwrap_impl(selector), unwrap_impl(pageFunction), arg: unwrap_impl(arg)))
152
- end
153
-
154
78
  # Returns the added tag when the script's onload fires or when the script content was injected into frame.
155
79
  #
156
80
  # Adds a `<script>` tag into the page with the desired url or content.
@@ -293,14 +217,73 @@ module Playwright
293
217
  wrap_impl(@impl.dispatch_event(unwrap_impl(selector), unwrap_impl(type), eventInit: unwrap_impl(eventInit), timeout: unwrap_impl(timeout)))
294
218
  end
295
219
 
296
- # Returns the return value of `pageFunction`
220
+ # Returns the return value of `expression`.
221
+ #
222
+ # The method finds an element matching the specified selector within the frame and passes it as a first argument to
223
+ # `expression`. See [Working with selectors](./selectors.md) for more details. If no elements match the selector, the
224
+ # method throws an error.
225
+ #
226
+ # If `expression` returns a [Promise], then [`method: Frame.evalOnSelector`] would wait for the promise to resolve and
227
+ # return its value.
228
+ #
229
+ # Examples:
230
+ #
231
+ #
232
+ # ```js
233
+ # const searchValue = await frame.$eval('#search', el => el.value);
234
+ # const preloadHref = await frame.$eval('link[rel=preload]', el => el.href);
235
+ # const html = await frame.$eval('.main-container', (e, suffix) => e.outerHTML + suffix, 'hello');
236
+ # ```
237
+ #
238
+ # ```python async
239
+ # search_value = await frame.eval_on_selector("#search", "el => el.value")
240
+ # preload_href = await frame.eval_on_selector("link[rel=preload]", "el => el.href")
241
+ # html = await frame.eval_on_selector(".main-container", "(e, suffix) => e.outerHTML + suffix", "hello")
242
+ # ```
243
+ #
244
+ # ```python sync
245
+ # search_value = frame.eval_on_selector("#search", "el => el.value")
246
+ # preload_href = frame.eval_on_selector("link[rel=preload]", "el => el.href")
247
+ # html = frame.eval_on_selector(".main-container", "(e, suffix) => e.outerHTML + suffix", "hello")
248
+ # ```
249
+ def eval_on_selector(selector, expression, arg: nil)
250
+ wrap_impl(@impl.eval_on_selector(unwrap_impl(selector), unwrap_impl(expression), arg: unwrap_impl(arg)))
251
+ end
252
+
253
+ # Returns the return value of `expression`.
254
+ #
255
+ # The method finds all elements matching the specified selector within the frame and passes an array of matched elements
256
+ # as a first argument to `expression`. See [Working with selectors](./selectors.md) for more details.
257
+ #
258
+ # If `expression` returns a [Promise], then [`method: Frame.evalOnSelectorAll`] would wait for the promise to resolve and
259
+ # return its value.
260
+ #
261
+ # Examples:
262
+ #
263
+ #
264
+ # ```js
265
+ # const divsCounts = await frame.$$eval('div', (divs, min) => divs.length >= min, 10);
266
+ # ```
267
+ #
268
+ # ```python async
269
+ # divs_counts = await frame.eval_on_selector_all("div", "(divs, min) => divs.length >= min", 10)
270
+ # ```
271
+ #
272
+ # ```python sync
273
+ # divs_counts = frame.eval_on_selector_all("div", "(divs, min) => divs.length >= min", 10)
274
+ # ```
275
+ def eval_on_selector_all(selector, expression, arg: nil)
276
+ wrap_impl(@impl.eval_on_selector_all(unwrap_impl(selector), unwrap_impl(expression), arg: unwrap_impl(arg)))
277
+ end
278
+
279
+ # Returns the return value of `expression`.
297
280
  #
298
281
  # If the function passed to the [`method: Frame.evaluate`] returns a [Promise], then [`method: Frame.evaluate`] would wait
299
282
  # for the promise to resolve and return its value.
300
283
  #
301
- # If the function passed to the [`method: Frame.evaluate`] returns a non-[Serializable] value,
302
- # then[ method: `Frame.evaluate`] returns `undefined`. DevTools Protocol also supports transferring some additional values
303
- # that are not serializable by `JSON`: `-0`, `NaN`, `Infinity`, `-Infinity`, and bigint literals.
284
+ # If the function passed to the [`method: Frame.evaluate`] returns a non-[Serializable] value, then
285
+ # [`method: Frame.evaluate`] returns `undefined`. Playwright also supports transferring some additional values that are
286
+ # not serializable by `JSON`: `-0`, `NaN`, `Infinity`, `-Infinity`.
304
287
  #
305
288
  #
306
289
  # ```js
@@ -359,17 +342,17 @@ module Playwright
359
342
  # html = frame.evaluate("([body, suffix]) => body.innerHTML + suffix", [body_handle, "hello"])
360
343
  # body_handle.dispose()
361
344
  # ```
362
- def evaluate(pageFunction, arg: nil)
363
- wrap_impl(@impl.evaluate(unwrap_impl(pageFunction), arg: unwrap_impl(arg)))
345
+ def evaluate(expression, arg: nil)
346
+ wrap_impl(@impl.evaluate(unwrap_impl(expression), arg: unwrap_impl(arg)))
364
347
  end
365
348
 
366
- # Returns the return value of `pageFunction` as in-page object (JSHandle).
349
+ # Returns the return value of `expression` as a `JSHandle`.
367
350
  #
368
- # The only difference between [`method: Frame.evaluate`] and [`method: Frame.evaluateHandle`] is
369
- # that[ method: Fframe.evaluateHandle`] returns in-page object (JSHandle).
351
+ # The only difference between [`method: Frame.evaluate`] and [`method: Frame.evaluateHandle`] is that
352
+ # [method: Frame.evaluateHandle`] returns `JSHandle`.
370
353
  #
371
- # If the function, passed to the [`method: Frame.evaluateHandle`], returns a [Promise],
372
- # then[ method: Fframe.evaluateHandle`] would wait for the promise to resolve and return its value.
354
+ # If the function, passed to the [`method: Frame.evaluateHandle`], returns a [Promise], then
355
+ # [`method: Frame.evaluateHandle`] would wait for the promise to resolve and return its value.
373
356
  #
374
357
  #
375
358
  # ```js
@@ -378,7 +361,6 @@ module Playwright
378
361
  # ```
379
362
  #
380
363
  # ```python async
381
- # # FIXME
382
364
  # a_window_handle = await frame.evaluate_handle("Promise.resolve(window)")
383
365
  # a_window_handle # handle for the window object.
384
366
  # ```
@@ -426,14 +408,15 @@ module Playwright
426
408
  # print(result_handle.json_value())
427
409
  # result_handle.dispose()
428
410
  # ```
429
- def evaluate_handle(pageFunction, arg: nil)
430
- wrap_impl(@impl.evaluate_handle(unwrap_impl(pageFunction), arg: unwrap_impl(arg)))
411
+ def evaluate_handle(expression, arg: nil)
412
+ wrap_impl(@impl.evaluate_handle(unwrap_impl(expression), arg: unwrap_impl(arg)))
431
413
  end
432
414
 
433
415
  # This method waits for an element matching `selector`, waits for [actionability](./actionability.md) checks, focuses the
434
- # element, fills it and triggers an `input` event after filling. If the element matching `selector` is not an `<input>`,
435
- # `<textarea>` or `[contenteditable]` element, this method throws an error. Note that you can pass an empty string to
436
- # clear the input field.
416
+ # element, fills it and triggers an `input` event after filling. If the element is inside the `<label>` element that has
417
+ # associated [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), that control will be
418
+ # filled instead. If the element to be filled is not an `<input>`, `<textarea>` or `[contenteditable]` element, this
419
+ # method throws an error. Note that you can pass an empty string to clear the input field.
437
420
  #
438
421
  # To send fine-grained keyboard events, use [`method: Frame.type`].
439
422
  def fill(selector, value, noWaitAfter: nil, timeout: nil)
@@ -610,6 +593,22 @@ module Playwright
610
593
  wrap_impl(@impl.press(unwrap_impl(selector), unwrap_impl(key), delay: unwrap_impl(delay), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
611
594
  end
612
595
 
596
+ # Returns the ElementHandle pointing to the frame element.
597
+ #
598
+ # The method finds an element matching the specified selector within the frame. See
599
+ # [Working with selectors](./selectors.md) for more details. If no elements match the selector, returns `null`.
600
+ def query_selector(selector)
601
+ wrap_impl(@impl.query_selector(unwrap_impl(selector)))
602
+ end
603
+
604
+ # Returns the ElementHandles pointing to the frame elements.
605
+ #
606
+ # The method finds all elements matching the specified selector within the frame. See
607
+ # [Working with selectors](./selectors.md) for more details. If no elements match the selector, returns empty array.
608
+ def query_selector_all(selector)
609
+ wrap_impl(@impl.query_selector_all(unwrap_impl(selector)))
610
+ end
611
+
613
612
  # Returns the array of option values that have been successfully selected.
614
613
  #
615
614
  # Triggers a `change` and `input` event once all the provided options have been selected. If there's no `<select>` element
@@ -747,9 +746,9 @@ module Playwright
747
746
  wrap_impl(@impl.url)
748
747
  end
749
748
 
750
- # Returns when the `pageFunction` returns a truthy value, returns that value.
749
+ # Returns when the `expression` returns a truthy value, returns that value.
751
750
  #
752
- # The `waitForFunction` can be used to observe viewport size change:
751
+ # The [`method: Frame.waitForFunction`] can be used to observe viewport size change:
753
752
  #
754
753
  #
755
754
  # ```js
@@ -773,7 +772,7 @@ module Playwright
773
772
  # webkit = playwright.webkit
774
773
  # browser = await webkit.launch()
775
774
  # page = await browser.new_page()
776
- # await page.evaluate("window.x = 0; setTimeout(() => { window.x = 100 }, 1000);", force_expr=True)
775
+ # await page.evaluate("window.x = 0; setTimeout(() => { window.x = 100 }, 1000);")
777
776
  # await page.main_frame.wait_for_function("() => window.x > 0")
778
777
  # await browser.close()
779
778
  #
@@ -790,7 +789,7 @@ module Playwright
790
789
  # webkit = playwright.webkit
791
790
  # browser = webkit.launch()
792
791
  # page = browser.new_page()
793
- # page.evaluate("window.x = 0; setTimeout(() => { window.x = 100 }, 1000);", force_expr=True)
792
+ # page.evaluate("window.x = 0; setTimeout(() => { window.x = 100 }, 1000);")
794
793
  # page.main_frame.wait_for_function("() => window.x > 0")
795
794
  # browser.close()
796
795
  #
@@ -815,8 +814,8 @@ module Playwright
815
814
  # selector = ".foo"
816
815
  # frame.wait_for_function("selector => !!document.querySelector(selector)", selector)
817
816
  # ```
818
- def wait_for_function(pageFunction, arg: nil, polling: nil, timeout: nil)
819
- wrap_impl(@impl.wait_for_function(unwrap_impl(pageFunction), arg: unwrap_impl(arg), polling: unwrap_impl(polling), timeout: unwrap_impl(timeout)))
817
+ def wait_for_function(expression, arg: nil, polling: nil, timeout: nil)
818
+ wrap_impl(@impl.wait_for_function(unwrap_impl(expression), arg: unwrap_impl(arg), polling: unwrap_impl(polling), timeout: unwrap_impl(timeout)))
820
819
  end
821
820
 
822
821
  # Waits for the required load state to be reached.
@@ -938,7 +937,7 @@ module Playwright
938
937
  # run(playwright)
939
938
  # ```
940
939
  def wait_for_selector(selector, state: nil, timeout: nil)
941
- raise NotImplementedError.new('wait_for_selector is not implemented yet.')
940
+ wrap_impl(@impl.wait_for_selector(unwrap_impl(selector), state: unwrap_impl(state), timeout: unwrap_impl(timeout)))
942
941
  end
943
942
 
944
943
  # Waits for the given `timeout` in milliseconds.
@@ -22,7 +22,7 @@ module Playwright
22
22
  # [`method: JSHandle.dispose`]. JSHandles are auto-disposed when their origin frame gets navigated or the parent context
23
23
  # gets destroyed.
24
24
  #
25
- # JSHandle instances can be used as an argument in [`method: Page.$eval`], [`method: Page.evaluate`] and
25
+ # JSHandle instances can be used as an argument in [`method: Page.evalOnSelector`], [`method: Page.evaluate`] and
26
26
  # [`method: Page.evaluateHandle`] methods.
27
27
  class JSHandle < PlaywrightApi
28
28
 
@@ -36,12 +36,11 @@ module Playwright
36
36
  wrap_impl(@impl.dispose)
37
37
  end
38
38
 
39
- # Returns the return value of `pageFunction`
39
+ # Returns the return value of `expression`.
40
40
  #
41
- # This method passes this handle as the first argument to `pageFunction`.
41
+ # This method passes this handle as the first argument to `expression`.
42
42
  #
43
- # If `pageFunction` returns a [Promise], then `handle.evaluate` would wait for the promise to resolve and return its
44
- # value.
43
+ # If `expression` returns a [Promise], then `handle.evaluate` would wait for the promise to resolve and return its value.
45
44
  #
46
45
  # Examples:
47
46
  #
@@ -60,23 +59,23 @@ module Playwright
60
59
  # tweet_handle = page.query_selector(".tweet .retweets")
61
60
  # assert tweet_handle.evaluate("node => node.innerText") == "10 retweets"
62
61
  # ```
63
- def evaluate(pageFunction, arg: nil)
64
- wrap_impl(@impl.evaluate(unwrap_impl(pageFunction), arg: unwrap_impl(arg)))
62
+ def evaluate(expression, arg: nil)
63
+ wrap_impl(@impl.evaluate(unwrap_impl(expression), arg: unwrap_impl(arg)))
65
64
  end
66
65
 
67
- # Returns the return value of `pageFunction` as in-page object (JSHandle).
66
+ # Returns the return value of `expression` as a `JSHandle`.
68
67
  #
69
- # This method passes this handle as the first argument to `pageFunction`.
68
+ # This method passes this handle as the first argument to `expression`.
70
69
  #
71
70
  # The only difference between `jsHandle.evaluate` and `jsHandle.evaluateHandle` is that `jsHandle.evaluateHandle` returns
72
- # in-page object (JSHandle).
71
+ # `JSHandle`.
73
72
  #
74
73
  # If the function passed to the `jsHandle.evaluateHandle` returns a [Promise], then `jsHandle.evaluateHandle` would wait
75
74
  # for the promise to resolve and return its value.
76
75
  #
77
76
  # See [`method: Page.evaluateHandle`] for more details.
78
- def evaluate_handle(pageFunction, arg: nil)
79
- wrap_impl(@impl.evaluate_handle(unwrap_impl(pageFunction), arg: unwrap_impl(arg)))
77
+ def evaluate_handle(expression, arg: nil)
78
+ wrap_impl(@impl.evaluate_handle(unwrap_impl(expression), arg: unwrap_impl(arg)))
80
79
  end
81
80
 
82
81
  # The method returns a map with **own property names** as keys and JSHandle instances for the property values.
@@ -2,8 +2,8 @@ module Playwright
2
2
  # - extends: [EventEmitter]
3
3
  #
4
4
  # Page provides methods to interact with a single tab in a `Browser`, or an
5
- # [extension background page](https://developer.chrome.com/extensions/background_pages) in Chromium. One [Browser]
6
- # instance might have multiple [Page] instances.
5
+ # [extension background page](https://developer.chrome.com/extensions/background_pages) in Chromium. One `Browser`
6
+ # instance might have multiple `Page` instances.
7
7
  #
8
8
  # This example creates a page, navigates it to a URL, and then saves a screenshot:
9
9
  #
@@ -114,78 +114,6 @@ module Playwright
114
114
  wrap_impl(@impl.touchscreen)
115
115
  end
116
116
 
117
- # The method finds an element matching the specified selector within the page. If no elements match the selector, the
118
- # return value resolves to `null`.
119
- #
120
- # Shortcut for main frame's [`method: Frame.$`].
121
- def query_selector(selector)
122
- wrap_impl(@impl.query_selector(unwrap_impl(selector)))
123
- end
124
-
125
- # The method finds all elements matching the specified selector within the page. If no elements match the selector, the
126
- # return value resolves to `[]`.
127
- #
128
- # Shortcut for main frame's [`method: Frame.$$`].
129
- def query_selector_all(selector)
130
- wrap_impl(@impl.query_selector_all(unwrap_impl(selector)))
131
- end
132
-
133
- # The method finds an element matching the specified selector within the page and passes it as a first argument to
134
- # `pageFunction`. If no elements match the selector, the method throws an error. Returns the value of `pageFunction`.
135
- #
136
- # If `pageFunction` returns a [Promise], then [`method: Page.$eval`] would wait for the promise to resolve and return its
137
- # value.
138
- #
139
- # Examples:
140
- #
141
- #
142
- # ```js
143
- # const searchValue = await page.$eval('#search', el => el.value);
144
- # const preloadHref = await page.$eval('link[rel=preload]', el => el.href);
145
- # const html = await page.$eval('.main-container', (e, suffix) => e.outerHTML + suffix, 'hello');
146
- # ```
147
- #
148
- # ```python async
149
- # search_value = await page.eval_on_selector("#search", "el => el.value")
150
- # preload_href = await page.eval_on_selector("link[rel=preload]", "el => el.href")
151
- # html = await page.eval_on_selector(".main-container", "(e, suffix) => e.outer_html + suffix", "hello")
152
- # ```
153
- #
154
- # ```python sync
155
- # search_value = page.eval_on_selector("#search", "el => el.value")
156
- # preload_href = page.eval_on_selector("link[rel=preload]", "el => el.href")
157
- # html = page.eval_on_selector(".main-container", "(e, suffix) => e.outer_html + suffix", "hello")
158
- # ```
159
- #
160
- # Shortcut for main frame's [`method: Frame.$eval`].
161
- def eval_on_selector(selector, pageFunction, arg: nil)
162
- wrap_impl(@impl.eval_on_selector(unwrap_impl(selector), unwrap_impl(pageFunction), arg: unwrap_impl(arg)))
163
- end
164
-
165
- # The method finds all elements matching the specified selector within the page and passes an array of matched elements as
166
- # a first argument to `pageFunction`. Returns the result of `pageFunction` invocation.
167
- #
168
- # If `pageFunction` returns a [Promise], then [`method: Page.$$eval`] would wait for the promise to resolve and return its
169
- # value.
170
- #
171
- # Examples:
172
- #
173
- #
174
- # ```js
175
- # const divCounts = await page.$$eval('div', (divs, min) => divs.length >= min, 10);
176
- # ```
177
- #
178
- # ```python async
179
- # div_counts = await page.eval_on_selector_all("div", "(divs, min) => divs.length >= min", 10)
180
- # ```
181
- #
182
- # ```python sync
183
- # div_counts = page.eval_on_selector_all("div", "(divs, min) => divs.length >= min", 10)
184
- # ```
185
- def eval_on_selector_all(selector, pageFunction, arg: nil)
186
- wrap_impl(@impl.eval_on_selector_all(unwrap_impl(selector), unwrap_impl(pageFunction), arg: unwrap_impl(arg)))
187
- end
188
-
189
117
  # Adds a script which would be evaluated in one of the following scenarios:
190
118
  # - Whenever the page is navigated.
191
119
  # - Whenever the child frame is attached or navigated. In this case, the script is evaluated in the context of the newly
@@ -221,7 +149,7 @@ module Playwright
221
149
  # > NOTE: The order of evaluation of multiple scripts installed via [`method: BrowserContext.addInitScript`] and
222
150
  # [`method: Page.addInitScript`] is not defined.
223
151
  def add_init_script(script, arg: nil)
224
- raise NotImplementedError.new('add_init_script is not implemented yet.')
152
+ wrap_impl(@impl.add_init_script(unwrap_impl(script), arg: unwrap_impl(arg)))
225
153
  end
226
154
 
227
155
  # Adds a `<script>` tag into the page with the desired url or content. Returns the added tag when the script's onload
@@ -242,7 +170,7 @@ module Playwright
242
170
 
243
171
  # Brings page to front (activates tab).
244
172
  def bring_to_front
245
- raise NotImplementedError.new('bring_to_front is not implemented yet.')
173
+ wrap_impl(@impl.bring_to_front)
246
174
  end
247
175
 
248
176
  # This method checks an element matching `selector` by performing the following steps:
@@ -261,7 +189,7 @@ module Playwright
261
189
  #
262
190
  # Shortcut for main frame's [`method: Frame.check`].
263
191
  def check(selector, force: nil, noWaitAfter: nil, timeout: nil)
264
- raise NotImplementedError.new('check is not implemented yet.')
192
+ wrap_impl(@impl.check(unwrap_impl(selector), force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
265
193
  end
266
194
 
267
195
  # This method clicks an element matching `selector` by performing the following steps:
@@ -387,7 +315,7 @@ module Playwright
387
315
  # page.dispatch_event("#source", "dragstart", { "dataTransfer": data_transfer })
388
316
  # ```
389
317
  def dispatch_event(selector, type, eventInit: nil, timeout: nil)
390
- raise NotImplementedError.new('dispatch_event is not implemented yet.')
318
+ wrap_impl(@impl.dispatch_event(unwrap_impl(selector), unwrap_impl(type), eventInit: unwrap_impl(eventInit), timeout: unwrap_impl(timeout)))
391
319
  end
392
320
 
393
321
  #
@@ -478,20 +406,76 @@ module Playwright
478
406
  # # → False
479
407
  # page.evaluate("matchMedia('(prefers-color-scheme: no-preference)').matches")
480
408
  # ```
481
- def emulate_media(params)
482
- raise NotImplementedError.new('emulate_media is not implemented yet.')
409
+ def emulate_media(colorScheme: nil, media: nil)
410
+ wrap_impl(@impl.emulate_media(colorScheme: unwrap_impl(colorScheme), media: unwrap_impl(media)))
411
+ end
412
+
413
+ # The method finds an element matching the specified selector within the page and passes it as a first argument to
414
+ # `expression`. If no elements match the selector, the method throws an error. Returns the value of `expression`.
415
+ #
416
+ # If `expression` returns a [Promise], then [`method: Page.evalOnSelector`] would wait for the promise to resolve and
417
+ # return its value.
418
+ #
419
+ # Examples:
420
+ #
421
+ #
422
+ # ```js
423
+ # const searchValue = await page.$eval('#search', el => el.value);
424
+ # const preloadHref = await page.$eval('link[rel=preload]', el => el.href);
425
+ # const html = await page.$eval('.main-container', (e, suffix) => e.outerHTML + suffix, 'hello');
426
+ # ```
427
+ #
428
+ # ```python async
429
+ # search_value = await page.eval_on_selector("#search", "el => el.value")
430
+ # preload_href = await page.eval_on_selector("link[rel=preload]", "el => el.href")
431
+ # html = await page.eval_on_selector(".main-container", "(e, suffix) => e.outer_html + suffix", "hello")
432
+ # ```
433
+ #
434
+ # ```python sync
435
+ # search_value = page.eval_on_selector("#search", "el => el.value")
436
+ # preload_href = page.eval_on_selector("link[rel=preload]", "el => el.href")
437
+ # html = page.eval_on_selector(".main-container", "(e, suffix) => e.outer_html + suffix", "hello")
438
+ # ```
439
+ #
440
+ # Shortcut for main frame's [`method: Frame.evalOnSelector`].
441
+ def eval_on_selector(selector, expression, arg: nil)
442
+ wrap_impl(@impl.eval_on_selector(unwrap_impl(selector), unwrap_impl(expression), arg: unwrap_impl(arg)))
443
+ end
444
+
445
+ # The method finds all elements matching the specified selector within the page and passes an array of matched elements as
446
+ # a first argument to `expression`. Returns the result of `expression` invocation.
447
+ #
448
+ # If `expression` returns a [Promise], then [`method: Page.evalOnSelectorAll`] would wait for the promise to resolve and
449
+ # return its value.
450
+ #
451
+ # Examples:
452
+ #
453
+ #
454
+ # ```js
455
+ # const divCounts = await page.$$eval('div', (divs, min) => divs.length >= min, 10);
456
+ # ```
457
+ #
458
+ # ```python async
459
+ # div_counts = await page.eval_on_selector_all("div", "(divs, min) => divs.length >= min", 10)
460
+ # ```
461
+ #
462
+ # ```python sync
463
+ # div_counts = page.eval_on_selector_all("div", "(divs, min) => divs.length >= min", 10)
464
+ # ```
465
+ def eval_on_selector_all(selector, expression, arg: nil)
466
+ wrap_impl(@impl.eval_on_selector_all(unwrap_impl(selector), unwrap_impl(expression), arg: unwrap_impl(arg)))
483
467
  end
484
468
 
485
- # Returns the value of the `pageFunction` invocation.
469
+ # Returns the value of the `expression` invocation.
486
470
  #
487
471
  # If the function passed to the [`method: Page.evaluate`] returns a [Promise], then [`method: Page.evaluate`] would wait
488
472
  # for the promise to resolve and return its value.
489
473
  #
490
- # If the function passed to the [`method: Page.evaluate`] returns a non-[Serializable] value,
491
- # then[ method: `Page.evaluate`] resolves to `undefined`. DevTools Protocol also supports transferring some additional
492
- # values that are not serializable by `JSON`: `-0`, `NaN`, `Infinity`, `-Infinity`, and bigint literals.
474
+ # If the function passed to the [`method: Page.evaluate`] returns a non-[Serializable] value, then
475
+ # [`method: Page.evaluate`] resolves to `undefined`. Playwright also supports transferring some additional values that are
476
+ # not serializable by `JSON`: `-0`, `NaN`, `Infinity`, `-Infinity`.
493
477
  #
494
- # Passing argument to `pageFunction`:
478
+ # Passing argument to `expression`:
495
479
  #
496
480
  #
497
481
  # ```js
@@ -554,14 +538,14 @@ module Playwright
554
538
  # ```
555
539
  #
556
540
  # Shortcut for main frame's [`method: Frame.evaluate`].
557
- def evaluate(pageFunction, arg: nil)
558
- wrap_impl(@impl.evaluate(unwrap_impl(pageFunction), arg: unwrap_impl(arg)))
541
+ def evaluate(expression, arg: nil)
542
+ wrap_impl(@impl.evaluate(unwrap_impl(expression), arg: unwrap_impl(arg)))
559
543
  end
560
544
 
561
- # Returns the value of the `pageFunction` invocation as in-page object (JSHandle).
545
+ # Returns the value of the `expression` invocation as a `JSHandle`.
562
546
  #
563
547
  # The only difference between [`method: Page.evaluate`] and [`method: Page.evaluateHandle`] is that
564
- # [`method: Page.evaluateHandle`] returns in-page object (JSHandle).
548
+ # [`method: Page.evaluateHandle`] returns `JSHandle`.
565
549
  #
566
550
  # If the function passed to the [`method: Page.evaluateHandle`] returns a [Promise], then [`method: Page.evaluateHandle`]
567
551
  # would wait for the promise to resolve and return its value.
@@ -573,7 +557,6 @@ module Playwright
573
557
  # ```
574
558
  #
575
559
  # ```python async
576
- # # FIXME
577
560
  # a_window_handle = await page.evaluate_handle("Promise.resolve(window)")
578
561
  # a_window_handle # handle for the window object.
579
562
  # ```
@@ -621,8 +604,8 @@ module Playwright
621
604
  # print(result_handle.json_value())
622
605
  # result_handle.dispose()
623
606
  # ```
624
- def evaluate_handle(pageFunction, arg: nil)
625
- wrap_impl(@impl.evaluate_handle(unwrap_impl(pageFunction), arg: unwrap_impl(arg)))
607
+ def evaluate_handle(expression, arg: nil)
608
+ wrap_impl(@impl.evaluate_handle(unwrap_impl(expression), arg: unwrap_impl(arg)))
626
609
  end
627
610
 
628
611
  # The method adds a function called `name` on the `window` object of every frame in this page. When called, the function
@@ -755,7 +738,7 @@ module Playwright
755
738
  # """)
756
739
  # ```
757
740
  def expose_binding(name, callback, handle: nil)
758
- raise NotImplementedError.new('expose_binding is not implemented yet.')
741
+ wrap_impl(@impl.expose_binding(unwrap_impl(name), unwrap_impl(callback), handle: unwrap_impl(handle)))
759
742
  end
760
743
 
761
744
  # The method adds a function called `name` on the `window` object of every frame in the page. When called, the function
@@ -854,13 +837,14 @@ module Playwright
854
837
  # run(playwright)
855
838
  # ```
856
839
  def expose_function(name, callback)
857
- raise NotImplementedError.new('expose_function is not implemented yet.')
840
+ wrap_impl(@impl.expose_function(unwrap_impl(name), unwrap_impl(callback)))
858
841
  end
859
842
 
860
843
  # This method waits for an element matching `selector`, waits for [actionability](./actionability.md) checks, focuses the
861
- # element, fills it and triggers an `input` event after filling. If the element matching `selector` is not an `<input>`,
862
- # `<textarea>` or `[contenteditable]` element, this method throws an error. Note that you can pass an empty string to
863
- # clear the input field.
844
+ # element, fills it and triggers an `input` event after filling. If the element is inside the `<label>` element that has
845
+ # associated [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), that control will be
846
+ # filled instead. If the element to be filled is not an `<input>`, `<textarea>` or `[contenteditable]` element, this
847
+ # method throws an error. Note that you can pass an empty string to clear the input field.
864
848
  #
865
849
  # To send fine-grained keyboard events, use [`method: Page.type`].
866
850
  #
@@ -907,7 +891,7 @@ module Playwright
907
891
 
908
892
  # Returns element attribute value.
909
893
  def get_attribute(selector, name, timeout: nil)
910
- raise NotImplementedError.new('get_attribute is not implemented yet.')
894
+ wrap_impl(@impl.get_attribute(unwrap_impl(selector), unwrap_impl(name), timeout: unwrap_impl(timeout)))
911
895
  end
912
896
 
913
897
  # Returns the main resource response. In case of multiple redirects, the navigation will resolve with the response of the
@@ -915,7 +899,7 @@ module Playwright
915
899
  #
916
900
  # Navigate to the previous page in history.
917
901
  def go_back(timeout: nil, waitUntil: nil)
918
- raise NotImplementedError.new('go_back is not implemented yet.')
902
+ wrap_impl(@impl.go_back(timeout: unwrap_impl(timeout), waitUntil: unwrap_impl(waitUntil)))
919
903
  end
920
904
 
921
905
  # Returns the main resource response. In case of multiple redirects, the navigation will resolve with the response of the
@@ -923,7 +907,7 @@ module Playwright
923
907
  #
924
908
  # Navigate to the next page in history.
925
909
  def go_forward(timeout: nil, waitUntil: nil)
926
- raise NotImplementedError.new('go_forward is not implemented yet.')
910
+ wrap_impl(@impl.go_forward(timeout: unwrap_impl(timeout), waitUntil: unwrap_impl(waitUntil)))
927
911
  end
928
912
 
929
913
  # Returns the main resource response. In case of multiple redirects, the navigation will resolve with the response of the
@@ -968,22 +952,22 @@ module Playwright
968
952
  modifiers: nil,
969
953
  position: nil,
970
954
  timeout: nil)
971
- raise NotImplementedError.new('hover is not implemented yet.')
955
+ wrap_impl(@impl.hover(unwrap_impl(selector), force: unwrap_impl(force), modifiers: unwrap_impl(modifiers), position: unwrap_impl(position), timeout: unwrap_impl(timeout)))
972
956
  end
973
957
 
974
958
  # Returns `element.innerHTML`.
975
959
  def inner_html(selector, timeout: nil)
976
- raise NotImplementedError.new('inner_html is not implemented yet.')
960
+ wrap_impl(@impl.inner_html(unwrap_impl(selector), timeout: unwrap_impl(timeout)))
977
961
  end
978
962
 
979
963
  # Returns `element.innerText`.
980
964
  def inner_text(selector, timeout: nil)
981
- raise NotImplementedError.new('inner_text is not implemented yet.')
965
+ wrap_impl(@impl.inner_text(unwrap_impl(selector), timeout: unwrap_impl(timeout)))
982
966
  end
983
967
 
984
968
  # Returns whether the element is checked. Throws if the element is not a checkbox or radio input.
985
969
  def checked?(selector, timeout: nil)
986
- raise NotImplementedError.new('checked? is not implemented yet.')
970
+ wrap_impl(@impl.checked?(unwrap_impl(selector), timeout: unwrap_impl(timeout)))
987
971
  end
988
972
 
989
973
  # Indicates that the page has been closed.
@@ -993,27 +977,27 @@ module Playwright
993
977
 
994
978
  # Returns whether the element is disabled, the opposite of [enabled](./actionability.md#enabled).
995
979
  def disabled?(selector, timeout: nil)
996
- raise NotImplementedError.new('disabled? is not implemented yet.')
980
+ wrap_impl(@impl.disabled?(unwrap_impl(selector), timeout: unwrap_impl(timeout)))
997
981
  end
998
982
 
999
983
  # Returns whether the element is [editable](./actionability.md#editable).
1000
984
  def editable?(selector, timeout: nil)
1001
- raise NotImplementedError.new('editable? is not implemented yet.')
985
+ wrap_impl(@impl.editable?(unwrap_impl(selector), timeout: unwrap_impl(timeout)))
1002
986
  end
1003
987
 
1004
988
  # Returns whether the element is [enabled](./actionability.md#enabled).
1005
989
  def enabled?(selector, timeout: nil)
1006
- raise NotImplementedError.new('enabled? is not implemented yet.')
990
+ wrap_impl(@impl.enabled?(unwrap_impl(selector), timeout: unwrap_impl(timeout)))
1007
991
  end
1008
992
 
1009
993
  # Returns whether the element is hidden, the opposite of [visible](./actionability.md#visible).
1010
994
  def hidden?(selector, timeout: nil)
1011
- raise NotImplementedError.new('hidden? is not implemented yet.')
995
+ wrap_impl(@impl.hidden?(unwrap_impl(selector), timeout: unwrap_impl(timeout)))
1012
996
  end
1013
997
 
1014
998
  # Returns whether the element is [visible](./actionability.md#visible).
1015
999
  def visible?(selector, timeout: nil)
1016
- raise NotImplementedError.new('visible? is not implemented yet.')
1000
+ wrap_impl(@impl.visible?(unwrap_impl(selector), timeout: unwrap_impl(timeout)))
1017
1001
  end
1018
1002
 
1019
1003
  # The page's main frame. Page is guaranteed to have a main frame which persists during navigations.
@@ -1026,6 +1010,18 @@ module Playwright
1026
1010
  wrap_impl(@impl.opener)
1027
1011
  end
1028
1012
 
1013
+ # Pauses script execution. Playwright will stop executing the script and wait for the user to either press 'Resume' button
1014
+ # in the page overlay or to call `playwright.resume()` in the DevTools console.
1015
+ #
1016
+ # User can inspect selectors or perform manual steps while paused. Resume will continue running the original script from
1017
+ # the place it was paused.
1018
+ #
1019
+ # > NOTE: This method requires Playwright to be started in a headed mode, with a falsy [`options: headless`] value in the
1020
+ # [`method: BrowserType.launch`].
1021
+ def pause
1022
+ raise NotImplementedError.new('pause is not implemented yet.')
1023
+ end
1024
+
1029
1025
  # Returns the PDF buffer.
1030
1026
  #
1031
1027
  # > NOTE: Generating a pdf is currently only supported in Chromium headless.
@@ -1098,7 +1094,7 @@ module Playwright
1098
1094
  printBackground: nil,
1099
1095
  scale: nil,
1100
1096
  width: nil)
1101
- raise NotImplementedError.new('pdf is not implemented yet.')
1097
+ wrap_impl(@impl.pdf(displayHeaderFooter: unwrap_impl(displayHeaderFooter), footerTemplate: unwrap_impl(footerTemplate), format: unwrap_impl(format), headerTemplate: unwrap_impl(headerTemplate), height: unwrap_impl(height), landscape: unwrap_impl(landscape), margin: unwrap_impl(margin), pageRanges: unwrap_impl(pageRanges), path: unwrap_impl(path), preferCSSPageSize: unwrap_impl(preferCSSPageSize), printBackground: unwrap_impl(printBackground), scale: unwrap_impl(scale), width: unwrap_impl(width)))
1102
1098
  end
1103
1099
 
1104
1100
  # Focuses the element, and then uses [`method: Keyboard.down`] and [`method: Keyboard.up`].
@@ -1165,6 +1161,22 @@ module Playwright
1165
1161
  wrap_impl(@impl.press(unwrap_impl(selector), unwrap_impl(key), delay: unwrap_impl(delay), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
1166
1162
  end
1167
1163
 
1164
+ # The method finds an element matching the specified selector within the page. If no elements match the selector, the
1165
+ # return value resolves to `null`.
1166
+ #
1167
+ # Shortcut for main frame's [`method: Frame.querySelector`].
1168
+ def query_selector(selector)
1169
+ wrap_impl(@impl.query_selector(unwrap_impl(selector)))
1170
+ end
1171
+
1172
+ # The method finds all elements matching the specified selector within the page. If no elements match the selector, the
1173
+ # return value resolves to `[]`.
1174
+ #
1175
+ # Shortcut for main frame's [`method: Frame.querySelectorAll`].
1176
+ def query_selector_all(selector)
1177
+ wrap_impl(@impl.query_selector_all(unwrap_impl(selector)))
1178
+ end
1179
+
1168
1180
  # Returns the main resource response. In case of multiple redirects, the navigation will resolve with the response of the
1169
1181
  # last redirect.
1170
1182
  def reload(timeout: nil, waitUntil: nil)
@@ -1288,7 +1300,7 @@ module Playwright
1288
1300
  #
1289
1301
  # Shortcut for main frame's [`method: Frame.selectOption`]
1290
1302
  def select_option(selector, values, noWaitAfter: nil, timeout: nil)
1291
- raise NotImplementedError.new('select_option is not implemented yet.')
1303
+ wrap_impl(@impl.select_option(unwrap_impl(selector), unwrap_impl(values), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
1292
1304
  end
1293
1305
 
1294
1306
  def set_content(html, timeout: nil, waitUntil: nil)
@@ -1323,7 +1335,7 @@ module Playwright
1323
1335
  #
1324
1336
  # > NOTE: [`method: Page.setExtraHTTPHeaders`] does not guarantee the order of headers in the outgoing requests.
1325
1337
  def set_extra_http_headers(headers)
1326
- raise NotImplementedError.new('set_extra_http_headers is not implemented yet.')
1338
+ wrap_impl(@impl.set_extra_http_headers(unwrap_impl(headers)))
1327
1339
  end
1328
1340
  alias_method :extra_http_headers=, :set_extra_http_headers
1329
1341
 
@@ -1333,7 +1345,7 @@ module Playwright
1333
1345
  # Sets the value of the file input to these file paths or files. If some of the `filePaths` are relative paths, then they
1334
1346
  # are resolved relative to the the current working directory. For empty array, clears the selected files.
1335
1347
  def set_input_files(selector, files, noWaitAfter: nil, timeout: nil)
1336
- raise NotImplementedError.new('set_input_files is not implemented yet.')
1348
+ wrap_impl(@impl.set_input_files(unwrap_impl(selector), unwrap_impl(files), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
1337
1349
  end
1338
1350
 
1339
1351
  # In the case of multiple pages in a single browser, each page can have its own viewport size. However,
@@ -1389,12 +1401,12 @@ module Playwright
1389
1401
  noWaitAfter: nil,
1390
1402
  position: nil,
1391
1403
  timeout: nil)
1392
- raise NotImplementedError.new('tap_point is not implemented yet.')
1404
+ wrap_impl(@impl.tap_point(unwrap_impl(selector), force: unwrap_impl(force), modifiers: unwrap_impl(modifiers), noWaitAfter: unwrap_impl(noWaitAfter), position: unwrap_impl(position), timeout: unwrap_impl(timeout)))
1393
1405
  end
1394
1406
 
1395
1407
  # Returns `element.textContent`.
1396
1408
  def text_content(selector, timeout: nil)
1397
- raise NotImplementedError.new('text_content is not implemented yet.')
1409
+ wrap_impl(@impl.text_content(unwrap_impl(selector), timeout: unwrap_impl(timeout)))
1398
1410
  end
1399
1411
 
1400
1412
  # Returns the page's title. Shortcut for main frame's [`method: Frame.title`].
@@ -1449,7 +1461,7 @@ module Playwright
1449
1461
  #
1450
1462
  # Shortcut for main frame's [`method: Frame.uncheck`].
1451
1463
  def uncheck(selector, force: nil, noWaitAfter: nil, timeout: nil)
1452
- raise NotImplementedError.new('uncheck is not implemented yet.')
1464
+ wrap_impl(@impl.uncheck(unwrap_impl(selector), force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
1453
1465
  end
1454
1466
 
1455
1467
  # Removes a route created with [`method: Page.route`]. When `handler` is not specified, removes all routes for the `url`.
@@ -1471,35 +1483,9 @@ module Playwright
1471
1483
  wrap_impl(@impl.viewport_size)
1472
1484
  end
1473
1485
 
1474
- # Waits for event to fire and passes its value into the predicate function. Returns when the predicate returns truthy
1475
- # value. Will throw an error if the page is closed before the event is fired. Returns the event data value.
1476
- #
1477
- #
1478
- # ```js
1479
- # const [frame, _] = await Promise.all([
1480
- # page.waitForEvent('framenavigated'),
1481
- # page.click('button')
1482
- # ]);
1483
- # ```
1484
- #
1485
- # ```python async
1486
- # async with page.expect_event("framenavigated") as event_info:
1487
- # await page.click("button")
1488
- # frame = await event_info.value
1489
- # ```
1490
- #
1491
- # ```python sync
1492
- # with page.expect_event("framenavigated") as event_info:
1493
- # page.click("button")
1494
- # frame = event_info.value
1495
- # ```
1496
- def expect_event(event, optionsOrPredicate: nil, &block)
1497
- wrap_impl(@impl.expect_event(unwrap_impl(event), optionsOrPredicate: unwrap_impl(optionsOrPredicate), &wrap_block_call(block)))
1498
- end
1499
-
1500
- # Returns when the `pageFunction` returns a truthy value. It resolves to a JSHandle of the truthy value.
1486
+ # Returns when the `expression` returns a truthy value. It resolves to a JSHandle of the truthy value.
1501
1487
  #
1502
- # The `waitForFunction` can be used to observe viewport size change:
1488
+ # The [`method: Page.waitForFunction`] can be used to observe viewport size change:
1503
1489
  #
1504
1490
  #
1505
1491
  # ```js
@@ -1523,7 +1509,7 @@ module Playwright
1523
1509
  # webkit = playwright.webkit
1524
1510
  # browser = await webkit.launch()
1525
1511
  # page = await browser.new_page()
1526
- # await page.evaluate("window.x = 0; setTimeout(() => { window.x = 100 }, 1000);", force_expr=True)
1512
+ # await page.evaluate("window.x = 0; setTimeout(() => { window.x = 100 }, 1000);")
1527
1513
  # await page.wait_for_function("() => window.x > 0")
1528
1514
  # await browser.close()
1529
1515
  #
@@ -1540,7 +1526,7 @@ module Playwright
1540
1526
  # webkit = playwright.webkit
1541
1527
  # browser = webkit.launch()
1542
1528
  # page = browser.new_page()
1543
- # page.evaluate("window.x = 0; setTimeout(() => { window.x = 100 }, 1000);", force_expr=True)
1529
+ # page.evaluate("window.x = 0; setTimeout(() => { window.x = 100 }, 1000);")
1544
1530
  # page.wait_for_function("() => window.x > 0")
1545
1531
  # browser.close()
1546
1532
  #
@@ -1567,8 +1553,8 @@ module Playwright
1567
1553
  # ```
1568
1554
  #
1569
1555
  # Shortcut for main frame's [`method: Frame.waitForFunction`].
1570
- def wait_for_function(pageFunction, arg: nil, polling: nil, timeout: nil)
1571
- wrap_impl(@impl.wait_for_function(unwrap_impl(pageFunction), arg: unwrap_impl(arg), polling: unwrap_impl(polling), timeout: unwrap_impl(timeout)))
1556
+ def wait_for_function(expression, arg: nil, polling: nil, timeout: nil)
1557
+ wrap_impl(@impl.wait_for_function(unwrap_impl(expression), arg: unwrap_impl(arg), polling: unwrap_impl(polling), timeout: unwrap_impl(timeout)))
1572
1558
  end
1573
1559
 
1574
1560
  # Returns when the required load state has been reached.
@@ -1784,7 +1770,7 @@ module Playwright
1784
1770
  # run(playwright)
1785
1771
  # ```
1786
1772
  def wait_for_selector(selector, state: nil, timeout: nil)
1787
- raise NotImplementedError.new('wait_for_selector is not implemented yet.')
1773
+ wrap_impl(@impl.wait_for_selector(unwrap_impl(selector), state: unwrap_impl(state), timeout: unwrap_impl(timeout)))
1788
1774
  end
1789
1775
 
1790
1776
  # Waits for the given `timeout` in milliseconds.
@@ -1826,6 +1812,11 @@ module Playwright
1826
1812
  wrap_impl(@impl.after_initialize)
1827
1813
  end
1828
1814
 
1815
+ # @nodoc
1816
+ def expect_event(event, optionsOrPredicate: nil, &block)
1817
+ wrap_impl(@impl.expect_event(unwrap_impl(event), optionsOrPredicate: unwrap_impl(optionsOrPredicate), &wrap_block_call(block)))
1818
+ end
1819
+
1829
1820
  # @nodoc
1830
1821
  def owned_context=(req)
1831
1822
  wrap_impl(@impl.owned_context=(unwrap_impl(req)))