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
@@ -66,7 +66,7 @@ module Playwright
66
66
  # This method checks the element by performing the following steps:
67
67
  # 1. Ensure that element is a checkbox or a radio input. If not, this method throws. If the element is already checked,
68
68
  # this method returns immediately.
69
- # 1. Wait for [actionability](./actionability.md) checks on the element, unless `force` option is set.
69
+ # 1. Wait for [actionability](../actionability.md) checks on the element, unless `force` option is set.
70
70
  # 1. Scroll the element into view if needed.
71
71
  # 1. Use [`property: Page.mouse`] to click in the center of the element.
72
72
  # 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
@@ -86,7 +86,7 @@ module Playwright
86
86
  end
87
87
 
88
88
  # This method clicks the element by performing the following steps:
89
- # 1. Wait for [actionability](./actionability.md) checks on the element, unless `force` option is set.
89
+ # 1. Wait for [actionability](../actionability.md) checks on the element, unless `force` option is set.
90
90
  # 1. Scroll the element into view if needed.
91
91
  # 1. Use [`property: Page.mouse`] to click in the center of the element, or the specified `position`.
92
92
  # 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
@@ -114,7 +114,7 @@ module Playwright
114
114
  end
115
115
 
116
116
  # This method double clicks the element by performing the following steps:
117
- # 1. Wait for [actionability](./actionability.md) checks on the element, unless `force` option is set.
117
+ # 1. Wait for [actionability](../actionability.md) checks on the element, unless `force` option is set.
118
118
  # 1. Scroll the element into view if needed.
119
119
  # 1. Use [`property: Page.mouse`] to double click in the center of the element, or the specified `position`.
120
120
  # 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set. Note that if the
@@ -172,7 +172,7 @@ module Playwright
172
172
  # Returns the return value of `expression`.
173
173
  #
174
174
  # The method finds an element matching the specified selector in the `ElementHandle`s subtree and passes it as a first
175
- # argument to `expression`. See [Working with selectors](./selectors.md) for more details. If no elements match the
175
+ # argument to `expression`. See [Working with selectors](../selectors.md) for more details. If no elements match the
176
176
  # selector, the method throws an error.
177
177
  #
178
178
  # If `expression` returns a [Promise], then [`method: ElementHandle.evalOnSelector`] would wait for the promise to resolve
@@ -192,7 +192,7 @@ module Playwright
192
192
  # Returns the return value of `expression`.
193
193
  #
194
194
  # The method finds all elements matching the specified selector in the `ElementHandle`'s subtree and passes an array of
195
- # matched elements as a first argument to `expression`. See [Working with selectors](./selectors.md) for more details.
195
+ # matched elements as a first argument to `expression`. See [Working with selectors](../selectors.md) for more details.
196
196
  #
197
197
  # If `expression` returns a [Promise], then [`method: ElementHandle.evalOnSelectorAll`] would wait for the promise to
198
198
  # resolve and return its value.
@@ -214,7 +214,7 @@ module Playwright
214
214
  wrap_impl(@impl.eval_on_selector_all(unwrap_impl(selector), unwrap_impl(expression), arg: unwrap_impl(arg)))
215
215
  end
216
216
 
217
- # This method waits for [actionability](./actionability.md) checks, focuses the element, fills it and triggers an `input`
217
+ # This method waits for [actionability](../actionability.md) checks, focuses the element, fills it and triggers an `input`
218
218
  # event after filling. Note that you can pass an empty string to clear the input field.
219
219
  #
220
220
  # If the target element is not an `<input>`, `<textarea>` or `[contenteditable]` element, this method throws an error.
@@ -239,7 +239,7 @@ module Playwright
239
239
  alias_method :[], :get_attribute
240
240
 
241
241
  # This method hovers over the element by performing the following steps:
242
- # 1. Wait for [actionability](./actionability.md) checks on the element, unless `force` option is set.
242
+ # 1. Wait for [actionability](../actionability.md) checks on the element, unless `force` option is set.
243
243
  # 1. Scroll the element into view if needed.
244
244
  # 1. Use [`property: Page.mouse`] to hover over the center of the element, or the specified `position`.
245
245
  # 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
@@ -267,7 +267,10 @@ module Playwright
267
267
  wrap_impl(@impl.inner_text)
268
268
  end
269
269
 
270
- # Returns `input.value` for `<input>` or `<textarea>` or `<select>` element. Throws for non-input elements.
270
+ # Returns `input.value` for the selected `<input>` or `<textarea>` or `<select>` element.
271
+ #
272
+ # Throws for non-input elements. However, if the element is inside the `<label>` element that has an associated
273
+ # [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), returns the value of the control.
271
274
  def input_value(timeout: nil)
272
275
  wrap_impl(@impl.input_value(timeout: unwrap_impl(timeout)))
273
276
  end
@@ -277,27 +280,27 @@ module Playwright
277
280
  wrap_impl(@impl.checked?)
278
281
  end
279
282
 
280
- # Returns whether the element is disabled, the opposite of [enabled](./actionability.md#enabled).
283
+ # Returns whether the element is disabled, the opposite of [enabled](../actionability.md#enabled).
281
284
  def disabled?
282
285
  wrap_impl(@impl.disabled?)
283
286
  end
284
287
 
285
- # Returns whether the element is [editable](./actionability.md#editable).
288
+ # Returns whether the element is [editable](../actionability.md#editable).
286
289
  def editable?
287
290
  wrap_impl(@impl.editable?)
288
291
  end
289
292
 
290
- # Returns whether the element is [enabled](./actionability.md#enabled).
293
+ # Returns whether the element is [enabled](../actionability.md#enabled).
291
294
  def enabled?
292
295
  wrap_impl(@impl.enabled?)
293
296
  end
294
297
 
295
- # Returns whether the element is hidden, the opposite of [visible](./actionability.md#visible).
298
+ # Returns whether the element is hidden, the opposite of [visible](../actionability.md#visible).
296
299
  def hidden?
297
300
  wrap_impl(@impl.hidden?)
298
301
  end
299
302
 
300
- # Returns whether the element is [visible](./actionability.md#visible).
303
+ # Returns whether the element is [visible](../actionability.md#visible).
301
304
  def visible?
302
305
  wrap_impl(@impl.visible?)
303
306
  end
@@ -330,33 +333,39 @@ module Playwright
330
333
  end
331
334
 
332
335
  # The method finds an element matching the specified selector in the `ElementHandle`'s subtree. See
333
- # [Working with selectors](./selectors.md) for more details. If no elements match the selector, returns `null`.
336
+ # [Working with selectors](../selectors.md) for more details. If no elements match the selector, returns `null`.
334
337
  def query_selector(selector)
335
338
  wrap_impl(@impl.query_selector(unwrap_impl(selector)))
336
339
  end
337
340
 
338
341
  # The method finds all elements matching the specified selector in the `ElementHandle`s subtree. See
339
- # [Working with selectors](./selectors.md) for more details. If no elements match the selector, returns empty array.
342
+ # [Working with selectors](../selectors.md) for more details. If no elements match the selector, returns empty array.
340
343
  def query_selector_all(selector)
341
344
  wrap_impl(@impl.query_selector_all(unwrap_impl(selector)))
342
345
  end
343
346
 
344
- # Returns the buffer with the captured screenshot.
347
+ # This method captures a screenshot of the page, clipped to the size and position of this particular element. If the
348
+ # element is covered by other elements, it will not be actually visible on the screenshot. If the element is a scrollable
349
+ # container, only the currently scrolled content will be visible on the screenshot.
345
350
  #
346
- # This method waits for the [actionability](./actionability.md) checks, then scrolls element into view before taking a
351
+ # This method waits for the [actionability](../actionability.md) checks, then scrolls element into view before taking a
347
352
  # screenshot. If the element is detached from DOM, the method throws an error.
353
+ #
354
+ # Returns the buffer with the captured screenshot.
348
355
  def screenshot(
349
356
  animations: nil,
357
+ caret: nil,
350
358
  mask: nil,
351
359
  omitBackground: nil,
352
360
  path: nil,
353
361
  quality: nil,
362
+ scale: nil,
354
363
  timeout: nil,
355
364
  type: nil)
356
- 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)))
365
+ 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)))
357
366
  end
358
367
 
359
- # This method waits for [actionability](./actionability.md) checks, then tries to scroll element into view, unless it is
368
+ # This method waits for [actionability](../actionability.md) checks, then tries to scroll element into view, unless it is
360
369
  # completely visible as defined by
361
370
  # [IntersectionObserver](https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API)'s `ratio`.
362
371
  #
@@ -366,7 +375,7 @@ module Playwright
366
375
  wrap_impl(@impl.scroll_into_view_if_needed(timeout: unwrap_impl(timeout)))
367
376
  end
368
377
 
369
- # This method waits for [actionability](./actionability.md) checks, waits until all specified options are present in the
378
+ # This method waits for [actionability](../actionability.md) checks, waits until all specified options are present in the
370
379
  # `<select>` element and selects these options.
371
380
  #
372
381
  # If the target element is not a `<select>` element, this method throws an error. However, if the element is inside the
@@ -385,17 +394,6 @@ module Playwright
385
394
  # # multiple selection
386
395
  # handle.select_option(value=["red", "green", "blue"])
387
396
  # ```
388
- #
389
- # ```python sync
390
- # # single selection matching the value
391
- # handle.select_option("blue")
392
- # # single selection matching both the value and the label
393
- # handle.select_option(label="blue")
394
- # # multiple selection
395
- # handle.select_option("red", "green", "blue")
396
- # # multiple selection for blue, red and second option
397
- # handle.select_option(value="blue", { index: 2 }, "red")
398
- # ```
399
397
  def select_option(
400
398
  element: nil,
401
399
  index: nil,
@@ -407,8 +405,12 @@ module Playwright
407
405
  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)))
408
406
  end
409
407
 
410
- # This method waits for [actionability](./actionability.md) checks, then focuses the element and selects all its text
408
+ # This method waits for [actionability](../actionability.md) checks, then focuses the element and selects all its text
411
409
  # content.
410
+ #
411
+ # If the element is inside the `<label>` element that has an associated
412
+ # [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), focuses and selects text in the
413
+ # control instead.
412
414
  def select_text(force: nil, timeout: nil)
413
415
  wrap_impl(@impl.select_text(force: unwrap_impl(force), timeout: unwrap_impl(timeout)))
414
416
  end
@@ -416,7 +418,7 @@ module Playwright
416
418
  # This method checks or unchecks an element by performing the following steps:
417
419
  # 1. Ensure that element is a checkbox or a radio input. If not, this method throws.
418
420
  # 1. If the element already has the right checked state, this method returns immediately.
419
- # 1. Wait for [actionability](./actionability.md) checks on the matched element, unless `force` option is set. If the
421
+ # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the
420
422
  # element is detached during the checks, the whole action is retried.
421
423
  # 1. Scroll the element into view if needed.
422
424
  # 1. Use [`property: Page.mouse`] to click in the center of the element.
@@ -436,18 +438,20 @@ module Playwright
436
438
  end
437
439
  alias_method :checked=, :set_checked
438
440
 
439
- # This method expects `elementHandle` to point to an
440
- # [input element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input).
441
- #
442
441
  # Sets the value of the file input to these file paths or files. If some of the `filePaths` are relative paths, then they
443
- # are resolved relative to the the current working directory. For empty array, clears the selected files.
442
+ # are resolved relative to the current working directory. For empty array, clears the selected files.
443
+ #
444
+ # This method expects `ElementHandle` to point to an
445
+ # [input element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input). However, if the element is inside the
446
+ # `<label>` element that has an associated
447
+ # [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), targets the control instead.
444
448
  def set_input_files(files, noWaitAfter: nil, timeout: nil)
445
449
  wrap_impl(@impl.set_input_files(unwrap_impl(files), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
446
450
  end
447
451
  alias_method :input_files=, :set_input_files
448
452
 
449
453
  # This method taps the element by performing the following steps:
450
- # 1. Wait for [actionability](./actionability.md) checks on the element, unless `force` option is set.
454
+ # 1. Wait for [actionability](../actionability.md) checks on the element, unless `force` option is set.
451
455
  # 1. Scroll the element into view if needed.
452
456
  # 1. Use [`property: Page.touchscreen`] to tap the center of the element, or the specified `position`.
453
457
  # 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
@@ -496,7 +500,7 @@ module Playwright
496
500
  # This method checks the element by performing the following steps:
497
501
  # 1. Ensure that element is a checkbox or a radio input. If not, this method throws. If the element is already
498
502
  # unchecked, this method returns immediately.
499
- # 1. Wait for [actionability](./actionability.md) checks on the element, unless `force` option is set.
503
+ # 1. Wait for [actionability](../actionability.md) checks on the element, unless `force` option is set.
500
504
  # 1. Scroll the element into view if needed.
501
505
  # 1. Use [`property: Page.mouse`] to click in the center of the element.
502
506
  # 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
@@ -517,16 +521,16 @@ module Playwright
517
521
 
518
522
  # Returns when the element satisfies the `state`.
519
523
  #
520
- # Depending on the `state` parameter, this method waits for one of the [actionability](./actionability.md) checks to pass.
521
- # This method throws when the element is detached while waiting, unless waiting for the `"hidden"` state.
522
- # - `"visible"` Wait until the element is [visible](./actionability.md#visible).
523
- # - `"hidden"` Wait until the element is [not visible](./actionability.md#visible) or
524
- # [not attached](./actionability.md#attached). Note that waiting for hidden does not throw when the element detaches.
525
- # - `"stable"` Wait until the element is both [visible](./actionability.md#visible) and
526
- # [stable](./actionability.md#stable).
527
- # - `"enabled"` Wait until the element is [enabled](./actionability.md#enabled).
528
- # - `"disabled"` Wait until the element is [not enabled](./actionability.md#enabled).
529
- # - `"editable"` Wait until the element is [editable](./actionability.md#editable).
524
+ # Depending on the `state` parameter, this method waits for one of the [actionability](../actionability.md) checks to
525
+ # pass. This method throws when the element is detached while waiting, unless waiting for the `"hidden"` state.
526
+ # - `"visible"` Wait until the element is [visible](../actionability.md#visible).
527
+ # - `"hidden"` Wait until the element is [not visible](../actionability.md#visible) or
528
+ # [not attached](../actionability.md#attached). Note that waiting for hidden does not throw when the element detaches.
529
+ # - `"stable"` Wait until the element is both [visible](../actionability.md#visible) and
530
+ # [stable](../actionability.md#stable).
531
+ # - `"enabled"` Wait until the element is [enabled](../actionability.md#enabled).
532
+ # - `"disabled"` Wait until the element is [not enabled](../actionability.md#enabled).
533
+ # - `"editable"` Wait until the element is [editable](../actionability.md#editable).
530
534
  #
531
535
  # If the element does not satisfy the condition for the `timeout` milliseconds, this method will throw.
532
536
  def wait_for_element_state(state, timeout: nil)
@@ -25,7 +25,7 @@ module Playwright
25
25
  end
26
26
 
27
27
  # Sets the value of the file input this chooser is associated with. If some of the `filePaths` are relative paths, then
28
- # they are resolved relative to the the current working directory. For empty array, clears the selected files.
28
+ # they are resolved relative to the current working directory. For empty array, clears the selected files.
29
29
  def set_files(files, noWaitAfter: nil, timeout: nil)
30
30
  wrap_impl(@impl.set_files(unwrap_impl(files), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
31
31
  end
@@ -51,7 +51,7 @@ module Playwright
51
51
  # 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
52
52
  # 1. Ensure that matched element is a checkbox or a radio input. If not, this method throws. If the element is already
53
53
  # checked, this method returns immediately.
54
- # 1. Wait for [actionability](./actionability.md) checks on the matched element, unless `force` option is set. If the
54
+ # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the
55
55
  # element is detached during the checks, the whole action is retried.
56
56
  # 1. Scroll the element into view if needed.
57
57
  # 1. Use [`property: Page.mouse`] to click in the center of the element.
@@ -77,7 +77,7 @@ module Playwright
77
77
 
78
78
  # This method clicks an element matching `selector` by performing the following steps:
79
79
  # 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
80
- # 1. Wait for [actionability](./actionability.md) checks on the matched element, unless `force` option is set. If the
80
+ # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the
81
81
  # element is detached during the checks, the whole action is retried.
82
82
  # 1. Scroll the element into view if needed.
83
83
  # 1. Use [`property: Page.mouse`] to click in the center of the element, or the specified `position`.
@@ -107,7 +107,7 @@ module Playwright
107
107
 
108
108
  # This method double clicks an element matching `selector` by performing the following steps:
109
109
  # 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
110
- # 1. Wait for [actionability](./actionability.md) checks on the matched element, unless `force` option is set. If the
110
+ # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the
111
111
  # element is detached during the checks, the whole action is retried.
112
112
  # 1. Scroll the element into view if needed.
113
113
  # 1. Use [`property: Page.mouse`] to double click in the center of the element, or the specified `position`.
@@ -187,7 +187,7 @@ module Playwright
187
187
  # tests. Use [`method: Locator.evaluate`], other `Locator` helper methods or web-first assertions instead.
188
188
  #
189
189
  # The method finds an element matching the specified selector within the frame and passes it as a first argument to
190
- # `expression`. See [Working with selectors](./selectors.md) for more details. If no elements match the selector, the
190
+ # `expression`. See [Working with selectors](../selectors.md) for more details. If no elements match the selector, the
191
191
  # method throws an error.
192
192
  #
193
193
  # If `expression` returns a [Promise], then [`method: Frame.evalOnSelector`] would wait for the promise to resolve and
@@ -210,7 +210,7 @@ module Playwright
210
210
  # better job.
211
211
  #
212
212
  # The method finds all elements matching the specified selector within the frame and passes an array of matched elements
213
- # as a first argument to `expression`. See [Working with selectors](./selectors.md) for more details.
213
+ # as a first argument to `expression`. See [Working with selectors](../selectors.md) for more details.
214
214
  #
215
215
  # If `expression` returns a [Promise], then [`method: Frame.evalOnSelectorAll`] would wait for the promise to resolve and
216
216
  # return its value.
@@ -288,7 +288,7 @@ module Playwright
288
288
  wrap_impl(@impl.evaluate_handle(unwrap_impl(expression), arg: unwrap_impl(arg)))
289
289
  end
290
290
 
291
- # This method waits for an element matching `selector`, waits for [actionability](./actionability.md) checks, focuses the
291
+ # This method waits for an element matching `selector`, waits for [actionability](../actionability.md) checks, focuses the
292
292
  # element, fills it and triggers an `input` event after filling. Note that you can pass an empty string to clear the input
293
293
  # field.
294
294
  #
@@ -371,7 +371,7 @@ module Playwright
371
371
 
372
372
  # This method hovers over an element matching `selector` by performing the following steps:
373
373
  # 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
374
- # 1. Wait for [actionability](./actionability.md) checks on the matched element, unless `force` option is set. If the
374
+ # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the
375
375
  # element is detached during the checks, the whole action is retried.
376
376
  # 1. Scroll the element into view if needed.
377
377
  # 1. Use [`property: Page.mouse`] to hover over the center of the element, or the specified `position`.
@@ -400,7 +400,10 @@ module Playwright
400
400
  wrap_impl(@impl.inner_text(unwrap_impl(selector), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
401
401
  end
402
402
 
403
- # Returns `input.value` for the selected `<input>` or `<textarea>` or `<select>` element. Throws for non-input elements.
403
+ # Returns `input.value` for the selected `<input>` or `<textarea>` or `<select>` element.
404
+ #
405
+ # Throws for non-input elements. However, if the element is inside the `<label>` element that has an associated
406
+ # [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), returns the value of the control.
404
407
  def input_value(selector, strict: nil, timeout: nil)
405
408
  wrap_impl(@impl.input_value(unwrap_impl(selector), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
406
409
  end
@@ -415,28 +418,28 @@ module Playwright
415
418
  wrap_impl(@impl.detached?)
416
419
  end
417
420
 
418
- # Returns whether the element is disabled, the opposite of [enabled](./actionability.md#enabled).
421
+ # Returns whether the element is disabled, the opposite of [enabled](../actionability.md#enabled).
419
422
  def disabled?(selector, strict: nil, timeout: nil)
420
423
  wrap_impl(@impl.disabled?(unwrap_impl(selector), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
421
424
  end
422
425
 
423
- # Returns whether the element is [editable](./actionability.md#editable).
426
+ # Returns whether the element is [editable](../actionability.md#editable).
424
427
  def editable?(selector, strict: nil, timeout: nil)
425
428
  wrap_impl(@impl.editable?(unwrap_impl(selector), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
426
429
  end
427
430
 
428
- # Returns whether the element is [enabled](./actionability.md#enabled).
431
+ # Returns whether the element is [enabled](../actionability.md#enabled).
429
432
  def enabled?(selector, strict: nil, timeout: nil)
430
433
  wrap_impl(@impl.enabled?(unwrap_impl(selector), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
431
434
  end
432
435
 
433
- # Returns whether the element is hidden, the opposite of [visible](./actionability.md#visible). `selector` that does not
436
+ # Returns whether the element is hidden, the opposite of [visible](../actionability.md#visible). `selector` that does not
434
437
  # match any elements is considered hidden.
435
438
  def hidden?(selector, strict: nil, timeout: nil)
436
439
  wrap_impl(@impl.hidden?(unwrap_impl(selector), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
437
440
  end
438
441
 
439
- # Returns whether the element is [visible](./actionability.md#visible). `selector` that does not match any elements is
442
+ # Returns whether the element is [visible](../actionability.md#visible). `selector` that does not match any elements is
440
443
  # considered not visible.
441
444
  def visible?(selector, strict: nil, timeout: nil)
442
445
  wrap_impl(@impl.visible?(unwrap_impl(selector), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
@@ -445,6 +448,8 @@ module Playwright
445
448
  # The method returns an element locator that can be used to perform actions in the frame. Locator is resolved to the
446
449
  # element immediately before performing an action, so a series of actions on the same locator can in fact be performed on
447
450
  # different DOM elements. That would happen if the DOM structure between those actions has changed.
451
+ #
452
+ # [Learn more about locators](../locators.md).
448
453
  def locator(selector, has: nil, hasText: nil)
449
454
  wrap_impl(@impl.locator(unwrap_impl(selector), has: unwrap_impl(has), hasText: unwrap_impl(hasText)))
450
455
  end
@@ -499,7 +504,7 @@ module Playwright
499
504
  # > NOTE: The use of `ElementHandle` is discouraged, use `Locator` objects and web-first assertions instead.
500
505
  #
501
506
  # The method finds an element matching the specified selector within the frame. See
502
- # [Working with selectors](./selectors.md) for more details. If no elements match the selector, returns `null`.
507
+ # [Working with selectors](../selectors.md) for more details. If no elements match the selector, returns `null`.
503
508
  def query_selector(selector, strict: nil)
504
509
  wrap_impl(@impl.query_selector(unwrap_impl(selector), strict: unwrap_impl(strict)))
505
510
  end
@@ -509,12 +514,12 @@ module Playwright
509
514
  # > NOTE: The use of `ElementHandle` is discouraged, use `Locator` objects instead.
510
515
  #
511
516
  # The method finds all elements matching the specified selector within the frame. See
512
- # [Working with selectors](./selectors.md) for more details. If no elements match the selector, returns empty array.
517
+ # [Working with selectors](../selectors.md) for more details. If no elements match the selector, returns empty array.
513
518
  def query_selector_all(selector)
514
519
  wrap_impl(@impl.query_selector_all(unwrap_impl(selector)))
515
520
  end
516
521
 
517
- # This method waits for an element matching `selector`, waits for [actionability](./actionability.md) checks, waits until
522
+ # This method waits for an element matching `selector`, waits for [actionability](../actionability.md) checks, waits until
518
523
  # all specified options are present in the `<select>` element and selects these options.
519
524
  #
520
525
  # If the target element is not a `<select>` element, this method throws an error. However, if the element is inside the
@@ -550,7 +555,7 @@ module Playwright
550
555
  # 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
551
556
  # 1. Ensure that matched element is a checkbox or a radio input. If not, this method throws.
552
557
  # 1. If the element already has the right checked state, this method returns immediately.
553
- # 1. Wait for [actionability](./actionability.md) checks on the matched element, unless `force` option is set. If the
558
+ # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the
554
559
  # element is detached during the checks, the whole action is retried.
555
560
  # 1. Scroll the element into view if needed.
556
561
  # 1. Use [`property: Page.mouse`] to click in the center of the element.
@@ -576,11 +581,13 @@ module Playwright
576
581
  end
577
582
  alias_method :content=, :set_content
578
583
 
579
- # This method expects `selector` to point to an
580
- # [input element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input).
581
- #
582
584
  # Sets the value of the file input to these file paths or files. If some of the `filePaths` are relative paths, then they
583
- # are resolved relative to the the current working directory. For empty array, clears the selected files.
585
+ # are resolved relative to the current working directory. For empty array, clears the selected files.
586
+ #
587
+ # This method expects `selector` to point to an
588
+ # [input element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input). However, if the element is inside the
589
+ # `<label>` element that has an associated
590
+ # [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), targets the control instead.
584
591
  def set_input_files(
585
592
  selector,
586
593
  files,
@@ -592,7 +599,7 @@ module Playwright
592
599
 
593
600
  # This method taps an element matching `selector` by performing the following steps:
594
601
  # 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
595
- # 1. Wait for [actionability](./actionability.md) checks on the matched element, unless `force` option is set. If the
602
+ # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the
596
603
  # element is detached during the checks, the whole action is retried.
597
604
  # 1. Scroll the element into view if needed.
598
605
  # 1. Use [`property: Page.touchscreen`] to tap the center of the element, or the specified `position`.
@@ -647,7 +654,7 @@ module Playwright
647
654
  # 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
648
655
  # 1. Ensure that matched element is a checkbox or a radio input. If not, this method throws. If the element is already
649
656
  # unchecked, this method returns immediately.
650
- # 1. Wait for [actionability](./actionability.md) checks on the matched element, unless `force` option is set. If the
657
+ # 1. Wait for [actionability](../actionability.md) checks on the matched element, unless `force` option is set. If the
651
658
  # element is detached during the checks, the whole action is retried.
652
659
  # 1. Scroll the element into view if needed.
653
660
  # 1. Use [`property: Page.mouse`] to click in the center of the element.
@@ -52,7 +52,7 @@ module Playwright
52
52
  wrap_impl(@impl.locator(unwrap_impl(selector), has: unwrap_impl(has), hasText: unwrap_impl(hasText)))
53
53
  end
54
54
 
55
- # Returns locator to the n-th matching frame.
55
+ # Returns locator to the n-th matching frame. It's zero based, `nth(0)` selects the first frame.
56
56
  def nth(index)
57
57
  wrap_impl(@impl.nth(unwrap_impl(index)))
58
58
  end