playwright-ruby-client 1.39.0 → 1.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/documentation/docs/api/api_request_context.md +1 -2
  3. data/documentation/docs/api/browser.md +10 -14
  4. data/documentation/docs/api/browser_context.md +32 -51
  5. data/documentation/docs/api/browser_type.md +8 -12
  6. data/documentation/docs/api/dialog.md +15 -18
  7. data/documentation/docs/api/download.md +10 -12
  8. data/documentation/docs/api/element_handle.md +9 -7
  9. data/documentation/docs/api/frame.md +28 -55
  10. data/documentation/docs/api/locator.md +24 -23
  11. data/documentation/docs/api/locator_assertions.md +652 -0
  12. data/documentation/docs/api/page.md +53 -103
  13. data/documentation/docs/api/playwright.md +20 -23
  14. data/documentation/docs/api/selectors.md +29 -34
  15. data/documentation/docs/article/guides/rails_integration.md +80 -51
  16. data/documentation/docs/article/guides/rspec_integration.md +59 -0
  17. data/documentation/docs/include/api_coverage.md +43 -0
  18. data/documentation/docusaurus.config.js +1 -1
  19. data/documentation/package.json +7 -7
  20. data/documentation/yarn.lock +4641 -5023
  21. data/lib/playwright/api_response_impl.rb +2 -2
  22. data/lib/playwright/channel.rb +1 -1
  23. data/lib/playwright/channel_owners/api_request_context.rb +12 -3
  24. data/lib/playwright/channel_owners/browser.rb +11 -7
  25. data/lib/playwright/channel_owners/browser_context.rb +35 -15
  26. data/lib/playwright/channel_owners/frame.rb +38 -14
  27. data/lib/playwright/channel_owners/page.rb +29 -16
  28. data/lib/playwright/channel_owners/web_socket.rb +8 -13
  29. data/lib/playwright/connection.rb +18 -2
  30. data/lib/playwright/errors.rb +22 -2
  31. data/lib/playwright/input_files.rb +4 -4
  32. data/lib/playwright/javascript/value_serializer.rb +1 -1
  33. data/lib/playwright/locator_assertions_impl.rb +417 -0
  34. data/lib/playwright/locator_impl.rb +24 -5
  35. data/lib/playwright/test.rb +68 -0
  36. data/lib/playwright/utils.rb +3 -10
  37. data/lib/playwright/version.rb +2 -2
  38. data/lib/playwright/waiter.rb +146 -0
  39. data/lib/playwright.rb +1 -1
  40. data/lib/playwright_api/api_request_context.rb +1 -2
  41. data/lib/playwright_api/browser.rb +2 -2
  42. data/lib/playwright_api/browser_context.rb +3 -3
  43. data/lib/playwright_api/browser_type.rb +2 -1
  44. data/lib/playwright_api/download.rb +1 -2
  45. data/lib/playwright_api/element_handle.rb +4 -1
  46. data/lib/playwright_api/frame.rb +4 -1
  47. data/lib/playwright_api/locator.rb +9 -1
  48. data/lib/playwright_api/locator_assertions.rb +561 -0
  49. data/lib/playwright_api/page.rb +16 -13
  50. data/lib/playwright_api/request.rb +4 -4
  51. data/lib/playwright_api/worker.rb +4 -4
  52. data/sig/playwright.rbs +48 -5
  53. metadata +9 -4
  54. data/lib/playwright/wait_helper.rb +0 -73
@@ -0,0 +1,561 @@
1
+ module Playwright
2
+ #
3
+ # The `LocatorAssertions` class provides assertion methods that can be used to make assertions about the `Locator` state in the tests.
4
+ #
5
+ # ```python sync
6
+ # from playwright.sync_api import Page, expect
7
+ #
8
+ # def test_status_becomes_submitted(page: Page) -> None:
9
+ # # ..
10
+ # page.get_by_role("button").click()
11
+ # expect(page.locator(".status")).to_have_text("Submitted")
12
+ # ```
13
+ class LocatorAssertions < PlaywrightApi
14
+
15
+ #
16
+ # The opposite of [`method: LocatorAssertions.toBeAttached`].
17
+ def not_to_be_attached(attached: nil, timeout: nil)
18
+ wrap_impl(@impl.not_to_be_attached(attached: unwrap_impl(attached), timeout: unwrap_impl(timeout)))
19
+ end
20
+
21
+ #
22
+ # The opposite of [`method: LocatorAssertions.toBeChecked`].
23
+ def not_to_be_checked(timeout: nil)
24
+ wrap_impl(@impl.not_to_be_checked(timeout: unwrap_impl(timeout)))
25
+ end
26
+
27
+ #
28
+ # The opposite of [`method: LocatorAssertions.toBeDisabled`].
29
+ def not_to_be_disabled(timeout: nil)
30
+ wrap_impl(@impl.not_to_be_disabled(timeout: unwrap_impl(timeout)))
31
+ end
32
+
33
+ #
34
+ # The opposite of [`method: LocatorAssertions.toBeEditable`].
35
+ def not_to_be_editable(editable: nil, timeout: nil)
36
+ wrap_impl(@impl.not_to_be_editable(editable: unwrap_impl(editable), timeout: unwrap_impl(timeout)))
37
+ end
38
+
39
+ #
40
+ # The opposite of [`method: LocatorAssertions.toBeEmpty`].
41
+ def not_to_be_empty(timeout: nil)
42
+ wrap_impl(@impl.not_to_be_empty(timeout: unwrap_impl(timeout)))
43
+ end
44
+
45
+ #
46
+ # The opposite of [`method: LocatorAssertions.toBeEnabled`].
47
+ def not_to_be_enabled(enabled: nil, timeout: nil)
48
+ wrap_impl(@impl.not_to_be_enabled(enabled: unwrap_impl(enabled), timeout: unwrap_impl(timeout)))
49
+ end
50
+
51
+ #
52
+ # The opposite of [`method: LocatorAssertions.toBeFocused`].
53
+ def not_to_be_focused(timeout: nil)
54
+ wrap_impl(@impl.not_to_be_focused(timeout: unwrap_impl(timeout)))
55
+ end
56
+
57
+ #
58
+ # The opposite of [`method: LocatorAssertions.toBeHidden`].
59
+ def not_to_be_hidden(timeout: nil)
60
+ wrap_impl(@impl.not_to_be_hidden(timeout: unwrap_impl(timeout)))
61
+ end
62
+
63
+ #
64
+ # The opposite of [`method: LocatorAssertions.toBeInViewport`].
65
+ def not_to_be_in_viewport(ratio: nil, timeout: nil)
66
+ wrap_impl(@impl.not_to_be_in_viewport(ratio: unwrap_impl(ratio), timeout: unwrap_impl(timeout)))
67
+ end
68
+
69
+ #
70
+ # The opposite of [`method: LocatorAssertions.toBeVisible`].
71
+ def not_to_be_visible(timeout: nil, visible: nil)
72
+ wrap_impl(@impl.not_to_be_visible(timeout: unwrap_impl(timeout), visible: unwrap_impl(visible)))
73
+ end
74
+
75
+ #
76
+ # The opposite of [`method: LocatorAssertions.toContainText`].
77
+ def not_to_contain_text(expected, ignoreCase: nil, timeout: nil, useInnerText: nil)
78
+ wrap_impl(@impl.not_to_contain_text(unwrap_impl(expected), ignoreCase: unwrap_impl(ignoreCase), timeout: unwrap_impl(timeout), useInnerText: unwrap_impl(useInnerText)))
79
+ end
80
+
81
+ #
82
+ # The opposite of [`method: LocatorAssertions.toHaveAttribute`].
83
+ def not_to_have_attribute(name, value, timeout: nil)
84
+ wrap_impl(@impl.not_to_have_attribute(unwrap_impl(name), unwrap_impl(value), timeout: unwrap_impl(timeout)))
85
+ end
86
+
87
+ #
88
+ # The opposite of [`method: LocatorAssertions.toHaveClass`].
89
+ def not_to_have_class(expected, timeout: nil)
90
+ wrap_impl(@impl.not_to_have_class(unwrap_impl(expected), timeout: unwrap_impl(timeout)))
91
+ end
92
+
93
+ #
94
+ # The opposite of [`method: LocatorAssertions.toHaveCount`].
95
+ def not_to_have_count(count, timeout: nil)
96
+ wrap_impl(@impl.not_to_have_count(unwrap_impl(count), timeout: unwrap_impl(timeout)))
97
+ end
98
+
99
+ #
100
+ # The opposite of [`method: LocatorAssertions.toHaveCSS`].
101
+ def not_to_have_css(name, value, timeout: nil)
102
+ wrap_impl(@impl.not_to_have_css(unwrap_impl(name), unwrap_impl(value), timeout: unwrap_impl(timeout)))
103
+ end
104
+
105
+ #
106
+ # The opposite of [`method: LocatorAssertions.toHaveId`].
107
+ def not_to_have_id(id, timeout: nil)
108
+ wrap_impl(@impl.not_to_have_id(unwrap_impl(id), timeout: unwrap_impl(timeout)))
109
+ end
110
+
111
+ #
112
+ # The opposite of [`method: LocatorAssertions.toHaveJSProperty`].
113
+ def not_to_have_js_property(name, value, timeout: nil)
114
+ wrap_impl(@impl.not_to_have_js_property(unwrap_impl(name), unwrap_impl(value), timeout: unwrap_impl(timeout)))
115
+ end
116
+
117
+ #
118
+ # The opposite of [`method: LocatorAssertions.toHaveText`].
119
+ def not_to_have_text(expected, ignoreCase: nil, timeout: nil, useInnerText: nil)
120
+ wrap_impl(@impl.not_to_have_text(unwrap_impl(expected), ignoreCase: unwrap_impl(ignoreCase), timeout: unwrap_impl(timeout), useInnerText: unwrap_impl(useInnerText)))
121
+ end
122
+
123
+ #
124
+ # The opposite of [`method: LocatorAssertions.toHaveValue`].
125
+ def not_to_have_value(value, timeout: nil)
126
+ wrap_impl(@impl.not_to_have_value(unwrap_impl(value), timeout: unwrap_impl(timeout)))
127
+ end
128
+
129
+ #
130
+ # The opposite of [`method: LocatorAssertions.toHaveValues`].
131
+ def not_to_have_values(values, timeout: nil)
132
+ wrap_impl(@impl.not_to_have_values(unwrap_impl(values), timeout: unwrap_impl(timeout)))
133
+ end
134
+
135
+ #
136
+ # Ensures that `Locator` points to an [attached](../actionability.md#attached) DOM node.
137
+ #
138
+ # **Usage**
139
+ #
140
+ # ```python sync
141
+ # expect(page.get_by_text("Hidden text")).to_be_attached()
142
+ # ```
143
+ def to_be_attached(attached: nil, timeout: nil)
144
+ wrap_impl(@impl.to_be_attached(attached: unwrap_impl(attached), timeout: unwrap_impl(timeout)))
145
+ end
146
+
147
+ #
148
+ # Ensures the `Locator` points to a checked input.
149
+ #
150
+ # **Usage**
151
+ #
152
+ # ```python sync
153
+ # from playwright.sync_api import expect
154
+ #
155
+ # locator = page.get_by_label("Subscribe to newsletter")
156
+ # expect(locator).to_be_checked()
157
+ # ```
158
+ def to_be_checked(checked: nil, timeout: nil)
159
+ wrap_impl(@impl.to_be_checked(checked: unwrap_impl(checked), timeout: unwrap_impl(timeout)))
160
+ end
161
+
162
+ #
163
+ # Ensures the `Locator` points to a disabled element. Element is disabled if it has "disabled" attribute
164
+ # or is disabled via ['aria-disabled'](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-disabled).
165
+ # Note that only native control elements such as HTML `button`, `input`, `select`, `textarea`, `option`, `optgroup`
166
+ # can be disabled by setting "disabled" attribute. "disabled" attribute on other elements is ignored
167
+ # by the browser.
168
+ #
169
+ # **Usage**
170
+ #
171
+ # ```python sync
172
+ # from playwright.sync_api import expect
173
+ #
174
+ # locator = page.locator("button.submit")
175
+ # expect(locator).to_be_disabled()
176
+ # ```
177
+ def to_be_disabled(timeout: nil)
178
+ wrap_impl(@impl.to_be_disabled(timeout: unwrap_impl(timeout)))
179
+ end
180
+
181
+ #
182
+ # Ensures the `Locator` points to an editable element.
183
+ #
184
+ # **Usage**
185
+ #
186
+ # ```python sync
187
+ # from playwright.sync_api import expect
188
+ #
189
+ # locator = page.get_by_role("textbox")
190
+ # expect(locator).to_be_editable()
191
+ # ```
192
+ def to_be_editable(editable: nil, timeout: nil)
193
+ wrap_impl(@impl.to_be_editable(editable: unwrap_impl(editable), timeout: unwrap_impl(timeout)))
194
+ end
195
+
196
+ #
197
+ # Ensures the `Locator` points to an empty editable element or to a DOM node that has no text.
198
+ #
199
+ # **Usage**
200
+ #
201
+ # ```python sync
202
+ # from playwright.sync_api import expect
203
+ #
204
+ # locator = page.locator("div.warning")
205
+ # expect(locator).to_be_empty()
206
+ # ```
207
+ def to_be_empty(timeout: nil)
208
+ wrap_impl(@impl.to_be_empty(timeout: unwrap_impl(timeout)))
209
+ end
210
+
211
+ #
212
+ # Ensures the `Locator` points to an enabled element.
213
+ #
214
+ # **Usage**
215
+ #
216
+ # ```python sync
217
+ # from playwright.sync_api import expect
218
+ #
219
+ # locator = page.locator("button.submit")
220
+ # expect(locator).to_be_enabled()
221
+ # ```
222
+ def to_be_enabled(enabled: nil, timeout: nil)
223
+ wrap_impl(@impl.to_be_enabled(enabled: unwrap_impl(enabled), timeout: unwrap_impl(timeout)))
224
+ end
225
+
226
+ #
227
+ # Ensures the `Locator` points to a focused DOM node.
228
+ #
229
+ # **Usage**
230
+ #
231
+ # ```python sync
232
+ # from playwright.sync_api import expect
233
+ #
234
+ # locator = page.get_by_role("textbox")
235
+ # expect(locator).to_be_focused()
236
+ # ```
237
+ def to_be_focused(timeout: nil)
238
+ wrap_impl(@impl.to_be_focused(timeout: unwrap_impl(timeout)))
239
+ end
240
+
241
+ #
242
+ # Ensures that `Locator` either does not resolve to any DOM node, or resolves to a [non-visible](../actionability.md#visible) one.
243
+ #
244
+ # **Usage**
245
+ #
246
+ # ```python sync
247
+ # from playwright.sync_api import expect
248
+ #
249
+ # locator = page.locator('.my-element')
250
+ # expect(locator).to_be_hidden()
251
+ # ```
252
+ def to_be_hidden(timeout: nil)
253
+ wrap_impl(@impl.to_be_hidden(timeout: unwrap_impl(timeout)))
254
+ end
255
+
256
+ #
257
+ # Ensures the `Locator` points to an element that intersects viewport, according to the [intersection observer API](https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API).
258
+ #
259
+ # **Usage**
260
+ #
261
+ # ```python sync
262
+ # from playwright.sync_api import expect
263
+ #
264
+ # locator = page.get_by_role("button")
265
+ # # Make sure at least some part of element intersects viewport.
266
+ # expect(locator).to_be_in_viewport()
267
+ # # Make sure element is fully outside of viewport.
268
+ # expect(locator).not_to_be_in_viewport()
269
+ # # Make sure that at least half of the element intersects viewport.
270
+ # expect(locator).to_be_in_viewport(ratio=0.5)
271
+ # ```
272
+ def to_be_in_viewport(ratio: nil, timeout: nil)
273
+ wrap_impl(@impl.to_be_in_viewport(ratio: unwrap_impl(ratio), timeout: unwrap_impl(timeout)))
274
+ end
275
+
276
+ #
277
+ # Ensures that `Locator` points to an [attached](../actionability.md#attached) and [visible](../actionability.md#visible) DOM node.
278
+ #
279
+ # To check that at least one element from the list is visible, use [`method: Locator.first`].
280
+ #
281
+ # **Usage**
282
+ #
283
+ # ```python sync
284
+ # # A specific element is visible.
285
+ # expect(page.get_by_text("Welcome")).to_be_visible()
286
+ #
287
+ # # At least one item in the list is visible.
288
+ # expect(page.get_by_test_id("todo-item").first).to_be_visible()
289
+ #
290
+ # # At least one of the two elements is visible, possibly both.
291
+ # expect(
292
+ # page.get_by_role("button", name="Sign in")
293
+ # .or_(page.get_by_role("button", name="Sign up"))
294
+ # .first
295
+ # ).to_be_visible()
296
+ # ```
297
+ def to_be_visible(timeout: nil, visible: nil)
298
+ wrap_impl(@impl.to_be_visible(timeout: unwrap_impl(timeout), visible: unwrap_impl(visible)))
299
+ end
300
+
301
+ #
302
+ # Ensures the `Locator` points to an element that contains the given text. You can use regular expressions for the value as well.
303
+ #
304
+ # **Details**
305
+ #
306
+ # When `expected` parameter is a string, Playwright will normalize whitespaces and line breaks both in the actual text and
307
+ # in the expected string before matching. When regular expression is used, the actual text is matched as is.
308
+ #
309
+ # **Usage**
310
+ #
311
+ # ```python sync
312
+ # import re
313
+ # from playwright.sync_api import expect
314
+ #
315
+ # locator = page.locator('.title')
316
+ # expect(locator).to_contain_text("substring")
317
+ # expect(locator).to_contain_text(re.compile(r"\d messages"))
318
+ # ```
319
+ #
320
+ # If you pass an array as an expected value, the expectations are:
321
+ # 1. Locator resolves to a list of elements.
322
+ # 1. Elements from a **subset** of this list contain text from the expected array, respectively.
323
+ # 1. The matching subset of elements has the same order as the expected array.
324
+ # 1. Each text value from the expected array is matched by some element from the list.
325
+ #
326
+ # For example, consider the following list:
327
+ #
328
+ # ```html
329
+ # <ul>
330
+ # <li>Item Text 1</li>
331
+ # <li>Item Text 2</li>
332
+ # <li>Item Text 3</li>
333
+ # </ul>
334
+ # ```
335
+ #
336
+ # Let's see how we can use the assertion:
337
+ #
338
+ # ```python sync
339
+ # from playwright.sync_api import expect
340
+ #
341
+ # # ✓ Contains the right items in the right order
342
+ # expect(page.locator("ul > li")).to_contain_text(["Text 1", "Text 3", "Text 4"])
343
+ #
344
+ # # ✖ Wrong order
345
+ # expect(page.locator("ul > li")).to_contain_text(["Text 3", "Text 2"])
346
+ #
347
+ # # ✖ No item contains this text
348
+ # expect(page.locator("ul > li")).to_contain_text(["Some 33"])
349
+ #
350
+ # # ✖ Locator points to the outer list element, not to the list items
351
+ # expect(page.locator("ul")).to_contain_text(["Text 3"])
352
+ # ```
353
+ def to_contain_text(expected, ignoreCase: nil, timeout: nil, useInnerText: nil)
354
+ wrap_impl(@impl.to_contain_text(unwrap_impl(expected), ignoreCase: unwrap_impl(ignoreCase), timeout: unwrap_impl(timeout), useInnerText: unwrap_impl(useInnerText)))
355
+ end
356
+
357
+ #
358
+ # Ensures the `Locator` points to an element with given attribute.
359
+ #
360
+ # **Usage**
361
+ #
362
+ # ```python sync
363
+ # from playwright.sync_api import expect
364
+ #
365
+ # locator = page.locator("input")
366
+ # expect(locator).to_have_attribute("type", "text")
367
+ # ```
368
+ def to_have_attribute(name, value, ignoreCase: nil, timeout: nil)
369
+ wrap_impl(@impl.to_have_attribute(unwrap_impl(name), unwrap_impl(value), ignoreCase: unwrap_impl(ignoreCase), timeout: unwrap_impl(timeout)))
370
+ end
371
+
372
+ #
373
+ # Ensures the `Locator` points to an element with given CSS classes. This needs to be a full match
374
+ # or using a relaxed regular expression.
375
+ #
376
+ # **Usage**
377
+ #
378
+ # ```html
379
+ # <div class='selected row' id='component'></div>
380
+ # ```
381
+ #
382
+ # ```python sync
383
+ # from playwright.sync_api import expect
384
+ #
385
+ # locator = page.locator("#component")
386
+ # expect(locator).to_have_class(re.compile(r"selected"))
387
+ # expect(locator).to_have_class("selected row")
388
+ # ```
389
+ #
390
+ # Note that if array is passed as an expected value, entire lists of elements can be asserted:
391
+ #
392
+ # ```python sync
393
+ # from playwright.sync_api import expect
394
+ #
395
+ # locator = page.locator("list > .component")
396
+ # expect(locator).to_have_class(["component", "component selected", "component"])
397
+ # ```
398
+ def to_have_class(expected, timeout: nil)
399
+ wrap_impl(@impl.to_have_class(unwrap_impl(expected), timeout: unwrap_impl(timeout)))
400
+ end
401
+
402
+ #
403
+ # Ensures the `Locator` resolves to an exact number of DOM nodes.
404
+ #
405
+ # **Usage**
406
+ #
407
+ # ```python sync
408
+ # from playwright.sync_api import expect
409
+ #
410
+ # locator = page.locator("list > .component")
411
+ # expect(locator).to_have_count(3)
412
+ # ```
413
+ def to_have_count(count, timeout: nil)
414
+ wrap_impl(@impl.to_have_count(unwrap_impl(count), timeout: unwrap_impl(timeout)))
415
+ end
416
+
417
+ #
418
+ # Ensures the `Locator` resolves to an element with the given computed CSS style.
419
+ #
420
+ # **Usage**
421
+ #
422
+ # ```python sync
423
+ # from playwright.sync_api import expect
424
+ #
425
+ # locator = page.get_by_role("button")
426
+ # expect(locator).to_have_css("display", "flex")
427
+ # ```
428
+ def to_have_css(name, value, timeout: nil)
429
+ wrap_impl(@impl.to_have_css(unwrap_impl(name), unwrap_impl(value), timeout: unwrap_impl(timeout)))
430
+ end
431
+
432
+ #
433
+ # Ensures the `Locator` points to an element with the given DOM Node ID.
434
+ #
435
+ # **Usage**
436
+ #
437
+ # ```python sync
438
+ # from playwright.sync_api import expect
439
+ #
440
+ # locator = page.get_by_role("textbox")
441
+ # expect(locator).to_have_id("lastname")
442
+ # ```
443
+ def to_have_id(id, timeout: nil)
444
+ wrap_impl(@impl.to_have_id(unwrap_impl(id), timeout: unwrap_impl(timeout)))
445
+ end
446
+
447
+ #
448
+ # Ensures the `Locator` points to an element with given JavaScript property. Note that this property can be
449
+ # of a primitive type as well as a plain serializable JavaScript object.
450
+ #
451
+ # **Usage**
452
+ #
453
+ # ```python sync
454
+ # from playwright.sync_api import expect
455
+ #
456
+ # locator = page.locator(".component")
457
+ # expect(locator).to_have_js_property("loaded", True)
458
+ # ```
459
+ def to_have_js_property(name, value, timeout: nil)
460
+ wrap_impl(@impl.to_have_js_property(unwrap_impl(name), unwrap_impl(value), timeout: unwrap_impl(timeout)))
461
+ end
462
+
463
+ #
464
+ # Ensures the `Locator` points to an element with the given text. You can use regular expressions for the value as well.
465
+ #
466
+ # **Details**
467
+ #
468
+ # When `expected` parameter is a string, Playwright will normalize whitespaces and line breaks both in the actual text and
469
+ # in the expected string before matching. When regular expression is used, the actual text is matched as is.
470
+ #
471
+ # **Usage**
472
+ #
473
+ # ```python sync
474
+ # import re
475
+ # from playwright.sync_api import expect
476
+ #
477
+ # locator = page.locator(".title")
478
+ # expect(locator).to_have_text(re.compile(r"Welcome, Test User"))
479
+ # expect(locator).to_have_text(re.compile(r"Welcome, .*"))
480
+ # ```
481
+ #
482
+ # If you pass an array as an expected value, the expectations are:
483
+ # 1. Locator resolves to a list of elements.
484
+ # 1. The number of elements equals the number of expected values in the array.
485
+ # 1. Elements from the list have text matching expected array values, one by one, in order.
486
+ #
487
+ # For example, consider the following list:
488
+ #
489
+ # ```html
490
+ # <ul>
491
+ # <li>Text 1</li>
492
+ # <li>Text 2</li>
493
+ # <li>Text 3</li>
494
+ # </ul>
495
+ # ```
496
+ #
497
+ # Let's see how we can use the assertion:
498
+ #
499
+ # ```python sync
500
+ # from playwright.sync_api import expect
501
+ #
502
+ # # ✓ Has the right items in the right order
503
+ # expect(page.locator("ul > li")).to_have_text(["Text 1", "Text 2", "Text 3"])
504
+ #
505
+ # # ✖ Wrong order
506
+ # expect(page.locator("ul > li")).to_have_text(["Text 3", "Text 2", "Text 1"])
507
+ #
508
+ # # ✖ Last item does not match
509
+ # expect(page.locator("ul > li")).to_have_text(["Text 1", "Text 2", "Text"])
510
+ #
511
+ # # ✖ Locator points to the outer list element, not to the list items
512
+ # expect(page.locator("ul")).to_have_text(["Text 1", "Text 2", "Text 3"])
513
+ # ```
514
+ def to_have_text(expected, ignoreCase: nil, timeout: nil, useInnerText: nil)
515
+ wrap_impl(@impl.to_have_text(unwrap_impl(expected), ignoreCase: unwrap_impl(ignoreCase), timeout: unwrap_impl(timeout), useInnerText: unwrap_impl(useInnerText)))
516
+ end
517
+
518
+ #
519
+ # Ensures the `Locator` points to an element with the given input value. You can use regular expressions for the value as well.
520
+ #
521
+ # **Usage**
522
+ #
523
+ # ```python sync
524
+ # import re
525
+ # from playwright.sync_api import expect
526
+ #
527
+ # locator = page.locator("input[type=number]")
528
+ # expect(locator).to_have_value(re.compile(r"[0-9]"))
529
+ # ```
530
+ def to_have_value(value, timeout: nil)
531
+ wrap_impl(@impl.to_have_value(unwrap_impl(value), timeout: unwrap_impl(timeout)))
532
+ end
533
+
534
+ #
535
+ # Ensures the `Locator` points to multi-select/combobox (i.e. a `select` with the `multiple` attribute) and the specified values are selected.
536
+ #
537
+ # **Usage**
538
+ #
539
+ # For example, given the following element:
540
+ #
541
+ # ```html
542
+ # <select id="favorite-colors" multiple>
543
+ # <option value="R">Red</option>
544
+ # <option value="G">Green</option>
545
+ # <option value="B">Blue</option>
546
+ # </select>
547
+ # ```
548
+ #
549
+ # ```python sync
550
+ # import re
551
+ # from playwright.sync_api import expect
552
+ #
553
+ # locator = page.locator("id=favorite-colors")
554
+ # locator.select_option(["R", "G"])
555
+ # expect(locator).to_have_values([re.compile(r"R"), re.compile(r"G")])
556
+ # ```
557
+ def to_have_values(values, timeout: nil)
558
+ wrap_impl(@impl.to_have_values(unwrap_impl(values), timeout: unwrap_impl(timeout)))
559
+ end
560
+ end
561
+ end
@@ -166,8 +166,8 @@ module Playwright
166
166
  #
167
167
  # **NOTE**: if `runBeforeUnload` is passed as true, a `beforeunload` dialog might be summoned and should be handled
168
168
  # manually via [`event: Page.dialog`] event.
169
- def close(runBeforeUnload: nil)
170
- wrap_impl(@impl.close(runBeforeUnload: unwrap_impl(runBeforeUnload)))
169
+ def close(reason: nil, runBeforeUnload: nil)
170
+ wrap_impl(@impl.close(reason: unwrap_impl(reason), runBeforeUnload: unwrap_impl(runBeforeUnload)))
171
171
  end
172
172
 
173
173
  #
@@ -225,13 +225,16 @@ module Playwright
225
225
  #
226
226
  # Since `eventInit` is event-specific, please refer to the events documentation for the lists of initial
227
227
  # properties:
228
+ # - [DeviceMotionEvent](https://developer.mozilla.org/en-US/docs/Web/API/DeviceMotionEvent/DeviceMotionEvent)
229
+ # - [DeviceOrientationEvent](https://developer.mozilla.org/en-US/docs/Web/API/DeviceOrientationEvent/DeviceOrientationEvent)
228
230
  # - [DragEvent](https://developer.mozilla.org/en-US/docs/Web/API/DragEvent/DragEvent)
231
+ # - [Event](https://developer.mozilla.org/en-US/docs/Web/API/Event/Event)
229
232
  # - [FocusEvent](https://developer.mozilla.org/en-US/docs/Web/API/FocusEvent/FocusEvent)
230
233
  # - [KeyboardEvent](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/KeyboardEvent)
231
234
  # - [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/MouseEvent)
232
235
  # - [PointerEvent](https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/PointerEvent)
233
236
  # - [TouchEvent](https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent/TouchEvent)
234
- # - [Event](https://developer.mozilla.org/en-US/docs/Web/API/Event/Event)
237
+ # - [WheelEvent](https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent/WheelEvent)
235
238
  #
236
239
  # You can also specify `JSHandle` as the property value if you want live objects to be passed into the event:
237
240
  #
@@ -442,7 +445,7 @@ module Playwright
442
445
  #
443
446
  # def run(playwright: Playwright):
444
447
  # webkit = playwright.webkit
445
- # browser = webkit.launch(headless=false)
448
+ # browser = webkit.launch(headless=False)
446
449
  # context = browser.new_context()
447
450
  # page = context.new_page()
448
451
  # page.expose_binding("pageURL", lambda source: source["page"].url)
@@ -1671,13 +1674,13 @@ module Playwright
1671
1674
  end
1672
1675
 
1673
1676
  # @nodoc
1674
- def stop_css_coverage
1675
- wrap_impl(@impl.stop_css_coverage)
1677
+ def stop_js_coverage
1678
+ wrap_impl(@impl.stop_js_coverage)
1676
1679
  end
1677
1680
 
1678
1681
  # @nodoc
1679
- def stop_js_coverage
1680
- wrap_impl(@impl.stop_js_coverage)
1682
+ def start_js_coverage(resetOnNavigation: nil, reportAnonymousScripts: nil)
1683
+ wrap_impl(@impl.start_js_coverage(resetOnNavigation: unwrap_impl(resetOnNavigation), reportAnonymousScripts: unwrap_impl(reportAnonymousScripts)))
1681
1684
  end
1682
1685
 
1683
1686
  # @nodoc
@@ -1685,6 +1688,11 @@ module Playwright
1685
1688
  wrap_impl(@impl.start_css_coverage(resetOnNavigation: unwrap_impl(resetOnNavigation), reportAnonymousScripts: unwrap_impl(reportAnonymousScripts)))
1686
1689
  end
1687
1690
 
1691
+ # @nodoc
1692
+ def stop_css_coverage
1693
+ wrap_impl(@impl.stop_css_coverage)
1694
+ end
1695
+
1688
1696
  # @nodoc
1689
1697
  def owned_context=(req)
1690
1698
  wrap_impl(@impl.owned_context=(unwrap_impl(req)))
@@ -1695,11 +1703,6 @@ module Playwright
1695
1703
  wrap_impl(@impl.guid)
1696
1704
  end
1697
1705
 
1698
- # @nodoc
1699
- def start_js_coverage(resetOnNavigation: nil, reportAnonymousScripts: nil)
1700
- wrap_impl(@impl.start_js_coverage(resetOnNavigation: unwrap_impl(resetOnNavigation), reportAnonymousScripts: unwrap_impl(reportAnonymousScripts)))
1701
- end
1702
-
1703
1706
  # -- inherited from EventEmitter --
1704
1707
  # @nodoc
1705
1708
  def off(event, callback)
@@ -196,13 +196,13 @@ module Playwright
196
196
  end
197
197
 
198
198
  # @nodoc
199
- def apply_fallback_overrides(overrides)
200
- wrap_impl(@impl.apply_fallback_overrides(unwrap_impl(overrides)))
199
+ def header_values(name)
200
+ wrap_impl(@impl.header_values(unwrap_impl(name)))
201
201
  end
202
202
 
203
203
  # @nodoc
204
- def header_values(name)
205
- wrap_impl(@impl.header_values(unwrap_impl(name)))
204
+ def apply_fallback_overrides(overrides)
205
+ wrap_impl(@impl.apply_fallback_overrides(unwrap_impl(overrides)))
206
206
  end
207
207
 
208
208
  # -- inherited from EventEmitter --
@@ -47,13 +47,13 @@ module Playwright
47
47
  end
48
48
 
49
49
  # @nodoc
50
- def context=(req)
51
- wrap_impl(@impl.context=(unwrap_impl(req)))
50
+ def page=(req)
51
+ wrap_impl(@impl.page=(unwrap_impl(req)))
52
52
  end
53
53
 
54
54
  # @nodoc
55
- def page=(req)
56
- wrap_impl(@impl.page=(unwrap_impl(req)))
55
+ def context=(req)
56
+ wrap_impl(@impl.context=(unwrap_impl(req)))
57
57
  end
58
58
 
59
59
  # -- inherited from EventEmitter --