playwright-ruby-client 0.6.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/documentation/README.md +33 -0
- data/documentation/babel.config.js +3 -0
- data/documentation/docs/api/accessibility.md +7 -0
- data/documentation/docs/api/browser.md +185 -0
- data/documentation/docs/api/browser_context.md +398 -0
- data/documentation/docs/api/browser_type.md +105 -0
- data/documentation/docs/api/cdp_session.md +7 -0
- data/documentation/docs/api/console_message.md +41 -0
- data/documentation/docs/api/dialog.md +74 -0
- data/documentation/docs/api/element_handle.md +640 -0
- data/documentation/docs/api/experimental/_category_.yml +3 -0
- data/documentation/docs/api/experimental/android.md +25 -0
- data/documentation/docs/api/experimental/android_device.md +91 -0
- data/documentation/docs/api/experimental/android_input.md +38 -0
- data/documentation/docs/api/experimental/android_socket.md +7 -0
- data/documentation/docs/api/experimental/android_web_view.md +7 -0
- data/documentation/docs/api/file_chooser.md +51 -0
- data/documentation/docs/api/frame.md +867 -0
- data/documentation/docs/api/js_handle.md +116 -0
- data/documentation/docs/api/keyboard.md +157 -0
- data/documentation/docs/api/mouse.md +69 -0
- data/documentation/docs/api/page.md +1469 -0
- data/documentation/docs/api/playwright.md +63 -0
- data/documentation/docs/api/request.md +188 -0
- data/documentation/docs/api/response.md +97 -0
- data/documentation/docs/api/route.md +80 -0
- data/documentation/docs/api/selectors.md +23 -0
- data/documentation/docs/api/touchscreen.md +8 -0
- data/documentation/docs/api/tracing.md +54 -0
- data/documentation/docs/api/web_socket.md +7 -0
- data/documentation/docs/api/worker.md +7 -0
- data/documentation/docs/article/api_coverage.mdx +11 -0
- data/documentation/docs/article/getting_started.md +152 -0
- data/documentation/docs/article/guides/_category_.yml +3 -0
- data/documentation/docs/article/guides/download_playwright_driver.md +49 -0
- data/documentation/docs/article/guides/launch_browser.md +119 -0
- data/documentation/docs/article/guides/rails_integration.md +51 -0
- data/{docs → documentation/docs/include}/api_coverage.md +0 -0
- data/documentation/docusaurus.config.js +107 -0
- data/documentation/package.json +39 -0
- data/documentation/sidebars.js +15 -0
- data/documentation/src/components/HomepageFeatures.js +61 -0
- data/documentation/src/components/HomepageFeatures.module.css +13 -0
- data/documentation/src/css/custom.css +44 -0
- data/documentation/src/pages/index.js +50 -0
- data/documentation/src/pages/index.module.css +41 -0
- data/documentation/src/pages/markdown-page.md +7 -0
- data/documentation/static/.nojekyll +0 -0
- data/documentation/static/img/playwright-logo.svg +9 -0
- data/documentation/static/img/undraw_dropdown_menu.svg +1 -0
- data/documentation/static/img/undraw_web_development.svg +1 -0
- data/documentation/static/img/undraw_windows.svg +1 -0
- data/documentation/yarn.lock +8805 -0
- data/lib/playwright/channel_owners/binding_call.rb +33 -0
- data/lib/playwright/channel_owners/browser_context.rb +2 -2
- data/lib/playwright/channel_owners/element_handle.rb +2 -10
- data/lib/playwright/channel_owners/frame.rb +6 -28
- data/lib/playwright/channel_owners/js_handle.rb +2 -10
- data/lib/playwright/channel_owners/page.rb +10 -1
- data/lib/playwright/input_files.rb +0 -8
- data/lib/playwright/javascript.rb +0 -10
- data/lib/playwright/javascript/expression.rb +2 -7
- data/lib/playwright/version.rb +1 -1
- data/lib/playwright_api/accessibility.rb +7 -89
- data/lib/playwright_api/android.rb +7 -64
- data/lib/playwright_api/android_device.rb +8 -8
- data/lib/playwright_api/browser.rb +15 -169
- data/lib/playwright_api/browser_context.rb +47 -609
- data/lib/playwright_api/browser_type.rb +13 -103
- data/lib/playwright_api/cdp_session.rb +2 -25
- data/lib/playwright_api/console_message.rb +6 -6
- data/lib/playwright_api/dialog.rb +11 -92
- data/lib/playwright_api/element_handle.rb +60 -362
- data/lib/playwright_api/file_chooser.rb +0 -28
- data/lib/playwright_api/frame.rb +74 -713
- data/lib/playwright_api/js_handle.rb +16 -90
- data/lib/playwright_api/keyboard.rb +21 -213
- data/lib/playwright_api/mouse.rb +1 -45
- data/lib/playwright_api/page.rb +155 -1635
- data/lib/playwright_api/playwright.rb +14 -117
- data/lib/playwright_api/request.rb +15 -121
- data/lib/playwright_api/response.rb +9 -9
- data/lib/playwright_api/route.rb +8 -105
- data/lib/playwright_api/selectors.rb +6 -97
- data/lib/playwright_api/tracing.rb +1 -61
- data/lib/playwright_api/web_socket.rb +1 -1
- data/lib/playwright_api/worker.rb +6 -42
- metadata +55 -4
- data/lib/playwright/javascript/function.rb +0 -67
@@ -160,14 +160,20 @@ module Playwright
|
|
160
160
|
raise NotImplementedError.new('web_views is not implemented yet.')
|
161
161
|
end
|
162
162
|
|
163
|
+
# @nodoc
|
164
|
+
def tree
|
165
|
+
wrap_impl(@impl.tree)
|
166
|
+
end
|
167
|
+
|
163
168
|
# @nodoc
|
164
169
|
def tap_on(selector, duration: nil, timeout: nil)
|
165
170
|
wrap_impl(@impl.tap_on(unwrap_impl(selector), duration: unwrap_impl(duration), timeout: unwrap_impl(timeout)))
|
166
171
|
end
|
167
172
|
|
173
|
+
# -- inherited from EventEmitter --
|
168
174
|
# @nodoc
|
169
|
-
def
|
170
|
-
|
175
|
+
def on(event, callback)
|
176
|
+
event_emitter_proxy.on(event, callback)
|
171
177
|
end
|
172
178
|
|
173
179
|
# -- inherited from EventEmitter --
|
@@ -182,12 +188,6 @@ module Playwright
|
|
182
188
|
event_emitter_proxy.once(event, callback)
|
183
189
|
end
|
184
190
|
|
185
|
-
# -- inherited from EventEmitter --
|
186
|
-
# @nodoc
|
187
|
-
def on(event, callback)
|
188
|
-
event_emitter_proxy.on(event, callback)
|
189
|
-
end
|
190
|
-
|
191
191
|
private def event_emitter_proxy
|
192
192
|
@event_emitter_proxy ||= EventEmitterProxy.new(self, @impl)
|
193
193
|
end
|
@@ -1,136 +1,42 @@
|
|
1
1
|
module Playwright
|
2
2
|
# - extends: [EventEmitter]
|
3
|
-
#
|
3
|
+
#
|
4
4
|
# A Browser is created via [`method: BrowserType.launch`]. An example of using a `Browser` to create a `Page`:
|
5
|
-
#
|
6
5
|
#
|
7
|
-
# ```js
|
8
|
-
# const { firefox } = require('playwright'); // Or 'chromium' or 'webkit'.
|
9
|
-
#
|
10
|
-
# (async () => {
|
11
|
-
# const browser = await firefox.launch();
|
12
|
-
# const page = await browser.newPage();
|
13
|
-
# await page.goto('https://example.com');
|
14
|
-
# await browser.close();
|
15
|
-
# })();
|
16
|
-
# ```
|
17
|
-
#
|
18
|
-
# ```java
|
19
|
-
# import com.microsoft.playwright.*;
|
20
|
-
#
|
21
|
-
# public class Example {
|
22
|
-
# public static void main(String[] args) {
|
23
|
-
# try (Playwright playwright = Playwright.create()) {
|
24
|
-
# BrowserType firefox = playwright.firefox()
|
25
|
-
# Browser browser = firefox.launch();
|
26
|
-
# Page page = browser.newPage();
|
27
|
-
# page.navigate('https://example.com');
|
28
|
-
# browser.close();
|
29
|
-
# }
|
30
|
-
# }
|
31
|
-
# }
|
32
|
-
# ```
|
33
|
-
#
|
34
|
-
# ```python async
|
35
|
-
# import asyncio
|
36
|
-
# from playwright.async_api import async_playwright
|
37
|
-
#
|
38
|
-
# async def run(playwright):
|
39
|
-
# firefox = playwright.firefox
|
40
|
-
# browser = await firefox.launch()
|
41
|
-
# page = await browser.new_page()
|
42
|
-
# await page.goto("https://example.com")
|
43
|
-
# await browser.close()
|
44
|
-
#
|
45
|
-
# async def main():
|
46
|
-
# async with async_playwright() as playwright:
|
47
|
-
# await run(playwright)
|
48
|
-
# asyncio.run(main())
|
49
|
-
# ```
|
50
|
-
#
|
51
6
|
# ```python sync
|
52
7
|
# from playwright.sync_api import sync_playwright
|
53
|
-
#
|
8
|
+
#
|
54
9
|
# def run(playwright):
|
55
10
|
# firefox = playwright.firefox
|
56
11
|
# browser = firefox.launch()
|
57
12
|
# page = browser.new_page()
|
58
13
|
# page.goto("https://example.com")
|
59
14
|
# browser.close()
|
60
|
-
#
|
15
|
+
#
|
61
16
|
# with sync_playwright() as playwright:
|
62
17
|
# run(playwright)
|
63
18
|
# ```
|
64
|
-
#
|
65
|
-
# ```csharp
|
66
|
-
# using Microsoft.Playwright;
|
67
|
-
# using System.Threading.Tasks;
|
68
|
-
#
|
69
|
-
# class BrowserExamples
|
70
|
-
# {
|
71
|
-
# public static async Task Main()
|
72
|
-
# {
|
73
|
-
# using var playwright = await Playwright.CreateAsync();
|
74
|
-
# var firefox = playwright.Firefox;
|
75
|
-
# var browser = await firefox.LaunchAsync(headless: false);
|
76
|
-
# var page = await browser.NewPageAsync();
|
77
|
-
# await page.GotoAsync("https://www.bing.com");
|
78
|
-
# await browser.CloseAsync();
|
79
|
-
# }
|
80
|
-
# }
|
81
|
-
# ```
|
82
19
|
class Browser < PlaywrightApi
|
83
20
|
|
84
21
|
# In case this browser is obtained using [`method: BrowserType.launch`], closes the browser and all of its pages (if any
|
85
22
|
# were opened).
|
86
|
-
#
|
23
|
+
#
|
87
24
|
# In case this browser is connected to, clears all created contexts belonging to this browser and disconnects from the
|
88
25
|
# browser server.
|
89
|
-
#
|
26
|
+
#
|
90
27
|
# The `Browser` object itself is considered to be disposed and cannot be used anymore.
|
91
28
|
def close
|
92
29
|
wrap_impl(@impl.close)
|
93
30
|
end
|
94
31
|
|
95
32
|
# Returns an array of all open browser contexts. In a newly created browser, this will return zero browser contexts.
|
96
|
-
#
|
97
33
|
#
|
98
|
-
# ```js
|
99
|
-
# const browser = await pw.webkit.launch();
|
100
|
-
# console.log(browser.contexts().length); // prints `0`
|
101
|
-
#
|
102
|
-
# const context = await browser.newContext();
|
103
|
-
# console.log(browser.contexts().length); // prints `1`
|
104
|
-
# ```
|
105
|
-
#
|
106
|
-
# ```java
|
107
|
-
# Browser browser = pw.webkit().launch();
|
108
|
-
# System.out.println(browser.contexts().size()); // prints "0"
|
109
|
-
# BrowserContext context = browser.newContext();
|
110
|
-
# System.out.println(browser.contexts().size()); // prints "1"
|
111
|
-
# ```
|
112
|
-
#
|
113
|
-
# ```python async
|
114
|
-
# browser = await pw.webkit.launch()
|
115
|
-
# print(len(browser.contexts())) # prints `0`
|
116
|
-
# context = await browser.new_context()
|
117
|
-
# print(len(browser.contexts())) # prints `1`
|
118
|
-
# ```
|
119
|
-
#
|
120
34
|
# ```python sync
|
121
35
|
# browser = pw.webkit.launch()
|
122
36
|
# print(len(browser.contexts())) # prints `0`
|
123
37
|
# context = browser.new_context()
|
124
38
|
# print(len(browser.contexts())) # prints `1`
|
125
39
|
# ```
|
126
|
-
#
|
127
|
-
# ```csharp
|
128
|
-
# using var playwright = await Playwright.CreateAsync();
|
129
|
-
# var browser = await playwright.Webkit.LaunchAsync();
|
130
|
-
# System.Console.WriteLine(browser.Contexts.Count); // prints "0"
|
131
|
-
# var context = await browser.NewContextAsync();
|
132
|
-
# System.Console.WriteLine(browser.Contexts.Count); // prints "1"
|
133
|
-
# ```
|
134
40
|
def contexts
|
135
41
|
wrap_impl(@impl.contexts)
|
136
42
|
end
|
@@ -141,44 +47,14 @@ module Playwright
|
|
141
47
|
end
|
142
48
|
|
143
49
|
# > NOTE: CDP Sessions are only supported on Chromium-based browsers.
|
144
|
-
#
|
50
|
+
#
|
145
51
|
# Returns the newly created browser session.
|
146
52
|
def new_browser_cdp_session
|
147
53
|
raise NotImplementedError.new('new_browser_cdp_session is not implemented yet.')
|
148
54
|
end
|
149
55
|
|
150
56
|
# Creates a new browser context. It won't share cookies/cache with other browser contexts.
|
151
|
-
#
|
152
57
|
#
|
153
|
-
# ```js
|
154
|
-
# (async () => {
|
155
|
-
# const browser = await playwright.firefox.launch(); // Or 'chromium' or 'webkit'.
|
156
|
-
# // Create a new incognito browser context.
|
157
|
-
# const context = await browser.newContext();
|
158
|
-
# // Create a new page in a pristine context.
|
159
|
-
# const page = await context.newPage();
|
160
|
-
# await page.goto('https://example.com');
|
161
|
-
# })();
|
162
|
-
# ```
|
163
|
-
#
|
164
|
-
# ```java
|
165
|
-
# Browser browser = playwright.firefox().launch(); // Or 'chromium' or 'webkit'.
|
166
|
-
# // Create a new incognito browser context.
|
167
|
-
# BrowserContext context = browser.newContext();
|
168
|
-
# // Create a new page in a pristine context.
|
169
|
-
# Page page = context.newPage();
|
170
|
-
# page.navigate('https://example.com');
|
171
|
-
# ```
|
172
|
-
#
|
173
|
-
# ```python async
|
174
|
-
# browser = await playwright.firefox.launch() # or "chromium" or "webkit".
|
175
|
-
# # create a new incognito browser context.
|
176
|
-
# context = await browser.new_context()
|
177
|
-
# # create a new page in a pristine context.
|
178
|
-
# page = await context.new_page()
|
179
|
-
# await page.goto("https://example.com")
|
180
|
-
# ```
|
181
|
-
#
|
182
58
|
# ```python sync
|
183
59
|
# browser = playwright.firefox.launch() # or "chromium" or "webkit".
|
184
60
|
# # create a new incognito browser context.
|
@@ -187,16 +63,6 @@ module Playwright
|
|
187
63
|
# page = context.new_page()
|
188
64
|
# page.goto("https://example.com")
|
189
65
|
# ```
|
190
|
-
#
|
191
|
-
# ```csharp
|
192
|
-
# using var playwright = await Playwright.CreateAsync();
|
193
|
-
# var browser = await playwright.Firefox.LaunchAsync();
|
194
|
-
# // Create a new incognito browser context.
|
195
|
-
# var context = await browser.NewContextAsync();
|
196
|
-
# // Create a new page in a pristine context.
|
197
|
-
# var page = await context.NewPageAsync(); ;
|
198
|
-
# await page.GotoAsync("https://www.bing.com");
|
199
|
-
# ```
|
200
66
|
def new_context(
|
201
67
|
acceptDownloads: nil,
|
202
68
|
bypassCSP: nil,
|
@@ -228,7 +94,7 @@ module Playwright
|
|
228
94
|
end
|
229
95
|
|
230
96
|
# Creates a new page in a new browser context. Closing this page will close the context as well.
|
231
|
-
#
|
97
|
+
#
|
232
98
|
# This is a convenience API that should only be used for the single-page scenarios and short snippets. Production code and
|
233
99
|
# testing frameworks should explicitly create [`method: Browser.newContext`] followed by the
|
234
100
|
# [`method: BrowserContext.newPage`] to control their exact life times.
|
@@ -262,30 +128,10 @@ module Playwright
|
|
262
128
|
end
|
263
129
|
|
264
130
|
# > NOTE: Tracing is only supported on Chromium-based browsers.
|
265
|
-
#
|
131
|
+
#
|
266
132
|
# You can use [`method: Browser.startTracing`] and [`method: Browser.stopTracing`] to create a trace file that can be
|
267
133
|
# opened in Chrome DevTools performance panel.
|
268
|
-
#
|
269
134
|
#
|
270
|
-
# ```js
|
271
|
-
# await browser.startTracing(page, {path: 'trace.json'});
|
272
|
-
# await page.goto('https://www.google.com');
|
273
|
-
# await browser.stopTracing();
|
274
|
-
# ```
|
275
|
-
#
|
276
|
-
# ```java
|
277
|
-
# browser.startTracing(page, new Browser.StartTracingOptions()
|
278
|
-
# .setPath(Paths.get("trace.json")));
|
279
|
-
# page.goto('https://www.google.com');
|
280
|
-
# browser.stopTracing();
|
281
|
-
# ```
|
282
|
-
#
|
283
|
-
# ```python async
|
284
|
-
# await browser.start_tracing(page, path="trace.json")
|
285
|
-
# await page.goto("https://www.google.com")
|
286
|
-
# await browser.stop_tracing()
|
287
|
-
# ```
|
288
|
-
#
|
289
135
|
# ```python sync
|
290
136
|
# browser.start_tracing(page, path="trace.json")
|
291
137
|
# page.goto("https://www.google.com")
|
@@ -296,7 +142,7 @@ module Playwright
|
|
296
142
|
end
|
297
143
|
|
298
144
|
# > NOTE: Tracing is only supported on Chromium-based browsers.
|
299
|
-
#
|
145
|
+
#
|
300
146
|
# Returns the buffer with trace data.
|
301
147
|
def stop_tracing
|
302
148
|
wrap_impl(@impl.stop_tracing)
|
@@ -309,20 +155,20 @@ module Playwright
|
|
309
155
|
|
310
156
|
# -- inherited from EventEmitter --
|
311
157
|
# @nodoc
|
312
|
-
def
|
313
|
-
event_emitter_proxy.
|
158
|
+
def on(event, callback)
|
159
|
+
event_emitter_proxy.on(event, callback)
|
314
160
|
end
|
315
161
|
|
316
162
|
# -- inherited from EventEmitter --
|
317
163
|
# @nodoc
|
318
|
-
def
|
319
|
-
event_emitter_proxy.
|
164
|
+
def off(event, callback)
|
165
|
+
event_emitter_proxy.off(event, callback)
|
320
166
|
end
|
321
167
|
|
322
168
|
# -- inherited from EventEmitter --
|
323
169
|
# @nodoc
|
324
|
-
def
|
325
|
-
event_emitter_proxy.
|
170
|
+
def once(event, callback)
|
171
|
+
event_emitter_proxy.once(event, callback)
|
326
172
|
end
|
327
173
|
|
328
174
|
private def event_emitter_proxy
|
@@ -1,45 +1,14 @@
|
|
1
1
|
module Playwright
|
2
2
|
# - extends: [EventEmitter]
|
3
|
-
#
|
3
|
+
#
|
4
4
|
# BrowserContexts provide a way to operate multiple independent browser sessions.
|
5
|
-
#
|
5
|
+
#
|
6
6
|
# If a page opens another page, e.g. with a `window.open` call, the popup will belong to the parent page's browser
|
7
7
|
# context.
|
8
|
-
#
|
8
|
+
#
|
9
9
|
# Playwright allows creation of "incognito" browser contexts with `browser.newContext()` method. "Incognito" browser
|
10
10
|
# contexts don't write any browsing data to disk.
|
11
|
-
#
|
12
11
|
#
|
13
|
-
# ```js
|
14
|
-
# // Create a new incognito browser context
|
15
|
-
# const context = await browser.newContext();
|
16
|
-
# // Create a new page inside context.
|
17
|
-
# const page = await context.newPage();
|
18
|
-
# await page.goto('https://example.com');
|
19
|
-
# // Dispose context once it's no longer needed.
|
20
|
-
# await context.close();
|
21
|
-
# ```
|
22
|
-
#
|
23
|
-
# ```java
|
24
|
-
# // Create a new incognito browser context
|
25
|
-
# BrowserContext context = browser.newContext();
|
26
|
-
# // Create a new page inside context.
|
27
|
-
# Page page = context.newPage();
|
28
|
-
# page.navigate("https://example.com");
|
29
|
-
# // Dispose context once it is no longer needed.
|
30
|
-
# context.close();
|
31
|
-
# ```
|
32
|
-
#
|
33
|
-
# ```python async
|
34
|
-
# # create a new incognito browser context
|
35
|
-
# context = await browser.new_context()
|
36
|
-
# # create a new page inside context.
|
37
|
-
# page = await context.new_page()
|
38
|
-
# await page.goto("https://example.com")
|
39
|
-
# # dispose context once it is no longer needed.
|
40
|
-
# await context.close()
|
41
|
-
# ```
|
42
|
-
#
|
43
12
|
# ```python sync
|
44
13
|
# # create a new incognito browser context
|
45
14
|
# context = browser.new_context()
|
@@ -49,18 +18,6 @@ module Playwright
|
|
49
18
|
# # dispose context once it is no longer needed.
|
50
19
|
# context.close()
|
51
20
|
# ```
|
52
|
-
#
|
53
|
-
# ```csharp
|
54
|
-
# using var playwright = await Playwright.CreateAsync();
|
55
|
-
# var browser = await playwright.Firefox.LaunchAsync(headless: false);
|
56
|
-
# // Create a new incognito browser context
|
57
|
-
# var context = await browser.NewContextAsync();
|
58
|
-
# // Create a new page inside context.
|
59
|
-
# var page = await context.NewPageAsync();
|
60
|
-
# await page.GotoAsync("https://bing.com");
|
61
|
-
# // Dispose context once it is no longer needed.
|
62
|
-
# await context.CloseAsync();
|
63
|
-
# ```
|
64
21
|
class BrowserContext < PlaywrightApi
|
65
22
|
|
66
23
|
def tracing # property
|
@@ -69,27 +26,10 @@ module Playwright
|
|
69
26
|
|
70
27
|
# Adds cookies into this browser context. All pages within this context will have these cookies installed. Cookies can be
|
71
28
|
# obtained via [`method: BrowserContext.cookies`].
|
72
|
-
#
|
73
29
|
#
|
74
|
-
# ```js
|
75
|
-
# await browserContext.addCookies([cookieObject1, cookieObject2]);
|
76
|
-
# ```
|
77
|
-
#
|
78
|
-
# ```java
|
79
|
-
# browserContext.addCookies(Arrays.asList(cookieObject1, cookieObject2));
|
80
|
-
# ```
|
81
|
-
#
|
82
|
-
# ```python async
|
83
|
-
# await browser_context.add_cookies([cookie_object1, cookie_object2])
|
84
|
-
# ```
|
85
|
-
#
|
86
30
|
# ```python sync
|
87
31
|
# browser_context.add_cookies([cookie_object1, cookie_object2])
|
88
32
|
# ```
|
89
|
-
#
|
90
|
-
# ```csharp
|
91
|
-
# await context.AddCookiesAsync(new[] { cookie1, cookie2 });
|
92
|
-
# ```
|
93
33
|
def add_cookies(cookies)
|
94
34
|
wrap_impl(@impl.add_cookies(unwrap_impl(cookies)))
|
95
35
|
end
|
@@ -98,45 +38,17 @@ module Playwright
|
|
98
38
|
# - Whenever a page is created in the browser context or is navigated.
|
99
39
|
# - Whenever a child frame is attached or navigated in any page in the browser context. In this case, the script is
|
100
40
|
# evaluated in the context of the newly attached frame.
|
101
|
-
#
|
41
|
+
#
|
102
42
|
# The script is evaluated after the document was created but before any of its scripts were run. This is useful to amend
|
103
43
|
# the JavaScript environment, e.g. to seed `Math.random`.
|
104
|
-
#
|
105
|
-
# An example of overriding `Math.random` before the page loads:
|
106
|
-
#
|
107
44
|
#
|
108
|
-
#
|
109
|
-
# // preload.js
|
110
|
-
# Math.random = () => 42;
|
111
|
-
# ```
|
112
|
-
#
|
45
|
+
# An example of overriding `Math.random` before the page loads:
|
113
46
|
#
|
114
|
-
# ```js
|
115
|
-
# // In your playwright script, assuming the preload.js file is in same directory.
|
116
|
-
# await browserContext.addInitScript({
|
117
|
-
# path: 'preload.js'
|
118
|
-
# });
|
119
|
-
# ```
|
120
|
-
#
|
121
|
-
# ```java
|
122
|
-
# // In your playwright script, assuming the preload.js file is in same directory.
|
123
|
-
# browserContext.addInitScript(Paths.get("preload.js"));
|
124
|
-
# ```
|
125
|
-
#
|
126
|
-
# ```python async
|
127
|
-
# # in your playwright script, assuming the preload.js file is in same directory.
|
128
|
-
# await browser_context.add_init_script(path="preload.js")
|
129
|
-
# ```
|
130
|
-
#
|
131
47
|
# ```python sync
|
132
48
|
# # in your playwright script, assuming the preload.js file is in same directory.
|
133
49
|
# browser_context.add_init_script(path="preload.js")
|
134
50
|
# ```
|
135
|
-
#
|
136
|
-
# ```csharp
|
137
|
-
# await context.AddInitScriptAsync(scriptPath: "preload.js");
|
138
|
-
# ```
|
139
|
-
#
|
51
|
+
#
|
140
52
|
# > NOTE: The order of evaluation of multiple scripts installed via [`method: BrowserContext.addInitScript`] and
|
141
53
|
# [`method: Page.addInitScript`] is not defined.
|
142
54
|
def add_init_script(path: nil, script: nil)
|
@@ -144,7 +56,7 @@ module Playwright
|
|
144
56
|
end
|
145
57
|
|
146
58
|
# > NOTE: Background pages are only supported on Chromium-based browsers.
|
147
|
-
#
|
59
|
+
#
|
148
60
|
# All existing background pages in the context.
|
149
61
|
def background_pages
|
150
62
|
raise NotImplementedError.new('background_pages is not implemented yet.')
|
@@ -161,50 +73,19 @@ module Playwright
|
|
161
73
|
end
|
162
74
|
|
163
75
|
# Clears all permission overrides for the browser context.
|
164
|
-
#
|
165
76
|
#
|
166
|
-
# ```js
|
167
|
-
# const context = await browser.newContext();
|
168
|
-
# await context.grantPermissions(['clipboard-read']);
|
169
|
-
# // do stuff ..
|
170
|
-
# context.clearPermissions();
|
171
|
-
# ```
|
172
|
-
#
|
173
|
-
# ```java
|
174
|
-
# BrowserContext context = browser.newContext();
|
175
|
-
# context.grantPermissions(Arrays.asList("clipboard-read"));
|
176
|
-
# // do stuff ..
|
177
|
-
# context.clearPermissions();
|
178
|
-
# ```
|
179
|
-
#
|
180
|
-
# ```python async
|
181
|
-
# context = await browser.new_context()
|
182
|
-
# await context.grant_permissions(["clipboard-read"])
|
183
|
-
# # do stuff ..
|
184
|
-
# context.clear_permissions()
|
185
|
-
# ```
|
186
|
-
#
|
187
77
|
# ```python sync
|
188
78
|
# context = browser.new_context()
|
189
79
|
# context.grant_permissions(["clipboard-read"])
|
190
80
|
# # do stuff ..
|
191
81
|
# context.clear_permissions()
|
192
82
|
# ```
|
193
|
-
#
|
194
|
-
# ```csharp
|
195
|
-
# var context = await browser.NewContextAsync();
|
196
|
-
# await context.GrantPermissionsAsync(new[] { "clipboard-read" });
|
197
|
-
# // Alternatively, you can use the helper class ContextPermissions
|
198
|
-
# // to specify the permissions...
|
199
|
-
# // do stuff ...
|
200
|
-
# await context.ClearPermissionsAsync();
|
201
|
-
# ```
|
202
83
|
def clear_permissions
|
203
84
|
wrap_impl(@impl.clear_permissions)
|
204
85
|
end
|
205
86
|
|
206
87
|
# Closes the browser context. All the pages that belong to the browser context will be closed.
|
207
|
-
#
|
88
|
+
#
|
208
89
|
# > NOTE: The default browser context cannot be closed.
|
209
90
|
def close
|
210
91
|
wrap_impl(@impl.close)
|
@@ -219,90 +100,17 @@ module Playwright
|
|
219
100
|
# The method adds a function called `name` on the `window` object of every frame in every page in the context. When
|
220
101
|
# called, the function executes `callback` and returns a [Promise] which resolves to the return value of `callback`. If
|
221
102
|
# the `callback` returns a [Promise], it will be awaited.
|
222
|
-
#
|
103
|
+
#
|
223
104
|
# The first argument of the `callback` function contains information about the caller: `{ browserContext: BrowserContext,
|
224
105
|
# page: Page, frame: Frame }`.
|
225
|
-
#
|
106
|
+
#
|
226
107
|
# See [`method: Page.exposeBinding`] for page-only version.
|
227
|
-
#
|
108
|
+
#
|
228
109
|
# An example of exposing page URL to all frames in all pages in the context:
|
229
|
-
#
|
230
|
-
#
|
231
|
-
# ```js
|
232
|
-
# const { webkit } = require('playwright'); // Or 'chromium' or 'firefox'.
|
233
|
-
#
|
234
|
-
# (async () => {
|
235
|
-
# const browser = await webkit.launch({ headless: false });
|
236
|
-
# const context = await browser.newContext();
|
237
|
-
# await context.exposeBinding('pageURL', ({ page }) => page.url());
|
238
|
-
# const page = await context.newPage();
|
239
|
-
# await page.setContent(`
|
240
|
-
# <script>
|
241
|
-
# async function onClick() {
|
242
|
-
# document.querySelector('div').textContent = await window.pageURL();
|
243
|
-
# }
|
244
|
-
# </script>
|
245
|
-
# <button onclick="onClick()">Click me</button>
|
246
|
-
# <div></div>
|
247
|
-
# `);
|
248
|
-
# await page.click('button');
|
249
|
-
# })();
|
250
|
-
# ```
|
251
|
-
#
|
252
|
-
# ```java
|
253
|
-
# import com.microsoft.playwright.*;
|
254
|
-
#
|
255
|
-
# public class Example {
|
256
|
-
# public static void main(String[] args) {
|
257
|
-
# try (Playwright playwright = Playwright.create()) {
|
258
|
-
# BrowserType webkit = playwright.webkit()
|
259
|
-
# Browser browser = webkit.launch(new BrowserType.LaunchOptions().setHeadless(false));
|
260
|
-
# BrowserContext context = browser.newContext();
|
261
|
-
# context.exposeBinding("pageURL", (source, args) -> source.page().url());
|
262
|
-
# Page page = context.newPage();
|
263
|
-
# page.setContent("<script>\n" +
|
264
|
-
# " async function onClick() {\n" +
|
265
|
-
# " document.querySelector('div').textContent = await window.pageURL();\n" +
|
266
|
-
# " }\n" +
|
267
|
-
# "</script>\n" +
|
268
|
-
# "<button onclick=\"onClick()\">Click me</button>\n" +
|
269
|
-
# "<div></div>");
|
270
|
-
# page.click("button");
|
271
|
-
# }
|
272
|
-
# }
|
273
|
-
# }
|
274
|
-
# ```
|
275
|
-
#
|
276
|
-
# ```python async
|
277
|
-
# import asyncio
|
278
|
-
# from playwright.async_api import async_playwright
|
279
|
-
#
|
280
|
-
# async def run(playwright):
|
281
|
-
# webkit = playwright.webkit
|
282
|
-
# browser = await webkit.launch(headless=false)
|
283
|
-
# context = await browser.new_context()
|
284
|
-
# await context.expose_binding("pageURL", lambda source: source["page"].url)
|
285
|
-
# page = await context.new_page()
|
286
|
-
# await page.set_content("""
|
287
|
-
# <script>
|
288
|
-
# async function onClick() {
|
289
|
-
# document.querySelector('div').textContent = await window.pageURL();
|
290
|
-
# }
|
291
|
-
# </script>
|
292
|
-
# <button onclick="onClick()">Click me</button>
|
293
|
-
# <div></div>
|
294
|
-
# """)
|
295
|
-
# await page.click("button")
|
296
|
-
#
|
297
|
-
# async def main():
|
298
|
-
# async with async_playwright() as playwright:
|
299
|
-
# await run(playwright)
|
300
|
-
# asyncio.run(main())
|
301
|
-
# ```
|
302
|
-
#
|
110
|
+
#
|
303
111
|
# ```python sync
|
304
112
|
# from playwright.sync_api import sync_playwright
|
305
|
-
#
|
113
|
+
#
|
306
114
|
# def run(playwright):
|
307
115
|
# webkit = playwright.webkit
|
308
116
|
# browser = webkit.launch(headless=false)
|
@@ -319,85 +127,17 @@ module Playwright
|
|
319
127
|
# <div></div>
|
320
128
|
# """)
|
321
129
|
# page.click("button")
|
322
|
-
#
|
130
|
+
#
|
323
131
|
# with sync_playwright() as playwright:
|
324
132
|
# run(playwright)
|
325
133
|
# ```
|
326
|
-
#
|
327
|
-
# ```csharp
|
328
|
-
# using Microsoft.Playwright;
|
329
|
-
# using System.Threading.Tasks;
|
330
|
-
#
|
331
|
-
# class Program
|
332
|
-
# {
|
333
|
-
# public static async Task Main()
|
334
|
-
# {
|
335
|
-
# using var playwright = await Playwright.CreateAsync();
|
336
|
-
# var browser = await playwright.Webkit.LaunchAsync(headless: false);
|
337
|
-
# var context = await browser.NewContextAsync();
|
338
|
-
#
|
339
|
-
# await context.ExposeBindingAsync("pageURL", source => source.Page.Url);
|
340
|
-
# var page = await context.NewPageAsync();
|
341
|
-
# await page.SetContentAsync("<script>\n" +
|
342
|
-
# " async function onClick() {\n" +
|
343
|
-
# " document.querySelector('div').textContent = await window.pageURL();\n" +
|
344
|
-
# " }\n" +
|
345
|
-
# "</script>\n" +
|
346
|
-
# "<button onclick=\"onClick()\">Click me</button>\n" +
|
347
|
-
# "<div></div>");
|
348
|
-
# await page.ClickAsync("button");
|
349
|
-
# }
|
350
|
-
# }
|
351
|
-
# ```
|
352
|
-
#
|
134
|
+
#
|
353
135
|
# An example of passing an element handle:
|
354
|
-
#
|
355
136
|
#
|
356
|
-
# ```js
|
357
|
-
# await context.exposeBinding('clicked', async (source, element) => {
|
358
|
-
# console.log(await element.textContent());
|
359
|
-
# }, { handle: true });
|
360
|
-
# await page.setContent(`
|
361
|
-
# <script>
|
362
|
-
# document.addEventListener('click', event => window.clicked(event.target));
|
363
|
-
# </script>
|
364
|
-
# <div>Click me</div>
|
365
|
-
# <div>Or click me</div>
|
366
|
-
# `);
|
367
|
-
# ```
|
368
|
-
#
|
369
|
-
# ```java
|
370
|
-
# context.exposeBinding("clicked", (source, args) -> {
|
371
|
-
# ElementHandle element = (ElementHandle) args[0];
|
372
|
-
# System.out.println(element.textContent());
|
373
|
-
# return null;
|
374
|
-
# }, new BrowserContext.ExposeBindingOptions().setHandle(true));
|
375
|
-
# page.setContent("" +
|
376
|
-
# "<script>\n" +
|
377
|
-
# " document.addEventListener('click', event => window.clicked(event.target));\n" +
|
378
|
-
# "</script>\n" +
|
379
|
-
# "<div>Click me</div>\n" +
|
380
|
-
# "<div>Or click me</div>\n");
|
381
|
-
# ```
|
382
|
-
#
|
383
|
-
# ```python async
|
384
|
-
# async def print(source, element):
|
385
|
-
# print(await element.text_content())
|
386
|
-
#
|
387
|
-
# await context.expose_binding("clicked", print, handle=true)
|
388
|
-
# await page.set_content("""
|
389
|
-
# <script>
|
390
|
-
# document.addEventListener('click', event => window.clicked(event.target));
|
391
|
-
# </script>
|
392
|
-
# <div>Click me</div>
|
393
|
-
# <div>Or click me</div>
|
394
|
-
# """)
|
395
|
-
# ```
|
396
|
-
#
|
397
137
|
# ```python sync
|
398
138
|
# def print(source, element):
|
399
139
|
# print(element.text_content())
|
400
|
-
#
|
140
|
+
#
|
401
141
|
# context.expose_binding("clicked", print, handle=true)
|
402
142
|
# page.set_content("""
|
403
143
|
# <script>
|
@@ -407,144 +147,29 @@ module Playwright
|
|
407
147
|
# <div>Or click me</div>
|
408
148
|
# """)
|
409
149
|
# ```
|
410
|
-
#
|
411
|
-
# ```csharp
|
412
|
-
# var result = new TaskCompletionSource<string>();
|
413
|
-
# var page = await Context.NewPageAsync();
|
414
|
-
# await Context.ExposeBindingAsync("clicked", async (BindingSource _, IJSHandle t) =>
|
415
|
-
# {
|
416
|
-
# return result.TrySetResult(await t.AsElement.TextContentAsync());
|
417
|
-
# });
|
418
|
-
#
|
419
|
-
# await page.SetContentAsync("<script>\n" +
|
420
|
-
# " document.addEventListener('click', event => window.clicked(event.target));\n" +
|
421
|
-
# "</script>\n" +
|
422
|
-
# "<div>Click me</div>\n" +
|
423
|
-
# "<div>Or click me</div>\n");
|
424
|
-
#
|
425
|
-
# await page.ClickAsync("div");
|
426
|
-
# // Note: it makes sense to await the result here, because otherwise, the context
|
427
|
-
# // gets closed and the binding function will throw an exception.
|
428
|
-
# Assert.Equal("Click me", await result.Task);
|
429
|
-
# ```
|
430
150
|
def expose_binding(name, callback, handle: nil)
|
431
151
|
wrap_impl(@impl.expose_binding(unwrap_impl(name), unwrap_impl(callback), handle: unwrap_impl(handle)))
|
432
152
|
end
|
433
153
|
|
434
154
|
# The method adds a function called `name` on the `window` object of every frame in every page in the context. When
|
435
155
|
# called, the function executes `callback` and returns a [Promise] which resolves to the return value of `callback`.
|
436
|
-
#
|
156
|
+
#
|
437
157
|
# If the `callback` returns a [Promise], it will be awaited.
|
438
|
-
#
|
158
|
+
#
|
439
159
|
# See [`method: Page.exposeFunction`] for page-only version.
|
440
|
-
#
|
160
|
+
#
|
441
161
|
# An example of adding an `md5` function to all pages in the context:
|
442
|
-
#
|
443
|
-
#
|
444
|
-
# ```js
|
445
|
-
# const { webkit } = require('playwright'); // Or 'chromium' or 'firefox'.
|
446
|
-
# const crypto = require('crypto');
|
447
|
-
#
|
448
|
-
# (async () => {
|
449
|
-
# const browser = await webkit.launch({ headless: false });
|
450
|
-
# const context = await browser.newContext();
|
451
|
-
# await context.exposeFunction('md5', text => crypto.createHash('md5').update(text).digest('hex'));
|
452
|
-
# const page = await context.newPage();
|
453
|
-
# await page.setContent(`
|
454
|
-
# <script>
|
455
|
-
# async function onClick() {
|
456
|
-
# document.querySelector('div').textContent = await window.md5('PLAYWRIGHT');
|
457
|
-
# }
|
458
|
-
# </script>
|
459
|
-
# <button onclick="onClick()">Click me</button>
|
460
|
-
# <div></div>
|
461
|
-
# `);
|
462
|
-
# await page.click('button');
|
463
|
-
# })();
|
464
|
-
# ```
|
465
|
-
#
|
466
|
-
# ```java
|
467
|
-
# import com.microsoft.playwright.*;
|
468
|
-
#
|
469
|
-
# import java.nio.charset.StandardCharsets;
|
470
|
-
# import java.security.MessageDigest;
|
471
|
-
# import java.security.NoSuchAlgorithmException;
|
472
|
-
# import java.util.Base64;
|
473
|
-
#
|
474
|
-
# public class Example {
|
475
|
-
# public static void main(String[] args) {
|
476
|
-
# try (Playwright playwright = Playwright.create()) {
|
477
|
-
# BrowserType webkit = playwright.webkit()
|
478
|
-
# Browser browser = webkit.launch(new BrowserType.LaunchOptions().setHeadless(false));
|
479
|
-
# context.exposeFunction("sha1", args -> {
|
480
|
-
# String text = (String) args[0];
|
481
|
-
# MessageDigest crypto;
|
482
|
-
# try {
|
483
|
-
# crypto = MessageDigest.getInstance("SHA-1");
|
484
|
-
# } catch (NoSuchAlgorithmException e) {
|
485
|
-
# return null;
|
486
|
-
# }
|
487
|
-
# byte[] token = crypto.digest(text.getBytes(StandardCharsets.UTF_8));
|
488
|
-
# return Base64.getEncoder().encodeToString(token);
|
489
|
-
# });
|
490
|
-
# Page page = context.newPage();
|
491
|
-
# page.setContent("<script>\n" +
|
492
|
-
# " async function onClick() {\n" +
|
493
|
-
# " document.querySelector('div').textContent = await window.sha1('PLAYWRIGHT');\n" +
|
494
|
-
# " }\n" +
|
495
|
-
# "</script>\n" +
|
496
|
-
# "<button onclick=\"onClick()\">Click me</button>\n" +
|
497
|
-
# "<div></div>\n");
|
498
|
-
# page.click("button");
|
499
|
-
# }
|
500
|
-
# }
|
501
|
-
# }
|
502
|
-
# ```
|
503
|
-
#
|
504
|
-
# ```python async
|
505
|
-
# import asyncio
|
506
|
-
# import hashlib
|
507
|
-
# from playwright.async_api import async_playwright
|
508
|
-
#
|
509
|
-
# async def sha1(text):
|
510
|
-
# m = hashlib.sha1()
|
511
|
-
# m.update(bytes(text, "utf8"))
|
512
|
-
# return m.hexdigest()
|
513
|
-
#
|
514
|
-
#
|
515
|
-
# async def run(playwright):
|
516
|
-
# webkit = playwright.webkit
|
517
|
-
# browser = await webkit.launch(headless=False)
|
518
|
-
# context = await browser.new_context()
|
519
|
-
# await context.expose_function("sha1", sha1)
|
520
|
-
# page = await context.new_page()
|
521
|
-
# await page.set_content("""
|
522
|
-
# <script>
|
523
|
-
# async function onClick() {
|
524
|
-
# document.querySelector('div').textContent = await window.sha1('PLAYWRIGHT');
|
525
|
-
# }
|
526
|
-
# </script>
|
527
|
-
# <button onclick="onClick()">Click me</button>
|
528
|
-
# <div></div>
|
529
|
-
# """)
|
530
|
-
# await page.click("button")
|
531
|
-
#
|
532
|
-
# async def main():
|
533
|
-
# async with async_playwright() as playwright:
|
534
|
-
# await run(playwright)
|
535
|
-
# asyncio.run(main())
|
536
|
-
# ```
|
537
|
-
#
|
162
|
+
#
|
538
163
|
# ```python sync
|
539
164
|
# import hashlib
|
540
165
|
# from playwright.sync_api import sync_playwright
|
541
|
-
#
|
166
|
+
#
|
542
167
|
# def sha1(text):
|
543
168
|
# m = hashlib.sha1()
|
544
169
|
# m.update(bytes(text, "utf8"))
|
545
170
|
# return m.hexdigest()
|
546
|
-
#
|
547
|
-
#
|
171
|
+
#
|
172
|
+
#
|
548
173
|
# def run(playwright):
|
549
174
|
# webkit = playwright.webkit
|
550
175
|
# browser = webkit.launch(headless=False)
|
@@ -562,47 +187,10 @@ module Playwright
|
|
562
187
|
# <div></div>
|
563
188
|
# """)
|
564
189
|
# page.click("button")
|
565
|
-
#
|
190
|
+
#
|
566
191
|
# with sync_playwright() as playwright:
|
567
192
|
# run(playwright)
|
568
193
|
# ```
|
569
|
-
#
|
570
|
-
# ```csharp
|
571
|
-
# using Microsoft.Playwright;
|
572
|
-
# using System;
|
573
|
-
# using System.Security.Cryptography;
|
574
|
-
# using System.Threading.Tasks;
|
575
|
-
#
|
576
|
-
# class BrowserContextExamples
|
577
|
-
# {
|
578
|
-
# public static async Task AddMd5FunctionToAllPagesInContext()
|
579
|
-
# {
|
580
|
-
# using var playwright = await Playwright.CreateAsync();
|
581
|
-
# var browser = await playwright.Webkit.LaunchAsync(headless: false);
|
582
|
-
# var context = await browser.NewContextAsync();
|
583
|
-
#
|
584
|
-
# // NOTE: md5 is inherently insecure, and we strongly discourage using
|
585
|
-
# // this in production in any shape or form
|
586
|
-
# await context.ExposeFunctionAsync("sha1", (string input) =>
|
587
|
-
# {
|
588
|
-
# return Convert.ToBase64String(
|
589
|
-
# MD5.Create().ComputeHash(System.Text.Encoding.UTF8.GetBytes(input)));
|
590
|
-
# });
|
591
|
-
#
|
592
|
-
# var page = await context.NewPageAsync();
|
593
|
-
# await page.SetContentAsync("<script>\n" +
|
594
|
-
# " async function onClick() {\n" +
|
595
|
-
# " document.querySelector('div').textContent = await window.sha1('PLAYWRIGHT');\n" +
|
596
|
-
# " }\n" +
|
597
|
-
# "</script>\n" +
|
598
|
-
# "<button onclick=\"onClick()\">Click me</button>\n" +
|
599
|
-
# "<div></div>");
|
600
|
-
#
|
601
|
-
# await page.ClickAsync("button");
|
602
|
-
# Console.WriteLine(await page.TextContentAsync("div"));
|
603
|
-
# }
|
604
|
-
# }
|
605
|
-
# ```
|
606
194
|
def expose_function(name, callback)
|
607
195
|
wrap_impl(@impl.expose_function(unwrap_impl(name), unwrap_impl(callback)))
|
608
196
|
end
|
@@ -614,7 +202,7 @@ module Playwright
|
|
614
202
|
end
|
615
203
|
|
616
204
|
# > NOTE: CDP sessions are only supported on Chromium-based browsers.
|
617
|
-
#
|
205
|
+
#
|
618
206
|
# Returns the newly created session.
|
619
207
|
def new_cdp_session(page)
|
620
208
|
raise NotImplementedError.new('new_cdp_session is not implemented yet.')
|
@@ -632,34 +220,9 @@ module Playwright
|
|
632
220
|
|
633
221
|
# Routing provides the capability to modify network requests that are made by any page in the browser context. Once route
|
634
222
|
# is enabled, every request matching the url pattern will stall unless it's continued, fulfilled or aborted.
|
635
|
-
#
|
223
|
+
#
|
636
224
|
# An example of a naive handler that aborts all image requests:
|
637
|
-
#
|
638
|
-
#
|
639
|
-
# ```js
|
640
|
-
# const context = await browser.newContext();
|
641
|
-
# await context.route('**/*.{png,jpg,jpeg}', route => route.abort());
|
642
|
-
# const page = await context.newPage();
|
643
|
-
# await page.goto('https://example.com');
|
644
|
-
# await browser.close();
|
645
|
-
# ```
|
646
|
-
#
|
647
|
-
# ```java
|
648
|
-
# BrowserContext context = browser.newContext();
|
649
|
-
# context.route("**/*.{png,jpg,jpeg}", route -> route.abort());
|
650
|
-
# Page page = context.newPage();
|
651
|
-
# page.navigate("https://example.com");
|
652
|
-
# browser.close();
|
653
|
-
# ```
|
654
|
-
#
|
655
|
-
# ```python async
|
656
|
-
# context = await browser.new_context()
|
657
|
-
# page = await context.new_page()
|
658
|
-
# await context.route("**/*.{png,jpg,jpeg}", lambda route: route.abort())
|
659
|
-
# await page.goto("https://example.com")
|
660
|
-
# await browser.close()
|
661
|
-
# ```
|
662
|
-
#
|
225
|
+
#
|
663
226
|
# ```python sync
|
664
227
|
# context = browser.new_context()
|
665
228
|
# page = context.new_page()
|
@@ -667,43 +230,9 @@ module Playwright
|
|
667
230
|
# page.goto("https://example.com")
|
668
231
|
# browser.close()
|
669
232
|
# ```
|
670
|
-
#
|
671
|
-
# ```csharp
|
672
|
-
# var context = await browser.NewContextAsync();
|
673
|
-
# var page = await context.NewPageAsync();
|
674
|
-
# await context.RouteAsync("**/*.{png,jpg,jpeg}", r => r.AbortAsync());
|
675
|
-
# await page.GotoAsync("https://theverge.com");
|
676
|
-
# await browser.CloseAsync();
|
677
|
-
# ```
|
678
|
-
#
|
233
|
+
#
|
679
234
|
# or the same snippet using a regex pattern instead:
|
680
|
-
#
|
681
|
-
#
|
682
|
-
# ```js
|
683
|
-
# const context = await browser.newContext();
|
684
|
-
# await context.route(/(\.png$)|(\.jpg$)/, route => route.abort());
|
685
|
-
# const page = await context.newPage();
|
686
|
-
# await page.goto('https://example.com');
|
687
|
-
# await browser.close();
|
688
|
-
# ```
|
689
|
-
#
|
690
|
-
# ```java
|
691
|
-
# BrowserContext context = browser.newContext();
|
692
|
-
# context.route(Pattern.compile("(\\.png$)|(\\.jpg$)"), route -> route.abort());
|
693
|
-
# Page page = context.newPage();
|
694
|
-
# page.navigate("https://example.com");
|
695
|
-
# browser.close();
|
696
|
-
# ```
|
697
|
-
#
|
698
|
-
# ```python async
|
699
|
-
# context = await browser.new_context()
|
700
|
-
# page = await context.new_page()
|
701
|
-
# await context.route(re.compile(r"(\.png$)|(\.jpg$)"), lambda route: route.abort())
|
702
|
-
# page = await context.new_page()
|
703
|
-
# await page.goto("https://example.com")
|
704
|
-
# await browser.close()
|
705
|
-
# ```
|
706
|
-
#
|
235
|
+
#
|
707
236
|
# ```python sync
|
708
237
|
# context = browser.new_context()
|
709
238
|
# page = context.new_page()
|
@@ -713,46 +242,10 @@ module Playwright
|
|
713
242
|
# page.goto("https://example.com")
|
714
243
|
# browser.close()
|
715
244
|
# ```
|
716
|
-
#
|
717
|
-
# ```csharp
|
718
|
-
# var context = await browser.NewContextAsync();
|
719
|
-
# var page = await context.NewPageAsync();
|
720
|
-
# await context.RouteAsync(new Regex("(\\.png$)|(\\.jpg$)"), r => r.AbortAsync());
|
721
|
-
# await page.GotoAsync("https://theverge.com");
|
722
|
-
# await browser.CloseAsync();
|
723
|
-
# ```
|
724
|
-
#
|
245
|
+
#
|
725
246
|
# It is possible to examine the request to decide the route action. For example, mocking all requests that contain some
|
726
247
|
# post data, and leaving all other requests as is:
|
727
|
-
#
|
728
248
|
#
|
729
|
-
# ```js
|
730
|
-
# await context.route('/api/**', route => {
|
731
|
-
# if (route.request().postData().includes('my-string'))
|
732
|
-
# route.fulfill({ body: 'mocked-data' });
|
733
|
-
# else
|
734
|
-
# route.continue();
|
735
|
-
# });
|
736
|
-
# ```
|
737
|
-
#
|
738
|
-
# ```java
|
739
|
-
# context.route("/api/**", route -> {
|
740
|
-
# if (route.request().postData().contains("my-string"))
|
741
|
-
# route.fulfill(new Route.FulfillOptions().setBody("mocked-data"));
|
742
|
-
# else
|
743
|
-
# route.resume();
|
744
|
-
# });
|
745
|
-
# ```
|
746
|
-
#
|
747
|
-
# ```python async
|
748
|
-
# def handle_route(route):
|
749
|
-
# if ("my-string" in route.request.post_data)
|
750
|
-
# route.fulfill(body="mocked-data")
|
751
|
-
# else
|
752
|
-
# route.continue_()
|
753
|
-
# await context.route("/api/**", handle_route)
|
754
|
-
# ```
|
755
|
-
#
|
756
249
|
# ```python sync
|
757
250
|
# def handle_route(route):
|
758
251
|
# if ("my-string" in route.request.post_data)
|
@@ -761,29 +254,19 @@ module Playwright
|
|
761
254
|
# route.continue_()
|
762
255
|
# context.route("/api/**", handle_route)
|
763
256
|
# ```
|
764
|
-
#
|
765
|
-
# ```csharp
|
766
|
-
# await page.RouteAsync("/api/**", async r =>
|
767
|
-
# {
|
768
|
-
# if (r.Request.PostData.Contains("my-string"))
|
769
|
-
# await r.FulfillAsync(body: "mocked-data");
|
770
|
-
# else
|
771
|
-
# await r.ContinueAsync();
|
772
|
-
# });
|
773
|
-
# ```
|
774
|
-
#
|
257
|
+
#
|
775
258
|
# Page routes (set up with [`method: Page.route`]) take precedence over browser context routes when request matches both
|
776
259
|
# handlers.
|
777
|
-
#
|
260
|
+
#
|
778
261
|
# To remove a route with its handler you can use [`method: BrowserContext.unroute`].
|
779
|
-
#
|
262
|
+
#
|
780
263
|
# > NOTE: Enabling routing disables http cache.
|
781
264
|
def route(url, handler)
|
782
265
|
wrap_impl(@impl.route(unwrap_impl(url), unwrap_impl(handler)))
|
783
266
|
end
|
784
267
|
|
785
268
|
# > NOTE: Service workers are only supported on Chromium-based browsers.
|
786
|
-
#
|
269
|
+
#
|
787
270
|
# All existing service workers in the context.
|
788
271
|
def service_workers
|
789
272
|
raise NotImplementedError.new('service_workers is not implemented yet.')
|
@@ -796,7 +279,7 @@ module Playwright
|
|
796
279
|
# - [`method: Page.reload`]
|
797
280
|
# - [`method: Page.setContent`]
|
798
281
|
# - [`method: Page.waitForNavigation`]
|
799
|
-
#
|
282
|
+
#
|
800
283
|
# > NOTE: [`method: Page.setDefaultNavigationTimeout`] and [`method: Page.setDefaultTimeout`] take priority over
|
801
284
|
# [`method: BrowserContext.setDefaultNavigationTimeout`].
|
802
285
|
def set_default_navigation_timeout(timeout)
|
@@ -805,7 +288,7 @@ module Playwright
|
|
805
288
|
alias_method :default_navigation_timeout=, :set_default_navigation_timeout
|
806
289
|
|
807
290
|
# This setting will change the default maximum time for all the methods accepting `timeout` option.
|
808
|
-
#
|
291
|
+
#
|
809
292
|
# > NOTE: [`method: Page.setDefaultNavigationTimeout`], [`method: Page.setDefaultTimeout`] and
|
810
293
|
# [`method: BrowserContext.setDefaultNavigationTimeout`] take priority over [`method: BrowserContext.setDefaultTimeout`].
|
811
294
|
def set_default_timeout(timeout)
|
@@ -816,7 +299,7 @@ module Playwright
|
|
816
299
|
# The extra HTTP headers will be sent with every request initiated by any page in the context. These headers are merged
|
817
300
|
# with page-specific extra HTTP headers set with [`method: Page.setExtraHTTPHeaders`]. If page overrides a particular
|
818
301
|
# header, page-specific header value will be used instead of the browser context header value.
|
819
|
-
#
|
302
|
+
#
|
820
303
|
# > NOTE: [`method: BrowserContext.setExtraHTTPHeaders`] does not guarantee the order of headers in the outgoing requests.
|
821
304
|
def set_extra_http_headers(headers)
|
822
305
|
wrap_impl(@impl.set_extra_http_headers(unwrap_impl(headers)))
|
@@ -824,32 +307,11 @@ module Playwright
|
|
824
307
|
alias_method :extra_http_headers=, :set_extra_http_headers
|
825
308
|
|
826
309
|
# Sets the context's geolocation. Passing `null` or `undefined` emulates position unavailable.
|
827
|
-
#
|
828
310
|
#
|
829
|
-
# ```js
|
830
|
-
# await browserContext.setGeolocation({latitude: 59.95, longitude: 30.31667});
|
831
|
-
# ```
|
832
|
-
#
|
833
|
-
# ```java
|
834
|
-
# browserContext.setGeolocation(new Geolocation(59.95, 30.31667));
|
835
|
-
# ```
|
836
|
-
#
|
837
|
-
# ```python async
|
838
|
-
# await browser_context.set_geolocation({"latitude": 59.95, "longitude": 30.31667})
|
839
|
-
# ```
|
840
|
-
#
|
841
311
|
# ```python sync
|
842
312
|
# browser_context.set_geolocation({"latitude": 59.95, "longitude": 30.31667})
|
843
313
|
# ```
|
844
|
-
#
|
845
|
-
# ```csharp
|
846
|
-
# await context.SetGeolocationAsync(new Geolocation()
|
847
|
-
# {
|
848
|
-
# Latitude = 59.95f,
|
849
|
-
# Longitude = 30.31667f
|
850
|
-
# });
|
851
|
-
# ```
|
852
|
-
#
|
314
|
+
#
|
853
315
|
# > NOTE: Consider using [`method: BrowserContext.grantPermissions`] to grant permissions for the browser context pages to
|
854
316
|
# read its geolocation.
|
855
317
|
def set_geolocation(geolocation)
|
@@ -875,36 +337,12 @@ module Playwright
|
|
875
337
|
|
876
338
|
# Waits for event to fire and passes its value into the predicate function. Returns when the predicate returns truthy
|
877
339
|
# value. Will throw an error if the context closes before the event is fired. Returns the event data value.
|
878
|
-
#
|
879
340
|
#
|
880
|
-
# ```js
|
881
|
-
# const [page, _] = await Promise.all([
|
882
|
-
# context.waitForEvent('page'),
|
883
|
-
# page.click('button')
|
884
|
-
# ]);
|
885
|
-
# ```
|
886
|
-
#
|
887
|
-
# ```java
|
888
|
-
# Page newPage = context.waitForPage(() -> page.click("button"));
|
889
|
-
# ```
|
890
|
-
#
|
891
|
-
# ```python async
|
892
|
-
# async with context.expect_event("page") as event_info:
|
893
|
-
# await page.click("button")
|
894
|
-
# page = await event_info.value
|
895
|
-
# ```
|
896
|
-
#
|
897
341
|
# ```python sync
|
898
342
|
# with context.expect_event("page") as event_info:
|
899
343
|
# page.click("button")
|
900
344
|
# page = event_info.value
|
901
345
|
# ```
|
902
|
-
#
|
903
|
-
# ```csharp
|
904
|
-
# var waitForPageEvent = context.WaitForPageAsync();
|
905
|
-
# await page.ClickAsync("button");
|
906
|
-
# var page = await waitForPageEvent;
|
907
|
-
# ```
|
908
346
|
def expect_event(event, predicate: nil, timeout: nil, &block)
|
909
347
|
wrap_impl(@impl.expect_event(unwrap_impl(event), predicate: unwrap_impl(predicate), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
|
910
348
|
end
|
@@ -917,10 +355,10 @@ module Playwright
|
|
917
355
|
end
|
918
356
|
|
919
357
|
# > NOTE: In most cases, you should use [`method: BrowserContext.waitForEvent`].
|
920
|
-
#
|
358
|
+
#
|
921
359
|
# Waits for given `event` to fire. If predicate is provided, it passes event's value into the `predicate` function and
|
922
|
-
# waits for `predicate(event)` to return a truthy value. Will throw an error if the
|
923
|
-
# fired.
|
360
|
+
# waits for `predicate(event)` to return a truthy value. Will throw an error if the browser context is closed before the
|
361
|
+
# `event` is fired.
|
924
362
|
def wait_for_event(event, predicate: nil, timeout: nil)
|
925
363
|
raise NotImplementedError.new('wait_for_event is not implemented yet.')
|
926
364
|
end
|
@@ -947,20 +385,20 @@ module Playwright
|
|
947
385
|
|
948
386
|
# -- inherited from EventEmitter --
|
949
387
|
# @nodoc
|
950
|
-
def
|
951
|
-
event_emitter_proxy.
|
388
|
+
def on(event, callback)
|
389
|
+
event_emitter_proxy.on(event, callback)
|
952
390
|
end
|
953
391
|
|
954
392
|
# -- inherited from EventEmitter --
|
955
393
|
# @nodoc
|
956
|
-
def
|
957
|
-
event_emitter_proxy.
|
394
|
+
def off(event, callback)
|
395
|
+
event_emitter_proxy.off(event, callback)
|
958
396
|
end
|
959
397
|
|
960
398
|
# -- inherited from EventEmitter --
|
961
399
|
# @nodoc
|
962
|
-
def
|
963
|
-
event_emitter_proxy.
|
400
|
+
def once(event, callback)
|
401
|
+
event_emitter_proxy.once(event, callback)
|
964
402
|
end
|
965
403
|
|
966
404
|
private def event_emitter_proxy
|