playwright-ruby-client 1.14.beta3 → 1.15.beta3
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 +4 -0
- data/documentation/docs/api/browser_context.md +5 -1
- data/documentation/docs/api/browser_type.md +2 -0
- data/documentation/docs/api/element_handle.md +30 -5
- data/documentation/docs/api/experimental/android_device.md +2 -0
- data/documentation/docs/api/frame.md +32 -6
- data/documentation/docs/api/locator.md +67 -38
- data/documentation/docs/api/mouse.md +11 -0
- data/documentation/docs/api/page.md +38 -7
- data/documentation/docs/api/request.md +34 -1
- data/documentation/docs/api/response.md +37 -2
- data/documentation/docs/api/selectors.md +29 -3
- data/documentation/docs/api/tracing.md +42 -8
- data/documentation/docs/api/worker.md +12 -11
- 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 +2 -2
- data/documentation/docs/article/guides/use_storage_state.md +78 -0
- data/documentation/docs/include/api_coverage.md +15 -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 +625 -549
- 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/browser_type.rb +0 -1
- data/lib/playwright/channel_owners/element_handle.rb +10 -2
- data/lib/playwright/channel_owners/frame.rb +8 -0
- data/lib/playwright/channel_owners/page.rb +20 -4
- data/lib/playwright/channel_owners/playwright.rb +9 -0
- data/lib/playwright/channel_owners/request.rb +53 -17
- data/lib/playwright/channel_owners/response.rb +48 -5
- data/lib/playwright/connection.rb +8 -11
- data/lib/playwright/http_headers.rb +0 -6
- data/lib/playwright/locator_impl.rb +8 -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 -1
- data/lib/playwright/version.rb +2 -2
- data/lib/playwright/web_socket_transport.rb +2 -0
- data/lib/playwright.rb +46 -5
- data/lib/playwright_api/android.rb +6 -6
- data/lib/playwright_api/android_device.rb +11 -9
- data/lib/playwright_api/browser.rb +12 -8
- data/lib/playwright_api/browser_context.rb +12 -8
- data/lib/playwright_api/browser_type.rb +9 -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/frame.rb +35 -12
- 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 +43 -15
- data/lib/playwright_api/playwright.rb +6 -6
- data/lib/playwright_api/request.rb +33 -7
- data/lib/playwright_api/response.rb +31 -8
- data/lib/playwright_api/route.rb +6 -6
- data/lib/playwright_api/selectors.rb +38 -7
- 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 +8 -4
data/lib/playwright_api/mouse.rb
CHANGED
@@ -45,5 +45,13 @@ module Playwright
|
|
45
45
|
def up(button: nil, clickCount: nil)
|
46
46
|
wrap_impl(@impl.up(button: unwrap_impl(button), clickCount: unwrap_impl(clickCount)))
|
47
47
|
end
|
48
|
+
|
49
|
+
# Dispatches a `wheel` event.
|
50
|
+
#
|
51
|
+
# > NOTE: Wheel events may cause scrolling if they are not handled, and this method does not wait for the scrolling to
|
52
|
+
# finish before returning.
|
53
|
+
def wheel(deltaX, deltaY)
|
54
|
+
wrap_impl(@impl.wheel(unwrap_impl(deltaX), unwrap_impl(deltaY)))
|
55
|
+
end
|
48
56
|
end
|
49
57
|
end
|
data/lib/playwright_api/page.rb
CHANGED
@@ -284,8 +284,8 @@ module Playwright
|
|
284
284
|
# # → False
|
285
285
|
# page.evaluate("matchMedia('(prefers-color-scheme: no-preference)').matches")
|
286
286
|
# ```
|
287
|
-
def emulate_media(colorScheme: nil, media: nil, reducedMotion: nil)
|
288
|
-
wrap_impl(@impl.emulate_media(colorScheme: unwrap_impl(colorScheme), media: unwrap_impl(media), reducedMotion: unwrap_impl(reducedMotion)))
|
287
|
+
def emulate_media(colorScheme: nil, forcedColors: nil, media: nil, reducedMotion: nil)
|
288
|
+
wrap_impl(@impl.emulate_media(colorScheme: unwrap_impl(colorScheme), forcedColors: unwrap_impl(forcedColors), media: unwrap_impl(media), reducedMotion: unwrap_impl(reducedMotion)))
|
289
289
|
end
|
290
290
|
|
291
291
|
# The method finds an element matching the specified selector within the page and passes it as a first argument to
|
@@ -562,18 +562,18 @@ module Playwright
|
|
562
562
|
# Returns the main resource response. In case of multiple redirects, the navigation will resolve with the response of the
|
563
563
|
# last redirect.
|
564
564
|
#
|
565
|
-
#
|
565
|
+
# The method will throw an error if:
|
566
566
|
# - there's an SSL error (e.g. in case of self-signed certificates).
|
567
567
|
# - target URL is invalid.
|
568
568
|
# - the `timeout` is exceeded during navigation.
|
569
569
|
# - the remote server does not respond or is unreachable.
|
570
570
|
# - the main resource failed to load.
|
571
571
|
#
|
572
|
-
#
|
572
|
+
# The method will not throw an error when any valid HTTP status code is returned by the remote server, including 404 "Not
|
573
573
|
# Found" and 500 "Internal Server Error". The status code for such responses can be retrieved by calling
|
574
574
|
# [`method: Response.status`].
|
575
575
|
#
|
576
|
-
# > NOTE:
|
576
|
+
# > NOTE: The method either throws an error or returns a main resource response. The only exceptions are navigation to
|
577
577
|
# `about:blank` or navigation to the same URL with a different hash, which would succeed and return `null`.
|
578
578
|
# > NOTE: Headless mode doesn't support navigation to a PDF document. See the
|
579
579
|
# [upstream issue](https://bugs.chromium.org/p/chromium/issues/detail?id=761295).
|
@@ -662,8 +662,6 @@ module Playwright
|
|
662
662
|
# element immediately before performing an action, so a series of actions on the same locator can in fact be performed on
|
663
663
|
# different DOM elements. That would happen if the DOM structure between those actions has changed.
|
664
664
|
#
|
665
|
-
# Note that locator always implies visibility, so it will always be locating visible elements.
|
666
|
-
#
|
667
665
|
# Shortcut for main frame's [`method: Frame.locator`].
|
668
666
|
def locator(selector)
|
669
667
|
wrap_impl(@impl.locator(unwrap_impl(selector)))
|
@@ -820,6 +818,9 @@ module Playwright
|
|
820
818
|
# Once routing is enabled, every request matching the url pattern will stall unless it's continued, fulfilled or aborted.
|
821
819
|
#
|
822
820
|
# > NOTE: The handler will only be called for the first url if the response is a redirect.
|
821
|
+
# > NOTE: [`method: Page.route`] will not intercept requests intercepted by Service Worker. See
|
822
|
+
# [this](https://github.com/microsoft/playwright/issues/1090) issue. We recommend disabling Service Workers when using
|
823
|
+
# request interception. Via `await context.addInitScript(() => delete window.navigator.serviceWorker);`
|
823
824
|
#
|
824
825
|
# An example of a naive handler that aborts all image requests:
|
825
826
|
#
|
@@ -857,8 +858,8 @@ module Playwright
|
|
857
858
|
# To remove a route with its handler you can use [`method: Page.unroute`].
|
858
859
|
#
|
859
860
|
# > NOTE: Enabling routing disables http cache.
|
860
|
-
def route(url, handler)
|
861
|
-
wrap_impl(@impl.route(unwrap_impl(url), unwrap_impl(handler)))
|
861
|
+
def route(url, handler, times: nil)
|
862
|
+
wrap_impl(@impl.route(unwrap_impl(url), unwrap_impl(handler), times: unwrap_impl(times)))
|
862
863
|
end
|
863
864
|
|
864
865
|
# Returns the buffer with the captured screenshot.
|
@@ -907,6 +908,33 @@ module Playwright
|
|
907
908
|
wrap_impl(@impl.select_option(unwrap_impl(selector), element: unwrap_impl(element), index: unwrap_impl(index), value: unwrap_impl(value), label: unwrap_impl(label), force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout)))
|
908
909
|
end
|
909
910
|
|
911
|
+
# This method checks or unchecks an element matching `selector` by performing the following steps:
|
912
|
+
# 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
|
913
|
+
# 1. Ensure that matched element is a checkbox or a radio input. If not, this method throws.
|
914
|
+
# 1. If the element already has the right checked state, this method returns immediately.
|
915
|
+
# 1. Wait for [actionability](./actionability.md) checks on the matched element, unless `force` option is set. If the
|
916
|
+
# element is detached during the checks, the whole action is retried.
|
917
|
+
# 1. Scroll the element into view if needed.
|
918
|
+
# 1. Use [`property: Page.mouse`] to click in the center of the element.
|
919
|
+
# 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
|
920
|
+
# 1. Ensure that the element is now checked or unchecked. If not, this method throws.
|
921
|
+
#
|
922
|
+
# When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
|
923
|
+
# zero timeout disables this.
|
924
|
+
#
|
925
|
+
# Shortcut for main frame's [`method: Frame.setChecked`].
|
926
|
+
def set_checked(
|
927
|
+
selector,
|
928
|
+
checked,
|
929
|
+
force: nil,
|
930
|
+
noWaitAfter: nil,
|
931
|
+
position: nil,
|
932
|
+
strict: nil,
|
933
|
+
timeout: nil,
|
934
|
+
trial: nil)
|
935
|
+
wrap_impl(@impl.set_checked(unwrap_impl(selector), unwrap_impl(checked), force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), position: unwrap_impl(position), strict: unwrap_impl(strict), timeout: unwrap_impl(timeout), trial: unwrap_impl(trial)))
|
936
|
+
end
|
937
|
+
|
910
938
|
def set_content(html, timeout: nil, waitUntil: nil)
|
911
939
|
wrap_impl(@impl.set_content(unwrap_impl(html), timeout: unwrap_impl(timeout), waitUntil: unwrap_impl(waitUntil)))
|
912
940
|
end
|
@@ -1354,20 +1382,20 @@ module Playwright
|
|
1354
1382
|
|
1355
1383
|
# -- inherited from EventEmitter --
|
1356
1384
|
# @nodoc
|
1357
|
-
def
|
1358
|
-
event_emitter_proxy.
|
1385
|
+
def off(event, callback)
|
1386
|
+
event_emitter_proxy.off(event, callback)
|
1359
1387
|
end
|
1360
1388
|
|
1361
1389
|
# -- inherited from EventEmitter --
|
1362
1390
|
# @nodoc
|
1363
|
-
def
|
1364
|
-
event_emitter_proxy.
|
1391
|
+
def once(event, callback)
|
1392
|
+
event_emitter_proxy.once(event, callback)
|
1365
1393
|
end
|
1366
1394
|
|
1367
1395
|
# -- inherited from EventEmitter --
|
1368
1396
|
# @nodoc
|
1369
|
-
def
|
1370
|
-
event_emitter_proxy.
|
1397
|
+
def on(event, callback)
|
1398
|
+
event_emitter_proxy.on(event, callback)
|
1371
1399
|
end
|
1372
1400
|
|
1373
1401
|
private def event_emitter_proxy
|
@@ -93,20 +93,20 @@ module Playwright
|
|
93
93
|
|
94
94
|
# -- inherited from EventEmitter --
|
95
95
|
# @nodoc
|
96
|
-
def
|
97
|
-
event_emitter_proxy.
|
96
|
+
def off(event, callback)
|
97
|
+
event_emitter_proxy.off(event, callback)
|
98
98
|
end
|
99
99
|
|
100
100
|
# -- inherited from EventEmitter --
|
101
101
|
# @nodoc
|
102
|
-
def
|
103
|
-
event_emitter_proxy.
|
102
|
+
def once(event, callback)
|
103
|
+
event_emitter_proxy.once(event, callback)
|
104
104
|
end
|
105
105
|
|
106
106
|
# -- inherited from EventEmitter --
|
107
107
|
# @nodoc
|
108
|
-
def
|
109
|
-
event_emitter_proxy.
|
108
|
+
def on(event, callback)
|
109
|
+
event_emitter_proxy.on(event, callback)
|
110
110
|
end
|
111
111
|
|
112
112
|
private def event_emitter_proxy
|
@@ -14,6 +14,11 @@ module Playwright
|
|
14
14
|
# request is issued to a redirected url.
|
15
15
|
class Request < PlaywrightApi
|
16
16
|
|
17
|
+
# An object with all the request HTTP headers associated with this request. The header names are lower-cased.
|
18
|
+
def all_headers
|
19
|
+
wrap_impl(@impl.all_headers)
|
20
|
+
end
|
21
|
+
|
17
22
|
# The method returns `null` unless this request has failed, as reported by `requestfailed` event.
|
18
23
|
#
|
19
24
|
# Example of logging of all the failed requests:
|
@@ -30,11 +35,22 @@ module Playwright
|
|
30
35
|
wrap_impl(@impl.frame)
|
31
36
|
end
|
32
37
|
|
33
|
-
#
|
38
|
+
# **DEPRECATED** Incomplete list of headers as seen by the rendering engine. Use [`method: Request.allHeaders`] instead.
|
34
39
|
def headers
|
35
40
|
wrap_impl(@impl.headers)
|
36
41
|
end
|
37
42
|
|
43
|
+
# An array with all the request HTTP headers associated with this request. Unlike [`method: Request.allHeaders`], header
|
44
|
+
# names are NOT lower-cased. Headers with multiple entries, such as `Set-Cookie`, appear in the array multiple times.
|
45
|
+
def headers_array
|
46
|
+
wrap_impl(@impl.headers_array)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Returns the value of the header matching the name. The name is case insensitive.
|
50
|
+
def header_value(name)
|
51
|
+
wrap_impl(@impl.header_value(unwrap_impl(name)))
|
52
|
+
end
|
53
|
+
|
38
54
|
# Whether this request is driving frame's navigation.
|
39
55
|
def navigation_request?
|
40
56
|
wrap_impl(@impl.navigation_request?)
|
@@ -109,6 +125,11 @@ module Playwright
|
|
109
125
|
wrap_impl(@impl.response)
|
110
126
|
end
|
111
127
|
|
128
|
+
# Returns resource size information for given request.
|
129
|
+
def sizes
|
130
|
+
wrap_impl(@impl.sizes)
|
131
|
+
end
|
132
|
+
|
112
133
|
# Returns resource timing information for given request. Most of the timing values become available upon the response,
|
113
134
|
# `responseEnd` becomes available when request finishes. Find more information at
|
114
135
|
# [Resource Timing API](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming).
|
@@ -128,22 +149,27 @@ module Playwright
|
|
128
149
|
wrap_impl(@impl.url)
|
129
150
|
end
|
130
151
|
|
152
|
+
# @nodoc
|
153
|
+
def header_values(name)
|
154
|
+
wrap_impl(@impl.header_values(unwrap_impl(name)))
|
155
|
+
end
|
156
|
+
|
131
157
|
# -- inherited from EventEmitter --
|
132
158
|
# @nodoc
|
133
|
-
def
|
134
|
-
event_emitter_proxy.
|
159
|
+
def off(event, callback)
|
160
|
+
event_emitter_proxy.off(event, callback)
|
135
161
|
end
|
136
162
|
|
137
163
|
# -- inherited from EventEmitter --
|
138
164
|
# @nodoc
|
139
|
-
def
|
140
|
-
event_emitter_proxy.
|
165
|
+
def once(event, callback)
|
166
|
+
event_emitter_proxy.once(event, callback)
|
141
167
|
end
|
142
168
|
|
143
169
|
# -- inherited from EventEmitter --
|
144
170
|
# @nodoc
|
145
|
-
def
|
146
|
-
event_emitter_proxy.
|
171
|
+
def on(event, callback)
|
172
|
+
event_emitter_proxy.on(event, callback)
|
147
173
|
end
|
148
174
|
|
149
175
|
private def event_emitter_proxy
|
@@ -2,12 +2,17 @@ module Playwright
|
|
2
2
|
# `Response` class represents responses which are received by page.
|
3
3
|
class Response < PlaywrightApi
|
4
4
|
|
5
|
+
# An object with all the response HTTP headers associated with this response.
|
6
|
+
def all_headers
|
7
|
+
wrap_impl(@impl.all_headers)
|
8
|
+
end
|
9
|
+
|
5
10
|
# Returns the buffer with response body.
|
6
11
|
def body
|
7
12
|
wrap_impl(@impl.body)
|
8
13
|
end
|
9
14
|
|
10
|
-
# Waits for this response to finish, returns
|
15
|
+
# Waits for this response to finish, returns always `null`.
|
11
16
|
def finished
|
12
17
|
wrap_impl(@impl.finished)
|
13
18
|
end
|
@@ -17,11 +22,29 @@ module Playwright
|
|
17
22
|
wrap_impl(@impl.frame)
|
18
23
|
end
|
19
24
|
|
20
|
-
#
|
25
|
+
# **DEPRECATED** Incomplete list of headers as seen by the rendering engine. Use [`method: Response.allHeaders`] instead.
|
21
26
|
def headers
|
22
27
|
wrap_impl(@impl.headers)
|
23
28
|
end
|
24
29
|
|
30
|
+
# An array with all the request HTTP headers associated with this response. Unlike [`method: Response.allHeaders`], header
|
31
|
+
# names are NOT lower-cased. Headers with multiple entries, such as `Set-Cookie`, appear in the array multiple times.
|
32
|
+
def headers_array
|
33
|
+
wrap_impl(@impl.headers_array)
|
34
|
+
end
|
35
|
+
|
36
|
+
# Returns the value of the header matching the name. The name is case insensitive. If multiple headers have the same name
|
37
|
+
# (except `set-cookie`), they are returned as a list separated by `, `. For `set-cookie`, the `\n` separator is used. If
|
38
|
+
# no headers are found, `null` is returned.
|
39
|
+
def header_value(name)
|
40
|
+
wrap_impl(@impl.header_value(unwrap_impl(name)))
|
41
|
+
end
|
42
|
+
|
43
|
+
# Returns all values of the headers matching the name, for example `set-cookie`. The name is case insensitive.
|
44
|
+
def header_values(name)
|
45
|
+
wrap_impl(@impl.header_values(unwrap_impl(name)))
|
46
|
+
end
|
47
|
+
|
25
48
|
# Returns the JSON representation of response body.
|
26
49
|
#
|
27
50
|
# This method will throw if the response body is not parsable via `JSON.parse`.
|
@@ -76,20 +99,20 @@ module Playwright
|
|
76
99
|
|
77
100
|
# -- inherited from EventEmitter --
|
78
101
|
# @nodoc
|
79
|
-
def
|
80
|
-
event_emitter_proxy.
|
102
|
+
def off(event, callback)
|
103
|
+
event_emitter_proxy.off(event, callback)
|
81
104
|
end
|
82
105
|
|
83
106
|
# -- inherited from EventEmitter --
|
84
107
|
# @nodoc
|
85
|
-
def
|
86
|
-
event_emitter_proxy.
|
108
|
+
def once(event, callback)
|
109
|
+
event_emitter_proxy.once(event, callback)
|
87
110
|
end
|
88
111
|
|
89
112
|
# -- inherited from EventEmitter --
|
90
113
|
# @nodoc
|
91
|
-
def
|
92
|
-
event_emitter_proxy.
|
114
|
+
def on(event, callback)
|
115
|
+
event_emitter_proxy.on(event, callback)
|
93
116
|
end
|
94
117
|
|
95
118
|
private def event_emitter_proxy
|
data/lib/playwright_api/route.rb
CHANGED
@@ -58,20 +58,20 @@ module Playwright
|
|
58
58
|
|
59
59
|
# -- inherited from EventEmitter --
|
60
60
|
# @nodoc
|
61
|
-
def
|
62
|
-
event_emitter_proxy.
|
61
|
+
def off(event, callback)
|
62
|
+
event_emitter_proxy.off(event, callback)
|
63
63
|
end
|
64
64
|
|
65
65
|
# -- inherited from EventEmitter --
|
66
66
|
# @nodoc
|
67
|
-
def
|
68
|
-
event_emitter_proxy.
|
67
|
+
def once(event, callback)
|
68
|
+
event_emitter_proxy.once(event, callback)
|
69
69
|
end
|
70
70
|
|
71
71
|
# -- inherited from EventEmitter --
|
72
72
|
# @nodoc
|
73
|
-
def
|
74
|
-
event_emitter_proxy.
|
73
|
+
def on(event, callback)
|
74
|
+
event_emitter_proxy.on(event, callback)
|
75
75
|
end
|
76
76
|
|
77
77
|
private def event_emitter_proxy
|
@@ -6,7 +6,38 @@ module Playwright
|
|
6
6
|
# An example of registering selector engine that queries elements based on a tag name:
|
7
7
|
#
|
8
8
|
# ```python sync
|
9
|
-
#
|
9
|
+
# from playwright.sync_api import sync_playwright
|
10
|
+
#
|
11
|
+
# def run(playwright):
|
12
|
+
# tag_selector = """
|
13
|
+
# {
|
14
|
+
# // Returns the first element matching given selector in the root's subtree.
|
15
|
+
# query(root, selector) {
|
16
|
+
# return root.querySelector(selector);
|
17
|
+
# },
|
18
|
+
# // Returns all elements matching given selector in the root's subtree.
|
19
|
+
# queryAll(root, selector) {
|
20
|
+
# return Array.from(root.querySelectorAll(selector));
|
21
|
+
# }
|
22
|
+
# }"""
|
23
|
+
#
|
24
|
+
# # Register the engine. Selectors will be prefixed with "tag=".
|
25
|
+
# playwright.selectors.register("tag", tag_selector)
|
26
|
+
# browser = playwright.chromium.launch()
|
27
|
+
# page = browser.new_page()
|
28
|
+
# page.set_content('<div><button>Click me</button></div>')
|
29
|
+
#
|
30
|
+
# # Use the selector prefixed with its name.
|
31
|
+
# button = page.query_selector('tag=button')
|
32
|
+
# # Combine it with other selector engines.
|
33
|
+
# page.click('tag=div >> text="Click me"')
|
34
|
+
# # Can use it in any methods supporting selectors.
|
35
|
+
# button_count = page.eval_on_selector_all('tag=button', 'buttons => buttons.length')
|
36
|
+
# print(button_count)
|
37
|
+
# browser.close()
|
38
|
+
#
|
39
|
+
# with sync_playwright() as playwright:
|
40
|
+
# run(playwright)
|
10
41
|
# ```
|
11
42
|
def register(name, contentScript: nil, path: nil, script: nil)
|
12
43
|
wrap_impl(@impl.register(unwrap_impl(name), contentScript: unwrap_impl(contentScript), path: unwrap_impl(path), script: unwrap_impl(script)))
|
@@ -14,20 +45,20 @@ module Playwright
|
|
14
45
|
|
15
46
|
# -- inherited from EventEmitter --
|
16
47
|
# @nodoc
|
17
|
-
def
|
18
|
-
event_emitter_proxy.
|
48
|
+
def off(event, callback)
|
49
|
+
event_emitter_proxy.off(event, callback)
|
19
50
|
end
|
20
51
|
|
21
52
|
# -- inherited from EventEmitter --
|
22
53
|
# @nodoc
|
23
|
-
def
|
24
|
-
event_emitter_proxy.
|
54
|
+
def once(event, callback)
|
55
|
+
event_emitter_proxy.once(event, callback)
|
25
56
|
end
|
26
57
|
|
27
58
|
# -- inherited from EventEmitter --
|
28
59
|
# @nodoc
|
29
|
-
def
|
30
|
-
event_emitter_proxy.
|
60
|
+
def on(event, callback)
|
61
|
+
event_emitter_proxy.on(event, callback)
|
31
62
|
end
|
32
63
|
|
33
64
|
private def event_emitter_proxy
|
@@ -1,13 +1,14 @@
|
|
1
1
|
module Playwright
|
2
|
-
# API for collecting and saving Playwright traces. Playwright traces can be opened
|
3
|
-
# Playwright script runs.
|
2
|
+
# API for collecting and saving Playwright traces. Playwright traces can be opened in [Trace Viewer](./trace-viewer.md)
|
3
|
+
# after Playwright script runs.
|
4
4
|
#
|
5
|
-
# Start
|
5
|
+
# Start recording a trace before performing actions. At the end, stop tracing and save it to a file.
|
6
6
|
#
|
7
7
|
# ```python sync
|
8
8
|
# browser = chromium.launch()
|
9
9
|
# context = browser.new_context()
|
10
10
|
# context.tracing.start(screenshots=True, snapshots=True)
|
11
|
+
# page = context.new_page()
|
11
12
|
# page.goto("https://playwright.dev")
|
12
13
|
# context.tracing.stop(path = "trace.zip")
|
13
14
|
# ```
|
@@ -17,17 +18,45 @@ module Playwright
|
|
17
18
|
#
|
18
19
|
# ```python sync
|
19
20
|
# context.tracing.start(name="trace", screenshots=True, snapshots=True)
|
21
|
+
# page = context.new_page()
|
20
22
|
# page.goto("https://playwright.dev")
|
21
|
-
# context.tracing.stop()
|
22
23
|
# context.tracing.stop(path = "trace.zip")
|
23
24
|
# ```
|
24
25
|
def start(name: nil, screenshots: nil, snapshots: nil)
|
25
26
|
wrap_impl(@impl.start(name: unwrap_impl(name), screenshots: unwrap_impl(screenshots), snapshots: unwrap_impl(snapshots)))
|
26
27
|
end
|
27
28
|
|
29
|
+
# Start a new trace chunk. If you'd like to record multiple traces on the same `BrowserContext`, use
|
30
|
+
# [`method: Tracing.start`] once, and then create multiple trace chunks with [`method: Tracing.startChunk`] and
|
31
|
+
# [`method: Tracing.stopChunk`].
|
32
|
+
#
|
33
|
+
# ```python sync
|
34
|
+
# context.tracing.start(name="trace", screenshots=True, snapshots=True)
|
35
|
+
# page = context.new_page()
|
36
|
+
# page.goto("https://playwright.dev")
|
37
|
+
#
|
38
|
+
# context.tracing.start_chunk()
|
39
|
+
# page.click("text=Get Started")
|
40
|
+
# # Everything between start_chunk and stop_chunk will be recorded in the trace.
|
41
|
+
# context.tracing.stop_chunk(path = "trace1.zip")
|
42
|
+
#
|
43
|
+
# context.tracing.start_chunk()
|
44
|
+
# page.goto("http://example.com")
|
45
|
+
# # Save a second trace file with different actions.
|
46
|
+
# context.tracing.stop_chunk(path = "trace2.zip")
|
47
|
+
# ```
|
48
|
+
def start_chunk
|
49
|
+
wrap_impl(@impl.start_chunk)
|
50
|
+
end
|
51
|
+
|
28
52
|
# Stop tracing.
|
29
53
|
def stop(path: nil)
|
30
54
|
wrap_impl(@impl.stop(path: unwrap_impl(path)))
|
31
55
|
end
|
56
|
+
|
57
|
+
# Stop the trace chunk. See [`method: Tracing.startChunk`] for more details about multiple trace chunks.
|
58
|
+
def stop_chunk(path: nil)
|
59
|
+
wrap_impl(@impl.stop_chunk(path: unwrap_impl(path)))
|
60
|
+
end
|
32
61
|
end
|
33
62
|
end
|