playwright-ruby-client 1.20.2 → 1.23.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/documentation/docs/api/api_request_context.md +15 -2
  3. data/documentation/docs/api/browser.md +16 -0
  4. data/documentation/docs/api/browser_context.md +15 -2
  5. data/documentation/docs/api/browser_type.md +5 -1
  6. data/documentation/docs/api/console_message.md +27 -1
  7. data/documentation/docs/api/element_handle.md +23 -13
  8. data/documentation/docs/api/experimental/android.md +1 -1
  9. data/documentation/docs/api/experimental/android_device.md +4 -0
  10. data/documentation/docs/api/file_chooser.md +1 -1
  11. data/documentation/docs/api/frame.md +12 -5
  12. data/documentation/docs/api/frame_locator.md +1 -1
  13. data/documentation/docs/api/locator.md +44 -13
  14. data/documentation/docs/api/page.md +32 -9
  15. data/documentation/docs/api/request.md +3 -1
  16. data/documentation/docs/api/response.md +12 -1
  17. data/documentation/docs/api/route.md +67 -0
  18. data/documentation/docs/include/api_coverage.md +6 -3
  19. data/documentation/package.json +6 -6
  20. data/documentation/yarn.lock +2931 -3220
  21. data/lib/playwright/channel.rb +1 -3
  22. data/lib/playwright/channel_owners/browser.rb +13 -0
  23. data/lib/playwright/channel_owners/browser_context.rb +89 -13
  24. data/lib/playwright/channel_owners/browser_type.rb +4 -0
  25. data/lib/playwright/channel_owners/element_handle.rb +12 -3
  26. data/lib/playwright/channel_owners/frame.rb +20 -7
  27. data/lib/playwright/channel_owners/local_utils.rb +29 -0
  28. data/lib/playwright/channel_owners/page.rb +54 -22
  29. data/lib/playwright/channel_owners/request.rb +31 -6
  30. data/lib/playwright/channel_owners/response.rb +6 -0
  31. data/lib/playwright/channel_owners/route.rb +104 -45
  32. data/lib/playwright/channel_owners/writable_stream.rb +14 -0
  33. data/lib/playwright/connection.rb +6 -1
  34. data/lib/playwright/har_router.rb +82 -0
  35. data/lib/playwright/http_headers.rb +1 -1
  36. data/lib/playwright/input_files.rb +60 -8
  37. data/lib/playwright/javascript/regex.rb +23 -0
  38. data/lib/playwright/javascript/value_parser.rb +17 -2
  39. data/lib/playwright/javascript/value_serializer.rb +16 -6
  40. data/lib/playwright/javascript/visitor_info.rb +26 -0
  41. data/lib/playwright/javascript.rb +1 -0
  42. data/lib/playwright/locator_impl.rb +18 -5
  43. data/lib/playwright/playwright_api.rb +26 -6
  44. data/lib/playwright/route_handler.rb +2 -6
  45. data/lib/playwright/transport.rb +12 -2
  46. data/lib/playwright/utils.rb +31 -6
  47. data/lib/playwright/version.rb +2 -2
  48. data/lib/playwright.rb +2 -0
  49. data/lib/playwright_api/accessibility.rb +2 -1
  50. data/lib/playwright_api/android.rb +2 -2
  51. data/lib/playwright_api/android_device.rb +5 -1
  52. data/lib/playwright_api/api_request.rb +3 -3
  53. data/lib/playwright_api/api_request_context.rb +15 -2
  54. data/lib/playwright_api/browser.rb +15 -2
  55. data/lib/playwright_api/browser_context.rb +17 -7
  56. data/lib/playwright_api/browser_type.rb +7 -3
  57. data/lib/playwright_api/console_message.rb +20 -1
  58. data/lib/playwright_api/element_handle.rb +53 -49
  59. data/lib/playwright_api/file_chooser.rb +1 -1
  60. data/lib/playwright_api/frame.rb +30 -23
  61. data/lib/playwright_api/frame_locator.rb +1 -1
  62. data/lib/playwright_api/locator.rb +58 -38
  63. data/lib/playwright_api/page.rb +52 -32
  64. data/lib/playwright_api/playwright.rb +1 -1
  65. data/lib/playwright_api/request.rb +8 -1
  66. data/lib/playwright_api/response.rb +14 -1
  67. data/lib/playwright_api/route.rb +63 -2
  68. data/lib/playwright_api/selectors.rb +1 -1
  69. data/lib/playwright_api/tracing.rb +1 -1
  70. metadata +7 -4
  71. data/lib/playwright_api/local_utils.rb +0 -9
@@ -2,7 +2,7 @@ module Playwright
2
2
  # Locators are the central piece of Playwright's auto-waiting and retry-ability. In a nutshell, locators represent a way
3
3
  # to find element(s) on the page at any moment. Locator can be created with the [`method: Page.locator`] method.
4
4
  #
5
- # [Learn more about locators](./locators.md).
5
+ # [Learn more about locators](../locators.md).
6
6
  class Locator < PlaywrightApi
7
7
 
8
8
  # Returns an array of `node.innerText` values for all matching nodes.
@@ -39,7 +39,7 @@ module Playwright
39
39
  # This method checks the element by performing the following steps:
40
40
  # 1. Ensure that element is a checkbox or a radio input. If not, this method throws. If the element is already checked,
41
41
  # this method returns immediately.
42
- # 1. Wait for [actionability](./actionability.md) checks on the element, unless `force` option is set.
42
+ # 1. Wait for [actionability](../actionability.md) checks on the element, unless `force` option is set.
43
43
  # 1. Scroll the element into view if needed.
44
44
  # 1. Use [`property: Page.mouse`] to click in the center of the element.
45
45
  # 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
@@ -59,7 +59,7 @@ module Playwright
59
59
  end
60
60
 
61
61
  # This method clicks the element by performing the following steps:
62
- # 1. Wait for [actionability](./actionability.md) checks on the element, unless `force` option is set.
62
+ # 1. Wait for [actionability](../actionability.md) checks on the element, unless `force` option is set.
63
63
  # 1. Scroll the element into view if needed.
64
64
  # 1. Use [`property: Page.mouse`] to click in the center of the element, or the specified `position`.
65
65
  # 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
@@ -87,7 +87,7 @@ module Playwright
87
87
  end
88
88
 
89
89
  # This method double clicks the element by performing the following steps:
90
- # 1. Wait for [actionability](./actionability.md) checks on the element, unless `force` option is set.
90
+ # 1. Wait for [actionability](../actionability.md) checks on the element, unless `force` option is set.
91
91
  # 1. Scroll the element into view if needed.
92
92
  # 1. Use [`property: Page.mouse`] to double click in the center of the element, or the specified `position`.
93
93
  # 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set. Note that if the
@@ -211,7 +211,7 @@ module Playwright
211
211
  wrap_impl(@impl.evaluate_handle(unwrap_impl(expression), arg: unwrap_impl(arg), timeout: unwrap_impl(timeout)))
212
212
  end
213
213
 
214
- # This method waits for [actionability](./actionability.md) checks, focuses the element, fills it and triggers an `input`
214
+ # This method waits for [actionability](../actionability.md) checks, focuses the element, fills it and triggers an `input`
215
215
  # event after filling. Note that you can pass an empty string to clear the input field.
216
216
  #
217
217
  # If the target element is not an `<input>`, `<textarea>` or `[contenteditable]` element, this method throws an error.
@@ -224,6 +224,21 @@ module Playwright
224
224
  wrap_impl(@impl.fill(unwrap_impl(value), force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
225
225
  end
226
226
 
227
+ # This method narrows existing locator according to the options, for example filters by text. It can be chained to filter
228
+ # multiple times.
229
+ #
230
+ # ```python sync
231
+ # row_locator = page.lsocator("tr")
232
+ # # ...
233
+ # row_locator
234
+ # .filter(has_text="text in column 1")
235
+ # .filter(has=page.locator("tr", has_text="column 2 button"))
236
+ # .screenshot()
237
+ # ```
238
+ def filter(has: nil, hasText: nil)
239
+ wrap_impl(@impl.filter(has: unwrap_impl(has), hasText: unwrap_impl(hasText)))
240
+ end
241
+
227
242
  # Returns locator to the first matching element.
228
243
  def first
229
244
  wrap_impl(@impl.first)
@@ -257,7 +272,7 @@ module Playwright
257
272
  end
258
273
 
259
274
  # This method hovers over the element by performing the following steps:
260
- # 1. Wait for [actionability](./actionability.md) checks on the element, unless `force` option is set.
275
+ # 1. Wait for [actionability](../actionability.md) checks on the element, unless `force` option is set.
261
276
  # 1. Scroll the element into view if needed.
262
277
  # 1. Use [`property: Page.mouse`] to hover over the center of the element, or the specified `position`.
263
278
  # 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
@@ -285,7 +300,10 @@ module Playwright
285
300
  wrap_impl(@impl.inner_text(timeout: unwrap_impl(timeout)))
286
301
  end
287
302
 
288
- # Returns `input.value` for `<input>` or `<textarea>` or `<select>` element. Throws for non-input elements.
303
+ # Returns `input.value` for the selected `<input>` or `<textarea>` or `<select>` element.
304
+ #
305
+ # Throws for non-input elements. However, if the element is inside the `<label>` element that has an associated
306
+ # [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), returns the value of the control.
289
307
  def input_value(timeout: nil)
290
308
  wrap_impl(@impl.input_value(timeout: unwrap_impl(timeout)))
291
309
  end
@@ -295,27 +313,27 @@ module Playwright
295
313
  wrap_impl(@impl.checked?(timeout: unwrap_impl(timeout)))
296
314
  end
297
315
 
298
- # Returns whether the element is disabled, the opposite of [enabled](./actionability.md#enabled).
316
+ # Returns whether the element is disabled, the opposite of [enabled](../actionability.md#enabled).
299
317
  def disabled?(timeout: nil)
300
318
  wrap_impl(@impl.disabled?(timeout: unwrap_impl(timeout)))
301
319
  end
302
320
 
303
- # Returns whether the element is [editable](./actionability.md#editable).
321
+ # Returns whether the element is [editable](../actionability.md#editable).
304
322
  def editable?(timeout: nil)
305
323
  wrap_impl(@impl.editable?(timeout: unwrap_impl(timeout)))
306
324
  end
307
325
 
308
- # Returns whether the element is [enabled](./actionability.md#enabled).
326
+ # Returns whether the element is [enabled](../actionability.md#enabled).
309
327
  def enabled?(timeout: nil)
310
328
  wrap_impl(@impl.enabled?(timeout: unwrap_impl(timeout)))
311
329
  end
312
330
 
313
- # Returns whether the element is hidden, the opposite of [visible](./actionability.md#visible).
331
+ # Returns whether the element is hidden, the opposite of [visible](../actionability.md#visible).
314
332
  def hidden?(timeout: nil)
315
333
  wrap_impl(@impl.hidden?(timeout: unwrap_impl(timeout)))
316
334
  end
317
335
 
318
- # Returns whether the element is [visible](./actionability.md#visible).
336
+ # Returns whether the element is [visible](../actionability.md#visible).
319
337
  def visible?(timeout: nil)
320
338
  wrap_impl(@impl.visible?(timeout: unwrap_impl(timeout)))
321
339
  end
@@ -325,12 +343,13 @@ module Playwright
325
343
  wrap_impl(@impl.last)
326
344
  end
327
345
 
328
- # The method finds an element matching the specified selector in the `Locator`'s subtree.
346
+ # The method finds an element matching the specified selector in the `Locator`'s subtree. It also accepts filter options,
347
+ # similar to [`method: Locator.filter`] method.
329
348
  def locator(selector, has: nil, hasText: nil)
330
349
  wrap_impl(@impl.locator(unwrap_impl(selector), has: unwrap_impl(has), hasText: unwrap_impl(hasText)))
331
350
  end
332
351
 
333
- # Returns locator to the n-th matching element.
352
+ # Returns locator to the n-th matching element. It's zero based, `nth(0)` selects the first element.
334
353
  def nth(index)
335
354
  wrap_impl(@impl.nth(unwrap_impl(index)))
336
355
  end
@@ -362,29 +381,35 @@ module Playwright
362
381
  wrap_impl(@impl.press(unwrap_impl(key), delay: unwrap_impl(delay), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
363
382
  end
364
383
 
365
- # Returns the buffer with the captured screenshot.
384
+ # This method captures a screenshot of the page, clipped to the size and position of a particular element matching the
385
+ # locator. If the element is covered by other elements, it will not be actually visible on the screenshot. If the element
386
+ # is a scrollable container, only the currently scrolled content will be visible on the screenshot.
366
387
  #
367
- # This method waits for the [actionability](./actionability.md) checks, then scrolls element into view before taking a
388
+ # This method waits for the [actionability](../actionability.md) checks, then scrolls element into view before taking a
368
389
  # screenshot. If the element is detached from DOM, the method throws an error.
390
+ #
391
+ # Returns the buffer with the captured screenshot.
369
392
  def screenshot(
370
393
  animations: nil,
394
+ caret: nil,
371
395
  mask: nil,
372
396
  omitBackground: nil,
373
397
  path: nil,
374
398
  quality: nil,
399
+ scale: nil,
375
400
  timeout: nil,
376
401
  type: nil)
377
- wrap_impl(@impl.screenshot(animations: unwrap_impl(animations), mask: unwrap_impl(mask), omitBackground: unwrap_impl(omitBackground), path: unwrap_impl(path), quality: unwrap_impl(quality), timeout: unwrap_impl(timeout), type: unwrap_impl(type)))
402
+ wrap_impl(@impl.screenshot(animations: unwrap_impl(animations), caret: unwrap_impl(caret), 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)))
378
403
  end
379
404
 
380
- # This method waits for [actionability](./actionability.md) checks, then tries to scroll element into view, unless it is
405
+ # This method waits for [actionability](../actionability.md) checks, then tries to scroll element into view, unless it is
381
406
  # completely visible as defined by
382
407
  # [IntersectionObserver](https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API)'s `ratio`.
383
408
  def scroll_into_view_if_needed(timeout: nil)
384
409
  wrap_impl(@impl.scroll_into_view_if_needed(timeout: unwrap_impl(timeout)))
385
410
  end
386
411
 
387
- # This method waits for [actionability](./actionability.md) checks, waits until all specified options are present in the
412
+ # This method waits for [actionability](../actionability.md) checks, waits until all specified options are present in the
388
413
  # `<select>` element and selects these options.
389
414
  #
390
415
  # If the target element is not a `<select>` element, this method throws an error. However, if the element is inside the
@@ -403,17 +428,6 @@ module Playwright
403
428
  # # multiple selection
404
429
  # element.select_option(value=["red", "green", "blue"])
405
430
  # ```
406
- #
407
- # ```python sync
408
- # # single selection matching the value
409
- # element.select_option("blue")
410
- # # single selection matching both the value and the label
411
- # element.select_option(label="blue")
412
- # # multiple selection
413
- # element.select_option("red", "green", "blue")
414
- # # multiple selection for blue, red and second option
415
- # element.select_option(value="blue", { index: 2 }, "red")
416
- # ```
417
431
  def select_option(
418
432
  element: nil,
419
433
  index: nil,
@@ -425,8 +439,12 @@ module Playwright
425
439
  wrap_impl(@impl.select_option(element: unwrap_impl(element), index: unwrap_impl(index), value: unwrap_impl(value), label: unwrap_impl(label), force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
426
440
  end
427
441
 
428
- # This method waits for [actionability](./actionability.md) checks, then focuses the element and selects all its text
442
+ # This method waits for [actionability](../actionability.md) checks, then focuses the element and selects all its text
429
443
  # content.
444
+ #
445
+ # If the element is inside the `<label>` element that has an associated
446
+ # [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), focuses and selects text in the
447
+ # control instead.
430
448
  def select_text(force: nil, timeout: nil)
431
449
  wrap_impl(@impl.select_text(force: unwrap_impl(force), timeout: unwrap_impl(timeout)))
432
450
  end
@@ -434,7 +452,7 @@ module Playwright
434
452
  # This method checks or unchecks an element by performing the following steps:
435
453
  # 1. Ensure that matched element is a checkbox or a radio input. If not, this method throws.
436
454
  # 1. If the element already has the right checked state, this method returns immediately.
437
- # 1. Wait for [actionability](./actionability.md) checks on the matched element, unless `force` option is set. If the
455
+ # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the
438
456
  # element is detached during the checks, the whole action is retried.
439
457
  # 1. Scroll the element into view if needed.
440
458
  # 1. Use [`property: Page.mouse`] to click in the center of the element.
@@ -454,18 +472,20 @@ module Playwright
454
472
  end
455
473
  alias_method :checked=, :set_checked
456
474
 
457
- # This method expects `element` to point to an
458
- # [input element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input).
459
- #
460
475
  # Sets the value of the file input to these file paths or files. If some of the `filePaths` are relative paths, then they
461
- # are resolved relative to the the current working directory. For empty array, clears the selected files.
476
+ # are resolved relative to the current working directory. For empty array, clears the selected files.
477
+ #
478
+ # This method expects `Locator` to point to an
479
+ # [input element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input). However, if the element is inside the
480
+ # `<label>` element that has an associated
481
+ # [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), targets the control instead.
462
482
  def set_input_files(files, noWaitAfter: nil, timeout: nil)
463
483
  wrap_impl(@impl.set_input_files(unwrap_impl(files), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
464
484
  end
465
485
  alias_method :input_files=, :set_input_files
466
486
 
467
487
  # This method taps the element by performing the following steps:
468
- # 1. Wait for [actionability](./actionability.md) checks on the element, unless `force` option is set.
488
+ # 1. Wait for [actionability](../actionability.md) checks on the element, unless `force` option is set.
469
489
  # 1. Scroll the element into view if needed.
470
490
  # 1. Use [`property: Page.touchscreen`] to tap the center of the element, or the specified `position`.
471
491
  # 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
@@ -514,7 +534,7 @@ module Playwright
514
534
  # This method checks the element by performing the following steps:
515
535
  # 1. Ensure that element is a checkbox or a radio input. If not, this method throws. If the element is already
516
536
  # unchecked, this method returns immediately.
517
- # 1. Wait for [actionability](./actionability.md) checks on the element, unless `force` option is set.
537
+ # 1. Wait for [actionability](../actionability.md) checks on the element, unless `force` option is set.
518
538
  # 1. Scroll the element into view if needed.
519
539
  # 1. Use [`property: Page.mouse`] to click in the center of the element.
520
540
  # 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
@@ -56,7 +56,8 @@ module Playwright
56
56
  wrap_impl(@impl.mouse)
57
57
  end
58
58
 
59
- # API testing helper associated with this page. Requests made with this API will use page cookies.
59
+ # API testing helper associated with this page. This method returns the same instance as
60
+ # [`property: BrowserContext.request`] on the page's context. See [`property: BrowserContext.request`] for more details.
60
61
  def request # property
61
62
  wrap_impl(@impl.request)
62
63
  end
@@ -111,7 +112,7 @@ module Playwright
111
112
  # 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
112
113
  # 1. Ensure that matched element is a checkbox or a radio input. If not, this method throws. If the element is already
113
114
  # checked, this method returns immediately.
114
- # 1. Wait for [actionability](./actionability.md) checks on the matched element, unless `force` option is set. If the
115
+ # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the
115
116
  # element is detached during the checks, the whole action is retried.
116
117
  # 1. Scroll the element into view if needed.
117
118
  # 1. Use [`property: Page.mouse`] to click in the center of the element.
@@ -135,7 +136,7 @@ module Playwright
135
136
 
136
137
  # This method clicks an element matching `selector` by performing the following steps:
137
138
  # 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
138
- # 1. Wait for [actionability](./actionability.md) checks on the matched element, unless `force` option is set. If the
139
+ # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the
139
140
  # element is detached during the checks, the whole action is retried.
140
141
  # 1. Scroll the element into view if needed.
141
142
  # 1. Use [`property: Page.mouse`] to click in the center of the element, or the specified `position`.
@@ -183,7 +184,7 @@ module Playwright
183
184
 
184
185
  # This method double clicks an element matching `selector` by performing the following steps:
185
186
  # 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
186
- # 1. Wait for [actionability](./actionability.md) checks on the matched element, unless `force` option is set. If the
187
+ # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the
187
188
  # element is detached during the checks, the whole action is retried.
188
189
  # 1. Scroll the element into view if needed.
189
190
  # 1. Use [`property: Page.mouse`] to double click in the center of the element, or the specified `position`.
@@ -501,7 +502,7 @@ module Playwright
501
502
  wrap_impl(@impl.expose_function(unwrap_impl(name), unwrap_impl(callback)))
502
503
  end
503
504
 
504
- # This method waits for an element matching `selector`, waits for [actionability](./actionability.md) checks, focuses the
505
+ # This method waits for an element matching `selector`, waits for [actionability](../actionability.md) checks, focuses the
505
506
  # element, fills it and triggers an `input` event after filling. Note that you can pass an empty string to clear the input
506
507
  # field.
507
508
  #
@@ -582,8 +583,8 @@ module Playwright
582
583
  wrap_impl(@impl.go_forward(timeout: unwrap_impl(timeout), waitUntil: unwrap_impl(waitUntil)))
583
584
  end
584
585
 
585
- # Returns the main resource response. In case of multiple redirects, the navigation will resolve with the response of the
586
- # last redirect.
586
+ # Returns the main resource response. In case of multiple redirects, the navigation will resolve with the first
587
+ # non-redirect response.
587
588
  #
588
589
  # The method will throw an error if:
589
590
  # - there's an SSL error (e.g. in case of self-signed certificates).
@@ -608,7 +609,7 @@ module Playwright
608
609
 
609
610
  # This method hovers over an element matching `selector` by performing the following steps:
610
611
  # 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
611
- # 1. Wait for [actionability](./actionability.md) checks on the matched element, unless `force` option is set. If the
612
+ # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the
612
613
  # element is detached during the checks, the whole action is retried.
613
614
  # 1. Scroll the element into view if needed.
614
615
  # 1. Use [`property: Page.mouse`] to hover over the center of the element, or the specified `position`.
@@ -639,7 +640,10 @@ module Playwright
639
640
  wrap_impl(@impl.inner_text(unwrap_impl(selector), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
640
641
  end
641
642
 
642
- # Returns `input.value` for the selected `<input>` or `<textarea>` or `<select>` element. Throws for non-input elements.
643
+ # Returns `input.value` for the selected `<input>` or `<textarea>` or `<select>` element.
644
+ #
645
+ # Throws for non-input elements. However, if the element is inside the `<label>` element that has an associated
646
+ # [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), returns the value of the control.
643
647
  def input_value(selector, strict: nil, timeout: nil)
644
648
  wrap_impl(@impl.input_value(unwrap_impl(selector), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
645
649
  end
@@ -654,28 +658,28 @@ module Playwright
654
658
  wrap_impl(@impl.closed?)
655
659
  end
656
660
 
657
- # Returns whether the element is disabled, the opposite of [enabled](./actionability.md#enabled).
661
+ # Returns whether the element is disabled, the opposite of [enabled](../actionability.md#enabled).
658
662
  def disabled?(selector, strict: nil, timeout: nil)
659
663
  wrap_impl(@impl.disabled?(unwrap_impl(selector), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
660
664
  end
661
665
 
662
- # Returns whether the element is [editable](./actionability.md#editable).
666
+ # Returns whether the element is [editable](../actionability.md#editable).
663
667
  def editable?(selector, strict: nil, timeout: nil)
664
668
  wrap_impl(@impl.editable?(unwrap_impl(selector), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
665
669
  end
666
670
 
667
- # Returns whether the element is [enabled](./actionability.md#enabled).
671
+ # Returns whether the element is [enabled](../actionability.md#enabled).
668
672
  def enabled?(selector, strict: nil, timeout: nil)
669
673
  wrap_impl(@impl.enabled?(unwrap_impl(selector), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
670
674
  end
671
675
 
672
- # Returns whether the element is hidden, the opposite of [visible](./actionability.md#visible). `selector` that does not
676
+ # Returns whether the element is hidden, the opposite of [visible](../actionability.md#visible). `selector` that does not
673
677
  # match any elements is considered hidden.
674
678
  def hidden?(selector, strict: nil, timeout: nil)
675
679
  wrap_impl(@impl.hidden?(unwrap_impl(selector), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
676
680
  end
677
681
 
678
- # Returns whether the element is [visible](./actionability.md#visible). `selector` that does not match any elements is
682
+ # Returns whether the element is [visible](../actionability.md#visible). `selector` that does not match any elements is
679
683
  # considered not visible.
680
684
  def visible?(selector, strict: nil, timeout: nil)
681
685
  wrap_impl(@impl.visible?(unwrap_impl(selector), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
@@ -685,6 +689,8 @@ module Playwright
685
689
  # element immediately before performing an action, so a series of actions on the same locator can in fact be performed on
686
690
  # different DOM elements. That would happen if the DOM structure between those actions has changed.
687
691
  #
692
+ # [Learn more about locators](../locators.md).
693
+ #
688
694
  # Shortcut for main frame's [`method: Frame.locator`].
689
695
  def locator(selector, has: nil, hasText: nil)
690
696
  wrap_impl(@impl.locator(unwrap_impl(selector), has: unwrap_impl(has), hasText: unwrap_impl(hasText)))
@@ -847,7 +853,7 @@ module Playwright
847
853
  # > NOTE: The handler will only be called for the first url if the response is a redirect.
848
854
  # > NOTE: [`method: Page.route`] will not intercept requests intercepted by Service Worker. See
849
855
  # [this](https://github.com/microsoft/playwright/issues/1090) issue. We recommend disabling Service Workers when using
850
- # request interception. Via `await context.addInitScript(() => delete window.navigator.serviceWorker);`
856
+ # request interception by setting `Browser.newContext.serviceWorkers` to `'block'`.
851
857
  #
852
858
  # An example of a naive handler that aborts all image requests:
853
859
  #
@@ -889,21 +895,33 @@ module Playwright
889
895
  wrap_impl(@impl.route(unwrap_impl(url), unwrap_impl(handler), times: unwrap_impl(times)))
890
896
  end
891
897
 
898
+ # If specified the network requests that are made in the page will be served from the HAR file. Read more about
899
+ # [Replaying from HAR](../network.md#replaying-from-har).
900
+ #
901
+ # Playwright will not serve requests intercepted by Service Worker from the HAR file. See
902
+ # [this](https://github.com/microsoft/playwright/issues/1090) issue. We recommend disabling Service Workers when using
903
+ # request interception by setting `Browser.newContext.serviceWorkers` to `'block'`.
904
+ def route_from_har(har, notFound: nil, update: nil, url: nil)
905
+ wrap_impl(@impl.route_from_har(unwrap_impl(har), notFound: unwrap_impl(notFound), update: unwrap_impl(update), url: unwrap_impl(url)))
906
+ end
907
+
892
908
  # Returns the buffer with the captured screenshot.
893
909
  def screenshot(
894
910
  animations: nil,
911
+ caret: nil,
895
912
  clip: nil,
896
913
  fullPage: nil,
897
914
  mask: nil,
898
915
  omitBackground: nil,
899
916
  path: nil,
900
917
  quality: nil,
918
+ scale: nil,
901
919
  timeout: nil,
902
920
  type: nil)
903
- wrap_impl(@impl.screenshot(animations: unwrap_impl(animations), clip: unwrap_impl(clip), fullPage: unwrap_impl(fullPage), mask: unwrap_impl(mask), omitBackground: unwrap_impl(omitBackground), path: unwrap_impl(path), quality: unwrap_impl(quality), timeout: unwrap_impl(timeout), type: unwrap_impl(type)))
921
+ 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)))
904
922
  end
905
923
 
906
- # This method waits for an element matching `selector`, waits for [actionability](./actionability.md) checks, waits until
924
+ # This method waits for an element matching `selector`, waits for [actionability](../actionability.md) checks, waits until
907
925
  # all specified options are present in the `<select>` element and selects these options.
908
926
  #
909
927
  # If the target element is not a `<select>` element, this method throws an error. However, if the element is inside the
@@ -941,7 +959,7 @@ module Playwright
941
959
  # 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
942
960
  # 1. Ensure that matched element is a checkbox or a radio input. If not, this method throws.
943
961
  # 1. If the element already has the right checked state, this method returns immediately.
944
- # 1. Wait for [actionability](./actionability.md) checks on the matched element, unless `force` option is set. If the
962
+ # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the
945
963
  # element is detached during the checks, the whole action is retried.
946
964
  # 1. Scroll the element into view if needed.
947
965
  # 1. Use [`property: Page.mouse`] to click in the center of the element.
@@ -1001,11 +1019,13 @@ module Playwright
1001
1019
  end
1002
1020
  alias_method :extra_http_headers=, :set_extra_http_headers
1003
1021
 
1004
- # This method expects `selector` to point to an
1005
- # [input element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input).
1006
- #
1007
1022
  # Sets the value of the file input to these file paths or files. If some of the `filePaths` are relative paths, then they
1008
- # are resolved relative to the the current working directory. For empty array, clears the selected files.
1023
+ # are resolved relative to the current working directory. For empty array, clears the selected files.
1024
+ #
1025
+ # This method expects `selector` to point to an
1026
+ # [input element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input). However, if the element is inside the
1027
+ # `<label>` element that has an associated
1028
+ # [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), targets the control instead.
1009
1029
  def set_input_files(
1010
1030
  selector,
1011
1031
  files,
@@ -1035,7 +1055,7 @@ module Playwright
1035
1055
 
1036
1056
  # This method taps an element matching `selector` by performing the following steps:
1037
1057
  # 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
1038
- # 1. Wait for [actionability](./actionability.md) checks on the matched element, unless `force` option is set. If the
1058
+ # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the
1039
1059
  # element is detached during the checks, the whole action is retried.
1040
1060
  # 1. Scroll the element into view if needed.
1041
1061
  # 1. Use [`property: Page.touchscreen`] to tap the center of the element, or the specified `position`.
@@ -1094,7 +1114,7 @@ module Playwright
1094
1114
  # 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
1095
1115
  # 1. Ensure that matched element is a checkbox or a radio input. If not, this method throws. If the element is already
1096
1116
  # unchecked, this method returns immediately.
1097
- # 1. Wait for [actionability](./actionability.md) checks on the matched element, unless `force` option is set. If the
1117
+ # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the
1098
1118
  # element is detached during the checks, the whole action is retried.
1099
1119
  # 1. Scroll the element into view if needed.
1100
1120
  # 1. Use [`property: Page.mouse`] to click in the center of the element.
@@ -1252,7 +1272,7 @@ module Playwright
1252
1272
  wrap_impl(@impl.expect_popup(predicate: unwrap_impl(predicate), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
1253
1273
  end
1254
1274
 
1255
- # Waits for the matching request and returns it. See [waiting for event](./events.md#waiting-for-event) for more details
1275
+ # Waits for the matching request and returns it. See [waiting for event](../events.md#waiting-for-event) for more details
1256
1276
  # about events.
1257
1277
  #
1258
1278
  # ```python sync
@@ -1276,7 +1296,7 @@ module Playwright
1276
1296
  wrap_impl(@impl.expect_request_finished(predicate: unwrap_impl(predicate), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
1277
1297
  end
1278
1298
 
1279
- # Returns the matched response. See [waiting for event](./events.md#waiting-for-event) for more details about events.
1299
+ # Returns the matched response. See [waiting for event](../events.md#waiting-for-event) for more details about events.
1280
1300
  #
1281
1301
  # ```python sync
1282
1302
  # with page.expect_response("https://example.com/resource") as response_info:
@@ -1395,8 +1415,8 @@ module Playwright
1395
1415
  end
1396
1416
 
1397
1417
  # @nodoc
1398
- def start_css_coverage(resetOnNavigation: nil, reportAnonymousScripts: nil)
1399
- wrap_impl(@impl.start_css_coverage(resetOnNavigation: unwrap_impl(resetOnNavigation), reportAnonymousScripts: unwrap_impl(reportAnonymousScripts)))
1418
+ def guid
1419
+ wrap_impl(@impl.guid)
1400
1420
  end
1401
1421
 
1402
1422
  # @nodoc
@@ -1405,13 +1425,13 @@ module Playwright
1405
1425
  end
1406
1426
 
1407
1427
  # @nodoc
1408
- def stop_css_coverage
1409
- wrap_impl(@impl.stop_css_coverage)
1428
+ def start_css_coverage(resetOnNavigation: nil, reportAnonymousScripts: nil)
1429
+ wrap_impl(@impl.start_css_coverage(resetOnNavigation: unwrap_impl(resetOnNavigation), reportAnonymousScripts: unwrap_impl(reportAnonymousScripts)))
1410
1430
  end
1411
1431
 
1412
1432
  # @nodoc
1413
- def guid
1414
- wrap_impl(@impl.guid)
1433
+ def stop_css_coverage
1434
+ wrap_impl(@impl.stop_css_coverage)
1415
1435
  end
1416
1436
 
1417
1437
  # -- inherited from EventEmitter --
@@ -55,7 +55,7 @@ module Playwright
55
55
  raise NotImplementedError.new('request is not implemented yet.')
56
56
  end
57
57
 
58
- # Selectors can be used to install custom selector engines. See [Working with selectors](./selectors.md) for more
58
+ # Selectors can be used to install custom selector engines. See [Working with selectors](../selectors.md) for more
59
59
  # information.
60
60
  def selectors # property
61
61
  wrap_impl(@impl.selectors)
@@ -35,7 +35,9 @@ module Playwright
35
35
  wrap_impl(@impl.frame)
36
36
  end
37
37
 
38
- # **DEPRECATED** Incomplete list of headers as seen by the rendering engine. Use [`method: Request.allHeaders`] instead.
38
+ # An object with the request HTTP headers. The header names are lower-cased. Note that this method does not return
39
+ # security-related headers, including cookie-related ones. You can use [`method: Request.allHeaders`] for complete list of
40
+ # headers that include `cookie` information.
39
41
  def headers
40
42
  wrap_impl(@impl.headers)
41
43
  end
@@ -149,6 +151,11 @@ module Playwright
149
151
  wrap_impl(@impl.url)
150
152
  end
151
153
 
154
+ # @nodoc
155
+ def apply_fallback_overrides(overrides)
156
+ wrap_impl(@impl.apply_fallback_overrides(unwrap_impl(overrides)))
157
+ end
158
+
152
159
  # @nodoc
153
160
  def header_values(name)
154
161
  wrap_impl(@impl.header_values(unwrap_impl(name)))
@@ -22,7 +22,15 @@ module Playwright
22
22
  wrap_impl(@impl.frame)
23
23
  end
24
24
 
25
- # **DEPRECATED** Incomplete list of headers as seen by the rendering engine. Use [`method: Response.allHeaders`] instead.
25
+ # Indicates whether this Response was fullfilled by a Service Worker's Fetch Handler (i.e. via
26
+ # [FetchEvent.respondWith](https://developer.mozilla.org/en-US/docs/Web/API/FetchEvent/respondWith)).
27
+ def from_service_worker
28
+ wrap_impl(@impl.from_service_worker)
29
+ end
30
+
31
+ # An object with the response HTTP headers. The header names are lower-cased. Note that this method does not return
32
+ # security-related headers, including cookie-related ones. You can use [`method: Response.allHeaders`] for complete list
33
+ # of headers that include `cookie` information.
26
34
  def headers
27
35
  wrap_impl(@impl.headers)
28
36
  end
@@ -92,6 +100,11 @@ module Playwright
92
100
  wrap_impl(@impl.url)
93
101
  end
94
102
 
103
+ # @nodoc
104
+ def from_service_worker?
105
+ wrap_impl(@impl.from_service_worker?)
106
+ end
107
+
95
108
  # @nodoc
96
109
  def ok?
97
110
  wrap_impl(@impl.ok?)
@@ -1,6 +1,8 @@
1
1
  module Playwright
2
2
  # Whenever a network route is set up with [`method: Page.route`] or [`method: BrowserContext.route`], the `Route` object
3
3
  # allows to handle the route.
4
+ #
5
+ # Learn more about [networking](../network.md).
4
6
  class Route < PlaywrightApi
5
7
 
6
8
  # Aborts the route's request.
@@ -15,8 +17,8 @@ module Playwright
15
17
  # # override headers
16
18
  # headers = {
17
19
  # **request.headers,
18
- # "foo": "bar" # set "foo" header
19
- # "origin": None # remove "origin" header
20
+ # "foo": "foo-value" # set "foo" header
21
+ # "bar": None # remove "bar" header
20
22
  # }
21
23
  # route.continue_(headers=headers)
22
24
  # }
@@ -26,6 +28,60 @@ module Playwright
26
28
  wrap_impl(@impl.continue(headers: unwrap_impl(headers), method: unwrap_impl(method), postData: unwrap_impl(postData), url: unwrap_impl(url)))
27
29
  end
28
30
 
31
+ # When several routes match the given pattern, they run in the order opposite to their registration. That way the last
32
+ # registered route can always override all the previos ones. In the example below, request will be handled by the
33
+ # bottom-most handler first, then it'll fall back to the previous one and in the end will be aborted by the first
34
+ # registered route.
35
+ #
36
+ # ```python sync
37
+ # page.route("**/*", lambda route: route.abort()) # Runs last.
38
+ # page.route("**/*", lambda route: route.fallback()) # Runs second.
39
+ # page.route("**/*", lambda route: route.fallback()) # Runs first.
40
+ # ```
41
+ #
42
+ # Registering multiple routes is useful when you want separate handlers to handle different kinds of requests, for example
43
+ # API calls vs page resources or GET requests vs POST requests as in the example below.
44
+ #
45
+ # ```python sync
46
+ # # Handle GET requests.
47
+ # def handle_post(route):
48
+ # if route.request.method != "GET":
49
+ # route.fallback()
50
+ # return
51
+ # # Handling GET only.
52
+ # # ...
53
+ #
54
+ # # Handle POST requests.
55
+ # def handle_post(route):
56
+ # if route.request.method != "POST":
57
+ # route.fallback()
58
+ # return
59
+ # # Handling POST only.
60
+ # # ...
61
+ #
62
+ # page.route("**/*", handle_get)
63
+ # page.route("**/*", handle_post)
64
+ # ```
65
+ #
66
+ # One can also modify request while falling back to the subsequent handler, that way intermediate route handler can modify
67
+ # url, method, headers and postData of the request.
68
+ #
69
+ # ```python sync
70
+ # def handle(route, request):
71
+ # # override headers
72
+ # headers = {
73
+ # **request.headers,
74
+ # "foo": "foo-value" # set "foo" header
75
+ # "bar": None # remove "bar" header
76
+ # }
77
+ # route.fallback(headers=headers)
78
+ # }
79
+ # page.route("**/*", handle)
80
+ # ```
81
+ def fallback(headers: nil, method: nil, postData: nil, url: nil)
82
+ wrap_impl(@impl.fallback(headers: unwrap_impl(headers), method: unwrap_impl(method), postData: unwrap_impl(postData), url: unwrap_impl(url)))
83
+ end
84
+
29
85
  # Fulfills route's request with given response.
30
86
  #
31
87
  # An example of fulfilling all requests with 404 responses:
@@ -57,6 +113,11 @@ module Playwright
57
113
  wrap_impl(@impl.request)
58
114
  end
59
115
 
116
+ # @nodoc
117
+ def redirect_navigation_request(url)
118
+ wrap_impl(@impl.redirect_navigation_request(unwrap_impl(url)))
119
+ end
120
+
60
121
  # -- inherited from EventEmitter --
61
122
  # @nodoc
62
123
  def off(event, callback)