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.
- checksums.yaml +4 -4
- data/documentation/docs/api/api_request_context.md +1 -2
- data/documentation/docs/api/browser.md +10 -14
- data/documentation/docs/api/browser_context.md +32 -51
- data/documentation/docs/api/browser_type.md +8 -12
- data/documentation/docs/api/dialog.md +15 -18
- data/documentation/docs/api/download.md +10 -12
- data/documentation/docs/api/element_handle.md +9 -7
- data/documentation/docs/api/frame.md +28 -55
- data/documentation/docs/api/locator.md +24 -23
- data/documentation/docs/api/locator_assertions.md +652 -0
- data/documentation/docs/api/page.md +53 -103
- data/documentation/docs/api/playwright.md +20 -23
- data/documentation/docs/api/selectors.md +29 -34
- data/documentation/docs/article/guides/rails_integration.md +80 -51
- data/documentation/docs/article/guides/rspec_integration.md +59 -0
- data/documentation/docs/include/api_coverage.md +43 -0
- data/documentation/docusaurus.config.js +1 -1
- data/documentation/package.json +7 -7
- data/documentation/yarn.lock +4641 -5023
- data/lib/playwright/api_response_impl.rb +2 -2
- data/lib/playwright/channel.rb +1 -1
- data/lib/playwright/channel_owners/api_request_context.rb +12 -3
- data/lib/playwright/channel_owners/browser.rb +11 -7
- data/lib/playwright/channel_owners/browser_context.rb +35 -15
- data/lib/playwright/channel_owners/frame.rb +38 -14
- data/lib/playwright/channel_owners/page.rb +29 -16
- data/lib/playwright/channel_owners/web_socket.rb +8 -13
- data/lib/playwright/connection.rb +18 -2
- data/lib/playwright/errors.rb +22 -2
- data/lib/playwright/input_files.rb +4 -4
- data/lib/playwright/javascript/value_serializer.rb +1 -1
- data/lib/playwright/locator_assertions_impl.rb +417 -0
- data/lib/playwright/locator_impl.rb +24 -5
- data/lib/playwright/test.rb +68 -0
- data/lib/playwright/utils.rb +3 -10
- data/lib/playwright/version.rb +2 -2
- data/lib/playwright/waiter.rb +146 -0
- data/lib/playwright.rb +1 -1
- data/lib/playwright_api/api_request_context.rb +1 -2
- data/lib/playwright_api/browser.rb +2 -2
- data/lib/playwright_api/browser_context.rb +3 -3
- data/lib/playwright_api/browser_type.rb +2 -1
- data/lib/playwright_api/download.rb +1 -2
- data/lib/playwright_api/element_handle.rb +4 -1
- data/lib/playwright_api/frame.rb +4 -1
- data/lib/playwright_api/locator.rb +9 -1
- data/lib/playwright_api/locator_assertions.rb +561 -0
- data/lib/playwright_api/page.rb +16 -13
- data/lib/playwright_api/request.rb +4 -4
- data/lib/playwright_api/worker.rb +4 -4
- data/sig/playwright.rbs +48 -5
- metadata +9 -4
- data/lib/playwright/wait_helper.rb +0 -73
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0d2ac0187f243c1e1f408f9b2733a4c9f8bd2ea24b95667127ad9e991ae09a61
|
4
|
+
data.tar.gz: cf860a1ea1f67bb33a13041eb5b87ea79035065a374e5f2c099d3f1207ef94a3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 75db55fb24aea5a6a92ab54d2f50e62a7444b4438eb6a745d0ec8981d04984c6704ef403a3b86e659953fced1b729798d296d516947ee7c9dba12a1e742f572e
|
7
|
+
data.tar.gz: 2c5918e7878c96c5d1ed7ab728757a996006d1a4c47d96f8b2503051a18986da2cf766a91623b005368017a0841404ab938fe5540219f84e2905166d8a2f414c
|
@@ -85,8 +85,7 @@ def dispose
|
|
85
85
|
```
|
86
86
|
|
87
87
|
|
88
|
-
All responses returned by [APIRequestContext#get](./api_request_context#get) and similar methods are stored in the memory, so that you can later call [APIResponse#body](./api_response#body).
|
89
|
-
discards all stored responses, and makes [APIResponse#body](./api_response#body) throw "Response disposed" error.
|
88
|
+
All responses returned by [APIRequestContext#get](./api_request_context#get) and similar methods are stored in the memory, so that you can later call [APIResponse#body](./api_response#body).This method discards all its resources, calling any method on disposed [APIRequestContext](./api_request_context) will throw an exception.
|
90
89
|
|
91
90
|
## fetch
|
92
91
|
|
@@ -8,19 +8,15 @@ sidebar_position: 10
|
|
8
8
|
|
9
9
|
A Browser is created via [BrowserType#launch](./browser_type#launch). An example of using a [Browser](./browser) to create a [Page](./page):
|
10
10
|
|
11
|
-
```
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
with sync_playwright() as playwright:
|
22
|
-
run(playwright)
|
23
|
-
|
11
|
+
```ruby
|
12
|
+
firefox = playwright.firefox
|
13
|
+
browser = firefox.launch
|
14
|
+
begin
|
15
|
+
page = browser.new_page
|
16
|
+
page.goto("https://example.com")
|
17
|
+
ensure
|
18
|
+
browser.close
|
19
|
+
end
|
24
20
|
```
|
25
21
|
|
26
22
|
## browser_type
|
@@ -35,7 +31,7 @@ Get the browser type (chromium, firefox or webkit) that the browser belongs to.
|
|
35
31
|
## close
|
36
32
|
|
37
33
|
```
|
38
|
-
def close
|
34
|
+
def close(reason: nil)
|
39
35
|
```
|
40
36
|
|
41
37
|
|
@@ -120,7 +120,7 @@ context.clear_permissions
|
|
120
120
|
## close
|
121
121
|
|
122
122
|
```
|
123
|
-
def close
|
123
|
+
def close(reason: nil)
|
124
124
|
```
|
125
125
|
|
126
126
|
|
@@ -158,29 +158,21 @@ See [Page#expose_binding](./page#expose_binding) for page-only version.
|
|
158
158
|
|
159
159
|
An example of exposing page URL to all frames in all pages in the context:
|
160
160
|
|
161
|
-
```
|
162
|
-
|
163
|
-
|
164
|
-
def run(playwright: Playwright):
|
165
|
-
webkit = playwright.webkit
|
166
|
-
browser = webkit.launch(headless=false)
|
167
|
-
context = browser.new_context()
|
168
|
-
context.expose_binding("pageURL", lambda source: source["page"].url)
|
169
|
-
page = context.new_page()
|
170
|
-
page.set_content("""
|
171
|
-
<script>
|
172
|
-
async function onClick() {
|
173
|
-
document.querySelector('div').textContent = await window.pageURL();
|
174
|
-
}
|
175
|
-
</script>
|
176
|
-
<button onclick="onClick()">Click me</button>
|
177
|
-
<div></div>
|
178
|
-
""")
|
179
|
-
page.get_by_role("button").click()
|
161
|
+
```ruby
|
162
|
+
browser_context.expose_binding("pageURL", ->(source) { source[:page].url })
|
163
|
+
page = browser_context.new_page
|
180
164
|
|
181
|
-
|
182
|
-
|
165
|
+
page.content = <<~HTML
|
166
|
+
<script>
|
167
|
+
async function onClick() {
|
168
|
+
document.querySelector('div').textContent = await window.pageURL();
|
169
|
+
}
|
170
|
+
</script>
|
171
|
+
<button onclick="onClick()">Click me</button>
|
172
|
+
<div></div>
|
173
|
+
HTML
|
183
174
|
|
175
|
+
page.get_by_role("button").click
|
184
176
|
```
|
185
177
|
|
186
178
|
An example of passing an element handle:
|
@@ -225,36 +217,25 @@ See [Page#expose_function](./page#expose_function) for page-only version.
|
|
225
217
|
|
226
218
|
An example of adding a `sha256` function to all pages in the context:
|
227
219
|
|
228
|
-
```
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
m.update(bytes(text, "utf8"))
|
235
|
-
return m.hexdigest()
|
236
|
-
|
237
|
-
|
238
|
-
def run(playwright: Playwright):
|
239
|
-
webkit = playwright.webkit
|
240
|
-
browser = webkit.launch(headless=False)
|
241
|
-
context = browser.new_context()
|
242
|
-
context.expose_function("sha256", sha256)
|
243
|
-
page = context.new_page()
|
244
|
-
page.set_content("""
|
245
|
-
<script>
|
246
|
-
async function onClick() {
|
247
|
-
document.querySelector('div').textContent = await window.sha256('PLAYWRIGHT');
|
248
|
-
}
|
249
|
-
</script>
|
250
|
-
<button onclick="onClick()">Click me</button>
|
251
|
-
<div></div>
|
252
|
-
""")
|
253
|
-
page.get_by_role("button").click()
|
254
|
-
|
255
|
-
with sync_playwright() as playwright:
|
256
|
-
run(playwright)
|
220
|
+
```ruby
|
221
|
+
require 'digest'
|
222
|
+
|
223
|
+
def sha256(text)
|
224
|
+
Digest::SHA256.hexdigest(text)
|
225
|
+
end
|
257
226
|
|
227
|
+
browser_context.expose_function("sha256", method(:sha256))
|
228
|
+
page = browser_context.new_page()
|
229
|
+
page.content = <<~HTML
|
230
|
+
<script>
|
231
|
+
async function onClick() {
|
232
|
+
document.querySelector('div').textContent = await window.sha256('PLAYWRIGHT');
|
233
|
+
}
|
234
|
+
</script>
|
235
|
+
<button onclick="onClick()">Click me</button>
|
236
|
+
<div></div>
|
237
|
+
HTML
|
238
|
+
page.get_by_role("button").click
|
258
239
|
```
|
259
240
|
|
260
241
|
## grant_permissions
|
@@ -8,20 +8,15 @@ sidebar_position: 10
|
|
8
8
|
BrowserType provides methods to launch a specific browser instance or connect to an existing one. The following is a
|
9
9
|
typical example of using Playwright to drive automation:
|
10
10
|
|
11
|
-
```
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
browser = chromium.launch()
|
17
|
-
page = browser.new_page()
|
18
|
-
page.goto("https://example.com")
|
19
|
-
# other actions...
|
20
|
-
browser.close()
|
11
|
+
```ruby
|
12
|
+
chromium = playwright.chromium
|
13
|
+
chromium.launch do |browser|
|
14
|
+
page = browser.new_page
|
15
|
+
page.goto('https://example.com/')
|
21
16
|
|
22
|
-
|
23
|
-
run(playwright)
|
17
|
+
# other actions
|
24
18
|
|
19
|
+
end
|
25
20
|
```
|
26
21
|
|
27
22
|
## connect_over_cdp
|
@@ -132,6 +127,7 @@ def launch_persistent_context(
|
|
132
127
|
env: nil,
|
133
128
|
executablePath: nil,
|
134
129
|
extraHTTPHeaders: nil,
|
130
|
+
firefoxUserPrefs: nil,
|
135
131
|
forcedColors: nil,
|
136
132
|
geolocation: nil,
|
137
133
|
handleSIGHUP: nil,
|
@@ -9,24 +9,21 @@ sidebar_position: 10
|
|
9
9
|
|
10
10
|
An example of using [Dialog](./dialog) class:
|
11
11
|
|
12
|
-
```
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
with sync_playwright() as playwright:
|
28
|
-
run(playwright)
|
29
|
-
|
12
|
+
```ruby
|
13
|
+
def handle_dialog(dialog)
|
14
|
+
puts "[#{dialog.type}] #{dialog.message}"
|
15
|
+
if dialog.message =~ /foo/
|
16
|
+
dialog.accept
|
17
|
+
else
|
18
|
+
dialog.dismiss
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
page.on("dialog", method(:handle_dialog))
|
23
|
+
page.evaluate("confirm('foo')") # will be accepted
|
24
|
+
# => [confirm] foo
|
25
|
+
page.evaluate("alert('bar')") # will be dismissed
|
26
|
+
# => [alert] bar
|
30
27
|
```
|
31
28
|
|
32
29
|
**NOTE**: Dialogs are dismissed automatically, unless there is a [`event: Page.dialog`] listener.
|
@@ -12,16 +12,16 @@ browser context is closed.
|
|
12
12
|
|
13
13
|
Download event is emitted once the download starts. Download path becomes available once download completes.
|
14
14
|
|
15
|
-
```
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
page.get_by_text("Download file").click()
|
20
|
-
download = download_info.value
|
15
|
+
```ruby
|
16
|
+
download = page.expect_download do
|
17
|
+
page.get_by_text("Download file").click
|
18
|
+
end
|
21
19
|
|
22
20
|
# Wait for the download process to complete and save the downloaded file somewhere
|
23
|
-
|
21
|
+
path = File.join(download_dir, download.suggested_filename)
|
22
|
+
download.save_as(path)
|
24
23
|
|
24
|
+
path
|
25
25
|
```
|
26
26
|
|
27
27
|
## cancel
|
@@ -68,8 +68,7 @@ def path
|
|
68
68
|
```
|
69
69
|
|
70
70
|
|
71
|
-
Returns path to the downloaded file
|
72
|
-
wait for the download to finish if necessary. The method throws when connected remotely.
|
71
|
+
Returns path to the downloaded file for a successful download, or throws for a failed/canceled download. The method will wait for the download to finish if necessary. The method throws when connected remotely.
|
73
72
|
|
74
73
|
Note that the download's file name is a random GUID, use [Download#suggested_filename](./download#suggested_filename)
|
75
74
|
to get suggested file name.
|
@@ -86,9 +85,8 @@ is still in progress. Will wait for the download to finish if necessary.
|
|
86
85
|
|
87
86
|
**Usage**
|
88
87
|
|
89
|
-
```
|
90
|
-
download.save_as(
|
91
|
-
|
88
|
+
```ruby
|
89
|
+
download.save_as(File.join(download_dir, download.suggested_filename))
|
92
90
|
```
|
93
91
|
|
94
92
|
## suggested_filename
|
@@ -180,13 +180,16 @@ default.
|
|
180
180
|
|
181
181
|
Since `eventInit` is event-specific, please refer to the events documentation for the lists of initial
|
182
182
|
properties:
|
183
|
+
- [DeviceMotionEvent](https://developer.mozilla.org/en-US/docs/Web/API/DeviceMotionEvent/DeviceMotionEvent)
|
184
|
+
- [DeviceOrientationEvent](https://developer.mozilla.org/en-US/docs/Web/API/DeviceOrientationEvent/DeviceOrientationEvent)
|
183
185
|
- [DragEvent](https://developer.mozilla.org/en-US/docs/Web/API/DragEvent/DragEvent)
|
186
|
+
- [Event](https://developer.mozilla.org/en-US/docs/Web/API/Event/Event)
|
184
187
|
- [FocusEvent](https://developer.mozilla.org/en-US/docs/Web/API/FocusEvent/FocusEvent)
|
185
188
|
- [KeyboardEvent](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/KeyboardEvent)
|
186
189
|
- [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/MouseEvent)
|
187
190
|
- [PointerEvent](https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/PointerEvent)
|
188
191
|
- [TouchEvent](https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent/TouchEvent)
|
189
|
-
- [
|
192
|
+
- [WheelEvent](https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent/WheelEvent)
|
190
193
|
|
191
194
|
You can also specify [JSHandle](./js_handle) as the property value if you want live objects to be passed into the event:
|
192
195
|
|
@@ -505,14 +508,13 @@ Triggers a `change` and `input` event once all the provided options have been se
|
|
505
508
|
|
506
509
|
**Usage**
|
507
510
|
|
508
|
-
```
|
509
|
-
#
|
510
|
-
|
511
|
+
```ruby
|
512
|
+
# single selection matching the value
|
513
|
+
element_handle.select_option(value: "blue")
|
511
514
|
# single selection matching both the label
|
512
|
-
|
515
|
+
element_handle.select_option(label: "blue")
|
513
516
|
# multiple selection
|
514
|
-
|
515
|
-
|
517
|
+
element_handle.select_option(value: ["red", "green", "blue"])
|
516
518
|
```
|
517
519
|
|
518
520
|
## select_text
|
@@ -15,25 +15,16 @@ At every point of time, page exposes its current frame tree via the [Page#main_f
|
|
15
15
|
|
16
16
|
An example of dumping frame tree:
|
17
17
|
|
18
|
-
```
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
page.goto("https://www.theverge.com")
|
26
|
-
dump_frame_tree(page.main_frame, "")
|
27
|
-
browser.close()
|
28
|
-
|
29
|
-
def dump_frame_tree(frame, indent):
|
30
|
-
print(indent + frame.name + '@' + frame.url)
|
31
|
-
for child in frame.child_frames:
|
32
|
-
dump_frame_tree(child, indent + " ")
|
33
|
-
|
34
|
-
with sync_playwright() as playwright:
|
35
|
-
run(playwright)
|
18
|
+
```ruby
|
19
|
+
def dump_frame_tree(frame, indent = 0)
|
20
|
+
puts "#{' ' * indent}#{frame.name}@#{frame.url}"
|
21
|
+
frame.child_frames.each do |child|
|
22
|
+
dump_frame_tree(child, indent + 2)
|
23
|
+
end
|
24
|
+
end
|
36
25
|
|
26
|
+
page.goto("https://www.theverge.com")
|
27
|
+
dump_frame_tree(page.main_frame)
|
37
28
|
```
|
38
29
|
|
39
30
|
## add_script_tag
|
@@ -187,13 +178,16 @@ default.
|
|
187
178
|
|
188
179
|
Since `eventInit` is event-specific, please refer to the events documentation for the lists of initial
|
189
180
|
properties:
|
181
|
+
- [DeviceMotionEvent](https://developer.mozilla.org/en-US/docs/Web/API/DeviceMotionEvent/DeviceMotionEvent)
|
182
|
+
- [DeviceOrientationEvent](https://developer.mozilla.org/en-US/docs/Web/API/DeviceOrientationEvent/DeviceOrientationEvent)
|
190
183
|
- [DragEvent](https://developer.mozilla.org/en-US/docs/Web/API/DragEvent/DragEvent)
|
184
|
+
- [Event](https://developer.mozilla.org/en-US/docs/Web/API/Event/Event)
|
191
185
|
- [FocusEvent](https://developer.mozilla.org/en-US/docs/Web/API/FocusEvent/FocusEvent)
|
192
186
|
- [KeyboardEvent](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/KeyboardEvent)
|
193
187
|
- [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/MouseEvent)
|
194
188
|
- [PointerEvent](https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/PointerEvent)
|
195
189
|
- [TouchEvent](https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent/TouchEvent)
|
196
|
-
- [
|
190
|
+
- [WheelEvent](https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent/WheelEvent)
|
197
191
|
|
198
192
|
You can also specify [JSHandle](./js_handle) as the property value if you want live objects to be passed into the event:
|
199
193
|
|
@@ -920,14 +914,13 @@ Triggers a `change` and `input` event once all the provided options have been se
|
|
920
914
|
|
921
915
|
**Usage**
|
922
916
|
|
923
|
-
```
|
924
|
-
#
|
925
|
-
frame.select_option("select#colors", "blue")
|
917
|
+
```ruby
|
918
|
+
# single selection matching the value
|
919
|
+
frame.select_option("select#colors", value: "blue")
|
926
920
|
# single selection matching both the label
|
927
|
-
frame.select_option("select#colors", label
|
921
|
+
frame.select_option("select#colors", label: "blue")
|
928
922
|
# multiple selection
|
929
|
-
frame.select_option("select#colors", value
|
930
|
-
|
923
|
+
frame.select_option("select#colors", value: ["red", "green", "blue"])
|
931
924
|
```
|
932
925
|
|
933
926
|
## set_checked
|
@@ -1099,20 +1092,9 @@ Returns when the `expression` returns a truthy value, returns that value.
|
|
1099
1092
|
|
1100
1093
|
The [Frame#wait_for_function](./frame#wait_for_function) can be used to observe viewport size change:
|
1101
1094
|
|
1102
|
-
```
|
1103
|
-
|
1104
|
-
|
1105
|
-
def run(playwright: Playwright):
|
1106
|
-
webkit = playwright.webkit
|
1107
|
-
browser = webkit.launch()
|
1108
|
-
page = browser.new_page()
|
1109
|
-
page.evaluate("window.x = 0; setTimeout(() => { window.x = 100 }, 1000);")
|
1110
|
-
page.main_frame.wait_for_function("() => window.x > 0")
|
1111
|
-
browser.close()
|
1112
|
-
|
1113
|
-
with sync_playwright() as playwright:
|
1114
|
-
run(playwright)
|
1115
|
-
|
1095
|
+
```ruby
|
1096
|
+
frame.evaluate("window.x = 0; setTimeout(() => { window.x = 100 }, 1000);")
|
1097
|
+
frame.wait_for_function("() => window.x > 0")
|
1116
1098
|
```
|
1117
1099
|
|
1118
1100
|
To pass an argument to the predicate of `frame.waitForFunction` function:
|
@@ -1188,22 +1170,13 @@ function will throw.
|
|
1188
1170
|
|
1189
1171
|
This method works across navigations:
|
1190
1172
|
|
1191
|
-
```
|
1192
|
-
|
1193
|
-
|
1194
|
-
|
1195
|
-
|
1196
|
-
|
1197
|
-
|
1198
|
-
for current_url in ["https://google.com", "https://bbc.com"]:
|
1199
|
-
page.goto(current_url, wait_until="domcontentloaded")
|
1200
|
-
element = page.main_frame.wait_for_selector("img")
|
1201
|
-
print("Loaded image: " + str(element.get_attribute("src")))
|
1202
|
-
browser.close()
|
1203
|
-
|
1204
|
-
with sync_playwright() as playwright:
|
1205
|
-
run(playwright)
|
1206
|
-
|
1173
|
+
```ruby
|
1174
|
+
%w[https://google.com https://bbc.com].each do |current_url|
|
1175
|
+
page.goto(current_url, waitUntil: "domcontentloaded")
|
1176
|
+
frame = page.main_frame
|
1177
|
+
element = frame.wait_for_selector("img")
|
1178
|
+
puts "Loaded image: #{element["src"]}"
|
1179
|
+
end
|
1207
1180
|
```
|
1208
1181
|
|
1209
1182
|
## wait_for_timeout
|
@@ -42,7 +42,7 @@ def all_inner_texts
|
|
42
42
|
|
43
43
|
Returns an array of `node.innerText` values for all matching nodes.
|
44
44
|
|
45
|
-
**NOTE**: If you need to assert text on the page, prefer [
|
45
|
+
**NOTE**: If you need to assert text on the page, prefer [LocatorAssertions#to_have_text](./locator_assertions#to_have_text) with `useInnerText` option to avoid flakiness. See [assertions guide](https://playwright.dev/python/docs/test-assertions) for more details.
|
46
46
|
|
47
47
|
**Usage**
|
48
48
|
|
@@ -59,7 +59,7 @@ def all_text_contents
|
|
59
59
|
|
60
60
|
Returns an array of `node.textContent` values for all matching nodes.
|
61
61
|
|
62
|
-
**NOTE**: If you need to assert text on the page, prefer [
|
62
|
+
**NOTE**: If you need to assert text on the page, prefer [LocatorAssertions#to_have_text](./locator_assertions#to_have_text) to avoid flakiness. See [assertions guide](https://playwright.dev/python/docs/test-assertions) for more details.
|
63
63
|
|
64
64
|
**Usage**
|
65
65
|
|
@@ -236,7 +236,7 @@ def count
|
|
236
236
|
|
237
237
|
Returns the number of elements matching the locator.
|
238
238
|
|
239
|
-
**NOTE**: If you need to assert the number of elements on the page, prefer [
|
239
|
+
**NOTE**: If you need to assert the number of elements on the page, prefer [LocatorAssertions#to_have_count](./locator_assertions#to_have_count) to avoid flakiness. See [assertions guide](https://playwright.dev/python/docs/test-assertions) for more details.
|
240
240
|
|
241
241
|
**Usage**
|
242
242
|
|
@@ -303,13 +303,16 @@ default.
|
|
303
303
|
|
304
304
|
Since `eventInit` is event-specific, please refer to the events documentation for the lists of initial
|
305
305
|
properties:
|
306
|
+
- [DeviceMotionEvent](https://developer.mozilla.org/en-US/docs/Web/API/DeviceMotionEvent/DeviceMotionEvent)
|
307
|
+
- [DeviceOrientationEvent](https://developer.mozilla.org/en-US/docs/Web/API/DeviceOrientationEvent/DeviceOrientationEvent)
|
306
308
|
- [DragEvent](https://developer.mozilla.org/en-US/docs/Web/API/DragEvent/DragEvent)
|
309
|
+
- [Event](https://developer.mozilla.org/en-US/docs/Web/API/Event/Event)
|
307
310
|
- [FocusEvent](https://developer.mozilla.org/en-US/docs/Web/API/FocusEvent/FocusEvent)
|
308
311
|
- [KeyboardEvent](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/KeyboardEvent)
|
309
312
|
- [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/MouseEvent)
|
310
313
|
- [PointerEvent](https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/PointerEvent)
|
311
314
|
- [TouchEvent](https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent/TouchEvent)
|
312
|
-
- [
|
315
|
+
- [WheelEvent](https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent/WheelEvent)
|
313
316
|
|
314
317
|
You can also specify [JSHandle](./js_handle) as the property value if you want live objects to be passed into the event:
|
315
318
|
|
@@ -532,7 +535,7 @@ alias: `[]`
|
|
532
535
|
|
533
536
|
Returns the matching element's attribute value.
|
534
537
|
|
535
|
-
**NOTE**: If you need to assert an element's attribute, prefer [
|
538
|
+
**NOTE**: If you need to assert an element's attribute, prefer [LocatorAssertions#to_have_attribute](./locator_assertions#to_have_attribute) to avoid flakiness. See [assertions guide](https://playwright.dev/python/docs/test-assertions) for more details.
|
536
539
|
|
537
540
|
## get_by_alt_text
|
538
541
|
|
@@ -816,7 +819,7 @@ def inner_text(timeout: nil)
|
|
816
819
|
|
817
820
|
Returns the [`element.innerText`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/innerText).
|
818
821
|
|
819
|
-
**NOTE**: If you need to assert text on the page, prefer [
|
822
|
+
**NOTE**: If you need to assert text on the page, prefer [LocatorAssertions#to_have_text](./locator_assertions#to_have_text) with `useInnerText` option to avoid flakiness. See [assertions guide](https://playwright.dev/python/docs/test-assertions) for more details.
|
820
823
|
|
821
824
|
## input_value
|
822
825
|
|
@@ -827,7 +830,7 @@ def input_value(timeout: nil)
|
|
827
830
|
|
828
831
|
Returns the value for the matching `<input>` or `<textarea>` or `<select>` element.
|
829
832
|
|
830
|
-
**NOTE**: If you need to assert input value, prefer [
|
833
|
+
**NOTE**: If you need to assert input value, prefer [LocatorAssertions#to_have_value](./locator_assertions#to_have_value) to avoid flakiness. See [assertions guide](https://playwright.dev/python/docs/test-assertions) for more details.
|
831
834
|
|
832
835
|
**Usage**
|
833
836
|
|
@@ -848,7 +851,7 @@ def checked?(timeout: nil)
|
|
848
851
|
|
849
852
|
Returns whether the element is checked. Throws if the element is not a checkbox or radio input.
|
850
853
|
|
851
|
-
**NOTE**: If you need to assert that checkbox is checked, prefer [
|
854
|
+
**NOTE**: If you need to assert that checkbox is checked, prefer [LocatorAssertions#to_be_checked](./locator_assertions#to_be_checked) to avoid flakiness. See [assertions guide](https://playwright.dev/python/docs/test-assertions) for more details.
|
852
855
|
|
853
856
|
**Usage**
|
854
857
|
|
@@ -865,7 +868,7 @@ def disabled?(timeout: nil)
|
|
865
868
|
|
866
869
|
Returns whether the element is disabled, the opposite of [enabled](https://playwright.dev/python/docs/actionability#enabled).
|
867
870
|
|
868
|
-
**NOTE**: If you need to assert that an element is disabled, prefer [
|
871
|
+
**NOTE**: If you need to assert that an element is disabled, prefer [LocatorAssertions#to_be_disabled](./locator_assertions#to_be_disabled) to avoid flakiness. See [assertions guide](https://playwright.dev/python/docs/test-assertions) for more details.
|
869
872
|
|
870
873
|
**Usage**
|
871
874
|
|
@@ -882,7 +885,7 @@ def editable?(timeout: nil)
|
|
882
885
|
|
883
886
|
Returns whether the element is [editable](https://playwright.dev/python/docs/actionability#editable).
|
884
887
|
|
885
|
-
**NOTE**: If you need to assert that an element is editable, prefer [
|
888
|
+
**NOTE**: If you need to assert that an element is editable, prefer [LocatorAssertions#to_be_editable](./locator_assertions#to_be_editable) to avoid flakiness. See [assertions guide](https://playwright.dev/python/docs/test-assertions) for more details.
|
886
889
|
|
887
890
|
**Usage**
|
888
891
|
|
@@ -899,7 +902,7 @@ def enabled?(timeout: nil)
|
|
899
902
|
|
900
903
|
Returns whether the element is [enabled](https://playwright.dev/python/docs/actionability#enabled).
|
901
904
|
|
902
|
-
**NOTE**: If you need to assert that an element is enabled, prefer [
|
905
|
+
**NOTE**: If you need to assert that an element is enabled, prefer [LocatorAssertions#to_be_enabled](./locator_assertions#to_be_enabled) to avoid flakiness. See [assertions guide](https://playwright.dev/python/docs/test-assertions) for more details.
|
903
906
|
|
904
907
|
**Usage**
|
905
908
|
|
@@ -916,7 +919,7 @@ def hidden?(timeout: nil)
|
|
916
919
|
|
917
920
|
Returns whether the element is hidden, the opposite of [visible](https://playwright.dev/python/docs/actionability#visible).
|
918
921
|
|
919
|
-
**NOTE**: If you need to assert that element is hidden, prefer [
|
922
|
+
**NOTE**: If you need to assert that element is hidden, prefer [LocatorAssertions#to_be_hidden](./locator_assertions#to_be_hidden) to avoid flakiness. See [assertions guide](https://playwright.dev/python/docs/test-assertions) for more details.
|
920
923
|
|
921
924
|
**Usage**
|
922
925
|
|
@@ -933,7 +936,7 @@ def visible?(timeout: nil)
|
|
933
936
|
|
934
937
|
Returns whether the element is [visible](https://playwright.dev/python/docs/actionability#visible).
|
935
938
|
|
936
|
-
**NOTE**: If you need to assert that element is visible, prefer [
|
939
|
+
**NOTE**: If you need to assert that element is visible, prefer [LocatorAssertions#to_be_visible](./locator_assertions#to_be_visible) to avoid flakiness. See [assertions guide](https://playwright.dev/python/docs/test-assertions) for more details.
|
937
940
|
|
938
941
|
**Usage**
|
939
942
|
|
@@ -1071,19 +1074,17 @@ To press a special key, like `Control` or `ArrowDown`, use [Locator#press](./loc
|
|
1071
1074
|
|
1072
1075
|
**Usage**
|
1073
1076
|
|
1074
|
-
```
|
1075
|
-
|
1076
|
-
|
1077
|
-
|
1077
|
+
```ruby
|
1078
|
+
element.press_sequentially("hello") # types instantly
|
1079
|
+
element.press_sequentially("world", delay: 100) # types slower, like a user
|
1078
1080
|
```
|
1079
1081
|
|
1080
1082
|
An example of typing into a text field and then submitting the form:
|
1081
1083
|
|
1082
|
-
```
|
1083
|
-
|
1084
|
-
|
1085
|
-
|
1086
|
-
|
1084
|
+
```ruby
|
1085
|
+
element = page.get_by_label("Password")
|
1086
|
+
element.press_sequentially("my password")
|
1087
|
+
element.press("Enter")
|
1087
1088
|
```
|
1088
1089
|
|
1089
1090
|
## screenshot
|
@@ -1301,7 +1302,7 @@ def text_content(timeout: nil)
|
|
1301
1302
|
|
1302
1303
|
Returns the [`node.textContent`](https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent).
|
1303
1304
|
|
1304
|
-
**NOTE**: If you need to assert text on the page, prefer [
|
1305
|
+
**NOTE**: If you need to assert text on the page, prefer [LocatorAssertions#to_have_text](./locator_assertions#to_have_text) to avoid flakiness. See [assertions guide](https://playwright.dev/python/docs/test-assertions) for more details.
|
1305
1306
|
|
1306
1307
|
## type
|
1307
1308
|
|