playwright-ruby-client 1.29.1 → 1.30.beta1
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.
- checksums.yaml +4 -4
- data/documentation/docs/api/frame.md +99 -14
- data/documentation/docs/api/frame_locator.md +99 -14
- data/documentation/docs/api/locator.md +355 -49
- data/documentation/docs/api/page.md +99 -14
- data/lib/playwright/version.rb +2 -2
- data/lib/playwright_api/frame.rb +101 -14
- data/lib/playwright_api/frame_locator.rb +101 -14
- data/lib/playwright_api/locator.rb +365 -50
- data/lib/playwright_api/page.rb +101 -14
- data/lib/playwright_api/route.rb +1 -1
- metadata +5 -5
@@ -22,12 +22,24 @@ module Playwright
|
|
22
22
|
|
23
23
|
#
|
24
24
|
# Returns an array of `node.innerText` values for all matching nodes.
|
25
|
+
#
|
26
|
+
# **Usage**
|
27
|
+
#
|
28
|
+
# ```python sync
|
29
|
+
# texts = page.get_by_role("link").all_inner_texts()
|
30
|
+
# ```
|
25
31
|
def all_inner_texts
|
26
32
|
wrap_impl(@impl.all_inner_texts)
|
27
33
|
end
|
28
34
|
|
29
35
|
#
|
30
36
|
# Returns an array of `node.textContent` values for all matching nodes.
|
37
|
+
#
|
38
|
+
# **Usage**
|
39
|
+
#
|
40
|
+
# ```python sync
|
41
|
+
# texts = page.get_by_role("link").all_text_contents()
|
42
|
+
# ```
|
31
43
|
def all_text_contents
|
32
44
|
wrap_impl(@impl.all_text_contents)
|
33
45
|
end
|
@@ -39,9 +51,11 @@ module Playwright
|
|
39
51
|
end
|
40
52
|
|
41
53
|
#
|
42
|
-
# This method returns the bounding box of the element, or `null` if the element is not visible. The bounding box is
|
54
|
+
# This method returns the bounding box of the element matching the locator, or `null` if the element is not visible. The bounding box is
|
43
55
|
# calculated relative to the main frame viewport - which is usually the same as the browser window.
|
44
56
|
#
|
57
|
+
# **Details**
|
58
|
+
#
|
45
59
|
# Scrolling affects the returned bounding box, similarly to
|
46
60
|
# [Element.getBoundingClientRect](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect). That
|
47
61
|
# means `x` and/or `y` may be negative.
|
@@ -55,7 +69,7 @@ module Playwright
|
|
55
69
|
# **Usage**
|
56
70
|
#
|
57
71
|
# ```python sync
|
58
|
-
# box =
|
72
|
+
# box = page.get_by_role("button").bounding_box()
|
59
73
|
# page.mouse.click(box["x"] + box["width"] / 2, box["y"] + box["height"] / 2)
|
60
74
|
# ```
|
61
75
|
def bounding_box(timeout: nil)
|
@@ -63,7 +77,11 @@ module Playwright
|
|
63
77
|
end
|
64
78
|
|
65
79
|
#
|
66
|
-
#
|
80
|
+
# Ensure that checkbox or radio element is checked.
|
81
|
+
#
|
82
|
+
# **Details**
|
83
|
+
#
|
84
|
+
# Performs the following steps:
|
67
85
|
# 1. Ensure that element is a checkbox or a radio input. If not, this method throws. If the element is already checked, this method returns immediately.
|
68
86
|
# 1. Wait for [actionability](../actionability.md) checks on the element, unless `force` option is set.
|
69
87
|
# 1. Scroll the element into view if needed.
|
@@ -75,6 +93,12 @@ module Playwright
|
|
75
93
|
#
|
76
94
|
# When all steps combined have not finished during the specified `timeout`, this method throws a
|
77
95
|
# `TimeoutError`. Passing zero timeout disables this.
|
96
|
+
#
|
97
|
+
# **Usage**
|
98
|
+
#
|
99
|
+
# ```python sync
|
100
|
+
# page.get_by_role("checkbox").check()
|
101
|
+
# ```
|
78
102
|
def check(
|
79
103
|
force: nil,
|
80
104
|
noWaitAfter: nil,
|
@@ -84,10 +108,20 @@ module Playwright
|
|
84
108
|
wrap_impl(@impl.check(force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), position: unwrap_impl(position), timeout: unwrap_impl(timeout), trial: unwrap_impl(trial)))
|
85
109
|
end
|
86
110
|
|
111
|
+
#
|
112
|
+
# Clear the input field.
|
113
|
+
#
|
114
|
+
# **Details**
|
87
115
|
#
|
88
116
|
# This method waits for [actionability](../actionability.md) checks, focuses the element, clears it and triggers an `input` event after clearing.
|
89
117
|
#
|
90
118
|
# If the target element is not an `<input>`, `<textarea>` or `[contenteditable]` element, this method throws an error. However, if the element is inside the `<label>` element that has an associated [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), the control will be cleared instead.
|
119
|
+
#
|
120
|
+
# **Usage**
|
121
|
+
#
|
122
|
+
# ```python sync
|
123
|
+
# page.get_by_role("textbox").clear()
|
124
|
+
# ```
|
91
125
|
def clear(force: nil, noWaitAfter: nil, timeout: nil)
|
92
126
|
wrap_impl(@impl.clear(force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
|
93
127
|
end
|
@@ -107,6 +141,22 @@ module Playwright
|
|
107
141
|
#
|
108
142
|
# When all steps combined have not finished during the specified `timeout`, this method throws a
|
109
143
|
# `TimeoutError`. Passing zero timeout disables this.
|
144
|
+
#
|
145
|
+
# **Usage**
|
146
|
+
#
|
147
|
+
# Click a button:
|
148
|
+
#
|
149
|
+
# ```python sync
|
150
|
+
# page.get_by_role("button").click()
|
151
|
+
# ```
|
152
|
+
#
|
153
|
+
# Shift-right-click at a specific position on a canvas:
|
154
|
+
#
|
155
|
+
# ```python sync
|
156
|
+
# page.locator("canvas").click(
|
157
|
+
# button="right", modifiers=["Shift"], position={"x": 23, "y": 32}
|
158
|
+
# )
|
159
|
+
# ```
|
110
160
|
def click(
|
111
161
|
button: nil,
|
112
162
|
clickCount: nil,
|
@@ -121,11 +171,21 @@ module Playwright
|
|
121
171
|
end
|
122
172
|
|
123
173
|
#
|
124
|
-
# Returns the number of elements matching
|
174
|
+
# Returns the number of elements matching the locator.
|
175
|
+
#
|
176
|
+
# **Usage**
|
177
|
+
#
|
178
|
+
# ```python sync
|
179
|
+
# count = page.get_by_role("listitem").count()
|
180
|
+
# ```
|
125
181
|
def count
|
126
182
|
wrap_impl(@impl.count)
|
127
183
|
end
|
128
184
|
|
185
|
+
#
|
186
|
+
# Double-click an element.
|
187
|
+
#
|
188
|
+
# **Details**
|
129
189
|
#
|
130
190
|
# This method double clicks the element by performing the following steps:
|
131
191
|
# 1. Wait for [actionability](../actionability.md) checks on the element, unless `force` option is set.
|
@@ -152,16 +212,20 @@ module Playwright
|
|
152
212
|
end
|
153
213
|
|
154
214
|
#
|
155
|
-
#
|
156
|
-
# is dispatched. This is equivalent to calling
|
157
|
-
# [element.click()](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click).
|
215
|
+
# Programmaticaly dispatch an event on the matching element.
|
158
216
|
#
|
159
217
|
# **Usage**
|
160
218
|
#
|
161
219
|
# ```python sync
|
162
|
-
#
|
220
|
+
# locator.dispatch_event("click")
|
163
221
|
# ```
|
164
222
|
#
|
223
|
+
# **Details**
|
224
|
+
#
|
225
|
+
# The snippet above dispatches the `click` event on the element. Regardless of the visibility state of the element, `click`
|
226
|
+
# is dispatched. This is equivalent to calling
|
227
|
+
# [element.click()](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click).
|
228
|
+
#
|
165
229
|
# Under the hood, it creates an instance of an event based on the given `type`, initializes it with
|
166
230
|
# `eventInit` properties and dispatches it on the element. Events are `composed`, `cancelable` and bubble by
|
167
231
|
# default.
|
@@ -181,12 +245,16 @@ module Playwright
|
|
181
245
|
# ```python sync
|
182
246
|
# # note you can only create data_transfer in chromium and firefox
|
183
247
|
# data_transfer = page.evaluate_handle("new DataTransfer()")
|
184
|
-
#
|
248
|
+
# locator.dispatch_event("#source", "dragstart", {"dataTransfer": data_transfer})
|
185
249
|
# ```
|
186
250
|
def dispatch_event(type, eventInit: nil, timeout: nil)
|
187
251
|
wrap_impl(@impl.dispatch_event(unwrap_impl(type), eventInit: unwrap_impl(eventInit), timeout: unwrap_impl(timeout)))
|
188
252
|
end
|
189
253
|
|
254
|
+
#
|
255
|
+
# Drag the source element towards the target element and drop it.
|
256
|
+
#
|
257
|
+
# **Details**
|
190
258
|
#
|
191
259
|
# This method drags the locator to another target locator or target position. It will
|
192
260
|
# first move to the source element, perform a `mousedown`, then move to the target
|
@@ -218,24 +286,27 @@ module Playwright
|
|
218
286
|
end
|
219
287
|
|
220
288
|
#
|
221
|
-
# Resolves given locator to the first matching DOM element. If no
|
289
|
+
# Resolves given locator to the first matching DOM element. If there are no matching elements, waits for one. If multiple elements match the locator, throws.
|
222
290
|
def element_handle(timeout: nil)
|
223
291
|
wrap_impl(@impl.element_handle(timeout: unwrap_impl(timeout)))
|
224
292
|
end
|
225
293
|
|
226
294
|
#
|
227
|
-
# Resolves given locator to all matching DOM elements.
|
295
|
+
# Resolves given locator to all matching DOM elements. If there are no matching elements, returns an empty list.
|
228
296
|
def element_handles
|
229
297
|
wrap_impl(@impl.element_handles)
|
230
298
|
end
|
231
299
|
|
232
300
|
#
|
233
|
-
#
|
301
|
+
# Execute JavaScript code in the page, taking the matching element as an argument.
|
302
|
+
#
|
303
|
+
# **Details**
|
234
304
|
#
|
235
|
-
#
|
305
|
+
# Returns the return value of `expression`, called with the matching element as a first argument, and `arg` as a second argument.
|
236
306
|
#
|
237
|
-
# If `expression` returns a [Promise],
|
238
|
-
#
|
307
|
+
# If `expression` returns a [Promise], this method will wait for the promise to resolve and return its value.
|
308
|
+
#
|
309
|
+
# If `expression` throws or rejects, this method throws.
|
239
310
|
#
|
240
311
|
# **Usage**
|
241
312
|
#
|
@@ -248,37 +319,54 @@ module Playwright
|
|
248
319
|
end
|
249
320
|
|
250
321
|
#
|
251
|
-
#
|
252
|
-
#
|
322
|
+
# Execute JavaScript code in the page, taking all matching elements as an argument.
|
323
|
+
#
|
324
|
+
# **Details**
|
253
325
|
#
|
254
|
-
#
|
255
|
-
#
|
326
|
+
# Returns the return value of `expression`, called with an array of all matching elements as a first argument, and `arg` as a second argument.
|
327
|
+
#
|
328
|
+
# If `expression` returns a [Promise], this method will wait for the promise to resolve and return its value.
|
329
|
+
#
|
330
|
+
# If `expression` throws or rejects, this method throws.
|
256
331
|
#
|
257
332
|
# **Usage**
|
258
333
|
#
|
259
334
|
# ```python sync
|
260
|
-
#
|
261
|
-
#
|
335
|
+
# locator = page.locator("div")
|
336
|
+
# more_than_ten = locator.evaluate_all("(divs, min) => divs.length > min", 10)
|
262
337
|
# ```
|
263
338
|
def evaluate_all(expression, arg: nil)
|
264
339
|
wrap_impl(@impl.evaluate_all(unwrap_impl(expression), arg: unwrap_impl(arg)))
|
265
340
|
end
|
266
341
|
|
267
342
|
#
|
268
|
-
#
|
343
|
+
# Execute JavaScript code in the page, taking the matching element as an argument, and return a `JSHandle` with the result.
|
344
|
+
#
|
345
|
+
# **Details**
|
269
346
|
#
|
270
|
-
#
|
347
|
+
# Returns the return value of `expression` as a`JSHandle`, called with the matching element as a first argument, and `arg` as a second argument.
|
271
348
|
#
|
272
349
|
# The only difference between [`method: Locator.evaluate`] and [`method: Locator.evaluateHandle`] is that [`method: Locator.evaluateHandle`] returns `JSHandle`.
|
273
350
|
#
|
274
|
-
# If
|
275
|
-
#
|
351
|
+
# If `expression` returns a [Promise], this method will wait for the promise to resolve and return its value.
|
352
|
+
#
|
353
|
+
# If `expression` throws or rejects, this method throws.
|
276
354
|
#
|
277
355
|
# See [`method: Page.evaluateHandle`] for more details.
|
278
356
|
def evaluate_handle(expression, arg: nil, timeout: nil)
|
279
357
|
wrap_impl(@impl.evaluate_handle(unwrap_impl(expression), arg: unwrap_impl(arg), timeout: unwrap_impl(timeout)))
|
280
358
|
end
|
281
359
|
|
360
|
+
#
|
361
|
+
# Set a value to the input field.
|
362
|
+
#
|
363
|
+
# **Usage**
|
364
|
+
#
|
365
|
+
# ```python sync
|
366
|
+
# page.get_by_role("textbox").fill("example value")
|
367
|
+
# ```
|
368
|
+
#
|
369
|
+
# **Details**
|
282
370
|
#
|
283
371
|
# This method waits for [actionability](../actionability.md) checks, focuses the element, fills it and triggers an `input` event after filling. Note that you can pass an empty string to clear the input field.
|
284
372
|
#
|
@@ -314,17 +402,17 @@ module Playwright
|
|
314
402
|
end
|
315
403
|
|
316
404
|
#
|
317
|
-
# Calls [focus](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus) on the element.
|
405
|
+
# Calls [focus](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus) on the matching element.
|
318
406
|
def focus(timeout: nil)
|
319
407
|
wrap_impl(@impl.focus(timeout: unwrap_impl(timeout)))
|
320
408
|
end
|
321
409
|
|
322
410
|
#
|
323
|
-
#
|
324
|
-
#
|
325
|
-
# When working with iframes, you can create a frame locator that will enter the iframe and allow selecting elements
|
411
|
+
# When working with iframes, you can create a frame locator that will enter the iframe and allow locating elements
|
326
412
|
# in that iframe:
|
327
413
|
#
|
414
|
+
# **Usage**
|
415
|
+
#
|
328
416
|
# ```python sync
|
329
417
|
# locator = page.frame_locator("iframe").get_by_text("Submit")
|
330
418
|
# locator.click()
|
@@ -334,47 +422,100 @@ module Playwright
|
|
334
422
|
end
|
335
423
|
|
336
424
|
#
|
337
|
-
# Returns element attribute value.
|
425
|
+
# Returns the matching element's attribute value.
|
338
426
|
def get_attribute(name, timeout: nil)
|
339
427
|
wrap_impl(@impl.get_attribute(unwrap_impl(name), timeout: unwrap_impl(timeout)))
|
340
428
|
end
|
341
429
|
alias_method :[], :get_attribute
|
342
430
|
|
343
431
|
#
|
344
|
-
# Allows locating elements by their alt text.
|
432
|
+
# Allows locating elements by their alt text.
|
433
|
+
#
|
434
|
+
# **Usage**
|
435
|
+
#
|
436
|
+
# For example, this method will find the image by alt text "Playwright logo":
|
345
437
|
#
|
346
438
|
# ```html
|
347
|
-
# <img alt='
|
439
|
+
# <img alt='Playwright logo'>
|
440
|
+
# ```
|
441
|
+
#
|
442
|
+
# ```python sync
|
443
|
+
# page.get_by_alt_text("Playwright logo").click()
|
348
444
|
# ```
|
349
445
|
def get_by_alt_text(text, exact: nil)
|
350
446
|
wrap_impl(@impl.get_by_alt_text(unwrap_impl(text), exact: unwrap_impl(exact)))
|
351
447
|
end
|
352
448
|
|
353
449
|
#
|
354
|
-
# Allows locating input elements by the text of the associated label.
|
450
|
+
# Allows locating input elements by the text of the associated label.
|
451
|
+
#
|
452
|
+
# **Usage**
|
453
|
+
#
|
454
|
+
# For example, this method will find the input by label text "Password" in the following DOM:
|
355
455
|
#
|
356
456
|
# ```html
|
357
457
|
# <label for="password-input">Password:</label>
|
358
458
|
# <input id="password-input">
|
359
459
|
# ```
|
460
|
+
#
|
461
|
+
# ```python sync
|
462
|
+
# page.get_by_label("Password").fill("secret")
|
463
|
+
# ```
|
360
464
|
def get_by_label(text, exact: nil)
|
361
465
|
wrap_impl(@impl.get_by_label(unwrap_impl(text), exact: unwrap_impl(exact)))
|
362
466
|
end
|
363
467
|
|
364
468
|
#
|
365
|
-
# Allows locating input elements by the placeholder text.
|
469
|
+
# Allows locating input elements by the placeholder text.
|
470
|
+
#
|
471
|
+
# **Usage**
|
472
|
+
#
|
473
|
+
# For example, consider the following DOM structure.
|
366
474
|
#
|
367
475
|
# ```html
|
368
|
-
# <input placeholder="
|
476
|
+
# <input type="email" placeholder="name@example.com" />
|
477
|
+
# ```
|
478
|
+
#
|
479
|
+
# You can fill the input after locating it by the placeholder text:
|
480
|
+
#
|
481
|
+
# ```python sync
|
482
|
+
# page.get_by_placeholder("name@example.com").fill("playwright@microsoft.com")
|
369
483
|
# ```
|
370
484
|
def get_by_placeholder(text, exact: nil)
|
371
485
|
wrap_impl(@impl.get_by_placeholder(unwrap_impl(text), exact: unwrap_impl(exact)))
|
372
486
|
end
|
373
487
|
|
374
488
|
#
|
375
|
-
# Allows locating elements by their [ARIA role](https://www.w3.org/TR/wai-aria-1.2/#roles), [ARIA attributes](https://www.w3.org/TR/wai-aria-1.2/#aria-attributes) and [accessible name](https://w3c.github.io/accname/#dfn-accessible-name).
|
489
|
+
# Allows locating elements by their [ARIA role](https://www.w3.org/TR/wai-aria-1.2/#roles), [ARIA attributes](https://www.w3.org/TR/wai-aria-1.2/#aria-attributes) and [accessible name](https://w3c.github.io/accname/#dfn-accessible-name).
|
490
|
+
#
|
491
|
+
# **Usage**
|
492
|
+
#
|
493
|
+
# Consider the following DOM structure.
|
494
|
+
#
|
495
|
+
# ```html
|
496
|
+
# <h3>Sign up</h3>
|
497
|
+
# <label>
|
498
|
+
# <input type="checkbox" /> Subscribe
|
499
|
+
# </label>
|
500
|
+
# <br/>
|
501
|
+
# <button>Submit</button>
|
502
|
+
# ```
|
503
|
+
#
|
504
|
+
# You can locate each element by it's implicit role:
|
505
|
+
#
|
506
|
+
# ```python sync
|
507
|
+
# expect(page.get_by_role("heading", name="Sign up")).to_be_visible()
|
508
|
+
#
|
509
|
+
# page.get_by_role("checkbox", name="Subscribe").check()
|
376
510
|
#
|
377
|
-
#
|
511
|
+
# page.get_by_role("button", name=re.compile("submit", re.IGNORECASE)).click()
|
512
|
+
# ```
|
513
|
+
#
|
514
|
+
# **Details**
|
515
|
+
#
|
516
|
+
# Role selector **does not replace** accessibility audits and conformance tests, but rather gives early feedback about the ARIA guidelines.
|
517
|
+
#
|
518
|
+
# Many html elements have an implicitly [defined role](https://w3c.github.io/html-aam/#html-element-role-mappings) that is recognized by the role selector. You can find all the [supported roles here](https://www.w3.org/TR/wai-aria-1.2/#role_definitions). ARIA guidelines **do not recommend** duplicating implicit roles and attributes by setting `role` and/or `aria-*` attributes to default values.
|
378
519
|
def get_by_role(
|
379
520
|
role,
|
380
521
|
checked: nil,
|
@@ -390,13 +531,37 @@ module Playwright
|
|
390
531
|
end
|
391
532
|
|
392
533
|
#
|
393
|
-
# Locate element by the test id.
|
534
|
+
# Locate element by the test id.
|
535
|
+
#
|
536
|
+
# **Usage**
|
537
|
+
#
|
538
|
+
# Consider the following DOM structure.
|
539
|
+
#
|
540
|
+
# ```html
|
541
|
+
# <button data-testid="directions">Itinéraire</button>
|
542
|
+
# ```
|
543
|
+
#
|
544
|
+
# You can locate the element by it's test id:
|
545
|
+
#
|
546
|
+
# ```python sync
|
547
|
+
# page.get_by_test_id("directions").click()
|
548
|
+
# ```
|
549
|
+
#
|
550
|
+
# **Details**
|
551
|
+
#
|
552
|
+
# By default, the `data-testid` attribute is used as a test id. Use [`method: Selectors.setTestIdAttribute`] to configure a different test id attribute if necessary.
|
394
553
|
def get_by_test_id(testId)
|
395
554
|
wrap_impl(@impl.get_by_test_id(unwrap_impl(testId)))
|
396
555
|
end
|
397
556
|
|
398
557
|
#
|
399
|
-
# Allows locating elements that contain given text.
|
558
|
+
# Allows locating elements that contain given text.
|
559
|
+
#
|
560
|
+
# See also [`method: Locator.filter`] that allows to match by another criteria, like an accessible role, and then filter by the text content.
|
561
|
+
#
|
562
|
+
# **Usage**
|
563
|
+
#
|
564
|
+
# Consider the following DOM structure:
|
400
565
|
#
|
401
566
|
# ```html
|
402
567
|
# <div>Hello <span>world</span></div>
|
@@ -422,20 +587,30 @@ module Playwright
|
|
422
587
|
# page.get_by_text(re.compile("^hello$", re.IGNORECASE))
|
423
588
|
# ```
|
424
589
|
#
|
425
|
-
#
|
590
|
+
# **Details**
|
426
591
|
#
|
427
|
-
#
|
592
|
+
# Matching by text always normalizes whitespace, even with exact match. For example, it turns multiple spaces into one, turns line breaks into spaces and ignores leading and trailing whitespace.
|
428
593
|
#
|
429
|
-
#
|
594
|
+
# Input elements of the type `button` and `submit` are matched by their `value` instead of the text content. For example, locating by text `"Log in"` matches `<input type=button value="Log in">`.
|
430
595
|
def get_by_text(text, exact: nil)
|
431
596
|
wrap_impl(@impl.get_by_text(unwrap_impl(text), exact: unwrap_impl(exact)))
|
432
597
|
end
|
433
598
|
|
434
599
|
#
|
435
|
-
# Allows locating elements by their title.
|
600
|
+
# Allows locating elements by their title attribute.
|
601
|
+
#
|
602
|
+
# **Usage**
|
603
|
+
#
|
604
|
+
# Consider the following DOM structure.
|
436
605
|
#
|
437
606
|
# ```html
|
438
|
-
# <
|
607
|
+
# <span title='Issues count'>25 issues</span>
|
608
|
+
# ```
|
609
|
+
#
|
610
|
+
# You can check the issues count after locating it by the title text:
|
611
|
+
#
|
612
|
+
# ```python sync
|
613
|
+
# expect(page.get_by_title("Issues count")).to_have_text("25 issues")
|
439
614
|
# ```
|
440
615
|
def get_by_title(text, exact: nil)
|
441
616
|
wrap_impl(@impl.get_by_title(unwrap_impl(text), exact: unwrap_impl(exact)))
|
@@ -447,6 +622,16 @@ module Playwright
|
|
447
622
|
wrap_impl(@impl.highlight)
|
448
623
|
end
|
449
624
|
|
625
|
+
#
|
626
|
+
# Hover over the matching element.
|
627
|
+
#
|
628
|
+
# **Usage**
|
629
|
+
#
|
630
|
+
# ```python sync
|
631
|
+
# page.get_by_role("link").hover()
|
632
|
+
# ```
|
633
|
+
#
|
634
|
+
# **Details**
|
450
635
|
#
|
451
636
|
# This method hovers over the element by performing the following steps:
|
452
637
|
# 1. Wait for [actionability](../actionability.md) checks on the element, unless `force` option is set.
|
@@ -469,63 +654,113 @@ module Playwright
|
|
469
654
|
end
|
470
655
|
|
471
656
|
#
|
472
|
-
# Returns the `element.innerHTML
|
657
|
+
# Returns the [`element.innerHTML`](https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML).
|
473
658
|
def inner_html(timeout: nil)
|
474
659
|
wrap_impl(@impl.inner_html(timeout: unwrap_impl(timeout)))
|
475
660
|
end
|
476
661
|
|
477
662
|
#
|
478
|
-
# Returns the `element.innerText
|
663
|
+
# Returns the [`element.innerText`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/innerText).
|
479
664
|
def inner_text(timeout: nil)
|
480
665
|
wrap_impl(@impl.inner_text(timeout: unwrap_impl(timeout)))
|
481
666
|
end
|
482
667
|
|
483
668
|
#
|
484
|
-
# Returns
|
669
|
+
# Returns the value for the matching `<input>` or `<textarea>` or `<select>` element.
|
670
|
+
#
|
671
|
+
# **Usage**
|
672
|
+
#
|
673
|
+
# ```python sync
|
674
|
+
# value = page.get_by_role("textbox").input_value()
|
675
|
+
# ```
|
676
|
+
#
|
677
|
+
# **Details**
|
485
678
|
#
|
486
|
-
# Throws
|
679
|
+
# Throws elements that are not an input, textarea or a select. However, if the element is inside the `<label>` element that has an associated [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), returns the value of the control.
|
487
680
|
def input_value(timeout: nil)
|
488
681
|
wrap_impl(@impl.input_value(timeout: unwrap_impl(timeout)))
|
489
682
|
end
|
490
683
|
|
491
684
|
#
|
492
685
|
# Returns whether the element is checked. Throws if the element is not a checkbox or radio input.
|
686
|
+
#
|
687
|
+
# **Usage**
|
688
|
+
#
|
689
|
+
# ```python sync
|
690
|
+
# checked = page.get_by_role("checkbox").is_checked()
|
691
|
+
# ```
|
493
692
|
def checked?(timeout: nil)
|
494
693
|
wrap_impl(@impl.checked?(timeout: unwrap_impl(timeout)))
|
495
694
|
end
|
496
695
|
|
497
696
|
#
|
498
697
|
# Returns whether the element is disabled, the opposite of [enabled](../actionability.md#enabled).
|
698
|
+
#
|
699
|
+
# **Usage**
|
700
|
+
#
|
701
|
+
# ```python sync
|
702
|
+
# disabled = page.get_by_role("button").is_disabled()
|
703
|
+
# ```
|
499
704
|
def disabled?(timeout: nil)
|
500
705
|
wrap_impl(@impl.disabled?(timeout: unwrap_impl(timeout)))
|
501
706
|
end
|
502
707
|
|
503
708
|
#
|
504
709
|
# Returns whether the element is [editable](../actionability.md#editable).
|
710
|
+
#
|
711
|
+
# **Usage**
|
712
|
+
#
|
713
|
+
# ```python sync
|
714
|
+
# editable = page.get_by_role("textbox").is_editable()
|
715
|
+
# ```
|
505
716
|
def editable?(timeout: nil)
|
506
717
|
wrap_impl(@impl.editable?(timeout: unwrap_impl(timeout)))
|
507
718
|
end
|
508
719
|
|
509
720
|
#
|
510
721
|
# Returns whether the element is [enabled](../actionability.md#enabled).
|
722
|
+
#
|
723
|
+
# **Usage**
|
724
|
+
#
|
725
|
+
# ```python sync
|
726
|
+
# enabled = page.get_by_role("button").is_enabled()
|
727
|
+
# ```
|
511
728
|
def enabled?(timeout: nil)
|
512
729
|
wrap_impl(@impl.enabled?(timeout: unwrap_impl(timeout)))
|
513
730
|
end
|
514
731
|
|
515
732
|
#
|
516
733
|
# Returns whether the element is hidden, the opposite of [visible](../actionability.md#visible).
|
734
|
+
#
|
735
|
+
# **Usage**
|
736
|
+
#
|
737
|
+
# ```python sync
|
738
|
+
# hidden = page.get_by_role("button").is_hidden()
|
739
|
+
# ```
|
517
740
|
def hidden?(timeout: nil)
|
518
741
|
wrap_impl(@impl.hidden?(timeout: unwrap_impl(timeout)))
|
519
742
|
end
|
520
743
|
|
521
744
|
#
|
522
745
|
# Returns whether the element is [visible](../actionability.md#visible).
|
746
|
+
#
|
747
|
+
# **Usage**
|
748
|
+
#
|
749
|
+
# ```python sync
|
750
|
+
# visible = page.get_by_role("button").is_visible()
|
751
|
+
# ```
|
523
752
|
def visible?(timeout: nil)
|
524
753
|
wrap_impl(@impl.visible?(timeout: unwrap_impl(timeout)))
|
525
754
|
end
|
526
755
|
|
527
756
|
#
|
528
757
|
# Returns locator to the last matching element.
|
758
|
+
#
|
759
|
+
# **Usage**
|
760
|
+
#
|
761
|
+
# ```python sync
|
762
|
+
# banana = page.get_by_role("listitem").last()
|
763
|
+
# ```
|
529
764
|
def last
|
530
765
|
wrap_impl(@impl.last)
|
531
766
|
end
|
@@ -540,6 +775,12 @@ module Playwright
|
|
540
775
|
|
541
776
|
#
|
542
777
|
# Returns locator to the n-th matching element. It's zero based, `nth(0)` selects the first element.
|
778
|
+
#
|
779
|
+
# **Usage**
|
780
|
+
#
|
781
|
+
# ```python sync
|
782
|
+
# banana = page.get_by_role("listitem").nth(2)
|
783
|
+
# ```
|
543
784
|
def nth(index)
|
544
785
|
wrap_impl(@impl.nth(unwrap_impl(index)))
|
545
786
|
end
|
@@ -550,6 +791,16 @@ module Playwright
|
|
550
791
|
wrap_impl(@impl.page)
|
551
792
|
end
|
552
793
|
|
794
|
+
#
|
795
|
+
# Focuses the mathing element and presses a combintation of the keys.
|
796
|
+
#
|
797
|
+
# **Usage**
|
798
|
+
#
|
799
|
+
# ```python sync
|
800
|
+
# page.get_by_role("textbox").press("Backspace")
|
801
|
+
# ```
|
802
|
+
#
|
803
|
+
# **Details**
|
553
804
|
#
|
554
805
|
# Focuses the element, and then uses [`method: Keyboard.down`] and [`method: Keyboard.up`].
|
555
806
|
#
|
@@ -574,6 +825,22 @@ module Playwright
|
|
574
825
|
wrap_impl(@impl.press(unwrap_impl(key), delay: unwrap_impl(delay), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
|
575
826
|
end
|
576
827
|
|
828
|
+
#
|
829
|
+
# Take a screenshot of the element matching the locator.
|
830
|
+
#
|
831
|
+
# **Usage**
|
832
|
+
#
|
833
|
+
# ```python sync
|
834
|
+
# page.get_by_role("link").screenshot()
|
835
|
+
# ```
|
836
|
+
#
|
837
|
+
# Disable animations and save screenshot to a file:
|
838
|
+
#
|
839
|
+
# ```python sync
|
840
|
+
# page.get_by_role("link").screenshot(animations="disabled", path="link.png")
|
841
|
+
# ```
|
842
|
+
#
|
843
|
+
# **Details**
|
577
844
|
#
|
578
845
|
# This method captures a screenshot of the page, clipped to the size and position of a particular element matching the locator. If the element is covered by other elements, it will not be actually visible on the screenshot. If the element is a scrollable container, only the currently scrolled content will be visible on the screenshot.
|
579
846
|
#
|
@@ -653,6 +920,16 @@ module Playwright
|
|
653
920
|
wrap_impl(@impl.select_text(force: unwrap_impl(force), timeout: unwrap_impl(timeout)))
|
654
921
|
end
|
655
922
|
|
923
|
+
#
|
924
|
+
# Set the state of a checkbox or a radio element.
|
925
|
+
#
|
926
|
+
# **Usage**
|
927
|
+
#
|
928
|
+
# ```python sync
|
929
|
+
# page.get_by_role("checkbox").set_checked(True)
|
930
|
+
# ```
|
931
|
+
#
|
932
|
+
# **Details**
|
656
933
|
#
|
657
934
|
# This method checks or unchecks an element by performing the following steps:
|
658
935
|
# 1. Ensure that matched element is a checkbox or a radio input. If not, this method throws.
|
@@ -676,6 +953,30 @@ module Playwright
|
|
676
953
|
end
|
677
954
|
alias_method :checked=, :set_checked
|
678
955
|
|
956
|
+
#
|
957
|
+
# Upload file or multiple files into `<input type=file>`.
|
958
|
+
#
|
959
|
+
# **Usage**
|
960
|
+
#
|
961
|
+
# ```python sync
|
962
|
+
# # Select one file
|
963
|
+
# page.get_by_label("Upload file").set_input_files('myfile.pdf')
|
964
|
+
#
|
965
|
+
# # Select multiple files
|
966
|
+
# page.get_by_label("Upload files").set_input_files(['file1.txt', 'file2.txt'])
|
967
|
+
#
|
968
|
+
# # Remove all the selected files
|
969
|
+
# page.get_by_label("Upload file").set_input_files([])
|
970
|
+
#
|
971
|
+
# # Upload buffer from memory
|
972
|
+
# page.get_by_label("Upload file").set_input_files(
|
973
|
+
# files=[
|
974
|
+
# {"name": "test.txt", "mimeType": "text/plain", "buffer": b"this is a test"}
|
975
|
+
# ],
|
976
|
+
# )
|
977
|
+
# ```
|
978
|
+
#
|
979
|
+
# **Details**
|
679
980
|
#
|
680
981
|
# Sets the value of the file input to these file paths or files. If some of the `filePaths` are relative paths, then they
|
681
982
|
# are resolved relative to the current working directory. For empty array, clears the selected files.
|
@@ -687,6 +988,10 @@ module Playwright
|
|
687
988
|
end
|
688
989
|
alias_method :input_files=, :set_input_files
|
689
990
|
|
991
|
+
#
|
992
|
+
# Perform a tap gesture on the element matching the locator.
|
993
|
+
#
|
994
|
+
# **Details**
|
690
995
|
#
|
691
996
|
# This method taps the element by performing the following steps:
|
692
997
|
# 1. Wait for [actionability](../actionability.md) checks on the element, unless `force` option is set.
|
@@ -711,7 +1016,7 @@ module Playwright
|
|
711
1016
|
end
|
712
1017
|
|
713
1018
|
#
|
714
|
-
# Returns the `node.textContent
|
1019
|
+
# Returns the [`node.textContent`](https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent).
|
715
1020
|
def text_content(timeout: nil)
|
716
1021
|
wrap_impl(@impl.text_content(timeout: unwrap_impl(timeout)))
|
717
1022
|
end
|
@@ -740,7 +1045,17 @@ module Playwright
|
|
740
1045
|
end
|
741
1046
|
|
742
1047
|
#
|
743
|
-
#
|
1048
|
+
# Ensure that checkbox or radio element is unchecked.
|
1049
|
+
#
|
1050
|
+
# **Usage**
|
1051
|
+
#
|
1052
|
+
# ```python sync
|
1053
|
+
# page.get_by_role("checkbox").uncheck()
|
1054
|
+
# ```
|
1055
|
+
#
|
1056
|
+
# **Details**
|
1057
|
+
#
|
1058
|
+
# This method unchecks the element by performing the following steps:
|
744
1059
|
# 1. Ensure that element is a checkbox or a radio input. If not, this method throws. If the element is already unchecked, this method returns immediately.
|
745
1060
|
# 1. Wait for [actionability](../actionability.md) checks on the element, unless `force` option is set.
|
746
1061
|
# 1. Scroll the element into view if needed.
|