playwright-ruby-client 1.37.1 → 1.38.1
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/README.md +13 -7
- data/documentation/docs/api/download.md +17 -7
- data/documentation/docs/api/element_handle.md +1 -14
- data/documentation/docs/api/frame.md +1 -6
- data/documentation/docs/api/keyboard.md +4 -0
- data/documentation/docs/api/locator.md +31 -16
- data/documentation/docs/api/locator_assertions.md +684 -0
- data/documentation/docs/api/page.md +1 -6
- data/documentation/docs/api/request.md +17 -0
- data/documentation/docs/include/api_coverage.md +44 -0
- data/lib/playwright/channel.rb +1 -1
- data/lib/playwright/channel_owners/browser_context.rb +15 -0
- data/lib/playwright/channel_owners/page.rb +2 -0
- data/lib/playwright/channel_owners/request.rb +17 -1
- data/lib/playwright/channel_owners/route.rb +5 -1
- data/lib/playwright/errors.rb +15 -2
- data/lib/playwright/events.rb +1 -0
- data/lib/playwright/javascript/value_parser.rb +8 -0
- data/lib/playwright/javascript/value_serializer.rb +11 -5
- data/lib/playwright/locator_assertions_impl.rb +417 -0
- data/lib/playwright/locator_impl.rb +28 -5
- data/lib/playwright/test.rb +68 -0
- data/lib/playwright/utils.rb +4 -0
- data/lib/playwright/version.rb +2 -2
- data/lib/playwright_api/download.rb +12 -3
- data/lib/playwright_api/element_handle.rb +1 -14
- data/lib/playwright_api/frame.rb +1 -6
- data/lib/playwright_api/keyboard.rb +4 -0
- data/lib/playwright_api/locator.rb +31 -16
- data/lib/playwright_api/locator_assertions.rb +538 -0
- data/lib/playwright_api/page.rb +1 -6
- data/lib/playwright_api/request.rb +17 -0
- data/lib/playwright_api/worker.rb +4 -4
- data/sig/playwright.rbs +44 -0
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 88f3401d3e186312c93e17fa2758d30cdd45c7a95676af608b87a8052d548355
|
4
|
+
data.tar.gz: c0ac53d04666186f7ae9dc892c5c4a8a5ea982739c4a38e0740c5cece26543d0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf802105e56ef6c3b3786ac24c53092eb32780cb0d98232c940cdbd8fb2cc44355d741c5d27312517e3c7ff5b63d683a4c6f4e6b939f99f62b56dcc2741e28f9
|
7
|
+
data.tar.gz: 1b0a0e47e92cbeb8f5142b54416ceeeaf8a16d5428452225433da0449f85ecfe77f6157ea794c29c308d311eda0e0e79b4cdac48238b82c9b6175b65602768b3
|
data/README.md
CHANGED
@@ -51,18 +51,24 @@ Playwright.create(playwright_cli_executable_path: './node_modules/.bin/playwrigh
|
|
51
51
|
page = browser.new_page
|
52
52
|
page.goto('https://github.com/')
|
53
53
|
|
54
|
-
|
55
|
-
|
56
|
-
|
54
|
+
page.get_by_placeholder("Search or jump to...").click
|
55
|
+
page.locator('input[name="query-builder-test"]').click
|
56
|
+
|
57
|
+
expect(page.keyboard).to be_a(::Playwright::Keyboard)
|
58
|
+
|
57
59
|
page.keyboard.type("playwright")
|
58
60
|
page.expect_navigation {
|
59
61
|
page.keyboard.press("Enter")
|
60
62
|
}
|
61
63
|
|
62
|
-
list = page.
|
63
|
-
|
64
|
-
|
65
|
-
|
64
|
+
list = page.get_by_test_id('results-list').locator('.search-title')
|
65
|
+
|
66
|
+
# wait for item to appear
|
67
|
+
list.first.wait_for
|
68
|
+
|
69
|
+
# list them
|
70
|
+
list.locator('.search-title').all.each do |item|
|
71
|
+
title = item.text_content
|
66
72
|
puts("==> #{title}")
|
67
73
|
end
|
68
74
|
end
|
@@ -10,15 +10,18 @@ sidebar_position: 10
|
|
10
10
|
All the downloaded files belonging to the browser context are deleted when the
|
11
11
|
browser context is closed.
|
12
12
|
|
13
|
-
Download event is emitted once the download starts. Download path becomes available once download completes
|
13
|
+
Download event is emitted once the download starts. Download path becomes available once download completes.
|
14
14
|
|
15
|
-
```
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
```python sync title=example_c247767083cf193df26a39a61a3a8bc19d63ed5c24db91b88c50b7d37975005d.py
|
16
|
+
# Start waiting for the download
|
17
|
+
with page.expect_download() as download_info:
|
18
|
+
# Perform the action that initiates download
|
19
|
+
page.get_by_text("Download file").click()
|
20
|
+
download = download_info.value
|
21
|
+
|
22
|
+
# Wait for the download process to complete and save the downloaded file somewhere
|
23
|
+
download.save_as("/path/to/save/at/" + download.suggested_filename)
|
19
24
|
|
20
|
-
# wait for download to complete
|
21
|
-
path = download.path
|
22
25
|
```
|
23
26
|
|
24
27
|
## cancel
|
@@ -81,6 +84,13 @@ def save_as(path)
|
|
81
84
|
Copy the download to a user-specified path. It is safe to call this method while the download
|
82
85
|
is still in progress. Will wait for the download to finish if necessary.
|
83
86
|
|
87
|
+
**Usage**
|
88
|
+
|
89
|
+
```python sync title=example_66ffd4ef7286957e4294d84b8f660ff852c87af27a56b3e4dd9f84562b5ece02.py
|
90
|
+
download.save_as("/path/to/save/at/" + download.suggested_filename)
|
91
|
+
|
92
|
+
```
|
93
|
+
|
84
94
|
## suggested_filename
|
85
95
|
|
86
96
|
```
|
@@ -259,7 +259,7 @@ This method waits for [actionability](https://playwright.dev/python/docs/actiona
|
|
259
259
|
|
260
260
|
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 filled instead.
|
261
261
|
|
262
|
-
To send fine-grained keyboard events, use [
|
262
|
+
To send fine-grained keyboard events, use [Locator#press_sequentially](./locator#press_sequentially).
|
263
263
|
|
264
264
|
## focus
|
265
265
|
|
@@ -614,19 +614,6 @@ To press a special key, like `Control` or `ArrowDown`, use [ElementHandle#press]
|
|
614
614
|
|
615
615
|
**Usage**
|
616
616
|
|
617
|
-
```ruby
|
618
|
-
element_handle.type("hello") # types instantly
|
619
|
-
element_handle.type("world", delay: 100) # types slower, like a user
|
620
|
-
```
|
621
|
-
|
622
|
-
An example of typing into a text field and then submitting the form:
|
623
|
-
|
624
|
-
```ruby
|
625
|
-
element_handle = page.query_selector("input")
|
626
|
-
element_handle.type("some text")
|
627
|
-
element_handle.press("Enter")
|
628
|
-
```
|
629
|
-
|
630
617
|
## uncheck
|
631
618
|
|
632
619
|
```
|
@@ -349,7 +349,7 @@ This method waits for an element matching `selector`, waits for [actionability](
|
|
349
349
|
|
350
350
|
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 filled instead.
|
351
351
|
|
352
|
-
To send fine-grained keyboard events, use [
|
352
|
+
To send fine-grained keyboard events, use [Locator#press_sequentially](./locator#press_sequentially).
|
353
353
|
|
354
354
|
## focus
|
355
355
|
|
@@ -1041,11 +1041,6 @@ To press a special key, like `Control` or `ArrowDown`, use [Keyboard#press](./ke
|
|
1041
1041
|
|
1042
1042
|
**Usage**
|
1043
1043
|
|
1044
|
-
```ruby
|
1045
|
-
frame.type("#mytextarea", "hello") # types instantly
|
1046
|
-
frame.type("#mytextarea", "world", delay: 100) # types slower, like a user
|
1047
|
-
```
|
1048
|
-
|
1049
1044
|
## uncheck
|
1050
1045
|
|
1051
1046
|
```
|
@@ -97,6 +97,8 @@ def press(key, delay: nil)
|
|
97
97
|
```
|
98
98
|
|
99
99
|
|
100
|
+
**NOTE**: In most cases, you should use [Locator#press](./locator#press) instead.
|
101
|
+
|
100
102
|
`key` can specify the intended
|
101
103
|
[keyboardEvent.key](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key) value or a single character to
|
102
104
|
generate the text for. A superset of the `key` values can be found
|
@@ -136,6 +138,8 @@ def type(text, delay: nil)
|
|
136
138
|
```
|
137
139
|
|
138
140
|
|
141
|
+
**NOTE**: In most cases, you should use [Locator#fill](./locator#fill) instead. You only need to press keys one by one if there is special keyboard handling on the page - in this case use [Locator#press_sequentially](./locator#press_sequentially).
|
142
|
+
|
139
143
|
Sends a `keydown`, `keypress`/`input`, and `keyup` event for each character in the text.
|
140
144
|
|
141
145
|
To press a special key, like `Control` or `ArrowDown`, use [Keyboard#press](./keyboard#press).
|
@@ -458,7 +458,7 @@ This method waits for [actionability](https://playwright.dev/python/docs/actiona
|
|
458
458
|
|
459
459
|
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 filled instead.
|
460
460
|
|
461
|
-
To send fine-grained keyboard events, use [Locator#
|
461
|
+
To send fine-grained keyboard events, use [Locator#press_sequentially](./locator#press_sequentially).
|
462
462
|
|
463
463
|
## filter
|
464
464
|
|
@@ -1032,6 +1032,36 @@ respective texts.
|
|
1032
1032
|
Shortcuts such as `key: "Control+o"` or `key: "Control+Shift+T"` are supported as well. When specified with the
|
1033
1033
|
modifier, modifier is pressed and being held while the subsequent key is being pressed.
|
1034
1034
|
|
1035
|
+
## press_sequentially
|
1036
|
+
|
1037
|
+
```
|
1038
|
+
def press_sequentially(text, delay: nil, noWaitAfter: nil, timeout: nil)
|
1039
|
+
```
|
1040
|
+
|
1041
|
+
|
1042
|
+
**NOTE**: In most cases, you should use [Locator#fill](./locator#fill) instead. You only need to press keys one by one if there is special keyboard handling on the page.
|
1043
|
+
|
1044
|
+
Focuses the element, and then sends a `keydown`, `keypress`/`input`, and `keyup` event for each character in the text.
|
1045
|
+
|
1046
|
+
To press a special key, like `Control` or `ArrowDown`, use [Locator#press](./locator#press).
|
1047
|
+
|
1048
|
+
**Usage**
|
1049
|
+
|
1050
|
+
```python sync title=example_1b7781d5527574a18d4b9812e3461203d2acc9ba7e09cbfd0ffbc4154e3f5971.py
|
1051
|
+
locator.press_sequentially("hello") # types instantly
|
1052
|
+
locator.press_sequentially("world", delay=100) # types slower, like a user
|
1053
|
+
|
1054
|
+
```
|
1055
|
+
|
1056
|
+
An example of typing into a text field and then submitting the form:
|
1057
|
+
|
1058
|
+
```python sync title=example_cc0a6b9aa95b97e5c17c4b114da10a29c7f6f793e99aee1ea2703636af6e24f9.py
|
1059
|
+
locator = page.get_by_label("Password")
|
1060
|
+
locator.press_sequentially("my password")
|
1061
|
+
locator.press("Enter")
|
1062
|
+
|
1063
|
+
```
|
1064
|
+
|
1035
1065
|
## screenshot
|
1036
1066
|
|
1037
1067
|
```
|
@@ -1254,27 +1284,12 @@ def type(text, delay: nil, noWaitAfter: nil, timeout: nil)
|
|
1254
1284
|
```
|
1255
1285
|
|
1256
1286
|
|
1257
|
-
**NOTE**: In most cases, you should use [Locator#fill](./locator#fill) instead. You only need to type characters if there is special keyboard handling on the page.
|
1258
|
-
|
1259
1287
|
Focuses the element, and then sends a `keydown`, `keypress`/`input`, and `keyup` event for each character in the text.
|
1260
1288
|
|
1261
1289
|
To press a special key, like `Control` or `ArrowDown`, use [Locator#press](./locator#press).
|
1262
1290
|
|
1263
1291
|
**Usage**
|
1264
1292
|
|
1265
|
-
```ruby
|
1266
|
-
element.type("hello") # types instantly
|
1267
|
-
element.type("world", delay: 100) # types slower, like a user
|
1268
|
-
```
|
1269
|
-
|
1270
|
-
An example of typing into a text field and then submitting the form:
|
1271
|
-
|
1272
|
-
```ruby
|
1273
|
-
element = page.get_by_label("Password")
|
1274
|
-
element.type("my password")
|
1275
|
-
element.press("Enter")
|
1276
|
-
```
|
1277
|
-
|
1278
1293
|
## uncheck
|
1279
1294
|
|
1280
1295
|
```
|