playwright-ruby-client 1.15.beta1 → 1.16.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +10 -14
- data/documentation/docs/api/browser.md +2 -0
- data/documentation/docs/api/browser_context.md +5 -1
- data/documentation/docs/api/browser_type.md +1 -0
- data/documentation/docs/api/element_handle.md +27 -1
- data/documentation/docs/api/experimental/android_device.md +1 -0
- data/documentation/docs/api/fetch_request.md +10 -0
- data/documentation/docs/api/frame.md +28 -0
- data/documentation/docs/api/locator.md +47 -0
- data/documentation/docs/api/mouse.md +11 -0
- data/documentation/docs/api/page.md +35 -2
- data/documentation/docs/api/request.md +34 -1
- data/documentation/docs/api/response.md +37 -2
- data/documentation/docs/api/tracing.md +42 -8
- data/documentation/docs/article/getting_started.md +10 -1
- data/documentation/docs/article/guides/download_playwright_driver.md +9 -0
- data/documentation/docs/article/guides/inspector.md +1 -1
- data/documentation/docs/article/guides/playwright_on_alpine_linux.md +56 -3
- data/documentation/docs/article/guides/rails_integration.md +4 -2
- data/documentation/docs/article/guides/rails_integration_with_null_driver.md +86 -0
- data/documentation/docs/article/guides/recording_video.md +1 -1
- data/documentation/docs/article/guides/semi_automation.md +1 -1
- data/documentation/docs/article/guides/use_storage_state.md +1 -1
- data/documentation/docs/include/api_coverage.md +23 -0
- data/documentation/docusaurus.config.js +1 -0
- data/documentation/package.json +2 -2
- data/documentation/src/pages/index.js +0 -1
- data/documentation/static/img/playwright-ruby-client.png +0 -0
- data/documentation/yarn.lock +1810 -1790
- data/lib/playwright/channel.rb +36 -2
- data/lib/playwright/channel_owners/artifact.rb +6 -2
- data/lib/playwright/channel_owners/browser.rb +4 -0
- data/lib/playwright/channel_owners/browser_context.rb +21 -14
- data/lib/playwright/channel_owners/element_handle.rb +10 -2
- data/lib/playwright/channel_owners/fetch_request.rb +4 -0
- data/lib/playwright/channel_owners/frame.rb +11 -1
- data/lib/playwright/channel_owners/page.rb +20 -4
- data/lib/playwright/channel_owners/request.rb +53 -17
- data/lib/playwright/channel_owners/response.rb +48 -5
- data/lib/playwright/connection.rb +5 -3
- data/lib/playwright/http_headers.rb +0 -6
- data/lib/playwright/locator_impl.rb +12 -0
- data/lib/playwright/mouse_impl.rb +9 -0
- data/lib/playwright/raw_headers.rb +61 -0
- data/lib/playwright/{route_handler_entry.rb → route_handler.rb} +30 -2
- data/lib/playwright/tracing_impl.rb +18 -7
- data/lib/playwright/transport.rb +2 -0
- data/lib/playwright/utils.rb +8 -0
- data/lib/playwright/version.rb +2 -2
- data/lib/playwright/web_socket_transport.rb +2 -0
- data/lib/playwright.rb +2 -1
- data/lib/playwright_api/android.rb +6 -6
- data/lib/playwright_api/android_device.rb +10 -9
- data/lib/playwright_api/browser.rb +10 -8
- data/lib/playwright_api/browser_context.rb +12 -8
- data/lib/playwright_api/browser_type.rb +8 -7
- data/lib/playwright_api/cdp_session.rb +7 -7
- data/lib/playwright_api/console_message.rb +6 -6
- data/lib/playwright_api/dialog.rb +6 -6
- data/lib/playwright_api/element_handle.rb +31 -8
- data/lib/playwright_api/fetch_request.rb +77 -0
- data/lib/playwright_api/frame.rb +31 -6
- data/lib/playwright_api/js_handle.rb +6 -6
- data/lib/playwright_api/locator.rb +39 -0
- data/lib/playwright_api/mouse.rb +8 -0
- data/lib/playwright_api/page.rb +40 -10
- data/lib/playwright_api/playwright.rb +6 -6
- data/lib/playwright_api/request.rb +30 -4
- data/lib/playwright_api/response.rb +31 -8
- data/lib/playwright_api/route.rb +6 -6
- data/lib/playwright_api/selectors.rb +6 -6
- data/lib/playwright_api/tracing.rb +33 -4
- data/lib/playwright_api/web_socket.rb +6 -6
- data/lib/playwright_api/worker.rb +8 -8
- metadata +10 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ac716fcd59a6c1b520004d0c5797dadaf77d8a5ec78dd60903cd424a2d9569ca
|
4
|
+
data.tar.gz: 6ec8fb266d6ce38229ee17e68dec62e5ba42edb09ddd59814242fe5dd757c157
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3c3fc4e0689b164b90791c9c288895966de3c42275df2c46f89fcd19999df2d830dd9fa081532d106a178ae17cd18807240ab3fe3c07f287f9906777b3bb0c72
|
7
|
+
data.tar.gz: cec2ee542633b9b7c803de01fc3b700a7b78eeac15e156dca97d99b62f9142c9f749e90a006b44bf9d7108ffeed63329b64003da53603fd02fcb75374f6a33e1
|
data/README.md
CHANGED
@@ -6,19 +6,13 @@
|
|
6
6
|
|
7
7
|
## Getting Started
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
```sh
|
12
|
-
npx playwright install
|
9
|
+
```
|
10
|
+
gem 'playwright-ruby-client'
|
13
11
|
```
|
14
12
|
|
15
|
-
and then
|
16
|
-
|
17
|
-
**Prefer npm install instead of npx?**
|
18
|
-
|
19
|
-
Actually `npx playwright` is a bit slow. We can also use `npm install` to setup.
|
13
|
+
and then 'bundle install'.
|
20
14
|
|
21
|
-
|
15
|
+
Since playwright-ruby-client doesn't include the playwright driver, **we have to install [playwright](https://github.com/microsoft/playwright) in advance**.
|
22
16
|
|
23
17
|
```
|
24
18
|
npm install playwright
|
@@ -29,14 +23,14 @@ And set `playwright_cli_executable_path: './node_modules/.bin/playwright'`
|
|
29
23
|
|
30
24
|
**Prefer playwrighting without Node.js?**
|
31
25
|
|
32
|
-
Instead of npm, you can also directly download playwright driver from playwright.azureedge.net/builds/. The URL can be easily detected from [here](https://github.com/microsoft/playwright-python/blob/
|
26
|
+
Instead of npm, you can also directly download playwright driver from playwright.azureedge.net/builds/. The URL can be easily detected from [here](https://github.com/microsoft/playwright-python/blob/cb5409934629adaabc0cff1891080de2052fa778/setup.py#L73-L77)
|
33
27
|
|
34
28
|
### Capture a site
|
35
29
|
|
36
30
|
```ruby
|
37
31
|
require 'playwright'
|
38
32
|
|
39
|
-
Playwright.create(playwright_cli_executable_path: '
|
33
|
+
Playwright.create(playwright_cli_executable_path: './node_modules/.bin/playwright') do |playwright|
|
40
34
|
playwright.chromium.launch(headless: false) do |browser|
|
41
35
|
page = browser.new_page
|
42
36
|
page.goto('https://github.com/YusukeIwaki')
|
@@ -52,7 +46,7 @@ end
|
|
52
46
|
```ruby
|
53
47
|
require 'playwright'
|
54
48
|
|
55
|
-
Playwright.create(playwright_cli_executable_path: '
|
49
|
+
Playwright.create(playwright_cli_executable_path: './node_modules/.bin/playwright') do |playwright|
|
56
50
|
playwright.chromium.launch(headless: false) do |browser|
|
57
51
|
page = browser.new_page
|
58
52
|
page.goto('https://github.com/')
|
@@ -94,7 +88,7 @@ $ bundle exec ruby main.rb
|
|
94
88
|
```ruby
|
95
89
|
require 'playwright'
|
96
90
|
|
97
|
-
Playwright.create(playwright_cli_executable_path: '
|
91
|
+
Playwright.create(playwright_cli_executable_path: './node_modules/.bin/playwright') do |playwright|
|
98
92
|
devices = playwright.android.devices
|
99
93
|
unless devices.empty?
|
100
94
|
device = devices.last
|
@@ -185,6 +179,8 @@ end
|
|
185
179
|
|
186
180
|
When `Playwright.connect_to_playwright_server` is used, playwright_cli_executable_path is not required.
|
187
181
|
|
182
|
+
For more detailed instraction, refer this article: https://playwright-ruby-client.vercel.app/docs/article/guides/playwright_on_alpine_linux
|
183
|
+
|
188
184
|
## License
|
189
185
|
|
190
186
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
@@ -81,6 +81,7 @@ def new_context(
|
|
81
81
|
colorScheme: nil,
|
82
82
|
deviceScaleFactor: nil,
|
83
83
|
extraHTTPHeaders: nil,
|
84
|
+
forcedColors: nil,
|
84
85
|
geolocation: nil,
|
85
86
|
hasTouch: nil,
|
86
87
|
httpCredentials: nil,
|
@@ -131,6 +132,7 @@ def new_page(
|
|
131
132
|
colorScheme: nil,
|
132
133
|
deviceScaleFactor: nil,
|
133
134
|
extraHTTPHeaders: nil,
|
135
|
+
forcedColors: nil,
|
134
136
|
geolocation: nil,
|
135
137
|
hasTouch: nil,
|
136
138
|
httpCredentials: nil,
|
@@ -265,12 +265,16 @@ Returns all open pages in the context.
|
|
265
265
|
## route
|
266
266
|
|
267
267
|
```
|
268
|
-
def route(url, handler)
|
268
|
+
def route(url, handler, times: nil)
|
269
269
|
```
|
270
270
|
|
271
271
|
Routing provides the capability to modify network requests that are made by any page in the browser context. Once route
|
272
272
|
is enabled, every request matching the url pattern will stall unless it's continued, fulfilled or aborted.
|
273
273
|
|
274
|
+
> NOTE: [Page#route](./page#route) will not intercept requests intercepted by Service Worker. See
|
275
|
+
[this](https://github.com/microsoft/playwright/issues/1090) issue. We recommend disabling Service Workers when using
|
276
|
+
request interception. Via `await context.addInitScript(() => delete window.navigator.serviceWorker);`
|
277
|
+
|
274
278
|
An example of a naive handler that aborts all image requests:
|
275
279
|
|
276
280
|
```ruby
|
@@ -510,6 +510,32 @@ def select_text(force: nil, timeout: nil)
|
|
510
510
|
This method waits for [actionability](https://playwright.dev/python/docs/actionability) checks, then focuses the element and selects all its text
|
511
511
|
content.
|
512
512
|
|
513
|
+
## set_checked
|
514
|
+
|
515
|
+
```
|
516
|
+
def set_checked(
|
517
|
+
checked,
|
518
|
+
force: nil,
|
519
|
+
noWaitAfter: nil,
|
520
|
+
position: nil,
|
521
|
+
timeout: nil,
|
522
|
+
trial: nil)
|
523
|
+
```
|
524
|
+
alias: `checked=`
|
525
|
+
|
526
|
+
This method checks or unchecks an element by performing the following steps:
|
527
|
+
1. Ensure that element is a checkbox or a radio input. If not, this method throws.
|
528
|
+
1. If the element already has the right checked state, this method returns immediately.
|
529
|
+
1. Wait for [actionability](https://playwright.dev/python/docs/actionability) checks on the matched element, unless `force` option is set. If the
|
530
|
+
element is detached during the checks, the whole action is retried.
|
531
|
+
1. Scroll the element into view if needed.
|
532
|
+
1. Use [Page#mouse](./page#mouse) to click in the center of the element.
|
533
|
+
1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
|
534
|
+
1. Ensure that the element is now checked or unchecked. If not, this method throws.
|
535
|
+
|
536
|
+
When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
|
537
|
+
zero timeout disables this.
|
538
|
+
|
513
539
|
## set_input_files
|
514
540
|
|
515
541
|
```
|
@@ -630,7 +656,7 @@ If the element does not satisfy the condition for the `timeout` milliseconds, th
|
|
630
656
|
## wait_for_selector
|
631
657
|
|
632
658
|
```
|
633
|
-
def wait_for_selector(selector, state: nil, timeout: nil)
|
659
|
+
def wait_for_selector(selector, state: nil, strict: nil, timeout: nil)
|
634
660
|
```
|
635
661
|
|
636
662
|
Returns element specified by selector when it satisfies `state` option. Returns `null` if waiting for `hidden` or
|
@@ -0,0 +1,10 @@
|
|
1
|
+
---
|
2
|
+
sidebar_position: 10
|
3
|
+
---
|
4
|
+
|
5
|
+
# FetchRequest
|
6
|
+
|
7
|
+
This API is used for Web API testing. You can use it to trigger API endpoints, configure micro-services, prepare
|
8
|
+
environment or the service to your e2e test. When used on [Page](./page) or a [BrowserContext](./browser_context), this API will automatically use
|
9
|
+
the cookies from the corresponding [BrowserContext](./browser_context). This means that if you log in using this API, your e2e test will be
|
10
|
+
logged in and vice versa.
|
@@ -649,6 +649,34 @@ frame.select_option("select#colors", value: ["red", "green", "blue"])
|
|
649
649
|
|
650
650
|
|
651
651
|
|
652
|
+
## set_checked
|
653
|
+
|
654
|
+
```
|
655
|
+
def set_checked(
|
656
|
+
selector,
|
657
|
+
checked,
|
658
|
+
force: nil,
|
659
|
+
noWaitAfter: nil,
|
660
|
+
position: nil,
|
661
|
+
strict: nil,
|
662
|
+
timeout: nil,
|
663
|
+
trial: nil)
|
664
|
+
```
|
665
|
+
|
666
|
+
This method checks or unchecks an element matching `selector` by performing the following steps:
|
667
|
+
1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
|
668
|
+
1. Ensure that matched element is a checkbox or a radio input. If not, this method throws.
|
669
|
+
1. If the element already has the right checked state, this method returns immediately.
|
670
|
+
1. Wait for [actionability](https://playwright.dev/python/docs/actionability) checks on the matched element, unless `force` option is set. If the
|
671
|
+
element is detached during the checks, the whole action is retried.
|
672
|
+
1. Scroll the element into view if needed.
|
673
|
+
1. Use [Page#mouse](./page#mouse) to click in the center of the element.
|
674
|
+
1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
|
675
|
+
1. Ensure that the element is now checked or unchecked. If not, this method throws.
|
676
|
+
|
677
|
+
When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
|
678
|
+
zero timeout disables this.
|
679
|
+
|
652
680
|
## set_content
|
653
681
|
|
654
682
|
```
|
@@ -45,6 +45,9 @@ page.locator('button').click
|
|
45
45
|
|
46
46
|
# Works because we explicitly tell locator to pick the first element:
|
47
47
|
page.locator('button').first.click
|
48
|
+
|
49
|
+
# Works because count knows what to do with multiple matches:
|
50
|
+
page.locator('button').count
|
48
51
|
```
|
49
52
|
|
50
53
|
|
@@ -553,6 +556,32 @@ def select_text(force: nil, timeout: nil)
|
|
553
556
|
This method waits for [actionability](https://playwright.dev/python/docs/actionability) checks, then focuses the element and selects all its text
|
554
557
|
content.
|
555
558
|
|
559
|
+
## set_checked
|
560
|
+
|
561
|
+
```
|
562
|
+
def set_checked(
|
563
|
+
checked,
|
564
|
+
force: nil,
|
565
|
+
noWaitAfter: nil,
|
566
|
+
position: nil,
|
567
|
+
timeout: nil,
|
568
|
+
trial: nil)
|
569
|
+
```
|
570
|
+
alias: `checked=`
|
571
|
+
|
572
|
+
This method checks or unchecks an element by performing the following steps:
|
573
|
+
1. Ensure that matched element is a checkbox or a radio input. If not, this method throws.
|
574
|
+
1. If the element already has the right checked state, this method returns immediately.
|
575
|
+
1. Wait for [actionability](https://playwright.dev/python/docs/actionability) checks on the matched element, unless `force` option is set. If the
|
576
|
+
element is detached during the checks, the whole action is retried.
|
577
|
+
1. Scroll the element into view if needed.
|
578
|
+
1. Use [Page#mouse](./page#mouse) to click in the center of the element.
|
579
|
+
1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
|
580
|
+
1. Ensure that the element is now checked or unchecked. If not, this method throws.
|
581
|
+
|
582
|
+
When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
|
583
|
+
zero timeout disables this.
|
584
|
+
|
556
585
|
## set_input_files
|
557
586
|
|
558
587
|
```
|
@@ -648,3 +677,21 @@ If the element is detached from the DOM at any moment during the action, this me
|
|
648
677
|
|
649
678
|
When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
|
650
679
|
zero timeout disables this.
|
680
|
+
|
681
|
+
## wait_for
|
682
|
+
|
683
|
+
```
|
684
|
+
def wait_for(state: nil, timeout: nil)
|
685
|
+
```
|
686
|
+
|
687
|
+
Returns when element specified by locator satisfies the `state` option.
|
688
|
+
|
689
|
+
If target element already satisfies the condition, the method returns immediately. Otherwise, waits for up to `timeout`
|
690
|
+
milliseconds until the condition is met.
|
691
|
+
|
692
|
+
```ruby
|
693
|
+
order_sent = page.locator("#order-sent")
|
694
|
+
order_sent.wait_for
|
695
|
+
```
|
696
|
+
|
697
|
+
|
@@ -66,3 +66,14 @@ def up(button: nil, clickCount: nil)
|
|
66
66
|
```
|
67
67
|
|
68
68
|
Dispatches a `mouseup` event.
|
69
|
+
|
70
|
+
## wheel
|
71
|
+
|
72
|
+
```
|
73
|
+
def wheel(deltaX, deltaY)
|
74
|
+
```
|
75
|
+
|
76
|
+
Dispatches a `wheel` event.
|
77
|
+
|
78
|
+
> NOTE: Wheel events may cause scrolling if they are not handled, and this method does not wait for the scrolling to
|
79
|
+
finish before returning.
|
@@ -281,7 +281,7 @@ def drag_and_drop(
|
|
281
281
|
## emulate_media
|
282
282
|
|
283
283
|
```
|
284
|
-
def emulate_media(colorScheme: nil, media: nil, reducedMotion: nil)
|
284
|
+
def emulate_media(colorScheme: nil, forcedColors: nil, media: nil, reducedMotion: nil)
|
285
285
|
```
|
286
286
|
|
287
287
|
This method changes the `CSS media type` through the `media` argument, and/or the `'prefers-colors-scheme'` media
|
@@ -933,7 +933,7 @@ last redirect.
|
|
933
933
|
## route
|
934
934
|
|
935
935
|
```
|
936
|
-
def route(url, handler)
|
936
|
+
def route(url, handler, times: nil)
|
937
937
|
```
|
938
938
|
|
939
939
|
Routing provides the capability to modify network requests that are made by a page.
|
@@ -941,6 +941,9 @@ Routing provides the capability to modify network requests that are made by a pa
|
|
941
941
|
Once routing is enabled, every request matching the url pattern will stall unless it's continued, fulfilled or aborted.
|
942
942
|
|
943
943
|
> NOTE: The handler will only be called for the first url if the response is a redirect.
|
944
|
+
> NOTE: [Page#route](./page#route) will not intercept requests intercepted by Service Worker. See
|
945
|
+
[this](https://github.com/microsoft/playwright/issues/1090) issue. We recommend disabling Service Workers when using
|
946
|
+
request interception. Via `await context.addInitScript(() => delete window.navigator.serviceWorker);`
|
944
947
|
|
945
948
|
An example of a naive handler that aborts all image requests:
|
946
949
|
|
@@ -1030,6 +1033,36 @@ page.select_option("select#colors", value: ["red", "green", "blue"])
|
|
1030
1033
|
|
1031
1034
|
Shortcut for main frame's [Frame#select_option](./frame#select_option).
|
1032
1035
|
|
1036
|
+
## set_checked
|
1037
|
+
|
1038
|
+
```
|
1039
|
+
def set_checked(
|
1040
|
+
selector,
|
1041
|
+
checked,
|
1042
|
+
force: nil,
|
1043
|
+
noWaitAfter: nil,
|
1044
|
+
position: nil,
|
1045
|
+
strict: nil,
|
1046
|
+
timeout: nil,
|
1047
|
+
trial: nil)
|
1048
|
+
```
|
1049
|
+
|
1050
|
+
This method checks or unchecks an element matching `selector` by performing the following steps:
|
1051
|
+
1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
|
1052
|
+
1. Ensure that matched element is a checkbox or a radio input. If not, this method throws.
|
1053
|
+
1. If the element already has the right checked state, this method returns immediately.
|
1054
|
+
1. Wait for [actionability](https://playwright.dev/python/docs/actionability) checks on the matched element, unless `force` option is set. If the
|
1055
|
+
element is detached during the checks, the whole action is retried.
|
1056
|
+
1. Scroll the element into view if needed.
|
1057
|
+
1. Use [Page#mouse](./page#mouse) to click in the center of the element.
|
1058
|
+
1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
|
1059
|
+
1. Ensure that the element is now checked or unchecked. If not, this method throws.
|
1060
|
+
|
1061
|
+
When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
|
1062
|
+
zero timeout disables this.
|
1063
|
+
|
1064
|
+
Shortcut for main frame's [Frame#set_checked](./frame#set_checked).
|
1065
|
+
|
1033
1066
|
## set_content
|
1034
1067
|
|
1035
1068
|
```
|
@@ -18,6 +18,14 @@ complete with `'requestfinished'` event.
|
|
18
18
|
If request gets a 'redirect' response, the request is successfully finished with the 'requestfinished' event, and a new
|
19
19
|
request is issued to a redirected url.
|
20
20
|
|
21
|
+
## all_headers
|
22
|
+
|
23
|
+
```
|
24
|
+
def all_headers
|
25
|
+
```
|
26
|
+
|
27
|
+
An object with all the request HTTP headers associated with this request. The header names are lower-cased.
|
28
|
+
|
21
29
|
## failure
|
22
30
|
|
23
31
|
```
|
@@ -48,7 +56,24 @@ Returns the [Frame](./frame) that initiated this request.
|
|
48
56
|
def headers
|
49
57
|
```
|
50
58
|
|
51
|
-
|
59
|
+
**DEPRECATED** Incomplete list of headers as seen by the rendering engine. Use [Request#all_headers](./request#all_headers) instead.
|
60
|
+
|
61
|
+
## headers_array
|
62
|
+
|
63
|
+
```
|
64
|
+
def headers_array
|
65
|
+
```
|
66
|
+
|
67
|
+
An array with all the request HTTP headers associated with this request. Unlike [Request#all_headers](./request#all_headers), header
|
68
|
+
names are NOT lower-cased. Headers with multiple entries, such as `Set-Cookie`, appear in the array multiple times.
|
69
|
+
|
70
|
+
## header_value
|
71
|
+
|
72
|
+
```
|
73
|
+
def header_value(name)
|
74
|
+
```
|
75
|
+
|
76
|
+
Returns the value of the header matching the name. The name is case insensitive.
|
52
77
|
|
53
78
|
## navigation_request?
|
54
79
|
|
@@ -156,6 +181,14 @@ def response
|
|
156
181
|
|
157
182
|
Returns the matching [Response](./response) object, or `null` if the response was not received due to error.
|
158
183
|
|
184
|
+
## sizes
|
185
|
+
|
186
|
+
```
|
187
|
+
def sizes
|
188
|
+
```
|
189
|
+
|
190
|
+
Returns resource size information for given request.
|
191
|
+
|
159
192
|
## timing
|
160
193
|
|
161
194
|
```
|
@@ -6,6 +6,14 @@ sidebar_position: 10
|
|
6
6
|
|
7
7
|
[Response](./response) class represents responses which are received by page.
|
8
8
|
|
9
|
+
## all_headers
|
10
|
+
|
11
|
+
```
|
12
|
+
def all_headers
|
13
|
+
```
|
14
|
+
|
15
|
+
An object with all the response HTTP headers associated with this response.
|
16
|
+
|
9
17
|
## body
|
10
18
|
|
11
19
|
```
|
@@ -20,7 +28,7 @@ Returns the buffer with response body.
|
|
20
28
|
def finished
|
21
29
|
```
|
22
30
|
|
23
|
-
Waits for this response to finish, returns
|
31
|
+
Waits for this response to finish, returns always `null`.
|
24
32
|
|
25
33
|
## frame
|
26
34
|
|
@@ -36,7 +44,34 @@ Returns the [Frame](./frame) that initiated this response.
|
|
36
44
|
def headers
|
37
45
|
```
|
38
46
|
|
39
|
-
|
47
|
+
**DEPRECATED** Incomplete list of headers as seen by the rendering engine. Use [Response#all_headers](./response#all_headers) instead.
|
48
|
+
|
49
|
+
## headers_array
|
50
|
+
|
51
|
+
```
|
52
|
+
def headers_array
|
53
|
+
```
|
54
|
+
|
55
|
+
An array with all the request HTTP headers associated with this response. Unlike [Response#all_headers](./response#all_headers), header
|
56
|
+
names are NOT lower-cased. Headers with multiple entries, such as `Set-Cookie`, appear in the array multiple times.
|
57
|
+
|
58
|
+
## header_value
|
59
|
+
|
60
|
+
```
|
61
|
+
def header_value(name)
|
62
|
+
```
|
63
|
+
|
64
|
+
Returns the value of the header matching the name. The name is case insensitive. If multiple headers have the same name
|
65
|
+
(except `set-cookie`), they are returned as a list separated by `, `. For `set-cookie`, the `\n` separator is used. If
|
66
|
+
no headers are found, `null` is returned.
|
67
|
+
|
68
|
+
## header_values
|
69
|
+
|
70
|
+
```
|
71
|
+
def header_values(name)
|
72
|
+
```
|
73
|
+
|
74
|
+
Returns all values of the headers matching the name, for example `set-cookie`. The name is case insensitive.
|
40
75
|
|
41
76
|
## json
|
42
77
|
|
@@ -4,16 +4,15 @@ sidebar_position: 10
|
|
4
4
|
|
5
5
|
# Tracing
|
6
6
|
|
7
|
-
API for collecting and saving Playwright traces. Playwright traces can be opened
|
8
|
-
Playwright script runs.
|
7
|
+
API for collecting and saving Playwright traces. Playwright traces can be opened in [Trace Viewer](https://playwright.dev/python/docs/trace-viewer)
|
8
|
+
after Playwright script runs.
|
9
9
|
|
10
|
-
Start
|
10
|
+
Start recording a trace before performing actions. At the end, stop tracing and save it to a file.
|
11
11
|
|
12
12
|
```ruby
|
13
|
-
browser.
|
14
|
-
context = page.context
|
15
|
-
|
13
|
+
browser.new_context do |context|
|
16
14
|
context.tracing.start(screenshots: true, snapshots: true)
|
15
|
+
page = context.new_page
|
17
16
|
page.goto('https://playwright.dev')
|
18
17
|
context.tracing.stop(path: 'trace.zip')
|
19
18
|
end
|
@@ -30,15 +29,42 @@ def start(name: nil, screenshots: nil, snapshots: nil)
|
|
30
29
|
Start tracing.
|
31
30
|
|
32
31
|
```ruby
|
33
|
-
context = page.context
|
34
|
-
|
35
32
|
context.tracing.start(name: 'trace', screenshots: true, snapshots: true)
|
33
|
+
page = context.new_page
|
36
34
|
page.goto('https://playwright.dev')
|
37
35
|
context.tracing.stop(path: 'trace.zip')
|
38
36
|
```
|
39
37
|
|
40
38
|
|
41
39
|
|
40
|
+
## start_chunk
|
41
|
+
|
42
|
+
```
|
43
|
+
def start_chunk
|
44
|
+
```
|
45
|
+
|
46
|
+
Start a new trace chunk. If you'd like to record multiple traces on the same [BrowserContext](./browser_context), use
|
47
|
+
[Tracing#start](./tracing#start) once, and then create multiple trace chunks with [Tracing#start_chunk](./tracing#start_chunk) and
|
48
|
+
[Tracing#stop_chunk](./tracing#stop_chunk).
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
context.tracing.start(name: "trace", screenshots: true, snapshots: true)
|
52
|
+
page = context.new_page
|
53
|
+
page.goto("https://playwright.dev")
|
54
|
+
|
55
|
+
context.tracing.start_chunk
|
56
|
+
page.click("text=Get Started")
|
57
|
+
# Everything between start_chunk and stop_chunk will be recorded in the trace.
|
58
|
+
context.tracing.stop_chunk(path: "trace1.zip")
|
59
|
+
|
60
|
+
context.tracing.start_chunk
|
61
|
+
page.goto("http://example.com")
|
62
|
+
# Save a second trace file with different actions.
|
63
|
+
context.tracing.stop_chunk(path: "trace2.zip")
|
64
|
+
```
|
65
|
+
|
66
|
+
|
67
|
+
|
42
68
|
## stop
|
43
69
|
|
44
70
|
```
|
@@ -46,3 +72,11 @@ def stop(path: nil)
|
|
46
72
|
```
|
47
73
|
|
48
74
|
Stop tracing.
|
75
|
+
|
76
|
+
## stop_chunk
|
77
|
+
|
78
|
+
```
|
79
|
+
def stop_chunk(path: nil)
|
80
|
+
```
|
81
|
+
|
82
|
+
Stop the trace chunk. See [Tracing#start_chunk](./tracing#start_chunk) for more details about multiple trace chunks.
|
@@ -4,7 +4,14 @@ sidebar_position: 0
|
|
4
4
|
|
5
5
|
# Getting started
|
6
6
|
|
7
|
-
|
7
|
+
```
|
8
|
+
gem 'playwright-ruby-client'
|
9
|
+
```
|
10
|
+
|
11
|
+
Add the line above and then `bundle install`.
|
12
|
+
|
13
|
+
|
14
|
+
Since `playwright-ruby-client` doesn't include Playwright driver nor its downloader, **we have to install Playwright in advance**
|
8
15
|
|
9
16
|
```shell
|
10
17
|
$ npx playwright install
|
@@ -12,6 +19,8 @@ $ npx playwright install
|
|
12
19
|
|
13
20
|
and then set `playwright_cli_executable_path: "npx playwright"` into `Playwright.create`.
|
14
21
|
|
22
|
+
Other methods of installation is also available. See the detail in [Download Playwright driver](./guides/download_playwright_driver)
|
23
|
+
|
15
24
|
## Enjoy with examples
|
16
25
|
|
17
26
|
### Capture a site
|
@@ -12,6 +12,15 @@ Choose any of the three ways as you prefer to download the driver:
|
|
12
12
|
* `npm install`: the best choice for most use cases, with existing Node.js environment.
|
13
13
|
* Direct download: maybe a good choice for Docker :whale: integration.
|
14
14
|
|
15
|
+
:::note
|
16
|
+
|
17
|
+
Also the article [Playwright on Alpine Linux](./playwright_on_alpine_linux) would be helpful if you plan to
|
18
|
+
|
19
|
+
* Build a browser server/container like Selenium Grid
|
20
|
+
* Run automation scripts on Alpine Linux
|
21
|
+
|
22
|
+
:::
|
23
|
+
|
15
24
|
## Using `npx`
|
16
25
|
|
17
26
|
```shell
|