playwright-ruby-client 1.14.beta3 → 1.15.beta3
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 +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
|