playwright-ruby-client 0.8.0 → 1.14.beta2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/documentation/docs/api/accessibility.md +52 -1
  3. data/documentation/docs/api/browser.md +8 -2
  4. data/documentation/docs/api/browser_context.md +28 -0
  5. data/documentation/docs/api/browser_type.md +1 -0
  6. data/documentation/docs/api/download.md +97 -0
  7. data/documentation/docs/api/element_handle.md +28 -3
  8. data/documentation/docs/api/experimental/android_device.md +1 -0
  9. data/documentation/docs/api/frame.md +78 -18
  10. data/documentation/docs/api/keyboard.md +11 -20
  11. data/documentation/docs/api/locator.md +650 -0
  12. data/documentation/docs/api/page.md +124 -20
  13. data/documentation/docs/api/touchscreen.md +8 -0
  14. data/documentation/docs/api/worker.md +37 -0
  15. data/documentation/docs/article/guides/inspector.md +31 -0
  16. data/documentation/docs/article/guides/playwright_on_alpine_linux.md +91 -0
  17. data/documentation/docs/article/guides/semi_automation.md +5 -1
  18. data/documentation/docs/include/api_coverage.md +72 -15
  19. data/lib/playwright.rb +0 -1
  20. data/lib/playwright/accessibility_impl.rb +50 -0
  21. data/lib/playwright/channel_owners/artifact.rb +4 -0
  22. data/lib/playwright/channel_owners/browser_context.rb +77 -3
  23. data/lib/playwright/channel_owners/frame.rb +101 -35
  24. data/lib/playwright/channel_owners/page.rb +157 -56
  25. data/lib/playwright/channel_owners/worker.rb +23 -0
  26. data/lib/playwright/{download.rb → download_impl.rb} +5 -1
  27. data/lib/playwright/javascript/expression.rb +5 -4
  28. data/lib/playwright/locator_impl.rb +314 -0
  29. data/lib/playwright/route_handler_entry.rb +3 -2
  30. data/lib/playwright/timeout_settings.rb +4 -4
  31. data/lib/playwright/touchscreen_impl.rb +7 -0
  32. data/lib/playwright/tracing_impl.rb +9 -8
  33. data/lib/playwright/url_matcher.rb +12 -2
  34. data/lib/playwright/version.rb +2 -2
  35. data/lib/playwright_api/accessibility.rb +1 -1
  36. data/lib/playwright_api/android.rb +6 -6
  37. data/lib/playwright_api/android_device.rb +8 -7
  38. data/lib/playwright_api/browser.rb +16 -10
  39. data/lib/playwright_api/browser_context.rb +16 -11
  40. data/lib/playwright_api/browser_type.rb +8 -7
  41. data/lib/playwright_api/cdp_session.rb +6 -6
  42. data/lib/playwright_api/console_message.rb +6 -6
  43. data/lib/playwright_api/dialog.rb +6 -6
  44. data/lib/playwright_api/download.rb +70 -0
  45. data/lib/playwright_api/element_handle.rb +34 -20
  46. data/lib/playwright_api/frame.rb +94 -52
  47. data/lib/playwright_api/js_handle.rb +6 -6
  48. data/lib/playwright_api/locator.rb +509 -0
  49. data/lib/playwright_api/page.rb +101 -57
  50. data/lib/playwright_api/playwright.rb +6 -6
  51. data/lib/playwright_api/request.rb +6 -6
  52. data/lib/playwright_api/response.rb +6 -6
  53. data/lib/playwright_api/route.rb +6 -11
  54. data/lib/playwright_api/selectors.rb +6 -6
  55. data/lib/playwright_api/touchscreen.rb +1 -1
  56. data/lib/playwright_api/web_socket.rb +6 -6
  57. data/lib/playwright_api/worker.rb +16 -6
  58. metadata +14 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 05e5dff936dc4eda78a295d4f6935b5b92d6e82046de9a36c9f4b67aba24e89f
4
- data.tar.gz: 85f30ee725facdc21d77645007cbeca689cd322dacb559146234fab1de0aab79
3
+ metadata.gz: 2e8cf4acb773b928d276eac118c170bb0eb2f0c8235f7c19bf0ebf2a4883a3e7
4
+ data.tar.gz: 7a70fbaad653abe274b8fac05b953ec413ca213bfc9d0e6396c3bf2c6c0f5b2d
5
5
  SHA512:
6
- metadata.gz: 3c0fefff97e051805fb7d48aa134456d6a45ed5ab6b6818ea506251d93a1991c47bc6fc30aa1e2eae9369b1188564c08e23d083b6f8f8a896efe52d008cf6889
7
- data.tar.gz: ebaf0d10fea440818cc182496b72c5ac16d192c76825db8aa271b89f891059b496ffdaaecdcfbaf7482ceb37ea868ac13feae678eee81b76c4e856f419627209
6
+ metadata.gz: 981c3cab4a5060634f858b934b01ef51e0f1e887d2bf5e4bbb62dca636d1ab3b9459542e436965c49cf0240f8431732a5fa50f9b7dc6d324c7c21fc36b8b01b8
7
+ data.tar.gz: '08e490a08488fac3f0633ade8fc4f2299dc6e69fcc6cd86c5587197a9a7bfdca78e836de8fff6b0a578c64387b59c0cba2f245a93280ba7e7b0e6488875ae819'
@@ -4,4 +4,55 @@ sidebar_position: 10
4
4
 
5
5
  # Accessibility
6
6
 
7
- Not Implemented
7
+ The Accessibility class provides methods for inspecting Chromium's accessibility tree. The accessibility tree is used by
8
+ assistive technology such as [screen readers](https://en.wikipedia.org/wiki/Screen_reader) or
9
+ [switches](https://en.wikipedia.org/wiki/Switch_access).
10
+
11
+ Accessibility is a very platform-specific thing. On different platforms, there are different screen readers that might
12
+ have wildly different output.
13
+
14
+ Rendering engines of Chromium, Firefox and WebKit have a concept of "accessibility tree", which is then translated into
15
+ different platform-specific APIs. Accessibility namespace gives access to this Accessibility Tree.
16
+
17
+ Most of the accessibility tree gets filtered out when converting from internal browser AX Tree to Platform-specific
18
+ AX-Tree or by assistive technologies themselves. By default, Playwright tries to approximate this filtering, exposing
19
+ only the "interesting" nodes of the tree.
20
+
21
+ ## snapshot
22
+
23
+ ```
24
+ def snapshot(interestingOnly: nil, root: nil)
25
+ ```
26
+
27
+ Captures the current state of the accessibility tree. The returned object represents the root accessible node of the
28
+ page.
29
+
30
+ > NOTE: The Chromium accessibility tree contains nodes that go unused on most platforms and by most screen readers.
31
+ Playwright will discard them as well for an easier to process tree, unless `interestingOnly` is set to `false`.
32
+
33
+ An example of dumping the entire accessibility tree:
34
+
35
+ ```python sync title=example_2e5019929403491cde0c78bed1e0e18e0c86ab423d7ac8715876c4de4814f483.py
36
+ snapshot = page.accessibility.snapshot()
37
+ print(snapshot)
38
+
39
+ ```
40
+
41
+ An example of logging the focused node's name:
42
+
43
+ ```python sync title=example_df2acadf9e261a7624d83399f0d8b0910293a6a7081c812474715f22f8af7a4a.py
44
+ def find_focused_node(node):
45
+ if (node.get("focused"))
46
+ return node
47
+ for child in (node.get("children") or []):
48
+ found_node = find_focused_node(child)
49
+ return found_node
50
+ return None
51
+
52
+ snapshot = page.accessibility.snapshot()
53
+ node = find_focused_node(snapshot)
54
+ if node:
55
+ print(node["name"])
56
+
57
+ ```
58
+
@@ -76,6 +76,7 @@ Returns the newly created browser session.
76
76
  ```
77
77
  def new_context(
78
78
  acceptDownloads: nil,
79
+ baseURL: nil,
79
80
  bypassCSP: nil,
80
81
  colorScheme: nil,
81
82
  deviceScaleFactor: nil,
@@ -124,6 +125,7 @@ end
124
125
  ```
125
126
  def new_page(
126
127
  acceptDownloads: nil,
128
+ baseURL: nil,
127
129
  bypassCSP: nil,
128
130
  colorScheme: nil,
129
131
  deviceScaleFactor: nil,
@@ -164,7 +166,9 @@ testing frameworks should explicitly create [Browser#new_context](./browser#new_
164
166
  def start_tracing(page: nil, categories: nil, path: nil, screenshots: nil)
165
167
  ```
166
168
 
167
- > NOTE: Tracing is only supported on Chromium-based browsers.
169
+ > NOTE: This API controls [Chromium Tracing](https://www.chromium.org/developers/how-tos/trace-event-profiling-tool)
170
+ which is a low-level chromium-specific debugging tool. API to control [Playwright Tracing](https://playwright.dev/python/docs/trace-viewer) could be
171
+ found [here](./tracing).
168
172
 
169
173
  You can use [Browser#start_tracing](./browser#start_tracing) and [Browser#stop_tracing](./browser#stop_tracing) to create a trace file that can be
170
174
  opened in Chrome DevTools performance panel.
@@ -185,7 +189,9 @@ end
185
189
  def stop_tracing
186
190
  ```
187
191
 
188
- > NOTE: Tracing is only supported on Chromium-based browsers.
192
+ > NOTE: This API controls [Chromium Tracing](https://www.chromium.org/developers/how-tos/trace-event-profiling-tool)
193
+ which is a low-level chromium-specific debugging tool. API to control [Playwright Tracing](https://playwright.dev/python/docs/trace-viewer) could be
194
+ found [here](./tracing).
189
195
 
190
196
  Returns the buffer with trace data.
191
197
 
@@ -67,6 +67,16 @@ browser_context.add_init_script(path: "preload.js")
67
67
  > NOTE: The order of evaluation of multiple scripts installed via [BrowserContext#add_init_script](./browser_context#add_init_script) and
68
68
  [Page#add_init_script](./page#add_init_script) is not defined.
69
69
 
70
+ ## background_pages
71
+
72
+ ```
73
+ def background_pages
74
+ ```
75
+
76
+ > NOTE: Background pages are only supported on Chromium-based browsers.
77
+
78
+ All existing background pages in the context.
79
+
70
80
  ## browser
71
81
 
72
82
  ```
@@ -301,6 +311,16 @@ To remove a route with its handler you can use [BrowserContext#unroute](./browse
301
311
 
302
312
  > NOTE: Enabling routing disables http cache.
303
313
 
314
+ ## service_workers
315
+
316
+ ```
317
+ def service_workers
318
+ ```
319
+
320
+ > NOTE: Service workers are only supported on Chromium-based browsers.
321
+
322
+ All existing service workers in the context.
323
+
304
324
  ## set_default_navigation_timeout
305
325
 
306
326
  ```
@@ -369,6 +389,14 @@ alias: `offline=`
369
389
 
370
390
 
371
391
 
392
+ ## storage_state
393
+
394
+ ```
395
+ def storage_state(path: nil)
396
+ ```
397
+
398
+ Returns storage state for this browser context, contains current cookies and local storage snapshot.
399
+
372
400
  ## unroute
373
401
 
374
402
  ```
@@ -103,6 +103,7 @@ def launch_persistent_context(
103
103
  userDataDir,
104
104
  acceptDownloads: nil,
105
105
  args: nil,
106
+ baseURL: nil,
106
107
  bypassCSP: nil,
107
108
  channel: nil,
108
109
  chromiumSandbox: nil,
@@ -0,0 +1,97 @@
1
+ ---
2
+ sidebar_position: 10
3
+ ---
4
+
5
+ # Download
6
+
7
+ [Download](./download) objects are dispatched by page via the [`event: Page.download`] event.
8
+
9
+ All the downloaded files belonging to the browser context are deleted when the browser context is closed.
10
+
11
+ Download event is emitted once the download starts. Download path becomes available once download completes:
12
+
13
+ ```ruby
14
+ download = page.expect_download do
15
+ page.click('a')
16
+ end
17
+
18
+ # wait for download to complete
19
+ path = download.path
20
+ ```
21
+
22
+ > NOTE: Browser context **must** be created with the `acceptDownloads` set to `true` when user needs access to the
23
+ downloaded content. If `acceptDownloads` is not set, download events are emitted, but the actual download is not
24
+ performed and user has no access to the downloaded files.
25
+
26
+ ## cancel
27
+
28
+ ```
29
+ def cancel
30
+ ```
31
+
32
+ Cancels a download. Will not fail if the download is already finished or canceled. Upon successful cancellations,
33
+ `download.failure()` would resolve to `'canceled'`.
34
+
35
+ ## delete
36
+
37
+ ```
38
+ def delete
39
+ ```
40
+
41
+ Deletes the downloaded file. Will wait for the download to finish if necessary.
42
+
43
+ ## failure
44
+
45
+ ```
46
+ def failure
47
+ ```
48
+
49
+ Returns download error if any. Will wait for the download to finish if necessary.
50
+
51
+ ## page
52
+
53
+ ```
54
+ def page
55
+ ```
56
+
57
+ Get the page that the download belongs to.
58
+
59
+ ## path
60
+
61
+ ```
62
+ def path
63
+ ```
64
+
65
+ Returns path to the downloaded file in case of successful download. The method will wait for the download to finish if
66
+ necessary. The method throws when connected remotely.
67
+
68
+ Note that the download's file name is a random GUID, use [Download#suggested_filename](./download#suggested_filename) to get suggested file
69
+ name.
70
+
71
+ ## save_as
72
+
73
+ ```
74
+ def save_as(path)
75
+ ```
76
+
77
+ Copy the download to a user-specified path. It is safe to call this method while the download is still in progress. Will
78
+ wait for the download to finish if necessary.
79
+
80
+ ## suggested_filename
81
+
82
+ ```
83
+ def suggested_filename
84
+ ```
85
+
86
+ Returns suggested filename for this download. It is typically computed by the browser from the
87
+ [`Content-Disposition`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition) response header
88
+ or the `download` attribute. See the spec on [whatwg](https://html.spec.whatwg.org/#downloading-resources). Different
89
+ browsers can use different logic for computing it.
90
+
91
+ ## url
92
+
93
+ ```
94
+ def url
95
+ ```
96
+
97
+ Returns downloaded url.
@@ -10,10 +10,8 @@ ElementHandle represents an in-page DOM element. ElementHandles can be created w
10
10
  method.
11
11
 
12
12
  ```ruby
13
- page.goto("https://example.com")
14
13
  href_element = page.query_selector("a")
15
14
  href_element.click
16
- # ...
17
15
  ```
18
16
 
19
17
  ElementHandle prevents DOM element from garbage collection unless the handle is disposed with
@@ -22,6 +20,33 @@ ElementHandle prevents DOM element from garbage collection unless the handle is
22
20
  ElementHandle instances can be used as an argument in [Page#eval_on_selector](./page#eval_on_selector) and [Page#evaluate](./page#evaluate)
23
21
  methods.
24
22
 
23
+ > NOTE: In most cases, you would want to use the [Locator](./locator) object instead. You should only use [ElementHandle](./element_handle) if you
24
+ want to retain a handle to a particular DOM Node that you intend to pass into [Page#evaluate](./page#evaluate) as an argument.
25
+
26
+ The difference between the [Locator](./locator) and ElementHandle is that the ElementHandle points to a particular element, while
27
+ [Locator](./locator) captures the logic of how to retrieve an element.
28
+
29
+ In the example below, handle points to a particular DOM element on page. If that element changes text or is used by
30
+ React to render an entirely different component, handle is still pointing to that very DOM element. This can lead to
31
+ unexpected behaviors.
32
+
33
+ ```ruby
34
+ handle = page.query_selector("text=Submit")
35
+ handle.hover
36
+ handle.click
37
+ ```
38
+
39
+ With the locator, every time the `element` is used, up-to-date DOM element is located in the page using the selector. So
40
+ in the snippet below, underlying DOM element is going to be located twice.
41
+
42
+ ```ruby
43
+ locator = page.locator("text=Submit")
44
+ locator.hover
45
+ locator.click
46
+ ```
47
+
48
+
49
+
25
50
  ## bounding_box
26
51
 
27
52
  ```
@@ -306,7 +331,7 @@ Returns the `element.innerText`.
306
331
  def input_value(timeout: nil)
307
332
  ```
308
333
 
309
- Returns `input.value` for `<input>` or `<textarea>` element. Throws for non-input elements.
334
+ Returns `input.value` for `<input>` or `<textarea>` or `<select>` element. Throws for non-input elements.
310
335
 
311
336
  ## checked?
312
337
 
@@ -28,6 +28,7 @@ Returns information about a widget defined by `selector`.
28
28
  ```
29
29
  def launch_browser(
30
30
  acceptDownloads: nil,
31
+ baseURL: nil,
31
32
  bypassCSP: nil,
32
33
  colorScheme: nil,
33
34
  command: nil,
@@ -68,6 +68,7 @@ def check(
68
68
  force: nil,
69
69
  noWaitAfter: nil,
70
70
  position: nil,
71
+ strict: nil,
71
72
  timeout: nil,
72
73
  trial: nil)
73
74
  ```
@@ -106,6 +107,7 @@ def click(
106
107
  modifiers: nil,
107
108
  noWaitAfter: nil,
108
109
  position: nil,
110
+ strict: nil,
109
111
  timeout: nil,
110
112
  trial: nil)
111
113
  ```
@@ -140,6 +142,7 @@ def dblclick(
140
142
  modifiers: nil,
141
143
  noWaitAfter: nil,
142
144
  position: nil,
145
+ strict: nil,
143
146
  timeout: nil,
144
147
  trial: nil)
145
148
  ```
@@ -161,7 +164,12 @@ zero timeout disables this.
161
164
  ## dispatch_event
162
165
 
163
166
  ```
164
- def dispatch_event(selector, type, eventInit: nil, timeout: nil)
167
+ def dispatch_event(
168
+ selector,
169
+ type,
170
+ eventInit: nil,
171
+ strict: nil,
172
+ timeout: nil)
165
173
  ```
166
174
 
167
175
  The snippet below dispatches the `click` event on the element. Regardless of the visibility state of the element,
@@ -196,10 +204,27 @@ frame.dispatch_event("#source", "dragstart", { "dataTransfer": data_transfer })
196
204
 
197
205
 
198
206
 
207
+ ## drag_and_drop
208
+
209
+ ```
210
+ def drag_and_drop(
211
+ source,
212
+ target,
213
+ force: nil,
214
+ noWaitAfter: nil,
215
+ sourcePosition: nil,
216
+ strict: nil,
217
+ targetPosition: nil,
218
+ timeout: nil,
219
+ trial: nil)
220
+ ```
221
+
222
+
223
+
199
224
  ## eval_on_selector
200
225
 
201
226
  ```
202
- def eval_on_selector(selector, expression, arg: nil)
227
+ def eval_on_selector(selector, expression, arg: nil, strict: nil)
203
228
  ```
204
229
 
205
230
  Returns the return value of `expression`.
@@ -331,6 +356,7 @@ def fill(
331
356
  value,
332
357
  force: nil,
333
358
  noWaitAfter: nil,
359
+ strict: nil,
334
360
  timeout: nil)
335
361
  ```
336
362
 
@@ -348,7 +374,7 @@ To send fine-grained keyboard events, use [Frame#type](./frame#type).
348
374
  ## focus
349
375
 
350
376
  ```
351
- def focus(selector, timeout: nil)
377
+ def focus(selector, strict: nil, timeout: nil)
352
378
  ```
353
379
 
354
380
  This method fetches an element with `selector` and focuses it. If there's no element matching `selector`, the method
@@ -379,7 +405,7 @@ assert frame == content_frame
379
405
  ## get_attribute
380
406
 
381
407
  ```
382
- def get_attribute(selector, name, timeout: nil)
408
+ def get_attribute(selector, name, strict: nil, timeout: nil)
383
409
  ```
384
410
 
385
411
  Returns element attribute value.
@@ -417,6 +443,7 @@ def hover(
417
443
  force: nil,
418
444
  modifiers: nil,
419
445
  position: nil,
446
+ strict: nil,
420
447
  timeout: nil,
421
448
  trial: nil)
422
449
  ```
@@ -435,7 +462,7 @@ zero timeout disables this.
435
462
  ## inner_html
436
463
 
437
464
  ```
438
- def inner_html(selector, timeout: nil)
465
+ def inner_html(selector, strict: nil, timeout: nil)
439
466
  ```
440
467
 
441
468
  Returns `element.innerHTML`.
@@ -443,7 +470,7 @@ Returns `element.innerHTML`.
443
470
  ## inner_text
444
471
 
445
472
  ```
446
- def inner_text(selector, timeout: nil)
473
+ def inner_text(selector, strict: nil, timeout: nil)
447
474
  ```
448
475
 
449
476
  Returns `element.innerText`.
@@ -451,15 +478,15 @@ Returns `element.innerText`.
451
478
  ## input_value
452
479
 
453
480
  ```
454
- def input_value(selector, timeout: nil)
481
+ def input_value(selector, strict: nil, timeout: nil)
455
482
  ```
456
483
 
457
- Returns `input.value` for the selected `<input>` or `<textarea>` element. Throws for non-input elements.
484
+ Returns `input.value` for the selected `<input>` or `<textarea>` or `<select>` element. Throws for non-input elements.
458
485
 
459
486
  ## checked?
460
487
 
461
488
  ```
462
- def checked?(selector, timeout: nil)
489
+ def checked?(selector, strict: nil, timeout: nil)
463
490
  ```
464
491
 
465
492
  Returns whether the element is checked. Throws if the element is not a checkbox or radio input.
@@ -475,7 +502,7 @@ Returns `true` if the frame has been detached, or `false` otherwise.
475
502
  ## disabled?
476
503
 
477
504
  ```
478
- def disabled?(selector, timeout: nil)
505
+ def disabled?(selector, strict: nil, timeout: nil)
479
506
  ```
480
507
 
481
508
  Returns whether the element is disabled, the opposite of [enabled](https://playwright.dev/python/docs/actionability).
@@ -483,7 +510,7 @@ Returns whether the element is disabled, the opposite of [enabled](https://playw
483
510
  ## editable?
484
511
 
485
512
  ```
486
- def editable?(selector, timeout: nil)
513
+ def editable?(selector, strict: nil, timeout: nil)
487
514
  ```
488
515
 
489
516
  Returns whether the element is [editable](https://playwright.dev/python/docs/actionability).
@@ -491,7 +518,7 @@ Returns whether the element is [editable](https://playwright.dev/python/docs/act
491
518
  ## enabled?
492
519
 
493
520
  ```
494
- def enabled?(selector, timeout: nil)
521
+ def enabled?(selector, strict: nil, timeout: nil)
495
522
  ```
496
523
 
497
524
  Returns whether the element is [enabled](https://playwright.dev/python/docs/actionability).
@@ -499,7 +526,7 @@ Returns whether the element is [enabled](https://playwright.dev/python/docs/acti
499
526
  ## hidden?
500
527
 
501
528
  ```
502
- def hidden?(selector, timeout: nil)
529
+ def hidden?(selector, strict: nil, timeout: nil)
503
530
  ```
504
531
 
505
532
  Returns whether the element is hidden, the opposite of [visible](https://playwright.dev/python/docs/actionability). `selector` that does not
@@ -508,12 +535,24 @@ match any elements is considered hidden.
508
535
  ## visible?
509
536
 
510
537
  ```
511
- def visible?(selector, timeout: nil)
538
+ def visible?(selector, strict: nil, timeout: nil)
512
539
  ```
513
540
 
514
541
  Returns whether the element is [visible](https://playwright.dev/python/docs/actionability). `selector` that does not match any elements is
515
542
  considered not visible.
516
543
 
544
+ ## locator
545
+
546
+ ```
547
+ def locator(selector)
548
+ ```
549
+
550
+ The method returns an element locator that can be used to perform actions in the frame. Locator is resolved to the
551
+ element immediately before performing an action, so a series of actions on the same locator can in fact be performed on
552
+ different DOM elements. That would happen if the DOM structure between those actions has changed.
553
+
554
+ Note that locator always implies visibility, so it will always be locating visible elements.
555
+
517
556
  ## name
518
557
 
519
558
  ```
@@ -550,6 +589,7 @@ def press(
550
589
  key,
551
590
  delay: nil,
552
591
  noWaitAfter: nil,
592
+ strict: nil,
553
593
  timeout: nil)
554
594
  ```
555
595
 
@@ -573,7 +613,7 @@ modifier, modifier is pressed and being held while the subsequent key is being p
573
613
  ## query_selector
574
614
 
575
615
  ```
576
- def query_selector(selector)
616
+ def query_selector(selector, strict: nil)
577
617
  ```
578
618
 
579
619
  Returns the ElementHandle pointing to the frame element.
@@ -603,6 +643,7 @@ def select_option(
603
643
  label: nil,
604
644
  force: nil,
605
645
  noWaitAfter: nil,
646
+ strict: nil,
606
647
  timeout: nil)
607
648
  ```
608
649
 
@@ -641,7 +682,12 @@ alias: `content=`
641
682
  ## set_input_files
642
683
 
643
684
  ```
644
- def set_input_files(selector, files, noWaitAfter: nil, timeout: nil)
685
+ def set_input_files(
686
+ selector,
687
+ files,
688
+ noWaitAfter: nil,
689
+ strict: nil,
690
+ timeout: nil)
645
691
  ```
646
692
 
647
693
  This method expects `selector` to point to an
@@ -659,6 +705,7 @@ def tap_point(
659
705
  modifiers: nil,
660
706
  noWaitAfter: nil,
661
707
  position: nil,
708
+ strict: nil,
662
709
  timeout: nil,
663
710
  trial: nil)
664
711
  ```
@@ -679,7 +726,7 @@ zero timeout disables this.
679
726
  ## text_content
680
727
 
681
728
  ```
682
- def text_content(selector, timeout: nil)
729
+ def text_content(selector, strict: nil, timeout: nil)
683
730
  ```
684
731
 
685
732
  Returns `element.textContent`.
@@ -700,6 +747,7 @@ def type(
700
747
  text,
701
748
  delay: nil,
702
749
  noWaitAfter: nil,
750
+ strict: nil,
703
751
  timeout: nil)
704
752
  ```
705
753
 
@@ -724,6 +772,7 @@ def uncheck(
724
772
  force: nil,
725
773
  noWaitAfter: nil,
726
774
  position: nil,
775
+ strict: nil,
727
776
  timeout: nil,
728
777
  trial: nil)
729
778
  ```
@@ -831,7 +880,7 @@ considered a navigation.
831
880
  ## wait_for_selector
832
881
 
833
882
  ```
834
- def wait_for_selector(selector, state: nil, timeout: nil)
883
+ def wait_for_selector(selector, state: nil, strict: nil, timeout: nil)
835
884
  ```
836
885
 
837
886
  Returns when element specified by selector satisfies `state` option. Returns `null` if waiting for `hidden` or
@@ -863,6 +912,17 @@ with sync_playwright() as playwright:
863
912
 
864
913
 
865
914
 
915
+ ## wait_for_timeout
916
+
917
+ ```
918
+ def wait_for_timeout(timeout)
919
+ ```
920
+
921
+ Waits for the given `timeout` in milliseconds.
922
+
923
+ Note that `frame.waitForTimeout()` should only be used for debugging. Tests using the timer in production are going to
924
+ be flaky. Use signals such as network events, selectors becoming visible and others instead.
925
+
866
926
  ## wait_for_url
867
927
 
868
928
  ```