playwright-ruby-client 1.28.1 → 1.29.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/documentation/docs/api/accessibility.md +9 -14
- data/documentation/docs/api/api_request_context.md +44 -41
- data/documentation/docs/api/api_response.md +13 -3
- data/documentation/docs/api/browser.md +24 -23
- data/documentation/docs/api/browser_context.md +71 -45
- data/documentation/docs/api/browser_type.md +21 -14
- data/documentation/docs/api/cdp_session.md +3 -5
- data/documentation/docs/api/console_message.md +7 -4
- data/documentation/docs/api/dialog.md +9 -5
- data/documentation/docs/api/download.md +19 -11
- data/documentation/docs/api/element_handle.md +125 -116
- data/documentation/docs/api/experimental/android.md +4 -5
- data/documentation/docs/api/experimental/android_device.md +11 -2
- data/documentation/docs/api/experimental/android_input.md +5 -0
- data/documentation/docs/api/file_chooser.md +6 -3
- data/documentation/docs/api/frame.md +182 -171
- data/documentation/docs/api/frame_locator.md +27 -38
- data/documentation/docs/api/js_handle.md +16 -10
- data/documentation/docs/api/keyboard.md +29 -16
- data/documentation/docs/api/locator.md +189 -140
- data/documentation/docs/api/mouse.md +9 -4
- data/documentation/docs/api/page.md +304 -289
- data/documentation/docs/api/playwright.md +8 -5
- data/documentation/docs/api/request.md +34 -15
- data/documentation/docs/api/response.md +27 -10
- data/documentation/docs/api/route.md +44 -12
- data/documentation/docs/api/selectors.md +5 -3
- data/documentation/docs/api/touchscreen.md +2 -0
- data/documentation/docs/api/tracing.md +11 -11
- data/documentation/docs/api/web_socket.md +9 -4
- data/documentation/docs/api/worker.md +12 -11
- data/documentation/docs/include/api_coverage.md +2 -0
- data/lib/playwright/channel_owners/api_request_context.rb +37 -2
- data/lib/playwright/channel_owners/browser_context.rb +22 -26
- data/lib/playwright/channel_owners/page.rb +35 -25
- data/lib/playwright/channel_owners/route.rb +28 -8
- data/lib/playwright/event_emitter.rb +6 -1
- data/lib/playwright/locator_impl.rb +8 -0
- data/lib/playwright/select_option_values.rb +2 -0
- data/lib/playwright/version.rb +2 -2
- data/lib/playwright_api/accessibility.rb +9 -13
- data/lib/playwright_api/android.rb +8 -6
- data/lib/playwright_api/android_device.rb +32 -7
- data/lib/playwright_api/android_input.rb +5 -0
- data/lib/playwright_api/android_socket.rb +4 -2
- data/lib/playwright_api/android_web_view.rb +5 -2
- data/lib/playwright_api/api_request.rb +6 -3
- data/lib/playwright_api/api_request_context.rb +46 -36
- data/lib/playwright_api/api_response.rb +13 -2
- data/lib/playwright_api/browser.rb +24 -16
- data/lib/playwright_api/browser_context.rb +76 -39
- data/lib/playwright_api/browser_type.rb +23 -13
- data/lib/playwright_api/cdp_session.rb +3 -4
- data/lib/playwright_api/console_message.rb +7 -2
- data/lib/playwright_api/dialog.rb +8 -4
- data/lib/playwright_api/download.rb +19 -9
- data/lib/playwright_api/element_handle.rb +116 -93
- data/lib/playwright_api/file_chooser.rb +6 -1
- data/lib/playwright_api/frame.rb +180 -135
- data/lib/playwright_api/frame_locator.rb +29 -32
- data/lib/playwright_api/js_handle.rb +16 -6
- data/lib/playwright_api/keyboard.rb +29 -14
- data/lib/playwright_api/locator.rb +183 -112
- data/lib/playwright_api/mouse.rb +9 -2
- data/lib/playwright_api/page.rb +301 -253
- data/lib/playwright_api/playwright.rb +11 -4
- data/lib/playwright_api/request.rb +34 -7
- data/lib/playwright_api/response.rb +27 -10
- data/lib/playwright_api/route.rb +44 -11
- data/lib/playwright_api/selectors.rb +6 -1
- data/lib/playwright_api/touchscreen.rb +2 -0
- data/lib/playwright_api/tracing.rb +11 -5
- data/lib/playwright_api/web_socket.rb +9 -4
- data/lib/playwright_api/worker.rb +16 -13
- data/playwright.gemspec +1 -1
- metadata +7 -7
@@ -1,4 +1,5 @@
|
|
1
1
|
module Playwright
|
2
|
+
#
|
2
3
|
# Playwright module provides a method to launch a browser instance. The following is a typical example of using Playwright
|
3
4
|
# to drive automation:
|
4
5
|
#
|
@@ -18,11 +19,13 @@ module Playwright
|
|
18
19
|
# ```
|
19
20
|
class Playwright < PlaywrightApi
|
20
21
|
|
22
|
+
#
|
21
23
|
# This object can be used to launch or connect to Chromium, returning instances of `Browser`.
|
22
24
|
def chromium # property
|
23
25
|
wrap_impl(@impl.chromium)
|
24
26
|
end
|
25
27
|
|
28
|
+
#
|
26
29
|
# Returns a dictionary of devices to be used with [`method: Browser.newContext`] or [`method: Browser.newPage`].
|
27
30
|
#
|
28
31
|
# ```python sync
|
@@ -45,29 +48,33 @@ module Playwright
|
|
45
48
|
wrap_impl(@impl.devices)
|
46
49
|
end
|
47
50
|
|
51
|
+
#
|
48
52
|
# This object can be used to launch or connect to Firefox, returning instances of `Browser`.
|
49
53
|
def firefox # property
|
50
54
|
wrap_impl(@impl.firefox)
|
51
55
|
end
|
52
56
|
|
57
|
+
#
|
53
58
|
# Exposes API that can be used for the Web API testing.
|
54
59
|
def request # property
|
55
60
|
raise NotImplementedError.new('request is not implemented yet.')
|
56
61
|
end
|
57
62
|
|
58
|
-
#
|
59
|
-
#
|
63
|
+
#
|
64
|
+
# Selectors can be used to install custom selector engines. See
|
65
|
+
# [extensibility](../extensibility.md) for more information.
|
60
66
|
def selectors # property
|
61
67
|
wrap_impl(@impl.selectors)
|
62
68
|
end
|
63
69
|
|
70
|
+
#
|
64
71
|
# This object can be used to launch or connect to WebKit, returning instances of `Browser`.
|
65
72
|
def webkit # property
|
66
73
|
wrap_impl(@impl.webkit)
|
67
74
|
end
|
68
75
|
|
69
|
-
#
|
70
|
-
# REPL applications.
|
76
|
+
#
|
77
|
+
# Terminates this instance of Playwright in case it was created bypassing the Python context manager. This is useful in REPL applications.
|
71
78
|
#
|
72
79
|
# ```py
|
73
80
|
# >>> from playwright.sync_api import sync_playwright
|
@@ -1,4 +1,5 @@
|
|
1
1
|
module Playwright
|
2
|
+
#
|
2
3
|
# Whenever the page sends a request for a network resource the following sequence of events are emitted by `Page`:
|
3
4
|
# - [`event: Page.request`] emitted when the request is issued by the page.
|
4
5
|
# - [`event: Page.response`] emitted when/if the response status and headers are received for the request.
|
@@ -7,20 +8,24 @@ module Playwright
|
|
7
8
|
# If request fails at some point, then instead of `'requestfinished'` event (and possibly instead of 'response' event),
|
8
9
|
# the [`event: Page.requestFailed`] event is emitted.
|
9
10
|
#
|
10
|
-
#
|
11
|
-
#
|
11
|
+
# **NOTE**: HTTP Error responses, such as 404 or 503, are still successful responses from HTTP standpoint, so request will complete
|
12
|
+
# with `'requestfinished'` event.
|
12
13
|
#
|
13
14
|
# If request gets a 'redirect' response, the request is successfully finished with the `requestfinished` event, and a new
|
14
15
|
# request is issued to a redirected url.
|
15
16
|
class Request < PlaywrightApi
|
16
17
|
|
18
|
+
#
|
17
19
|
# An object with all the request HTTP headers associated with this request. The header names are lower-cased.
|
18
20
|
def all_headers
|
19
21
|
wrap_impl(@impl.all_headers)
|
20
22
|
end
|
21
23
|
|
24
|
+
#
|
22
25
|
# The method returns `null` unless this request has failed, as reported by `requestfailed` event.
|
23
26
|
#
|
27
|
+
# **Usage**
|
28
|
+
#
|
24
29
|
# Example of logging of all the failed requests:
|
25
30
|
#
|
26
31
|
# ```py
|
@@ -30,49 +35,58 @@ module Playwright
|
|
30
35
|
wrap_impl(@impl.failure)
|
31
36
|
end
|
32
37
|
|
38
|
+
#
|
33
39
|
# Returns the `Frame` that initiated this request.
|
34
40
|
def frame
|
35
41
|
wrap_impl(@impl.frame)
|
36
42
|
end
|
37
43
|
|
38
|
-
#
|
39
|
-
#
|
40
|
-
#
|
44
|
+
#
|
45
|
+
# An object with the request HTTP headers. The header names are lower-cased.
|
46
|
+
# Note that this method does not return security-related headers, including cookie-related ones.
|
47
|
+
# You can use [`method: Request.allHeaders`] for complete list of headers that include `cookie` information.
|
41
48
|
def headers
|
42
49
|
wrap_impl(@impl.headers)
|
43
50
|
end
|
44
51
|
|
45
|
-
#
|
46
|
-
#
|
52
|
+
#
|
53
|
+
# An array with all the request HTTP headers associated with this request. Unlike [`method: Request.allHeaders`], header names are NOT lower-cased.
|
54
|
+
# Headers with multiple entries, such as `Set-Cookie`, appear in the array multiple times.
|
47
55
|
def headers_array
|
48
56
|
wrap_impl(@impl.headers_array)
|
49
57
|
end
|
50
58
|
|
59
|
+
#
|
51
60
|
# Returns the value of the header matching the name. The name is case insensitive.
|
52
61
|
def header_value(name)
|
53
62
|
wrap_impl(@impl.header_value(unwrap_impl(name)))
|
54
63
|
end
|
55
64
|
|
65
|
+
#
|
56
66
|
# Whether this request is driving frame's navigation.
|
57
67
|
def navigation_request?
|
58
68
|
wrap_impl(@impl.navigation_request?)
|
59
69
|
end
|
60
70
|
|
71
|
+
#
|
61
72
|
# Request's method (GET, POST, etc.)
|
62
73
|
def method
|
63
74
|
wrap_impl(@impl.method)
|
64
75
|
end
|
65
76
|
|
77
|
+
#
|
66
78
|
# Request's post body, if any.
|
67
79
|
def post_data
|
68
80
|
wrap_impl(@impl.post_data)
|
69
81
|
end
|
70
82
|
|
83
|
+
#
|
71
84
|
# Request's post body in a binary form, if any.
|
72
85
|
def post_data_buffer
|
73
86
|
wrap_impl(@impl.post_data_buffer)
|
74
87
|
end
|
75
88
|
|
89
|
+
#
|
76
90
|
# Returns parsed request's body for `form-urlencoded` and JSON as a fallback if any.
|
77
91
|
#
|
78
92
|
# When the response is `application/x-www-form-urlencoded` then a key/value object of the values will be returned.
|
@@ -81,12 +95,15 @@ module Playwright
|
|
81
95
|
wrap_impl(@impl.post_data_json)
|
82
96
|
end
|
83
97
|
|
98
|
+
#
|
84
99
|
# Request that was redirected by the server to this one, if any.
|
85
100
|
#
|
86
101
|
# When the server responds with a redirect, Playwright creates a new `Request` object. The two requests are connected by
|
87
102
|
# `redirectedFrom()` and `redirectedTo()` methods. When multiple server redirects has happened, it is possible to
|
88
103
|
# construct the whole redirect chain by repeatedly calling `redirectedFrom()`.
|
89
104
|
#
|
105
|
+
# **Usage**
|
106
|
+
#
|
90
107
|
# For example, if the website `http://example.com` redirects to `https://example.com`:
|
91
108
|
#
|
92
109
|
# ```python sync
|
@@ -104,8 +121,11 @@ module Playwright
|
|
104
121
|
wrap_impl(@impl.redirected_from)
|
105
122
|
end
|
106
123
|
|
124
|
+
#
|
107
125
|
# New request issued by the browser if the server responded with redirect.
|
108
126
|
#
|
127
|
+
# **Usage**
|
128
|
+
#
|
109
129
|
# This method is the opposite of [`method: Request.redirectedFrom`]:
|
110
130
|
#
|
111
131
|
# ```py
|
@@ -115,6 +135,7 @@ module Playwright
|
|
115
135
|
wrap_impl(@impl.redirected_to)
|
116
136
|
end
|
117
137
|
|
138
|
+
#
|
118
139
|
# Contains the request's resource type as it was perceived by the rendering engine. ResourceType will be one of the
|
119
140
|
# following: `document`, `stylesheet`, `image`, `media`, `font`, `script`, `texttrack`, `xhr`, `fetch`, `eventsource`,
|
120
141
|
# `websocket`, `manifest`, `other`.
|
@@ -122,20 +143,25 @@ module Playwright
|
|
122
143
|
wrap_impl(@impl.resource_type)
|
123
144
|
end
|
124
145
|
|
146
|
+
#
|
125
147
|
# Returns the matching `Response` object, or `null` if the response was not received due to error.
|
126
148
|
def response
|
127
149
|
wrap_impl(@impl.response)
|
128
150
|
end
|
129
151
|
|
152
|
+
#
|
130
153
|
# Returns resource size information for given request.
|
131
154
|
def sizes
|
132
155
|
wrap_impl(@impl.sizes)
|
133
156
|
end
|
134
157
|
|
158
|
+
#
|
135
159
|
# Returns resource timing information for given request. Most of the timing values become available upon the response,
|
136
160
|
# `responseEnd` becomes available when request finishes. Find more information at
|
137
161
|
# [Resource Timing API](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming).
|
138
162
|
#
|
163
|
+
# **Usage**
|
164
|
+
#
|
139
165
|
# ```python sync
|
140
166
|
# with page.expect_event("requestfinished") as request_info:
|
141
167
|
# page.goto("http://example.com")
|
@@ -146,6 +172,7 @@ module Playwright
|
|
146
172
|
wrap_impl(@impl.timing)
|
147
173
|
end
|
148
174
|
|
175
|
+
#
|
149
176
|
# URL of the request.
|
150
177
|
def url
|
151
178
|
wrap_impl(@impl.url)
|
@@ -1,58 +1,67 @@
|
|
1
1
|
module Playwright
|
2
|
+
#
|
2
3
|
# `Response` class represents responses which are received by page.
|
3
4
|
class Response < PlaywrightApi
|
4
5
|
|
6
|
+
#
|
5
7
|
# An object with all the response HTTP headers associated with this response.
|
6
8
|
def all_headers
|
7
9
|
wrap_impl(@impl.all_headers)
|
8
10
|
end
|
9
11
|
|
12
|
+
#
|
10
13
|
# Returns the buffer with response body.
|
11
14
|
def body
|
12
15
|
wrap_impl(@impl.body)
|
13
16
|
end
|
14
17
|
|
18
|
+
#
|
15
19
|
# Waits for this response to finish, returns always `null`.
|
16
20
|
def finished
|
17
21
|
wrap_impl(@impl.finished)
|
18
22
|
end
|
19
23
|
|
24
|
+
#
|
20
25
|
# Returns the `Frame` that initiated this response.
|
21
26
|
def frame
|
22
27
|
wrap_impl(@impl.frame)
|
23
28
|
end
|
24
29
|
|
25
|
-
#
|
26
|
-
# [FetchEvent.respondWith](https://developer.mozilla.org/en-US/docs/Web/API/FetchEvent/respondWith)).
|
30
|
+
#
|
31
|
+
# Indicates whether this Response was fulfilled by a Service Worker's Fetch Handler (i.e. via [FetchEvent.respondWith](https://developer.mozilla.org/en-US/docs/Web/API/FetchEvent/respondWith)).
|
27
32
|
def from_service_worker
|
28
33
|
wrap_impl(@impl.from_service_worker)
|
29
34
|
end
|
30
35
|
|
31
|
-
#
|
32
|
-
#
|
33
|
-
#
|
36
|
+
#
|
37
|
+
# An object with the response HTTP headers. The header names are lower-cased.
|
38
|
+
# Note that this method does not return security-related headers, including cookie-related ones.
|
39
|
+
# You can use [`method: Response.allHeaders`] for complete list of headers that include `cookie` information.
|
34
40
|
def headers
|
35
41
|
wrap_impl(@impl.headers)
|
36
42
|
end
|
37
43
|
|
38
|
-
#
|
39
|
-
#
|
44
|
+
#
|
45
|
+
# An array with all the request HTTP headers associated with this response. Unlike [`method: Response.allHeaders`], header names are NOT lower-cased.
|
46
|
+
# Headers with multiple entries, such as `Set-Cookie`, appear in the array multiple times.
|
40
47
|
def headers_array
|
41
48
|
wrap_impl(@impl.headers_array)
|
42
49
|
end
|
43
50
|
|
44
|
-
#
|
45
|
-
#
|
46
|
-
# no headers are found, `null` is returned.
|
51
|
+
#
|
52
|
+
# Returns the value of the header matching the name. The name is case insensitive. If multiple headers have
|
53
|
+
# the same name (except `set-cookie`), they are returned as a list separated by `, `. For `set-cookie`, the `\n` separator is used. If no headers are found, `null` is returned.
|
47
54
|
def header_value(name)
|
48
55
|
wrap_impl(@impl.header_value(unwrap_impl(name)))
|
49
56
|
end
|
50
57
|
|
58
|
+
#
|
51
59
|
# Returns all values of the headers matching the name, for example `set-cookie`. The name is case insensitive.
|
52
60
|
def header_values(name)
|
53
61
|
wrap_impl(@impl.header_values(unwrap_impl(name)))
|
54
62
|
end
|
55
63
|
|
64
|
+
#
|
56
65
|
# Returns the JSON representation of response body.
|
57
66
|
#
|
58
67
|
# This method will throw if the response body is not parsable via `JSON.parse`.
|
@@ -60,41 +69,49 @@ module Playwright
|
|
60
69
|
wrap_impl(@impl.json)
|
61
70
|
end
|
62
71
|
|
72
|
+
#
|
63
73
|
# Contains a boolean stating whether the response was successful (status in the range 200-299) or not.
|
64
74
|
def ok
|
65
75
|
wrap_impl(@impl.ok)
|
66
76
|
end
|
67
77
|
|
78
|
+
#
|
68
79
|
# Returns the matching `Request` object.
|
69
80
|
def request
|
70
81
|
wrap_impl(@impl.request)
|
71
82
|
end
|
72
83
|
|
84
|
+
#
|
73
85
|
# Returns SSL and other security information.
|
74
86
|
def security_details
|
75
87
|
wrap_impl(@impl.security_details)
|
76
88
|
end
|
77
89
|
|
90
|
+
#
|
78
91
|
# Returns the IP address and port of the server.
|
79
92
|
def server_addr
|
80
93
|
wrap_impl(@impl.server_addr)
|
81
94
|
end
|
82
95
|
|
96
|
+
#
|
83
97
|
# Contains the status code of the response (e.g., 200 for a success).
|
84
98
|
def status
|
85
99
|
wrap_impl(@impl.status)
|
86
100
|
end
|
87
101
|
|
102
|
+
#
|
88
103
|
# Contains the status text of the response (e.g. usually an "OK" for a success).
|
89
104
|
def status_text
|
90
105
|
wrap_impl(@impl.status_text)
|
91
106
|
end
|
92
107
|
|
108
|
+
#
|
93
109
|
# Returns the text representation of response body.
|
94
110
|
def text
|
95
111
|
wrap_impl(@impl.text)
|
96
112
|
end
|
97
113
|
|
114
|
+
#
|
98
115
|
# Contains the URL of the response.
|
99
116
|
def url
|
100
117
|
wrap_impl(@impl.url)
|
data/lib/playwright_api/route.rb
CHANGED
@@ -1,17 +1,22 @@
|
|
1
1
|
module Playwright
|
2
|
+
#
|
2
3
|
# Whenever a network route is set up with [`method: Page.route`] or [`method: BrowserContext.route`], the `Route` object
|
3
4
|
# allows to handle the route.
|
4
5
|
#
|
5
6
|
# Learn more about [networking](../network.md).
|
6
7
|
class Route < PlaywrightApi
|
7
8
|
|
9
|
+
#
|
8
10
|
# Aborts the route's request.
|
9
11
|
def abort(errorCode: nil)
|
10
12
|
wrap_impl(@impl.abort(errorCode: unwrap_impl(errorCode)))
|
11
13
|
end
|
12
14
|
|
15
|
+
#
|
13
16
|
# Continues route's request with optional overrides.
|
14
17
|
#
|
18
|
+
# **Usage**
|
19
|
+
#
|
15
20
|
# ```python sync
|
16
21
|
# def handle(route, request):
|
17
22
|
# # override headers
|
@@ -21,17 +26,20 @@ module Playwright
|
|
21
26
|
# "bar": None # remove "bar" header
|
22
27
|
# }
|
23
28
|
# route.continue_(headers=headers)
|
24
|
-
#
|
29
|
+
#
|
25
30
|
# page.route("**/*", handle)
|
26
31
|
# ```
|
27
32
|
def continue(headers: nil, method: nil, postData: nil, url: nil)
|
28
33
|
wrap_impl(@impl.continue(headers: unwrap_impl(headers), method: unwrap_impl(method), postData: unwrap_impl(postData), url: unwrap_impl(url)))
|
29
34
|
end
|
30
35
|
|
31
|
-
#
|
32
|
-
#
|
33
|
-
#
|
34
|
-
#
|
36
|
+
#
|
37
|
+
# When several routes match the given pattern, they run in the order opposite to their registration.
|
38
|
+
# That way the last registered route can always override all the previous ones. In the example below,
|
39
|
+
# request will be handled by the bottom-most handler first, then it'll fall back to the previous one and
|
40
|
+
# in the end will be aborted by the first registered route.
|
41
|
+
#
|
42
|
+
# **Usage**
|
35
43
|
#
|
36
44
|
# ```python sync
|
37
45
|
# page.route("**/*", lambda route: route.abort()) # Runs last.
|
@@ -39,8 +47,9 @@ module Playwright
|
|
39
47
|
# page.route("**/*", lambda route: route.fallback()) # Runs first.
|
40
48
|
# ```
|
41
49
|
#
|
42
|
-
# Registering multiple routes is useful when you want separate handlers to
|
43
|
-
#
|
50
|
+
# Registering multiple routes is useful when you want separate handlers to
|
51
|
+
# handle different kinds of requests, for example API calls vs page resources or
|
52
|
+
# GET requests vs POST requests as in the example below.
|
44
53
|
#
|
45
54
|
# ```python sync
|
46
55
|
# # Handle GET requests.
|
@@ -63,8 +72,8 @@ module Playwright
|
|
63
72
|
# page.route("**/*", handle_post)
|
64
73
|
# ```
|
65
74
|
#
|
66
|
-
# One can also modify request while falling back to the subsequent handler, that way intermediate
|
67
|
-
# url, method, headers and postData of the request.
|
75
|
+
# One can also modify request while falling back to the subsequent handler, that way intermediate
|
76
|
+
# route handler can modify url, method, headers and postData of the request.
|
68
77
|
#
|
69
78
|
# ```python sync
|
70
79
|
# def handle(route, request):
|
@@ -75,15 +84,37 @@ module Playwright
|
|
75
84
|
# "bar": None # remove "bar" header
|
76
85
|
# }
|
77
86
|
# route.fallback(headers=headers)
|
78
|
-
#
|
87
|
+
#
|
79
88
|
# page.route("**/*", handle)
|
80
89
|
# ```
|
81
90
|
def fallback(headers: nil, method: nil, postData: nil, url: nil)
|
82
91
|
wrap_impl(@impl.fallback(headers: unwrap_impl(headers), method: unwrap_impl(method), postData: unwrap_impl(postData), url: unwrap_impl(url)))
|
83
92
|
end
|
84
93
|
|
94
|
+
#
|
95
|
+
# Performs the request and fetches result without fulfilling it, so that the response
|
96
|
+
# could be modified and then fulfilled.
|
97
|
+
#
|
98
|
+
# **Usage**
|
99
|
+
#
|
100
|
+
# ```python sync
|
101
|
+
# def handle(route):
|
102
|
+
# response = route.fulfill()
|
103
|
+
# json = response.json()
|
104
|
+
# json["message"]["big_red_dog"] = []
|
105
|
+
# route.fulfill(response=response, json=json)
|
106
|
+
#
|
107
|
+
# page.route("https://dog.ceo/api/breeds/list/all", handle)
|
108
|
+
# ```
|
109
|
+
def fetch(headers: nil, method: nil, postData: nil, url: nil)
|
110
|
+
wrap_impl(@impl.fetch(headers: unwrap_impl(headers), method: unwrap_impl(method), postData: unwrap_impl(postData), url: unwrap_impl(url)))
|
111
|
+
end
|
112
|
+
|
113
|
+
#
|
85
114
|
# Fulfills route's request with given response.
|
86
115
|
#
|
116
|
+
# **Usage**
|
117
|
+
#
|
87
118
|
# An example of fulfilling all requests with 404 responses:
|
88
119
|
#
|
89
120
|
# ```python sync
|
@@ -102,12 +133,14 @@ module Playwright
|
|
102
133
|
body: nil,
|
103
134
|
contentType: nil,
|
104
135
|
headers: nil,
|
136
|
+
json: nil,
|
105
137
|
path: nil,
|
106
138
|
response: nil,
|
107
139
|
status: nil)
|
108
|
-
wrap_impl(@impl.fulfill(body: unwrap_impl(body), contentType: unwrap_impl(contentType), headers: unwrap_impl(headers), path: unwrap_impl(path), response: unwrap_impl(response), status: unwrap_impl(status)))
|
140
|
+
wrap_impl(@impl.fulfill(body: unwrap_impl(body), contentType: unwrap_impl(contentType), headers: unwrap_impl(headers), json: unwrap_impl(json), path: unwrap_impl(path), response: unwrap_impl(response), status: unwrap_impl(status)))
|
109
141
|
end
|
110
142
|
|
143
|
+
#
|
111
144
|
# A request to be routed.
|
112
145
|
def request
|
113
146
|
wrap_impl(@impl.request)
|
@@ -1,8 +1,12 @@
|
|
1
1
|
module Playwright
|
2
|
-
#
|
2
|
+
#
|
3
|
+
# Selectors can be used to install custom selector engines. See [extensibility](../extensibility.md) for more
|
3
4
|
# information.
|
4
5
|
class Selectors < PlaywrightApi
|
5
6
|
|
7
|
+
#
|
8
|
+
# **Usage**
|
9
|
+
#
|
6
10
|
# An example of registering selector engine that queries elements based on a tag name:
|
7
11
|
#
|
8
12
|
# ```python sync
|
@@ -43,6 +47,7 @@ module Playwright
|
|
43
47
|
wrap_impl(@impl.register(unwrap_impl(name), contentScript: unwrap_impl(contentScript), path: unwrap_impl(path), script: unwrap_impl(script)))
|
44
48
|
end
|
45
49
|
|
50
|
+
#
|
46
51
|
# Defines custom attribute name to be used in [`method: Page.getByTestId`]. `data-testid` is used by default.
|
47
52
|
def set_test_id_attribute(attributeName)
|
48
53
|
raise NotImplementedError.new('set_test_id_attribute is not implemented yet.')
|
@@ -1,8 +1,10 @@
|
|
1
1
|
module Playwright
|
2
|
+
#
|
2
3
|
# The Touchscreen class operates in main-frame CSS pixels relative to the top-left corner of the viewport. Methods on the
|
3
4
|
# touchscreen can only be used in browser contexts that have been initialized with `hasTouch` set to true.
|
4
5
|
class Touchscreen < PlaywrightApi
|
5
6
|
|
7
|
+
#
|
6
8
|
# Dispatches a `touchstart` and `touchend` event with a single touch at the position (`x`,`y`).
|
7
9
|
def tap_point(x, y)
|
8
10
|
wrap_impl(@impl.tap_point(unwrap_impl(x), unwrap_impl(y)))
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Playwright
|
2
|
-
#
|
3
|
-
# after Playwright script runs.
|
2
|
+
#
|
3
|
+
# API for collecting and saving Playwright traces. Playwright traces can be opened in [Trace Viewer](../trace-viewer.md) after Playwright script runs.
|
4
4
|
#
|
5
5
|
# Start recording a trace before performing actions. At the end, stop tracing and save it to a file.
|
6
6
|
#
|
@@ -14,8 +14,11 @@ module Playwright
|
|
14
14
|
# ```
|
15
15
|
class Tracing < PlaywrightApi
|
16
16
|
|
17
|
+
#
|
17
18
|
# Start tracing.
|
18
19
|
#
|
20
|
+
# **Usage**
|
21
|
+
#
|
19
22
|
# ```python sync
|
20
23
|
# context.tracing.start(name="trace", screenshots=True, snapshots=True)
|
21
24
|
# page = context.new_page()
|
@@ -31,9 +34,10 @@ module Playwright
|
|
31
34
|
wrap_impl(@impl.start(name: unwrap_impl(name), screenshots: unwrap_impl(screenshots), snapshots: unwrap_impl(snapshots), sources: unwrap_impl(sources), title: unwrap_impl(title)))
|
32
35
|
end
|
33
36
|
|
34
|
-
#
|
35
|
-
# [`method: Tracing.start`] once, and then create multiple trace chunks with [`method: Tracing.startChunk`] and
|
36
|
-
#
|
37
|
+
#
|
38
|
+
# Start a new trace chunk. If you'd like to record multiple traces on the same `BrowserContext`, use [`method: Tracing.start`] once, and then create multiple trace chunks with [`method: Tracing.startChunk`] and [`method: Tracing.stopChunk`].
|
39
|
+
#
|
40
|
+
# **Usage**
|
37
41
|
#
|
38
42
|
# ```python sync
|
39
43
|
# context.tracing.start(name="trace", screenshots=True, snapshots=True)
|
@@ -54,11 +58,13 @@ module Playwright
|
|
54
58
|
wrap_impl(@impl.start_chunk(title: unwrap_impl(title)))
|
55
59
|
end
|
56
60
|
|
61
|
+
#
|
57
62
|
# Stop tracing.
|
58
63
|
def stop(path: nil)
|
59
64
|
wrap_impl(@impl.stop(path: unwrap_impl(path)))
|
60
65
|
end
|
61
66
|
|
67
|
+
#
|
62
68
|
# Stop the trace chunk. See [`method: Tracing.startChunk`] for more details about multiple trace chunks.
|
63
69
|
def stop_chunk(path: nil)
|
64
70
|
wrap_impl(@impl.stop_chunk(path: unwrap_impl(path)))
|
@@ -1,28 +1,33 @@
|
|
1
1
|
module Playwright
|
2
|
+
#
|
2
3
|
# The `WebSocket` class represents websocket connections in the page.
|
3
4
|
class WebSocket < PlaywrightApi
|
4
5
|
|
6
|
+
#
|
5
7
|
# Indicates that the web socket has been closed.
|
6
8
|
def closed?
|
7
9
|
wrap_impl(@impl.closed?)
|
8
10
|
end
|
9
11
|
|
12
|
+
#
|
10
13
|
# Contains the URL of the WebSocket.
|
11
14
|
def url
|
12
15
|
wrap_impl(@impl.url)
|
13
16
|
end
|
14
17
|
|
18
|
+
#
|
15
19
|
# Waits for event to fire and passes its value into the predicate function. Returns when the predicate returns truthy
|
16
20
|
# value. Will throw an error if the webSocket is closed before the event is fired. Returns the event data value.
|
17
21
|
def expect_event(event, predicate: nil, timeout: nil, &block)
|
18
22
|
wrap_impl(@impl.expect_event(unwrap_impl(event), predicate: unwrap_impl(predicate), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
|
19
23
|
end
|
20
24
|
|
21
|
-
# > NOTE: In most cases, you should use [`method: WebSocket.waitForEvent`].
|
22
25
|
#
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
26
|
+
# **NOTE**: In most cases, you should use [`method: WebSocket.waitForEvent`].
|
27
|
+
#
|
28
|
+
# Waits for given `event` to fire. If predicate is provided, it passes
|
29
|
+
# event's value into the `predicate` function and waits for `predicate(event)` to return a truthy value.
|
30
|
+
# Will throw an error if the socket is closed before the `event` is fired.
|
26
31
|
def wait_for_event(event, predicate: nil, timeout: nil, &block)
|
27
32
|
wrap_impl(@impl.wait_for_event(unwrap_impl(event), predicate: unwrap_impl(predicate), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
|
28
33
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
module Playwright
|
2
|
+
#
|
2
3
|
# The Worker class represents a [WebWorker](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API). `worker`
|
3
4
|
# event is emitted on the page object to signal a worker creation. `close` event is emitted on the worker object when the
|
4
5
|
# worker is gone.
|
@@ -16,25 +17,27 @@ module Playwright
|
|
16
17
|
# ```
|
17
18
|
class Worker < PlaywrightApi
|
18
19
|
|
20
|
+
#
|
19
21
|
# Returns the return value of `expression`.
|
20
22
|
#
|
21
|
-
# If the function passed to the [`method: Worker.evaluate`] returns a [Promise], then [`method: Worker.evaluate`] would
|
22
|
-
#
|
23
|
+
# If the function passed to the [`method: Worker.evaluate`] returns a [Promise], then [`method: Worker.evaluate`] would wait for the promise
|
24
|
+
# to resolve and return its value.
|
23
25
|
#
|
24
|
-
# If the function passed to the [`method: Worker.evaluate`] returns a non-[Serializable] value, then
|
25
|
-
#
|
26
|
-
# not serializable by `JSON`: `-0`, `NaN`, `Infinity`, `-Infinity`.
|
26
|
+
# If the function passed to the [`method: Worker.evaluate`] returns a non-[Serializable] value, then [`method: Worker.evaluate`] returns `undefined`. Playwright also supports transferring some
|
27
|
+
# additional values that are not serializable by `JSON`: `-0`, `NaN`, `Infinity`, `-Infinity`.
|
27
28
|
def evaluate(expression, arg: nil)
|
28
29
|
wrap_impl(@impl.evaluate(unwrap_impl(expression), arg: unwrap_impl(arg)))
|
29
30
|
end
|
30
31
|
|
32
|
+
#
|
31
33
|
# Returns the return value of `expression` as a `JSHandle`.
|
32
34
|
#
|
33
|
-
# The only difference between [`method: Worker.evaluate`] and
|
34
|
-
# [`method: Worker.evaluateHandle`]
|
35
|
+
# The only difference between [`method: Worker.evaluate`] and
|
36
|
+
# [`method: Worker.evaluateHandle`] is that [`method: Worker.evaluateHandle`]
|
37
|
+
# returns `JSHandle`.
|
35
38
|
#
|
36
|
-
# If the function passed to the [`method: Worker.evaluateHandle`] returns a [Promise], then
|
37
|
-
#
|
39
|
+
# If the function passed to the [`method: Worker.evaluateHandle`] returns a [Promise], then [`method: Worker.evaluateHandle`] would wait for
|
40
|
+
# the promise to resolve and return its value.
|
38
41
|
def evaluate_handle(expression, arg: nil)
|
39
42
|
wrap_impl(@impl.evaluate_handle(unwrap_impl(expression), arg: unwrap_impl(arg)))
|
40
43
|
end
|
@@ -44,13 +47,13 @@ module Playwright
|
|
44
47
|
end
|
45
48
|
|
46
49
|
# @nodoc
|
47
|
-
def
|
48
|
-
wrap_impl(@impl.
|
50
|
+
def page=(req)
|
51
|
+
wrap_impl(@impl.page=(unwrap_impl(req)))
|
49
52
|
end
|
50
53
|
|
51
54
|
# @nodoc
|
52
|
-
def
|
53
|
-
wrap_impl(@impl.
|
55
|
+
def context=(req)
|
56
|
+
wrap_impl(@impl.context=(unwrap_impl(req)))
|
54
57
|
end
|
55
58
|
|
56
59
|
# -- inherited from EventEmitter --
|
data/playwright.gemspec
CHANGED
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.required_ruby_version = '>= 2.4'
|
28
28
|
spec.add_dependency 'concurrent-ruby', '>= 1.1.6'
|
29
29
|
spec.add_dependency 'mime-types', '>= 3.0'
|
30
|
-
spec.add_development_dependency 'bundler'
|
30
|
+
spec.add_development_dependency 'bundler'
|
31
31
|
spec.add_development_dependency 'chunky_png'
|
32
32
|
spec.add_development_dependency 'dry-inflector'
|
33
33
|
spec.add_development_dependency 'faye-websocket'
|