playwright-ruby-client 1.28.1 → 1.29.1.alpha1

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 (78) hide show
  1. checksums.yaml +4 -4
  2. data/documentation/docs/api/accessibility.md +9 -14
  3. data/documentation/docs/api/api_request_context.md +44 -41
  4. data/documentation/docs/api/api_response.md +13 -3
  5. data/documentation/docs/api/browser.md +24 -23
  6. data/documentation/docs/api/browser_context.md +71 -45
  7. data/documentation/docs/api/browser_type.md +21 -14
  8. data/documentation/docs/api/cdp_session.md +3 -5
  9. data/documentation/docs/api/console_message.md +7 -4
  10. data/documentation/docs/api/dialog.md +9 -5
  11. data/documentation/docs/api/download.md +19 -11
  12. data/documentation/docs/api/element_handle.md +125 -116
  13. data/documentation/docs/api/experimental/android.md +4 -5
  14. data/documentation/docs/api/experimental/android_device.md +11 -2
  15. data/documentation/docs/api/experimental/android_input.md +5 -0
  16. data/documentation/docs/api/file_chooser.md +6 -3
  17. data/documentation/docs/api/frame.md +182 -171
  18. data/documentation/docs/api/frame_locator.md +27 -38
  19. data/documentation/docs/api/js_handle.md +16 -10
  20. data/documentation/docs/api/keyboard.md +29 -16
  21. data/documentation/docs/api/locator.md +189 -140
  22. data/documentation/docs/api/mouse.md +9 -4
  23. data/documentation/docs/api/page.md +304 -289
  24. data/documentation/docs/api/playwright.md +8 -5
  25. data/documentation/docs/api/request.md +34 -15
  26. data/documentation/docs/api/response.md +27 -10
  27. data/documentation/docs/api/route.md +44 -12
  28. data/documentation/docs/api/selectors.md +5 -3
  29. data/documentation/docs/api/touchscreen.md +2 -0
  30. data/documentation/docs/api/tracing.md +11 -11
  31. data/documentation/docs/api/web_socket.md +9 -4
  32. data/documentation/docs/api/worker.md +12 -11
  33. data/documentation/docs/include/api_coverage.md +2 -0
  34. data/lib/playwright/channel_owners/api_request_context.rb +37 -2
  35. data/lib/playwright/channel_owners/browser_context.rb +22 -26
  36. data/lib/playwright/channel_owners/page.rb +35 -25
  37. data/lib/playwright/channel_owners/route.rb +28 -8
  38. data/lib/playwright/event_emitter.rb +6 -1
  39. data/lib/playwright/locator_impl.rb +8 -0
  40. data/lib/playwright/select_option_values.rb +2 -0
  41. data/lib/playwright/version.rb +2 -2
  42. data/lib/playwright_api/accessibility.rb +9 -13
  43. data/lib/playwright_api/android.rb +14 -12
  44. data/lib/playwright_api/android_device.rb +38 -13
  45. data/lib/playwright_api/android_input.rb +5 -0
  46. data/lib/playwright_api/android_socket.rb +4 -2
  47. data/lib/playwright_api/android_web_view.rb +5 -2
  48. data/lib/playwright_api/api_request.rb +6 -3
  49. data/lib/playwright_api/api_request_context.rb +52 -42
  50. data/lib/playwright_api/api_response.rb +13 -2
  51. data/lib/playwright_api/browser.rb +30 -22
  52. data/lib/playwright_api/browser_context.rb +82 -45
  53. data/lib/playwright_api/browser_type.rb +29 -19
  54. data/lib/playwright_api/cdp_session.rb +9 -10
  55. data/lib/playwright_api/console_message.rb +13 -8
  56. data/lib/playwright_api/dialog.rb +14 -10
  57. data/lib/playwright_api/download.rb +19 -9
  58. data/lib/playwright_api/element_handle.rb +122 -99
  59. data/lib/playwright_api/file_chooser.rb +6 -1
  60. data/lib/playwright_api/frame.rb +186 -141
  61. data/lib/playwright_api/frame_locator.rb +29 -32
  62. data/lib/playwright_api/js_handle.rb +22 -12
  63. data/lib/playwright_api/keyboard.rb +29 -14
  64. data/lib/playwright_api/locator.rb +183 -112
  65. data/lib/playwright_api/mouse.rb +9 -2
  66. data/lib/playwright_api/page.rb +307 -259
  67. data/lib/playwright_api/playwright.rb +17 -10
  68. data/lib/playwright_api/request.rb +40 -13
  69. data/lib/playwright_api/response.rb +33 -16
  70. data/lib/playwright_api/route.rb +50 -17
  71. data/lib/playwright_api/selectors.rb +12 -7
  72. data/lib/playwright_api/touchscreen.rb +2 -0
  73. data/lib/playwright_api/tracing.rb +17 -11
  74. data/lib/playwright_api/web_socket.rb +15 -10
  75. data/lib/playwright_api/worker.rb +20 -17
  76. data/playwright.gemspec +2 -2
  77. data/sig/playwright.rbs +559 -0
  78. metadata +10 -9
@@ -44,9 +44,6 @@ module Playwright
44
44
  # ```
45
45
  class Page < PlaywrightApi
46
46
 
47
- # **DEPRECATED** This property is deprecated. Please use other libraries such as [Axe](https://www.deque.com/axe/) if you
48
- # need to test page accessibility. See our Node.js [guide](https://playwright.dev/docs/accessibility-testing) for
49
- # integration with Axe.
50
47
  def accessibility # property
51
48
  wrap_impl(@impl.accessibility)
52
49
  end
@@ -59,6 +56,7 @@ module Playwright
59
56
  wrap_impl(@impl.mouse)
60
57
  end
61
58
 
59
+ #
62
60
  # API testing helper associated with this page. This method returns the same instance as
63
61
  # [`property: BrowserContext.request`] on the page's context. See [`property: BrowserContext.request`] for more details.
64
62
  def request # property
@@ -69,14 +67,16 @@ module Playwright
69
67
  wrap_impl(@impl.touchscreen)
70
68
  end
71
69
 
70
+ #
72
71
  # Adds a script which would be evaluated in one of the following scenarios:
73
72
  # - Whenever the page is navigated.
74
- # - Whenever the child frame is attached or navigated. In this case, the script is evaluated in the context of the newly
75
- # attached frame.
73
+ # - Whenever the child frame is attached or navigated. In this case, the script is evaluated in the context of the newly attached frame.
76
74
  #
77
75
  # The script is evaluated after the document was created but before any of its scripts were run. This is useful to amend
78
76
  # the JavaScript environment, e.g. to seed `Math.random`.
79
77
  #
78
+ # **Usage**
79
+ #
80
80
  # An example of overriding `Math.random` before the page loads:
81
81
  #
82
82
  # ```python sync
@@ -84,48 +84,44 @@ module Playwright
84
84
  # page.add_init_script(path="./preload.js")
85
85
  # ```
86
86
  #
87
- # > NOTE: The order of evaluation of multiple scripts installed via [`method: BrowserContext.addInitScript`] and
87
+ # **NOTE**: The order of evaluation of multiple scripts installed via [`method: BrowserContext.addInitScript`] and
88
88
  # [`method: Page.addInitScript`] is not defined.
89
89
  def add_init_script(path: nil, script: nil)
90
90
  wrap_impl(@impl.add_init_script(path: unwrap_impl(path), script: unwrap_impl(script)))
91
91
  end
92
92
 
93
+ #
93
94
  # Adds a `<script>` tag into the page with the desired url or content. Returns the added tag when the script's onload
94
95
  # fires or when the script content was injected into frame.
95
- #
96
- # Shortcut for main frame's [`method: Frame.addScriptTag`].
97
96
  def add_script_tag(content: nil, path: nil, type: nil, url: nil)
98
97
  wrap_impl(@impl.add_script_tag(content: unwrap_impl(content), path: unwrap_impl(path), type: unwrap_impl(type), url: unwrap_impl(url)))
99
98
  end
100
99
 
100
+ #
101
101
  # Adds a `<link rel="stylesheet">` tag into the page with the desired url or a `<style type="text/css">` tag with the
102
102
  # content. Returns the added tag when the stylesheet's onload fires or when the CSS content was injected into frame.
103
- #
104
- # Shortcut for main frame's [`method: Frame.addStyleTag`].
105
103
  def add_style_tag(content: nil, path: nil, url: nil)
106
104
  wrap_impl(@impl.add_style_tag(content: unwrap_impl(content), path: unwrap_impl(path), url: unwrap_impl(url)))
107
105
  end
108
106
 
107
+ #
109
108
  # Brings page to front (activates tab).
110
109
  def bring_to_front
111
110
  wrap_impl(@impl.bring_to_front)
112
111
  end
113
112
 
113
+ #
114
114
  # This method checks an element matching `selector` by performing the following steps:
115
115
  # 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
116
- # 1. Ensure that matched element is a checkbox or a radio input. If not, this method throws. If the element is already
117
- # checked, this method returns immediately.
118
- # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the
119
- # element is detached during the checks, the whole action is retried.
116
+ # 1. Ensure that matched element is a checkbox or a radio input. If not, this method throws. If the element is already checked, this method returns immediately.
117
+ # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the element is detached during the checks, the whole action is retried.
120
118
  # 1. Scroll the element into view if needed.
121
119
  # 1. Use [`property: Page.mouse`] to click in the center of the element.
122
120
  # 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
123
121
  # 1. Ensure that the element is now checked. If not, this method throws.
124
122
  #
125
- # When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
126
- # zero timeout disables this.
127
- #
128
- # Shortcut for main frame's [`method: Frame.check`].
123
+ # When all steps combined have not finished during the specified `timeout`, this method throws a
124
+ # `TimeoutError`. Passing zero timeout disables this.
129
125
  def check(
130
126
  selector,
131
127
  force: nil,
@@ -137,18 +133,16 @@ module Playwright
137
133
  wrap_impl(@impl.check(unwrap_impl(selector), force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), position: unwrap_impl(position), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout), trial: unwrap_impl(trial)))
138
134
  end
139
135
 
136
+ #
140
137
  # This method clicks an element matching `selector` by performing the following steps:
141
138
  # 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
142
- # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the
143
- # element is detached during the checks, the whole action is retried.
139
+ # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the element is detached during the checks, the whole action is retried.
144
140
  # 1. Scroll the element into view if needed.
145
141
  # 1. Use [`property: Page.mouse`] to click in the center of the element, or the specified `position`.
146
142
  # 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
147
143
  #
148
- # When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
149
- # zero timeout disables this.
150
- #
151
- # Shortcut for main frame's [`method: Frame.click`].
144
+ # When all steps combined have not finished during the specified `timeout`, this method throws a
145
+ # `TimeoutError`. Passing zero timeout disables this.
152
146
  def click(
153
147
  selector,
154
148
  button: nil,
@@ -164,42 +158,42 @@ module Playwright
164
158
  wrap_impl(@impl.click(unwrap_impl(selector), button: unwrap_impl(button), clickCount: unwrap_impl(clickCount), delay: unwrap_impl(delay), force: unwrap_impl(force), modifiers: unwrap_impl(modifiers), noWaitAfter: unwrap_impl(noWaitAfter), position: unwrap_impl(position), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout), trial: unwrap_impl(trial)))
165
159
  end
166
160
 
161
+ #
167
162
  # If `runBeforeUnload` is `false`, does not run any unload handlers and waits for the page to be closed. If
168
163
  # `runBeforeUnload` is `true` the method will run unload handlers, but will **not** wait for the page to close.
169
164
  #
170
165
  # By default, `page.close()` **does not** run `beforeunload` handlers.
171
166
  #
172
- # > NOTE: if `runBeforeUnload` is passed as true, a `beforeunload` dialog might be summoned and should be handled manually
173
- # via [`event: Page.dialog`] event.
167
+ # **NOTE**: if `runBeforeUnload` is passed as true, a `beforeunload` dialog might be summoned and should be handled
168
+ # manually via [`event: Page.dialog`] event.
174
169
  def close(runBeforeUnload: nil)
175
170
  wrap_impl(@impl.close(runBeforeUnload: unwrap_impl(runBeforeUnload)))
176
171
  end
177
172
 
173
+ #
178
174
  # Gets the full HTML contents of the page, including the doctype.
179
175
  def content
180
176
  wrap_impl(@impl.content)
181
177
  end
182
178
 
179
+ #
183
180
  # Get the browser context that the page belongs to.
184
181
  def context
185
182
  wrap_impl(@impl.context)
186
183
  end
187
184
 
185
+ #
188
186
  # This method double clicks an element matching `selector` by performing the following steps:
189
187
  # 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
190
- # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the
191
- # element is detached during the checks, the whole action is retried.
188
+ # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the element is detached during the checks, the whole action is retried.
192
189
  # 1. Scroll the element into view if needed.
193
190
  # 1. Use [`property: Page.mouse`] to double click in the center of the element, or the specified `position`.
194
- # 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set. Note that if the
195
- # first click of the `dblclick()` triggers a navigation event, this method will throw.
196
- #
197
- # When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
198
- # zero timeout disables this.
191
+ # 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set. Note that if the first click of the `dblclick()` triggers a navigation event, this method will throw.
199
192
  #
200
- # > NOTE: `page.dblclick()` dispatches two `click` events and a single `dblclick` event.
193
+ # When all steps combined have not finished during the specified `timeout`, this method throws a
194
+ # `TimeoutError`. Passing zero timeout disables this.
201
195
  #
202
- # Shortcut for main frame's [`method: Frame.dblclick`].
196
+ # **NOTE**: `page.dblclick()` dispatches two `click` events and a single `dblclick` event.
203
197
  def dblclick(
204
198
  selector,
205
199
  button: nil,
@@ -214,18 +208,23 @@ module Playwright
214
208
  wrap_impl(@impl.dblclick(unwrap_impl(selector), button: unwrap_impl(button), delay: unwrap_impl(delay), force: unwrap_impl(force), modifiers: unwrap_impl(modifiers), noWaitAfter: unwrap_impl(noWaitAfter), position: unwrap_impl(position), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout), trial: unwrap_impl(trial)))
215
209
  end
216
210
 
217
- # The snippet below dispatches the `click` event on the element. Regardless of the visibility state of the element,
218
- # `click` is dispatched. This is equivalent to calling
211
+ #
212
+ # The snippet below dispatches the `click` event on the element. Regardless of the visibility state of the element, `click`
213
+ # is dispatched. This is equivalent to calling
219
214
  # [element.click()](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click).
220
215
  #
216
+ # **Usage**
217
+ #
221
218
  # ```python sync
222
219
  # page.dispatch_event("button#submit", "click")
223
220
  # ```
224
221
  #
225
- # Under the hood, it creates an instance of an event based on the given `type`, initializes it with `eventInit` properties
226
- # and dispatches it on the element. Events are `composed`, `cancelable` and bubble by default.
222
+ # Under the hood, it creates an instance of an event based on the given `type`, initializes it with
223
+ # `eventInit` properties and dispatches it on the element. Events are `composed`, `cancelable` and bubble by
224
+ # default.
227
225
  #
228
- # Since `eventInit` is event-specific, please refer to the events documentation for the lists of initial properties:
226
+ # Since `eventInit` is event-specific, please refer to the events documentation for the lists of initial
227
+ # properties:
229
228
  # - [DragEvent](https://developer.mozilla.org/en-US/docs/Web/API/DragEvent/DragEvent)
230
229
  # - [FocusEvent](https://developer.mozilla.org/en-US/docs/Web/API/FocusEvent/FocusEvent)
231
230
  # - [KeyboardEvent](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/KeyboardEvent)
@@ -250,8 +249,12 @@ module Playwright
250
249
  wrap_impl(@impl.dispatch_event(unwrap_impl(selector), unwrap_impl(type), eventInit: unwrap_impl(eventInit), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
251
250
  end
252
251
 
253
- # This method drags the source element to the target element. It will first move to the source element, perform a
254
- # `mousedown`, then move to the target element and perform a `mouseup`.
252
+ #
253
+ # This method drags the source element to the target element.
254
+ # It will first move to the source element, perform a `mousedown`,
255
+ # then move to the target element and perform a `mouseup`.
256
+ #
257
+ # **Usage**
255
258
  #
256
259
  # ```python sync
257
260
  # page.drag_and_drop("#source", "#target")
@@ -276,8 +279,10 @@ module Playwright
276
279
  wrap_impl(@impl.drag_and_drop(unwrap_impl(source), unwrap_impl(target), force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), sourcePosition: unwrap_impl(sourcePosition), strict: unwrap_impl(strict), targetPosition: unwrap_impl(targetPosition), timeout: unwrap_impl(timeout), trial: unwrap_impl(trial)))
277
280
  end
278
281
 
279
- # This method changes the `CSS media type` through the `media` argument, and/or the `'prefers-colors-scheme'` media
280
- # feature, using the `colorScheme` argument.
282
+ #
283
+ # This method changes the `CSS media type` through the `media` argument, and/or the `'prefers-colors-scheme'` media feature, using the `colorScheme` argument.
284
+ #
285
+ # **Usage**
281
286
  #
282
287
  # ```python sync
283
288
  # page.evaluate("matchMedia('screen').matches")
@@ -310,30 +315,25 @@ module Playwright
310
315
  wrap_impl(@impl.emulate_media(colorScheme: unwrap_impl(colorScheme), forcedColors: unwrap_impl(forcedColors), media: unwrap_impl(media), reducedMotion: unwrap_impl(reducedMotion)))
311
316
  end
312
317
 
313
- # > NOTE: This method does not wait for the element to pass actionability checks and therefore can lead to the flaky
314
- # tests. Use [`method: Locator.evaluate`], other `Locator` helper methods or web-first assertions instead.
315
318
  #
316
319
  # The method finds an element matching the specified selector within the page and passes it as a first argument to
317
- # `expression`. If no elements match the selector, the method throws an error. Returns the value of `expression`.
320
+ # `expression`. If no elements match the selector, the method throws an error. Returns the value of
321
+ # `expression`.
318
322
  #
319
323
  # If `expression` returns a [Promise], then [`method: Page.evalOnSelector`] would wait for the promise to resolve and
320
324
  # return its value.
321
325
  #
322
- # Examples:
326
+ # **Usage**
323
327
  #
324
328
  # ```python sync
325
329
  # search_value = page.eval_on_selector("#search", "el => el.value")
326
330
  # preload_href = page.eval_on_selector("link[rel=preload]", "el => el.href")
327
331
  # html = page.eval_on_selector(".main-container", "(e, suffix) => e.outer_html + suffix", "hello")
328
332
  # ```
329
- #
330
- # Shortcut for main frame's [`method: Frame.evalOnSelector`].
331
333
  def eval_on_selector(selector, expression, arg: nil, strict: nil)
332
334
  wrap_impl(@impl.eval_on_selector(unwrap_impl(selector), unwrap_impl(expression), arg: unwrap_impl(arg), strict: unwrap_impl(strict)))
333
335
  end
334
336
 
335
- # > NOTE: In most cases, [`method: Locator.evaluateAll`], other `Locator` helper methods and web-first assertions do a
336
- # better job.
337
337
  #
338
338
  # The method finds all elements matching the specified selector within the page and passes an array of matched elements as
339
339
  # a first argument to `expression`. Returns the result of `expression` invocation.
@@ -341,7 +341,7 @@ module Playwright
341
341
  # If `expression` returns a [Promise], then [`method: Page.evalOnSelectorAll`] would wait for the promise to resolve and
342
342
  # return its value.
343
343
  #
344
- # Examples:
344
+ # **Usage**
345
345
  #
346
346
  # ```python sync
347
347
  # div_counts = page.eval_on_selector_all("div", "(divs, min) => divs.length >= min", 10)
@@ -350,14 +350,17 @@ module Playwright
350
350
  wrap_impl(@impl.eval_on_selector_all(unwrap_impl(selector), unwrap_impl(expression), arg: unwrap_impl(arg)))
351
351
  end
352
352
 
353
+ #
353
354
  # Returns the value of the `expression` invocation.
354
355
  #
355
356
  # If the function passed to the [`method: Page.evaluate`] returns a [Promise], then [`method: Page.evaluate`] would wait
356
357
  # for the promise to resolve and return its value.
357
358
  #
358
359
  # If the function passed to the [`method: Page.evaluate`] returns a non-[Serializable] value, then
359
- # [`method: Page.evaluate`] resolves to `undefined`. Playwright also supports transferring some additional values that are
360
- # not serializable by `JSON`: `-0`, `NaN`, `Infinity`, `-Infinity`.
360
+ # [`method: Page.evaluate`] resolves to `undefined`. Playwright also supports transferring some
361
+ # additional values that are not serializable by `JSON`: `-0`, `NaN`, `Infinity`, `-Infinity`.
362
+ #
363
+ # **Usage**
361
364
  #
362
365
  # Passing argument to `expression`:
363
366
  #
@@ -381,19 +384,19 @@ module Playwright
381
384
  # html = page.evaluate("([body, suffix]) => body.innerHTML + suffix", [body_handle, "hello"])
382
385
  # body_handle.dispose()
383
386
  # ```
384
- #
385
- # Shortcut for main frame's [`method: Frame.evaluate`].
386
387
  def evaluate(expression, arg: nil)
387
388
  wrap_impl(@impl.evaluate(unwrap_impl(expression), arg: unwrap_impl(arg)))
388
389
  end
389
390
 
391
+ #
390
392
  # Returns the value of the `expression` invocation as a `JSHandle`.
391
393
  #
392
- # The only difference between [`method: Page.evaluate`] and [`method: Page.evaluateHandle`] is that
393
- # [`method: Page.evaluateHandle`] returns `JSHandle`.
394
+ # The only difference between [`method: Page.evaluate`] and [`method: Page.evaluateHandle`] is that [`method: Page.evaluateHandle`] returns `JSHandle`.
395
+ #
396
+ # If the function passed to the [`method: Page.evaluateHandle`] returns a [Promise], then [`method: Page.evaluateHandle`] would wait for the
397
+ # promise to resolve and return its value.
394
398
  #
395
- # If the function passed to the [`method: Page.evaluateHandle`] returns a [Promise], then [`method: Page.evaluateHandle`]
396
- # would wait for the promise to resolve and return its value.
399
+ # **Usage**
397
400
  #
398
401
  # ```python sync
399
402
  # a_window_handle = page.evaluate_handle("Promise.resolve(window)")
@@ -418,16 +421,19 @@ module Playwright
418
421
  wrap_impl(@impl.evaluate_handle(unwrap_impl(expression), arg: unwrap_impl(arg)))
419
422
  end
420
423
 
421
- # The method adds a function called `name` on the `window` object of every frame in this page. When called, the function
422
- # executes `callback` and returns a [Promise] which resolves to the return value of `callback`. If the `callback` returns
423
- # a [Promise], it will be awaited.
424
424
  #
425
- # The first argument of the `callback` function contains information about the caller: `{ browserContext: BrowserContext,
426
- # page: Page, frame: Frame }`.
425
+ # The method adds a function called `name` on the `window` object of every frame in this page. When called, the
426
+ # function executes `callback` and returns a [Promise] which resolves to the return value of `callback`.
427
+ # If the `callback` returns a [Promise], it will be awaited.
428
+ #
429
+ # The first argument of the `callback` function contains information about the caller: `{ browserContext:
430
+ # BrowserContext, page: Page, frame: Frame }`.
427
431
  #
428
432
  # See [`method: BrowserContext.exposeBinding`] for the context-wide version.
429
433
  #
430
- # > NOTE: Functions installed via [`method: Page.exposeBinding`] survive navigations.
434
+ # **NOTE**: Functions installed via [`method: Page.exposeBinding`] survive navigations.
435
+ #
436
+ # **Usage**
431
437
  #
432
438
  # An example of exposing page URL to all frames in a page:
433
439
  #
@@ -474,14 +480,17 @@ module Playwright
474
480
  wrap_impl(@impl.expose_binding(unwrap_impl(name), unwrap_impl(callback), handle: unwrap_impl(handle)))
475
481
  end
476
482
 
477
- # The method adds a function called `name` on the `window` object of every frame in the page. When called, the function
478
- # executes `callback` and returns a [Promise] which resolves to the return value of `callback`.
483
+ #
484
+ # The method adds a function called `name` on the `window` object of every frame in the page. When called, the
485
+ # function executes `callback` and returns a [Promise] which resolves to the return value of `callback`.
479
486
  #
480
487
  # If the `callback` returns a [Promise], it will be awaited.
481
488
  #
482
489
  # See [`method: BrowserContext.exposeFunction`] for context-wide exposed function.
483
490
  #
484
- # > NOTE: Functions installed via [`method: Page.exposeFunction`] survive navigations.
491
+ # **NOTE**: Functions installed via [`method: Page.exposeFunction`] survive navigations.
492
+ #
493
+ # **Usage**
485
494
  #
486
495
  # An example of adding a `sha256` function to the page:
487
496
  #
@@ -518,18 +527,12 @@ module Playwright
518
527
  wrap_impl(@impl.expose_function(unwrap_impl(name), unwrap_impl(callback)))
519
528
  end
520
529
 
521
- # This method waits for an element matching `selector`, waits for [actionability](../actionability.md) checks, focuses the
522
- # element, fills it and triggers an `input` event after filling. Note that you can pass an empty string to clear the input
523
- # field.
524
530
  #
525
- # If the target element is not an `<input>`, `<textarea>` or `[contenteditable]` element, this method throws an error.
526
- # However, if the element is inside the `<label>` element that has an associated
527
- # [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), the control will be filled
528
- # instead.
531
+ # This method waits for an element matching `selector`, waits for [actionability](../actionability.md) checks, focuses the element, fills it and triggers an `input` event after filling. Note that you can pass an empty string to clear the input field.
529
532
  #
530
- # To send fine-grained keyboard events, use [`method: Page.type`].
533
+ # If the target element is not an `<input>`, `<textarea>` or `[contenteditable]` element, this method throws an error. However, if the element is inside the `<label>` element that has an associated [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), the control will be filled instead.
531
534
  #
532
- # Shortcut for main frame's [`method: Frame.fill`].
535
+ # To send fine-grained keyboard events, use [`method: Page.type`].
533
536
  def fill(
534
537
  selector,
535
538
  value,
@@ -540,16 +543,18 @@ module Playwright
540
543
  wrap_impl(@impl.fill(unwrap_impl(selector), unwrap_impl(value), force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
541
544
  end
542
545
 
543
- # This method fetches an element with `selector` and focuses it. If there's no element matching `selector`, the method
544
- # waits until a matching element appears in the DOM.
545
546
  #
546
- # Shortcut for main frame's [`method: Frame.focus`].
547
+ # This method fetches an element with `selector` and focuses it. If there's no element matching
548
+ # `selector`, the method waits until a matching element appears in the DOM.
547
549
  def focus(selector, strict: nil, timeout: nil)
548
550
  wrap_impl(@impl.focus(unwrap_impl(selector), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
549
551
  end
550
552
 
553
+ #
551
554
  # Returns frame matching the specified criteria. Either `name` or `url` must be specified.
552
555
  #
556
+ # **Usage**
557
+ #
553
558
  # ```py
554
559
  # frame = page.frame(name="frame-name")
555
560
  # ```
@@ -561,9 +566,14 @@ module Playwright
561
566
  wrap_impl(@impl.frame(name: unwrap_impl(name), url: unwrap_impl(url)))
562
567
  end
563
568
 
564
- # When working with iframes, you can create a frame locator that will enter the iframe and allow selecting elements in
565
- # that iframe. Following snippet locates element with text "Submit" in the iframe with id `my-frame`, like `<iframe
566
- # id="my-frame">`:
569
+ #
570
+ # When working with iframes, you can create a frame locator that will enter the iframe and allow selecting elements
571
+ # in that iframe.
572
+ #
573
+ # **Usage**
574
+ #
575
+ # Following snippet locates element with text "Submit" in the iframe with id `my-frame`,
576
+ # like `<iframe id="my-frame">`:
567
577
  #
568
578
  # ```python sync
569
579
  # locator = page.frame_locator("#my-iframe").get_by_text("Submit")
@@ -573,16 +583,19 @@ module Playwright
573
583
  wrap_impl(@impl.frame_locator(unwrap_impl(selector)))
574
584
  end
575
585
 
586
+ #
576
587
  # An array of all frames attached to the page.
577
588
  def frames
578
589
  wrap_impl(@impl.frames)
579
590
  end
580
591
 
592
+ #
581
593
  # Returns element attribute value.
582
594
  def get_attribute(selector, name, strict: nil, timeout: nil)
583
595
  wrap_impl(@impl.get_attribute(unwrap_impl(selector), unwrap_impl(name), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
584
596
  end
585
597
 
598
+ #
586
599
  # Allows locating elements by their alt text. For example, this method will find the image by alt text "Castle":
587
600
  #
588
601
  # ```html
@@ -592,8 +605,8 @@ module Playwright
592
605
  wrap_impl(@impl.get_by_alt_text(unwrap_impl(text), exact: unwrap_impl(exact)))
593
606
  end
594
607
 
595
- # Allows locating input elements by the text of the associated label. For example, this method will find the input by
596
- # label text "Password" in the following DOM:
608
+ #
609
+ # Allows locating input elements by the text of the associated label. For example, this method will find the input by label text "Password" in the following DOM:
597
610
  #
598
611
  # ```html
599
612
  # <label for="password-input">Password:</label>
@@ -603,8 +616,8 @@ module Playwright
603
616
  wrap_impl(@impl.get_by_label(unwrap_impl(text), exact: unwrap_impl(exact)))
604
617
  end
605
618
 
606
- # Allows locating input elements by the placeholder text. For example, this method will find the input by placeholder
607
- # "Country":
619
+ #
620
+ # Allows locating input elements by the placeholder text. For example, this method will find the input by placeholder "Country":
608
621
  #
609
622
  # ```html
610
623
  # <input placeholder="Country">
@@ -613,15 +626,10 @@ module Playwright
613
626
  wrap_impl(@impl.get_by_placeholder(unwrap_impl(text), exact: unwrap_impl(exact)))
614
627
  end
615
628
 
616
- # Allows locating elements by their [ARIA role](https://www.w3.org/TR/wai-aria-1.2/#roles),
617
- # [ARIA attributes](https://www.w3.org/TR/wai-aria-1.2/#aria-attributes) and
618
- # [accessible name](https://w3c.github.io/accname/#dfn-accessible-name). Note that role selector **does not replace**
619
- # accessibility audits and conformance tests, but rather gives early feedback about the ARIA guidelines.
620
629
  #
621
- # Note that many html elements have an implicitly
622
- # [defined role](https://w3c.github.io/html-aam/#html-element-role-mappings) that is recognized by the role selector. You
623
- # can find all the [supported roles here](https://www.w3.org/TR/wai-aria-1.2/#role_definitions). ARIA guidelines **do not
624
- # recommend** duplicating implicit roles and attributes by setting `role` and/or `aria-*` attributes to default values.
630
+ # Allows locating elements by their [ARIA role](https://www.w3.org/TR/wai-aria-1.2/#roles), [ARIA attributes](https://www.w3.org/TR/wai-aria-1.2/#aria-attributes) and [accessible name](https://w3c.github.io/accname/#dfn-accessible-name). Note that role selector **does not replace** accessibility audits and conformance tests, but rather gives early feedback about the ARIA guidelines.
631
+ #
632
+ # Note that many html elements have an implicitly [defined role](https://w3c.github.io/html-aam/#html-element-role-mappings) that is recognized by the role selector. You can find all the [supported roles here](https://www.w3.org/TR/wai-aria-1.2/#role_definitions). ARIA guidelines **do not recommend** duplicating implicit roles and attributes by setting `role` and/or `aria-*` attributes to default values.
625
633
  def get_by_role(
626
634
  role,
627
635
  checked: nil,
@@ -636,12 +644,13 @@ module Playwright
636
644
  wrap_impl(@impl.get_by_role(unwrap_impl(role), checked: unwrap_impl(checked), disabled: unwrap_impl(disabled), exact: unwrap_impl(exact), expanded: unwrap_impl(expanded), includeHidden: unwrap_impl(includeHidden), level: unwrap_impl(level), name: unwrap_impl(name), pressed: unwrap_impl(pressed), selected: unwrap_impl(selected)))
637
645
  end
638
646
 
639
- # Locate element by the test id. By default, the `data-testid` attribute is used as a test id. Use
640
- # [`method: Selectors.setTestIdAttribute`] to configure a different test id attribute if necessary.
647
+ #
648
+ # Locate element by the test id. By default, the `data-testid` attribute is used as a test id. Use [`method: Selectors.setTestIdAttribute`] to configure a different test id attribute if necessary.
641
649
  def get_by_test_id(testId)
642
650
  wrap_impl(@impl.get_by_test_id(unwrap_impl(testId)))
643
651
  end
644
652
 
653
+ #
645
654
  # Allows locating elements that contain given text. Consider the following DOM structure:
646
655
  #
647
656
  # ```html
@@ -668,17 +677,16 @@ module Playwright
668
677
  # page.get_by_text(re.compile("^hello$", re.IGNORECASE))
669
678
  # ```
670
679
  #
671
- # See also [`method: Locator.filter`] that allows to match by another criteria, like an accessible role, and then filter
672
- # by the text content.
680
+ # See also [`method: Locator.filter`] that allows to match by another criteria, like an accessible role, and then filter by the text content.
681
+ #
682
+ # **NOTE**: Matching by text always normalizes whitespace, even with exact match. For example, it turns multiple spaces into one, turns line breaks into spaces and ignores leading and trailing whitespace.
673
683
  #
674
- # > NOTE: Matching by text always normalizes whitespace, even with exact match. For example, it turns multiple spaces into
675
- # one, turns line breaks into spaces and ignores leading and trailing whitespace.
676
- # > NOTE: Input elements of the type `button` and `submit` are matched by their `value` instead of the text content. For
677
- # example, locating by text `"Log in"` matches `<input type=button value="Log in">`.
684
+ # **NOTE**: Input elements of the type `button` and `submit` are matched by their `value` instead of the text content. For example, locating by text `"Log in"` matches `<input type=button value="Log in">`.
678
685
  def get_by_text(text, exact: nil)
679
686
  wrap_impl(@impl.get_by_text(unwrap_impl(text), exact: unwrap_impl(exact)))
680
687
  end
681
688
 
689
+ #
682
690
  # Allows locating elements by their title. For example, this method will find the button by its title "Place the order":
683
691
  #
684
692
  # ```html
@@ -688,6 +696,7 @@ module Playwright
688
696
  wrap_impl(@impl.get_by_title(unwrap_impl(text), exact: unwrap_impl(exact)))
689
697
  end
690
698
 
699
+ #
691
700
  # Returns the main resource response. In case of multiple redirects, the navigation will resolve with the response of the
692
701
  # last redirect. If can not go back, returns `null`.
693
702
  #
@@ -696,6 +705,7 @@ module Playwright
696
705
  wrap_impl(@impl.go_back(timeout: unwrap_impl(timeout), waitUntil: unwrap_impl(waitUntil)))
697
706
  end
698
707
 
708
+ #
699
709
  # Returns the main resource response. In case of multiple redirects, the navigation will resolve with the response of the
700
710
  # last redirect. If can not go forward, returns `null`.
701
711
  #
@@ -704,6 +714,7 @@ module Playwright
704
714
  wrap_impl(@impl.go_forward(timeout: unwrap_impl(timeout), waitUntil: unwrap_impl(waitUntil)))
705
715
  end
706
716
 
717
+ #
707
718
  # Returns the main resource response. In case of multiple redirects, the navigation will resolve with the first
708
719
  # non-redirect response.
709
720
  #
@@ -718,28 +729,25 @@ module Playwright
718
729
  # Found" and 500 "Internal Server Error". The status code for such responses can be retrieved by calling
719
730
  # [`method: Response.status`].
720
731
  #
721
- # > NOTE: The method either throws an error or returns a main resource response. The only exceptions are navigation to
732
+ # **NOTE**: The method either throws an error or returns a main resource response. The only exceptions are navigation to
722
733
  # `about:blank` or navigation to the same URL with a different hash, which would succeed and return `null`.
723
- # > NOTE: Headless mode doesn't support navigation to a PDF document. See the
724
- # [upstream issue](https://bugs.chromium.org/p/chromium/issues/detail?id=761295).
725
734
  #
726
- # Shortcut for main frame's [`method: Frame.goto`]
735
+ # **NOTE**: Headless mode doesn't support navigation to a PDF document. See the
736
+ # [upstream issue](https://bugs.chromium.org/p/chromium/issues/detail?id=761295).
727
737
  def goto(url, referer: nil, timeout: nil, waitUntil: nil)
728
738
  wrap_impl(@impl.goto(unwrap_impl(url), referer: unwrap_impl(referer), timeout: unwrap_impl(timeout), waitUntil: unwrap_impl(waitUntil)))
729
739
  end
730
740
 
741
+ #
731
742
  # This method hovers over an element matching `selector` by performing the following steps:
732
743
  # 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
733
- # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the
734
- # element is detached during the checks, the whole action is retried.
744
+ # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the element is detached during the checks, the whole action is retried.
735
745
  # 1. Scroll the element into view if needed.
736
746
  # 1. Use [`property: Page.mouse`] to hover over the center of the element, or the specified `position`.
737
747
  # 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
738
748
  #
739
- # When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
740
- # zero timeout disables this.
741
- #
742
- # Shortcut for main frame's [`method: Frame.hover`].
749
+ # When all steps combined have not finished during the specified `timeout`, this method throws a
750
+ # `TimeoutError`. Passing zero timeout disables this.
743
751
  def hover(
744
752
  selector,
745
753
  force: nil,
@@ -752,110 +760,124 @@ module Playwright
752
760
  wrap_impl(@impl.hover(unwrap_impl(selector), force: unwrap_impl(force), modifiers: unwrap_impl(modifiers), noWaitAfter: unwrap_impl(noWaitAfter), position: unwrap_impl(position), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout), trial: unwrap_impl(trial)))
753
761
  end
754
762
 
763
+ #
755
764
  # Returns `element.innerHTML`.
756
765
  def inner_html(selector, strict: nil, timeout: nil)
757
766
  wrap_impl(@impl.inner_html(unwrap_impl(selector), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
758
767
  end
759
768
 
769
+ #
760
770
  # Returns `element.innerText`.
761
771
  def inner_text(selector, strict: nil, timeout: nil)
762
772
  wrap_impl(@impl.inner_text(unwrap_impl(selector), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
763
773
  end
764
774
 
775
+ #
765
776
  # Returns `input.value` for the selected `<input>` or `<textarea>` or `<select>` element.
766
777
  #
767
- # Throws for non-input elements. However, if the element is inside the `<label>` element that has an associated
768
- # [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), returns the value of the control.
778
+ # Throws for non-input elements. However, if the element is inside the `<label>` element that has an associated [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), returns the value of the control.
769
779
  def input_value(selector, strict: nil, timeout: nil)
770
780
  wrap_impl(@impl.input_value(unwrap_impl(selector), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
771
781
  end
772
782
 
783
+ #
773
784
  # Returns whether the element is checked. Throws if the element is not a checkbox or radio input.
774
785
  def checked?(selector, strict: nil, timeout: nil)
775
786
  wrap_impl(@impl.checked?(unwrap_impl(selector), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
776
787
  end
777
788
 
789
+ #
778
790
  # Indicates that the page has been closed.
779
791
  def closed?
780
792
  wrap_impl(@impl.closed?)
781
793
  end
782
794
 
795
+ #
783
796
  # Returns whether the element is disabled, the opposite of [enabled](../actionability.md#enabled).
784
797
  def disabled?(selector, strict: nil, timeout: nil)
785
798
  wrap_impl(@impl.disabled?(unwrap_impl(selector), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
786
799
  end
787
800
 
801
+ #
788
802
  # Returns whether the element is [editable](../actionability.md#editable).
789
803
  def editable?(selector, strict: nil, timeout: nil)
790
804
  wrap_impl(@impl.editable?(unwrap_impl(selector), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
791
805
  end
792
806
 
807
+ #
793
808
  # Returns whether the element is [enabled](../actionability.md#enabled).
794
809
  def enabled?(selector, strict: nil, timeout: nil)
795
810
  wrap_impl(@impl.enabled?(unwrap_impl(selector), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
796
811
  end
797
812
 
798
- # Returns whether the element is hidden, the opposite of [visible](../actionability.md#visible). `selector` that does not
799
- # match any elements is considered hidden.
813
+ #
814
+ # Returns whether the element is hidden, the opposite of [visible](../actionability.md#visible). `selector` that does not match any elements is considered hidden.
800
815
  def hidden?(selector, strict: nil, timeout: nil)
801
816
  wrap_impl(@impl.hidden?(unwrap_impl(selector), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
802
817
  end
803
818
 
804
- # Returns whether the element is [visible](../actionability.md#visible). `selector` that does not match any elements is
805
- # considered not visible.
819
+ #
820
+ # Returns whether the element is [visible](../actionability.md#visible). `selector` that does not match any elements is considered not visible.
806
821
  def visible?(selector, strict: nil, timeout: nil)
807
822
  wrap_impl(@impl.visible?(unwrap_impl(selector), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
808
823
  end
809
824
 
810
- # The method returns an element locator that can be used to perform actions on this page / frame. Locator is resolved to
811
- # the element immediately before performing an action, so a series of actions on the same locator can in fact be performed
812
- # on different DOM elements. That would happen if the DOM structure between those actions has changed.
825
+ #
826
+ # The method returns an element locator that can be used to perform actions on this page / frame.
827
+ # Locator is resolved to the element immediately before performing an action, so a series of actions on the same locator can in fact be performed on different DOM elements. That would happen if the DOM structure between those actions has changed.
813
828
  #
814
829
  # [Learn more about locators](../locators.md).
815
830
  def locator(selector, has: nil, hasText: nil)
816
831
  wrap_impl(@impl.locator(unwrap_impl(selector), has: unwrap_impl(has), hasText: unwrap_impl(hasText)))
817
832
  end
818
833
 
834
+ #
819
835
  # The page's main frame. Page is guaranteed to have a main frame which persists during navigations.
820
836
  def main_frame
821
837
  wrap_impl(@impl.main_frame)
822
838
  end
823
839
 
840
+ #
824
841
  # Returns the opener for popup pages and `null` for others. If the opener has been closed already the returns `null`.
825
842
  def opener
826
843
  wrap_impl(@impl.opener)
827
844
  end
828
845
 
829
- # Pauses script execution. Playwright will stop executing the script and wait for the user to either press 'Resume' button
830
- # in the page overlay or to call `playwright.resume()` in the DevTools console.
846
+ #
847
+ # Pauses script execution. Playwright will stop executing the script and wait for the user to either press 'Resume'
848
+ # button in the page overlay or to call `playwright.resume()` in the DevTools console.
831
849
  #
832
850
  # User can inspect selectors or perform manual steps while paused. Resume will continue running the original script from
833
851
  # the place it was paused.
834
852
  #
835
- # > NOTE: This method requires Playwright to be started in a headed mode, with a falsy `headless` value in the
836
- # [`method: BrowserType.launch`].
853
+ # **NOTE**: This method requires Playwright to be started in a headed mode, with a falsy `headless` value in
854
+ # the [`method: BrowserType.launch`].
837
855
  def pause
838
856
  wrap_impl(@impl.pause)
839
857
  end
840
858
 
859
+ #
841
860
  # Returns the PDF buffer.
842
861
  #
843
- # > NOTE: Generating a pdf is currently only supported in Chromium headless.
862
+ # **NOTE**: Generating a pdf is currently only supported in Chromium headless.
844
863
  #
845
864
  # `page.pdf()` generates a pdf of the page with `print` css media. To generate a pdf with `screen` media, call
846
865
  # [`method: Page.emulateMedia`] before calling `page.pdf()`:
847
866
  #
848
- # > NOTE: By default, `page.pdf()` generates a pdf with modified colors for printing. Use the
867
+ # **NOTE**: By default, `page.pdf()` generates a pdf with modified colors for printing. Use the
849
868
  # [`-webkit-print-color-adjust`](https://developer.mozilla.org/en-US/docs/Web/CSS/-webkit-print-color-adjust) property to
850
869
  # force rendering of exact colors.
851
870
  #
871
+ # **Usage**
872
+ #
852
873
  # ```python sync
853
874
  # # generates a pdf with "screen" media type.
854
875
  # page.emulate_media(media="screen")
855
876
  # page.pdf(path="page.pdf")
856
877
  # ```
857
878
  #
858
- # The `width`, `height`, and `margin` options accept values labeled with units. Unlabeled values are treated as pixels.
879
+ # The `width`, `height`, and `margin` options accept values labeled with units. Unlabeled
880
+ # values are treated as pixels.
859
881
  #
860
882
  # A few examples:
861
883
  # - `page.pdf({width: 100})` - prints with width set to 100 pixels
@@ -881,8 +903,8 @@ module Playwright
881
903
  # - `A5`: 5.83in x 8.27in
882
904
  # - `A6`: 4.13in x 5.83in
883
905
  #
884
- # > NOTE: `headerTemplate` and `footerTemplate` markup have the following limitations: > 1. Script tags inside templates
885
- # are not evaluated. > 2. Page styles are not visible inside templates.
906
+ # **NOTE**: `headerTemplate` and `footerTemplate` markup have the following limitations: > 1. Script tags inside
907
+ # templates are not evaluated. > 2. Page styles are not visible inside templates.
886
908
  def pdf(
887
909
  displayHeaderFooter: nil,
888
910
  footerTemplate: nil,
@@ -900,10 +922,12 @@ module Playwright
900
922
  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)))
901
923
  end
902
924
 
925
+ #
903
926
  # Focuses the element, and then uses [`method: Keyboard.down`] and [`method: Keyboard.up`].
904
927
  #
905
- # `key` can specify the intended [keyboardEvent.key](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key)
906
- # value or a single character to generate the text for. A superset of the `key` values can be found
928
+ # `key` can specify the intended
929
+ # [keyboardEvent.key](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key) value or a single character to
930
+ # generate the text for. A superset of the `key` values can be found
907
931
  # [here](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values). Examples of the keys are:
908
932
  #
909
933
  # `F1` - `F12`, `Digit0`- `Digit9`, `KeyA`- `KeyZ`, `Backquote`, `Minus`, `Equal`, `Backslash`, `Backspace`, `Tab`,
@@ -913,12 +937,14 @@ module Playwright
913
937
  #
914
938
  # Holding down `Shift` will type the text that corresponds to the `key` in the upper case.
915
939
  #
916
- # If `key` is a single character, it is case-sensitive, so the values `a` and `A` will generate different respective
917
- # texts.
940
+ # If `key` is a single character, it is case-sensitive, so the values `a` and `A` will generate different
941
+ # respective texts.
918
942
  #
919
943
  # Shortcuts such as `key: "Control+o"` or `key: "Control+Shift+T"` are supported as well. When specified with the
920
944
  # modifier, modifier is pressed and being held while the subsequent key is being pressed.
921
945
  #
946
+ # **Usage**
947
+ #
922
948
  # ```python sync
923
949
  # page = browser.new_page()
924
950
  # page.goto("https://keycode.info")
@@ -940,40 +966,38 @@ module Playwright
940
966
  wrap_impl(@impl.press(unwrap_impl(selector), unwrap_impl(key), delay: unwrap_impl(delay), noWaitAfter: unwrap_impl(noWaitAfter), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
941
967
  end
942
968
 
943
- # > NOTE: The use of `ElementHandle` is discouraged, use `Locator` objects and web-first assertions instead.
944
969
  #
945
970
  # The method finds an element matching the specified selector within the page. If no elements match the selector, the
946
971
  # return value resolves to `null`. To wait for an element on the page, use [`method: Locator.waitFor`].
947
- #
948
- # Shortcut for main frame's [`method: Frame.querySelector`].
949
972
  def query_selector(selector, strict: nil)
950
973
  wrap_impl(@impl.query_selector(unwrap_impl(selector), strict: unwrap_impl(strict)))
951
974
  end
952
975
 
953
- # > NOTE: The use of `ElementHandle` is discouraged, use `Locator` objects and web-first assertions instead.
954
976
  #
955
977
  # The method finds all elements matching the specified selector within the page. If no elements match the selector, the
956
978
  # return value resolves to `[]`.
957
- #
958
- # Shortcut for main frame's [`method: Frame.querySelectorAll`].
959
979
  def query_selector_all(selector)
960
980
  wrap_impl(@impl.query_selector_all(unwrap_impl(selector)))
961
981
  end
962
982
 
963
- # This method reloads the current page, in the same way as if the user had triggered a browser refresh. Returns the main
964
- # resource response. In case of multiple redirects, the navigation will resolve with the response of the last redirect.
983
+ #
984
+ # This method reloads the current page, in the same way as if the user had triggered a browser refresh.
985
+ # Returns the main resource response. In case of multiple redirects, the navigation will resolve with the response of the
986
+ # last redirect.
965
987
  def reload(timeout: nil, waitUntil: nil)
966
988
  wrap_impl(@impl.reload(timeout: unwrap_impl(timeout), waitUntil: unwrap_impl(waitUntil)))
967
989
  end
968
990
 
991
+ #
969
992
  # Routing provides the capability to modify network requests that are made by a page.
970
993
  #
971
994
  # Once routing is enabled, every request matching the url pattern will stall unless it's continued, fulfilled or aborted.
972
995
  #
973
- # > NOTE: The handler will only be called for the first url if the response is a redirect.
974
- # > NOTE: [`method: Page.route`] will not intercept requests intercepted by Service Worker. See
975
- # [this](https://github.com/microsoft/playwright/issues/1090) issue. We recommend disabling Service Workers when using
976
- # request interception by setting `Browser.newContext.serviceWorkers` to `'block'`.
996
+ # **NOTE**: The handler will only be called for the first url if the response is a redirect.
997
+ #
998
+ # **NOTE**: [`method: Page.route`] will not intercept requests intercepted by Service Worker. See [this](https://github.com/microsoft/playwright/issues/1090) issue. We recommend disabling Service Workers when using request interception by setting `Browser.newContext.serviceWorkers` to `'block'`.
999
+ #
1000
+ # **Usage**
977
1001
  #
978
1002
  # An example of a naive handler that aborts all image requests:
979
1003
  #
@@ -993,8 +1017,7 @@ module Playwright
993
1017
  # browser.close()
994
1018
  # ```
995
1019
  #
996
- # It is possible to examine the request to decide the route action. For example, mocking all requests that contain some
997
- # post data, and leaving all other requests as is:
1020
+ # It is possible to examine the request to decide the route action. For example, mocking all requests that contain some post data, and leaving all other requests as is:
998
1021
  #
999
1022
  # ```python sync
1000
1023
  # def handle_route(route):
@@ -1010,21 +1033,20 @@ module Playwright
1010
1033
  #
1011
1034
  # To remove a route with its handler you can use [`method: Page.unroute`].
1012
1035
  #
1013
- # > NOTE: Enabling routing disables http cache.
1036
+ # **NOTE**: Enabling routing disables http cache.
1014
1037
  def route(url, handler, times: nil)
1015
1038
  wrap_impl(@impl.route(unwrap_impl(url), unwrap_impl(handler), times: unwrap_impl(times)))
1016
1039
  end
1017
1040
 
1018
- # If specified the network requests that are made in the page will be served from the HAR file. Read more about
1019
- # [Replaying from HAR](../network.md#replaying-from-har).
1020
1041
  #
1021
- # Playwright will not serve requests intercepted by Service Worker from the HAR file. See
1022
- # [this](https://github.com/microsoft/playwright/issues/1090) issue. We recommend disabling Service Workers when using
1023
- # request interception by setting `Browser.newContext.serviceWorkers` to `'block'`.
1042
+ # If specified the network requests that are made in the page will be served from the HAR file. Read more about [Replaying from HAR](../network.md#replaying-from-har).
1043
+ #
1044
+ # Playwright will not serve requests intercepted by Service Worker from the HAR file. See [this](https://github.com/microsoft/playwright/issues/1090) issue. We recommend disabling Service Workers when using request interception by setting `Browser.newContext.serviceWorkers` to `'block'`.
1024
1045
  def route_from_har(har, notFound: nil, update: nil, url: nil)
1025
1046
  wrap_impl(@impl.route_from_har(unwrap_impl(har), notFound: unwrap_impl(notFound), update: unwrap_impl(update), url: unwrap_impl(url)))
1026
1047
  end
1027
1048
 
1049
+ #
1028
1050
  # Returns the buffer with the captured screenshot.
1029
1051
  def screenshot(
1030
1052
  animations: nil,
@@ -1041,17 +1063,17 @@ module Playwright
1041
1063
  wrap_impl(@impl.screenshot(animations: unwrap_impl(animations), caret: unwrap_impl(caret), clip: unwrap_impl(clip), fullPage: unwrap_impl(fullPage), mask: unwrap_impl(mask), omitBackground: unwrap_impl(omitBackground), path: unwrap_impl(path), quality: unwrap_impl(quality), scale: unwrap_impl(scale), timeout: unwrap_impl(timeout), type: unwrap_impl(type)))
1042
1064
  end
1043
1065
 
1044
- # This method waits for an element matching `selector`, waits for [actionability](../actionability.md) checks, waits until
1045
- # all specified options are present in the `<select>` element and selects these options.
1046
1066
  #
1047
- # If the target element is not a `<select>` element, this method throws an error. However, if the element is inside the
1048
- # `<label>` element that has an associated
1049
- # [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), the control will be used instead.
1067
+ # This method waits for an element matching `selector`, waits for [actionability](../actionability.md) checks, waits until all specified options are present in the `<select>` element and selects these options.
1068
+ #
1069
+ # If the target element is not a `<select>` element, this method throws an error. However, if the element is inside the `<label>` element that has an associated [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), the control will be used instead.
1050
1070
  #
1051
1071
  # Returns the array of option values that have been successfully selected.
1052
1072
  #
1053
1073
  # Triggers a `change` and `input` event once all the provided options have been selected.
1054
1074
  #
1075
+ # **Usage**
1076
+ #
1055
1077
  # ```python sync
1056
1078
  # # single selection matching the value
1057
1079
  # page.select_option("select#colors", "blue")
@@ -1060,8 +1082,6 @@ module Playwright
1060
1082
  # # multiple selection
1061
1083
  # page.select_option("select#colors", value=["red", "green", "blue"])
1062
1084
  # ```
1063
- #
1064
- # Shortcut for main frame's [`method: Frame.selectOption`].
1065
1085
  def select_option(
1066
1086
  selector,
1067
1087
  element: nil,
@@ -1075,21 +1095,19 @@ module Playwright
1075
1095
  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), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
1076
1096
  end
1077
1097
 
1098
+ #
1078
1099
  # This method checks or unchecks an element matching `selector` by performing the following steps:
1079
1100
  # 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
1080
1101
  # 1. Ensure that matched element is a checkbox or a radio input. If not, this method throws.
1081
1102
  # 1. If the element already has the right checked state, this method returns immediately.
1082
- # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the
1083
- # element is detached during the checks, the whole action is retried.
1103
+ # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the element is detached during the checks, the whole action is retried.
1084
1104
  # 1. Scroll the element into view if needed.
1085
1105
  # 1. Use [`property: Page.mouse`] to click in the center of the element.
1086
1106
  # 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
1087
1107
  # 1. Ensure that the element is now checked or unchecked. If not, this method throws.
1088
1108
  #
1089
- # When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
1090
- # zero timeout disables this.
1091
- #
1092
- # Shortcut for main frame's [`method: Frame.setChecked`].
1109
+ # When all steps combined have not finished during the specified `timeout`, this method throws a
1110
+ # `TimeoutError`. Passing zero timeout disables this.
1093
1111
  def set_checked(
1094
1112
  selector,
1095
1113
  checked,
@@ -1107,6 +1125,7 @@ module Playwright
1107
1125
  end
1108
1126
  alias_method :content=, :set_content
1109
1127
 
1128
+ #
1110
1129
  # This setting will change the default maximum navigation time for the following methods and related shortcuts:
1111
1130
  # - [`method: Page.goBack`]
1112
1131
  # - [`method: Page.goForward`]
@@ -1116,36 +1135,37 @@ module Playwright
1116
1135
  # - [`method: Page.waitForNavigation`]
1117
1136
  # - [`method: Page.waitForURL`]
1118
1137
  #
1119
- # > NOTE: [`method: Page.setDefaultNavigationTimeout`] takes priority over [`method: Page.setDefaultTimeout`],
1138
+ # **NOTE**: [`method: Page.setDefaultNavigationTimeout`] takes priority over [`method: Page.setDefaultTimeout`],
1120
1139
  # [`method: BrowserContext.setDefaultTimeout`] and [`method: BrowserContext.setDefaultNavigationTimeout`].
1121
1140
  def set_default_navigation_timeout(timeout)
1122
1141
  wrap_impl(@impl.set_default_navigation_timeout(unwrap_impl(timeout)))
1123
1142
  end
1124
1143
  alias_method :default_navigation_timeout=, :set_default_navigation_timeout
1125
1144
 
1145
+ #
1126
1146
  # This setting will change the default maximum time for all the methods accepting `timeout` option.
1127
1147
  #
1128
- # > NOTE: [`method: Page.setDefaultNavigationTimeout`] takes priority over [`method: Page.setDefaultTimeout`].
1148
+ # **NOTE**: [`method: Page.setDefaultNavigationTimeout`] takes priority over [`method: Page.setDefaultTimeout`].
1129
1149
  def set_default_timeout(timeout)
1130
1150
  wrap_impl(@impl.set_default_timeout(unwrap_impl(timeout)))
1131
1151
  end
1132
1152
  alias_method :default_timeout=, :set_default_timeout
1133
1153
 
1154
+ #
1134
1155
  # The extra HTTP headers will be sent with every request the page initiates.
1135
1156
  #
1136
- # > NOTE: [`method: Page.setExtraHTTPHeaders`] does not guarantee the order of headers in the outgoing requests.
1157
+ # **NOTE**: [`method: Page.setExtraHTTPHeaders`] does not guarantee the order of headers in the outgoing requests.
1137
1158
  def set_extra_http_headers(headers)
1138
1159
  wrap_impl(@impl.set_extra_http_headers(unwrap_impl(headers)))
1139
1160
  end
1140
1161
  alias_method :extra_http_headers=, :set_extra_http_headers
1141
1162
 
1163
+ #
1142
1164
  # Sets the value of the file input to these file paths or files. If some of the `filePaths` are relative paths, then they
1143
1165
  # are resolved relative to the current working directory. For empty array, clears the selected files.
1144
1166
  #
1145
1167
  # This method expects `selector` to point to an
1146
- # [input element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input). However, if the element is inside the
1147
- # `<label>` element that has an associated
1148
- # [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), targets the control instead.
1168
+ # [input element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input). However, if the element is inside the `<label>` element that has an associated [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), targets the control instead.
1149
1169
  def set_input_files(
1150
1170
  selector,
1151
1171
  files,
@@ -1155,13 +1175,14 @@ module Playwright
1155
1175
  wrap_impl(@impl.set_input_files(unwrap_impl(selector), unwrap_impl(files), noWaitAfter: unwrap_impl(noWaitAfter), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
1156
1176
  end
1157
1177
 
1178
+ #
1158
1179
  # In the case of multiple pages in a single browser, each page can have its own viewport size. However,
1159
1180
  # [`method: Browser.newContext`] allows to set viewport size (and more) for all pages in the context at once.
1160
1181
  #
1161
- # [`method: Page.setViewportSize`] will resize the page. A lot of websites don't expect phones to change size, so you
1162
- # should set the viewport size before navigating to the page. [`method: Page.setViewportSize`] will also reset `screen`
1163
- # size, use [`method: Browser.newContext`] with `screen` and `viewport` parameters if you need better control of these
1164
- # properties.
1182
+ # [`method: Page.setViewportSize`] will resize the page. A lot of websites don't expect phones to change size, so you should set the
1183
+ # viewport size before navigating to the page. [`method: Page.setViewportSize`] will also reset `screen` size, use [`method: Browser.newContext`] with `screen` and `viewport` parameters if you need better control of these properties.
1184
+ #
1185
+ # **Usage**
1165
1186
  #
1166
1187
  # ```python sync
1167
1188
  # page = browser.new_page()
@@ -1173,20 +1194,18 @@ module Playwright
1173
1194
  end
1174
1195
  alias_method :viewport_size=, :set_viewport_size
1175
1196
 
1197
+ #
1176
1198
  # This method taps an element matching `selector` by performing the following steps:
1177
1199
  # 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
1178
- # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the
1179
- # element is detached during the checks, the whole action is retried.
1200
+ # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the element is detached during the checks, the whole action is retried.
1180
1201
  # 1. Scroll the element into view if needed.
1181
1202
  # 1. Use [`property: Page.touchscreen`] to tap the center of the element, or the specified `position`.
1182
1203
  # 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
1183
1204
  #
1184
- # When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
1185
- # zero timeout disables this.
1186
- #
1187
- # > NOTE: [`method: Page.tap`] requires that the `hasTouch` option of the browser context be set to true.
1205
+ # When all steps combined have not finished during the specified `timeout`, this method throws a
1206
+ # `TimeoutError`. Passing zero timeout disables this.
1188
1207
  #
1189
- # Shortcut for main frame's [`method: Frame.tap`].
1208
+ # **NOTE**: [`method: Page.tap`] requires that the `hasTouch` option of the browser context be set to true.
1190
1209
  def tap_point(
1191
1210
  selector,
1192
1211
  force: nil,
@@ -1199,27 +1218,30 @@ module Playwright
1199
1218
  wrap_impl(@impl.tap_point(unwrap_impl(selector), force: unwrap_impl(force), modifiers: unwrap_impl(modifiers), noWaitAfter: unwrap_impl(noWaitAfter), position: unwrap_impl(position), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout), trial: unwrap_impl(trial)))
1200
1219
  end
1201
1220
 
1221
+ #
1202
1222
  # Returns `element.textContent`.
1203
1223
  def text_content(selector, strict: nil, timeout: nil)
1204
1224
  wrap_impl(@impl.text_content(unwrap_impl(selector), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
1205
1225
  end
1206
1226
 
1207
- # Returns the page's title. Shortcut for main frame's [`method: Frame.title`].
1227
+ #
1228
+ # Returns the page's title.
1208
1229
  def title
1209
1230
  wrap_impl(@impl.title)
1210
1231
  end
1211
1232
 
1233
+ #
1212
1234
  # Sends a `keydown`, `keypress`/`input`, and `keyup` event for each character in the text. `page.type` can be used to send
1213
1235
  # fine-grained keyboard events. To fill values in form fields, use [`method: Page.fill`].
1214
1236
  #
1215
1237
  # To press a special key, like `Control` or `ArrowDown`, use [`method: Keyboard.press`].
1216
1238
  #
1239
+ # **Usage**
1240
+ #
1217
1241
  # ```python sync
1218
1242
  # page.type("#mytextarea", "hello") # types instantly
1219
1243
  # page.type("#mytextarea", "world", delay=100) # types slower, like a user
1220
1244
  # ```
1221
- #
1222
- # Shortcut for main frame's [`method: Frame.type`].
1223
1245
  def type(
1224
1246
  selector,
1225
1247
  text,
@@ -1230,21 +1252,18 @@ module Playwright
1230
1252
  wrap_impl(@impl.type(unwrap_impl(selector), unwrap_impl(text), delay: unwrap_impl(delay), noWaitAfter: unwrap_impl(noWaitAfter), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
1231
1253
  end
1232
1254
 
1255
+ #
1233
1256
  # This method unchecks an element matching `selector` by performing the following steps:
1234
1257
  # 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
1235
- # 1. Ensure that matched element is a checkbox or a radio input. If not, this method throws. If the element is already
1236
- # unchecked, this method returns immediately.
1237
- # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the
1238
- # element is detached during the checks, the whole action is retried.
1258
+ # 1. Ensure that matched element is a checkbox or a radio input. If not, this method throws. If the element is already unchecked, this method returns immediately.
1259
+ # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the element is detached during the checks, the whole action is retried.
1239
1260
  # 1. Scroll the element into view if needed.
1240
1261
  # 1. Use [`property: Page.mouse`] to click in the center of the element.
1241
1262
  # 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
1242
1263
  # 1. Ensure that the element is now unchecked. If not, this method throws.
1243
1264
  #
1244
- # When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
1245
- # zero timeout disables this.
1246
- #
1247
- # Shortcut for main frame's [`method: Frame.uncheck`].
1265
+ # When all steps combined have not finished during the specified `timeout`, this method throws a
1266
+ # `TimeoutError`. Passing zero timeout disables this.
1248
1267
  def uncheck(
1249
1268
  selector,
1250
1269
  force: nil,
@@ -1256,16 +1275,18 @@ module Playwright
1256
1275
  wrap_impl(@impl.uncheck(unwrap_impl(selector), force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), position: unwrap_impl(position), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout), trial: unwrap_impl(trial)))
1257
1276
  end
1258
1277
 
1259
- # Removes a route created with [`method: Page.route`]. When `handler` is not specified, removes all routes for the `url`.
1278
+ #
1279
+ # Removes a route created with [`method: Page.route`]. When `handler` is not specified, removes all routes for
1280
+ # the `url`.
1260
1281
  def unroute(url, handler: nil)
1261
1282
  wrap_impl(@impl.unroute(unwrap_impl(url), handler: unwrap_impl(handler)))
1262
1283
  end
1263
1284
 
1264
- # Shortcut for main frame's [`method: Frame.url`].
1265
1285
  def url
1266
1286
  wrap_impl(@impl.url)
1267
1287
  end
1268
1288
 
1289
+ #
1269
1290
  # Video object associated with this page.
1270
1291
  def video
1271
1292
  wrap_impl(@impl.video)
@@ -1275,23 +1296,28 @@ module Playwright
1275
1296
  wrap_impl(@impl.viewport_size)
1276
1297
  end
1277
1298
 
1299
+ #
1278
1300
  # Performs action and waits for a `ConsoleMessage` to be logged by in the page. If predicate is provided, it passes
1279
- # `ConsoleMessage` value into the `predicate` function and waits for `predicate(message)` to return a truthy value. Will
1280
- # throw an error if the page is closed before the [`event: Page.console`] event is fired.
1301
+ # `ConsoleMessage` value into the `predicate` function and waits for `predicate(message)` to return a truthy value.
1302
+ # Will throw an error if the page is closed before the [`event: Page.console`] event is fired.
1281
1303
  def expect_console_message(predicate: nil, timeout: nil, &block)
1282
1304
  wrap_impl(@impl.expect_console_message(predicate: unwrap_impl(predicate), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
1283
1305
  end
1284
1306
 
1285
- # Performs action and waits for a new `Download`. If predicate is provided, it passes `Download` value into the
1286
- # `predicate` function and waits for `predicate(download)` to return a truthy value. Will throw an error if the page is
1287
- # closed before the download event is fired.
1307
+ #
1308
+ # Performs action and waits for a new `Download`. If predicate is provided, it passes
1309
+ # `Download` value into the `predicate` function and waits for `predicate(download)` to return a truthy value.
1310
+ # Will throw an error if the page is closed before the download event is fired.
1288
1311
  def expect_download(predicate: nil, timeout: nil, &block)
1289
1312
  wrap_impl(@impl.expect_download(predicate: unwrap_impl(predicate), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
1290
1313
  end
1291
1314
 
1315
+ #
1292
1316
  # Waits for event to fire and passes its value into the predicate function. Returns when the predicate returns truthy
1293
1317
  # value. Will throw an error if the page is closed before the event is fired. Returns the event data value.
1294
1318
  #
1319
+ # **Usage**
1320
+ #
1295
1321
  # ```python sync
1296
1322
  # with page.expect_event("framenavigated") as event_info:
1297
1323
  # page.get_by_role("button")
@@ -1301,15 +1327,19 @@ module Playwright
1301
1327
  wrap_impl(@impl.expect_event(unwrap_impl(event), predicate: unwrap_impl(predicate), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
1302
1328
  end
1303
1329
 
1304
- # Performs action and waits for a new `FileChooser` to be created. If predicate is provided, it passes `FileChooser` value
1305
- # into the `predicate` function and waits for `predicate(fileChooser)` to return a truthy value. Will throw an error if
1306
- # the page is closed before the file chooser is opened.
1330
+ #
1331
+ # Performs action and waits for a new `FileChooser` to be created. If predicate is provided, it passes
1332
+ # `FileChooser` value into the `predicate` function and waits for `predicate(fileChooser)` to return a truthy value.
1333
+ # Will throw an error if the page is closed before the file chooser is opened.
1307
1334
  def expect_file_chooser(predicate: nil, timeout: nil, &block)
1308
1335
  wrap_impl(@impl.expect_file_chooser(predicate: unwrap_impl(predicate), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
1309
1336
  end
1310
1337
 
1338
+ #
1311
1339
  # Returns when the `expression` returns a truthy value. It resolves to a JSHandle of the truthy value.
1312
1340
  #
1341
+ # **Usage**
1342
+ #
1313
1343
  # The [`method: Page.waitForFunction`] can be used to observe viewport size change:
1314
1344
  #
1315
1345
  # ```python sync
@@ -1333,17 +1363,18 @@ module Playwright
1333
1363
  # selector = ".foo"
1334
1364
  # page.wait_for_function("selector => !!document.querySelector(selector)", selector)
1335
1365
  # ```
1336
- #
1337
- # Shortcut for main frame's [`method: Frame.waitForFunction`].
1338
1366
  def wait_for_function(expression, arg: nil, polling: nil, timeout: nil)
1339
1367
  wrap_impl(@impl.wait_for_function(unwrap_impl(expression), arg: unwrap_impl(arg), polling: unwrap_impl(polling), timeout: unwrap_impl(timeout)))
1340
1368
  end
1341
1369
 
1370
+ #
1342
1371
  # Returns when the required load state has been reached.
1343
1372
  #
1344
1373
  # This resolves when the page reaches a required load state, `load` by default. The navigation must have been committed
1345
1374
  # when this method is called. If current document has already reached the required state, resolves immediately.
1346
1375
  #
1376
+ # **Usage**
1377
+ #
1347
1378
  # ```python sync
1348
1379
  # page.get_by_role("button").click() # click triggers navigation.
1349
1380
  # page.wait_for_load_state() # the promise resolves after "load" event.
@@ -1353,19 +1384,20 @@ module Playwright
1353
1384
  # with page.expect_popup() as page_info:
1354
1385
  # page.get_by_role("button").click() # click triggers a popup.
1355
1386
  # popup = page_info.value
1356
- # # Following resolves after "domcontentloaded" event.
1387
+ # # Wait for the "DOMContentLoaded" event.
1357
1388
  # popup.wait_for_load_state("domcontentloaded")
1358
1389
  # print(popup.title()) # popup is ready to use.
1359
1390
  # ```
1360
- #
1361
- # Shortcut for main frame's [`method: Frame.waitForLoadState`].
1362
1391
  def wait_for_load_state(state: nil, timeout: nil)
1363
1392
  wrap_impl(@impl.wait_for_load_state(state: unwrap_impl(state), timeout: unwrap_impl(timeout)))
1364
1393
  end
1365
1394
 
1366
- # Waits for the main frame navigation and returns the main resource response. In case of multiple redirects, the
1367
- # navigation will resolve with the response of the last redirect. In case of navigation to a different anchor or
1368
- # navigation due to History API usage, the navigation will resolve with `null`.
1395
+ #
1396
+ # Waits for the main frame navigation and returns the main resource response. In case of multiple redirects, the navigation
1397
+ # will resolve with the response of the last redirect. In case of navigation to a different anchor or navigation due to
1398
+ # History API usage, the navigation will resolve with `null`.
1399
+ #
1400
+ # **Usage**
1369
1401
  #
1370
1402
  # This resolves when the page navigates to a new URL or reloads. It is useful for when you run code which will indirectly
1371
1403
  # cause the page to navigate. e.g. The click target has an `onclick` handler that triggers navigation from a `setTimeout`.
@@ -1373,60 +1405,66 @@ module Playwright
1373
1405
  #
1374
1406
  # ```python sync
1375
1407
  # with page.expect_navigation():
1376
- # page.click("a.delayed-navigation") # clicking the link will indirectly cause a navigation
1408
+ # # This action triggers the navigation after a timeout.
1409
+ # page.get_by_text("Navigate after timeout").click()
1377
1410
  # # Resolves after navigation has finished
1378
1411
  # ```
1379
1412
  #
1380
- # > NOTE: Usage of the [History API](https://developer.mozilla.org/en-US/docs/Web/API/History_API) to change the URL is
1381
- # considered a navigation.
1382
- #
1383
- # Shortcut for main frame's [`method: Frame.waitForNavigation`].
1413
+ # **NOTE**: Usage of the [History API](https://developer.mozilla.org/en-US/docs/Web/API/History_API) to change the URL is considered
1414
+ # a navigation.
1384
1415
  def expect_navigation(timeout: nil, url: nil, waitUntil: nil, &block)
1385
1416
  wrap_impl(@impl.expect_navigation(timeout: unwrap_impl(timeout), url: unwrap_impl(url), waitUntil: unwrap_impl(waitUntil), &wrap_block_call(block)))
1386
1417
  end
1387
1418
 
1388
- # Performs action and waits for a popup `Page`. If predicate is provided, it passes [Popup] value into the `predicate`
1389
- # function and waits for `predicate(page)` to return a truthy value. Will throw an error if the page is closed before the
1390
- # popup event is fired.
1419
+ #
1420
+ # Performs action and waits for a popup `Page`. If predicate is provided, it passes
1421
+ # [Popup] value into the `predicate` function and waits for `predicate(page)` to return a truthy value.
1422
+ # Will throw an error if the page is closed before the popup event is fired.
1391
1423
  def expect_popup(predicate: nil, timeout: nil, &block)
1392
1424
  wrap_impl(@impl.expect_popup(predicate: unwrap_impl(predicate), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
1393
1425
  end
1394
1426
 
1395
- # Waits for the matching request and returns it. See [waiting for event](../events.md#waiting-for-event) for more details
1396
- # about events.
1427
+ #
1428
+ # Waits for the matching request and returns it. See [waiting for event](../events.md#waiting-for-event) for more details about events.
1429
+ #
1430
+ # **Usage**
1397
1431
  #
1398
1432
  # ```python sync
1399
1433
  # with page.expect_request("http://example.com/resource") as first:
1400
- # page.click('button')
1434
+ # page.get_by_text("trigger request").click()
1401
1435
  # first_request = first.value
1402
1436
  #
1403
1437
  # # or with a lambda
1404
1438
  # with page.expect_request(lambda request: request.url == "http://example.com" and request.method == "get") as second:
1405
- # page.click('img')
1439
+ # page.get_by_text("trigger request").click()
1406
1440
  # second_request = second.value
1407
1441
  # ```
1408
1442
  def expect_request(urlOrPredicate, timeout: nil, &block)
1409
1443
  wrap_impl(@impl.expect_request(unwrap_impl(urlOrPredicate), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
1410
1444
  end
1411
1445
 
1412
- # Performs action and waits for a `Request` to finish loading. If predicate is provided, it passes `Request` value into
1413
- # the `predicate` function and waits for `predicate(request)` to return a truthy value. Will throw an error if the page is
1414
- # closed before the [`event: Page.requestFinished`] event is fired.
1446
+ #
1447
+ # Performs action and waits for a `Request` to finish loading. If predicate is provided, it passes
1448
+ # `Request` value into the `predicate` function and waits for `predicate(request)` to return a truthy value.
1449
+ # Will throw an error if the page is closed before the [`event: Page.requestFinished`] event is fired.
1415
1450
  def expect_request_finished(predicate: nil, timeout: nil, &block)
1416
1451
  wrap_impl(@impl.expect_request_finished(predicate: unwrap_impl(predicate), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
1417
1452
  end
1418
1453
 
1454
+ #
1419
1455
  # Returns the matched response. See [waiting for event](../events.md#waiting-for-event) for more details about events.
1420
1456
  #
1457
+ # **Usage**
1458
+ #
1421
1459
  # ```python sync
1422
1460
  # with page.expect_response("https://example.com/resource") as response_info:
1423
- # page.click("input")
1461
+ # page.get_by_text("trigger response").click()
1424
1462
  # response = response_info.value
1425
1463
  # return response.ok
1426
1464
  #
1427
1465
  # # or with a lambda
1428
1466
  # with page.expect_response(lambda response: response.url == "https://example.com" and response.status == 200) as response_info:
1429
- # page.click("input")
1467
+ # page.get_by_text("trigger response").click()
1430
1468
  # response = response_info.value
1431
1469
  # return response.ok
1432
1470
  # ```
@@ -1434,15 +1472,19 @@ module Playwright
1434
1472
  wrap_impl(@impl.expect_response(unwrap_impl(urlOrPredicate), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
1435
1473
  end
1436
1474
 
1475
+ #
1437
1476
  # Returns when element specified by selector satisfies `state` option. Returns `null` if waiting for `hidden` or
1438
1477
  # `detached`.
1439
1478
  #
1440
- # > NOTE: Playwright automatically waits for element to be ready before performing an action. Using `Locator` objects and
1441
- # web-first assertions makes the code wait-for-selector-free.
1479
+ # **NOTE**: Playwright automatically waits for element to be ready before performing an action. Using
1480
+ # `Locator` objects and web-first assertions makes the code wait-for-selector-free.
1481
+ #
1482
+ # Wait for the `selector` to satisfy `state` option (either appear/disappear from dom, or become
1483
+ # visible/hidden). If at the moment of calling the method `selector` already satisfies the condition, the method
1484
+ # will return immediately. If the selector doesn't satisfy the condition for the `timeout` milliseconds, the
1485
+ # function will throw.
1442
1486
  #
1443
- # Wait for the `selector` to satisfy `state` option (either appear/disappear from dom, or become visible/hidden). If at
1444
- # the moment of calling the method `selector` already satisfies the condition, the method will return immediately. If the
1445
- # selector doesn't satisfy the condition for the `timeout` milliseconds, the function will throw.
1487
+ # **Usage**
1446
1488
  #
1447
1489
  # This method works across navigations:
1448
1490
  #
@@ -1466,60 +1508,66 @@ module Playwright
1466
1508
  wrap_impl(@impl.wait_for_selector(unwrap_impl(selector), state: unwrap_impl(state), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
1467
1509
  end
1468
1510
 
1511
+ #
1469
1512
  # Waits for the given `timeout` in milliseconds.
1470
1513
  #
1471
1514
  # Note that `page.waitForTimeout()` should only be used for debugging. Tests using the timer in production are going to be
1472
1515
  # flaky. Use signals such as network events, selectors becoming visible and others instead.
1473
1516
  #
1517
+ # **Usage**
1518
+ #
1474
1519
  # ```python sync
1475
1520
  # # wait for 1 second
1476
1521
  # page.wait_for_timeout(1000)
1477
1522
  # ```
1478
- #
1479
- # Shortcut for main frame's [`method: Frame.waitForTimeout`].
1480
1523
  def wait_for_timeout(timeout)
1481
1524
  wrap_impl(@impl.wait_for_timeout(unwrap_impl(timeout)))
1482
1525
  end
1483
1526
 
1527
+ #
1484
1528
  # Waits for the main frame to navigate to the given URL.
1485
1529
  #
1530
+ # **Usage**
1531
+ #
1486
1532
  # ```python sync
1487
1533
  # page.click("a.delayed-navigation") # clicking the link will indirectly cause a navigation
1488
1534
  # page.wait_for_url("**/target.html")
1489
1535
  # ```
1490
- #
1491
- # Shortcut for main frame's [`method: Frame.waitForURL`].
1492
1536
  def wait_for_url(url, timeout: nil, waitUntil: nil)
1493
1537
  wrap_impl(@impl.wait_for_url(unwrap_impl(url), timeout: unwrap_impl(timeout), waitUntil: unwrap_impl(waitUntil)))
1494
1538
  end
1495
1539
 
1496
- # Performs action and waits for a new `WebSocket`. If predicate is provided, it passes `WebSocket` value into the
1497
- # `predicate` function and waits for `predicate(webSocket)` to return a truthy value. Will throw an error if the page is
1498
- # closed before the WebSocket event is fired.
1540
+ #
1541
+ # Performs action and waits for a new `WebSocket`. If predicate is provided, it passes
1542
+ # `WebSocket` value into the `predicate` function and waits for `predicate(webSocket)` to return a truthy value.
1543
+ # Will throw an error if the page is closed before the WebSocket event is fired.
1499
1544
  def expect_websocket(predicate: nil, timeout: nil, &block)
1500
1545
  wrap_impl(@impl.expect_websocket(predicate: unwrap_impl(predicate), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
1501
1546
  end
1502
1547
 
1503
- # Performs action and waits for a new `Worker`. If predicate is provided, it passes `Worker` value into the `predicate`
1504
- # function and waits for `predicate(worker)` to return a truthy value. Will throw an error if the page is closed before
1505
- # the worker event is fired.
1548
+ #
1549
+ # Performs action and waits for a new `Worker`. If predicate is provided, it passes
1550
+ # `Worker` value into the `predicate` function and waits for `predicate(worker)` to return a truthy value.
1551
+ # Will throw an error if the page is closed before the worker event is fired.
1506
1552
  def expect_worker(predicate: nil, timeout: nil, &block)
1507
1553
  wrap_impl(@impl.expect_worker(predicate: unwrap_impl(predicate), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
1508
1554
  end
1509
1555
 
1556
+ #
1510
1557
  # This method returns all of the dedicated [WebWorkers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API)
1511
1558
  # associated with the page.
1512
1559
  #
1513
- # > NOTE: This does not contain ServiceWorkers
1560
+ # **NOTE**: This does not contain ServiceWorkers
1514
1561
  def workers
1515
1562
  wrap_impl(@impl.workers)
1516
1563
  end
1517
1564
 
1518
- # > NOTE: In most cases, you should use [`method: Page.waitForEvent`].
1519
1565
  #
1520
- # Waits for given `event` to fire. If predicate is provided, it passes event's value into the `predicate` function and
1521
- # waits for `predicate(event)` to return a truthy value. Will throw an error if the page is closed before the `event` is
1522
- # fired.
1566
+ # **NOTE**: In most cases, you should use [`method: Page.waitForEvent`].
1567
+ #
1568
+ # Waits for given `event` to fire. If predicate is provided, it passes
1569
+ # event's value into the `predicate` function and waits for `predicate(event)` to return a truthy value.
1570
+ # Will throw an error if the page is closed before the `event` is fired.
1523
1571
  def wait_for_event(event, predicate: nil, timeout: nil)
1524
1572
  raise NotImplementedError.new('wait_for_event is not implemented yet.')
1525
1573
  end
@@ -1556,20 +1604,20 @@ module Playwright
1556
1604
 
1557
1605
  # -- inherited from EventEmitter --
1558
1606
  # @nodoc
1559
- def once(event, callback)
1560
- event_emitter_proxy.once(event, callback)
1607
+ def off(event, callback)
1608
+ event_emitter_proxy.off(event, callback)
1561
1609
  end
1562
1610
 
1563
1611
  # -- inherited from EventEmitter --
1564
1612
  # @nodoc
1565
- def on(event, callback)
1566
- event_emitter_proxy.on(event, callback)
1613
+ def once(event, callback)
1614
+ event_emitter_proxy.once(event, callback)
1567
1615
  end
1568
1616
 
1569
1617
  # -- inherited from EventEmitter --
1570
1618
  # @nodoc
1571
- def off(event, callback)
1572
- event_emitter_proxy.off(event, callback)
1619
+ def on(event, callback)
1620
+ event_emitter_proxy.on(event, callback)
1573
1621
  end
1574
1622
 
1575
1623
  private def event_emitter_proxy