playwright-ruby-client 0.5.8 → 0.6.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- 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 +187 -0
- data/documentation/docs/api/browser_context.md +397 -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 +71 -0
- data/documentation/docs/api/element_handle.md +618 -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 +92 -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 +50 -0
- data/documentation/docs/api/frame.md +866 -0
- data/documentation/docs/api/js_handle.md +113 -0
- data/documentation/docs/api/keyboard.md +157 -0
- data/documentation/docs/api/mouse.md +69 -0
- data/documentation/docs/api/page.md +1402 -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 +24 -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 +13 -2
- 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.rb +27 -2
- data/lib/playwright/channel_owners/browser_context.rb +54 -3
- data/lib/playwright/channel_owners/browser_type.rb +8 -1
- data/lib/playwright/channel_owners/element_handle.rb +17 -16
- data/lib/playwright/channel_owners/frame.rb +29 -34
- data/lib/playwright/channel_owners/js_handle.rb +2 -10
- data/lib/playwright/channel_owners/page.rb +35 -51
- data/lib/playwright/channel_owners/worker.rb +4 -0
- data/lib/playwright/download.rb +3 -2
- data/lib/playwright/events.rb +4 -0
- 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/playwright_api.rb +16 -1
- data/lib/playwright/tracing_impl.rb +31 -0
- data/lib/playwright/version.rb +2 -1
- data/lib/playwright_api/accessibility.rb +7 -88
- data/lib/playwright_api/android.rb +2 -59
- data/lib/playwright_api/android_device.rb +6 -5
- data/lib/playwright_api/browser.rb +13 -122
- data/lib/playwright_api/browser_context.rb +66 -433
- data/lib/playwright_api/browser_type.rb +28 -78
- data/lib/playwright_api/cdp_session.rb +2 -25
- data/lib/playwright_api/console_message.rb +2 -0
- data/lib/playwright_api/dialog.rb +5 -63
- data/lib/playwright_api/element_handle.rb +96 -294
- data/lib/playwright_api/file_chooser.rb +0 -21
- data/lib/playwright_api/frame.rb +99 -565
- data/lib/playwright_api/js_handle.rb +10 -67
- data/lib/playwright_api/keyboard.rb +22 -166
- data/lib/playwright_api/mouse.rb +1 -45
- data/lib/playwright_api/page.rb +222 -1223
- data/lib/playwright_api/playwright.rb +8 -93
- data/lib/playwright_api/request.rb +9 -87
- data/lib/playwright_api/response.rb +1 -1
- data/lib/playwright_api/route.rb +3 -80
- data/lib/playwright_api/selectors.rb +0 -66
- data/lib/playwright_api/tracing.rb +39 -0
- data/lib/playwright_api/web_socket.rb +1 -1
- data/lib/playwright_api/worker.rb +28 -42
- data/playwright.gemspec +2 -2
- metadata +60 -20
- data/lib/playwright/javascript/function.rb +0 -67
@@ -1,58 +1,10 @@
|
|
1
1
|
module Playwright
|
2
2
|
# BrowserType provides methods to launch a specific browser instance or connect to an existing one. The following is a
|
3
3
|
# typical example of using Playwright to drive automation:
|
4
|
-
#
|
5
4
|
#
|
6
|
-
# ```js
|
7
|
-
# const { chromium } = require('playwright'); // Or 'firefox' or 'webkit'.
|
8
|
-
#
|
9
|
-
# (async () => {
|
10
|
-
# const browser = await chromium.launch();
|
11
|
-
# const page = await browser.newPage();
|
12
|
-
# await page.goto('https://example.com');
|
13
|
-
# // other actions...
|
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 chromium = playwright.chromium();
|
25
|
-
# Browser browser = chromium.launch();
|
26
|
-
# Page page = browser.newPage();
|
27
|
-
# page.navigate("https://example.com");
|
28
|
-
# // other actions...
|
29
|
-
# browser.close();
|
30
|
-
# }
|
31
|
-
# }
|
32
|
-
# }
|
33
|
-
# ```
|
34
|
-
#
|
35
|
-
# ```python async
|
36
|
-
# import asyncio
|
37
|
-
# from playwright.async_api import async_playwright
|
38
|
-
#
|
39
|
-
# async def run(playwright):
|
40
|
-
# chromium = playwright.chromium
|
41
|
-
# browser = await chromium.launch()
|
42
|
-
# page = await browser.new_page()
|
43
|
-
# await page.goto("https://example.com")
|
44
|
-
# # other actions...
|
45
|
-
# await browser.close()
|
46
|
-
#
|
47
|
-
# async def main():
|
48
|
-
# async with async_playwright() as playwright:
|
49
|
-
# await run(playwright)
|
50
|
-
# asyncio.run(main())
|
51
|
-
# ```
|
52
|
-
#
|
53
5
|
# ```python sync
|
54
6
|
# from playwright.sync_api import sync_playwright
|
55
|
-
#
|
7
|
+
#
|
56
8
|
# def run(playwright):
|
57
9
|
# chromium = playwright.chromium
|
58
10
|
# browser = chromium.launch()
|
@@ -60,46 +12,46 @@ module Playwright
|
|
60
12
|
# page.goto("https://example.com")
|
61
13
|
# # other actions...
|
62
14
|
# browser.close()
|
63
|
-
#
|
15
|
+
#
|
64
16
|
# with sync_playwright() as playwright:
|
65
17
|
# run(playwright)
|
66
18
|
# ```
|
67
19
|
class BrowserType < PlaywrightApi
|
68
20
|
|
21
|
+
# This methods attaches Playwright to an existing browser instance.
|
22
|
+
def connect(wsEndpoint, headers: nil, slowMo: nil, timeout: nil)
|
23
|
+
raise NotImplementedError.new('connect is not implemented yet.')
|
24
|
+
end
|
25
|
+
|
26
|
+
# This methods attaches Playwright to an existing browser instance using the Chrome DevTools Protocol.
|
27
|
+
#
|
28
|
+
# The default browser context is accessible via [`method: Browser.contexts`].
|
29
|
+
#
|
30
|
+
# > NOTE: Connecting over the Chrome DevTools Protocol is only supported for Chromium-based browsers.
|
31
|
+
def connect_over_cdp(
|
32
|
+
endpointURL,
|
33
|
+
headers: nil,
|
34
|
+
slowMo: nil,
|
35
|
+
timeout: nil,
|
36
|
+
&block)
|
37
|
+
wrap_impl(@impl.connect_over_cdp(unwrap_impl(endpointURL), headers: unwrap_impl(headers), slowMo: unwrap_impl(slowMo), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
|
38
|
+
end
|
39
|
+
|
69
40
|
# A path where Playwright expects to find a bundled browser executable.
|
70
41
|
def executable_path
|
71
42
|
wrap_impl(@impl.executable_path)
|
72
43
|
end
|
73
44
|
|
74
45
|
# Returns the browser instance.
|
75
|
-
#
|
46
|
+
#
|
76
47
|
# You can use `ignoreDefaultArgs` to filter out `--mute-audio` from default arguments:
|
77
|
-
#
|
78
48
|
#
|
79
|
-
# ```js
|
80
|
-
# const browser = await chromium.launch({ // Or 'firefox' or 'webkit'.
|
81
|
-
# ignoreDefaultArgs: ['--mute-audio']
|
82
|
-
# });
|
83
|
-
# ```
|
84
|
-
#
|
85
|
-
# ```java
|
86
|
-
# // Or "firefox" or "webkit".
|
87
|
-
# Browser browser = chromium.launch(new BrowserType.LaunchOptions()
|
88
|
-
# .setIgnoreDefaultArgs(Arrays.asList("--mute-audio")));
|
89
|
-
# ```
|
90
|
-
#
|
91
|
-
# ```python async
|
92
|
-
# browser = await playwright.chromium.launch( # or "firefox" or "webkit".
|
93
|
-
# ignore_default_args=["--mute-audio"]
|
94
|
-
# )
|
95
|
-
# ```
|
96
|
-
#
|
97
49
|
# ```python sync
|
98
50
|
# browser = playwright.chromium.launch( # or "firefox" or "webkit".
|
99
51
|
# ignore_default_args=["--mute-audio"]
|
100
52
|
# )
|
101
53
|
# ```
|
102
|
-
#
|
54
|
+
#
|
103
55
|
# > **Chromium-only** Playwright can also be used to control the Google Chrome or Microsoft Edge browsers, but it works
|
104
56
|
# best with the version of Chromium it is bundled with. There is no guarantee it will work with any other version. Use
|
105
57
|
# `executablePath` option with extreme caution.
|
@@ -131,12 +83,13 @@ module Playwright
|
|
131
83
|
proxy: nil,
|
132
84
|
slowMo: nil,
|
133
85
|
timeout: nil,
|
86
|
+
traceDir: nil,
|
134
87
|
&block)
|
135
|
-
wrap_impl(@impl.launch(args: unwrap_impl(args), channel: unwrap_impl(channel), chromiumSandbox: unwrap_impl(chromiumSandbox), devtools: unwrap_impl(devtools), downloadsPath: unwrap_impl(downloadsPath), env: unwrap_impl(env), executablePath: unwrap_impl(executablePath), firefoxUserPrefs: unwrap_impl(firefoxUserPrefs), handleSIGHUP: unwrap_impl(handleSIGHUP), handleSIGINT: unwrap_impl(handleSIGINT), handleSIGTERM: unwrap_impl(handleSIGTERM), headless: unwrap_impl(headless), ignoreDefaultArgs: unwrap_impl(ignoreDefaultArgs), proxy: unwrap_impl(proxy), slowMo: unwrap_impl(slowMo), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
|
88
|
+
wrap_impl(@impl.launch(args: unwrap_impl(args), channel: unwrap_impl(channel), chromiumSandbox: unwrap_impl(chromiumSandbox), devtools: unwrap_impl(devtools), downloadsPath: unwrap_impl(downloadsPath), env: unwrap_impl(env), executablePath: unwrap_impl(executablePath), firefoxUserPrefs: unwrap_impl(firefoxUserPrefs), handleSIGHUP: unwrap_impl(handleSIGHUP), handleSIGINT: unwrap_impl(handleSIGINT), handleSIGTERM: unwrap_impl(handleSIGTERM), headless: unwrap_impl(headless), ignoreDefaultArgs: unwrap_impl(ignoreDefaultArgs), proxy: unwrap_impl(proxy), slowMo: unwrap_impl(slowMo), timeout: unwrap_impl(timeout), traceDir: unwrap_impl(traceDir), &wrap_block_call(block)))
|
136
89
|
end
|
137
90
|
|
138
91
|
# Returns the persistent browser context instance.
|
139
|
-
#
|
92
|
+
#
|
140
93
|
# Launches browser that uses persistent storage located at `userDataDir` and returns the only context. Closing this
|
141
94
|
# context will automatically close the browser.
|
142
95
|
def launch_persistent_context(
|
@@ -173,10 +126,12 @@ module Playwright
|
|
173
126
|
record_har_path: nil,
|
174
127
|
record_video_dir: nil,
|
175
128
|
record_video_size: nil,
|
129
|
+
reducedMotion: nil,
|
176
130
|
screen: nil,
|
177
131
|
slowMo: nil,
|
178
132
|
timeout: nil,
|
179
133
|
timezoneId: nil,
|
134
|
+
traceDir: nil,
|
180
135
|
userAgent: nil,
|
181
136
|
viewport: nil)
|
182
137
|
raise NotImplementedError.new('launch_persistent_context is not implemented yet.')
|
@@ -187,11 +142,6 @@ module Playwright
|
|
187
142
|
wrap_impl(@impl.name)
|
188
143
|
end
|
189
144
|
|
190
|
-
# @nodoc
|
191
|
-
def connect_over_cdp(endpointURL, slowMo: nil, timeout: nil, &block)
|
192
|
-
wrap_impl(@impl.connect_over_cdp(unwrap_impl(endpointURL), slowMo: unwrap_impl(slowMo), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
|
193
|
-
end
|
194
|
-
|
195
145
|
# -- inherited from EventEmitter --
|
196
146
|
# @nodoc
|
197
147
|
def once(event, callback)
|
@@ -1,39 +1,16 @@
|
|
1
1
|
module Playwright
|
2
2
|
# - extends: [EventEmitter]
|
3
|
-
#
|
3
|
+
#
|
4
4
|
# The `CDPSession` instances are used to talk raw Chrome Devtools Protocol:
|
5
5
|
# - protocol methods can be called with `session.send` method.
|
6
6
|
# - protocol events can be subscribed to with `session.on` method.
|
7
|
-
#
|
7
|
+
#
|
8
8
|
# Useful links:
|
9
9
|
# - Documentation on DevTools Protocol can be found here:
|
10
10
|
# [DevTools Protocol Viewer](https://chromedevtools.github.io/devtools-protocol/).
|
11
11
|
# - Getting Started with DevTools Protocol:
|
12
12
|
# https://github.com/aslushnikov/getting-started-with-cdp/blob/master/README.md
|
13
|
-
#
|
14
13
|
#
|
15
|
-
# ```js
|
16
|
-
# const client = await page.context().newCDPSession(page);
|
17
|
-
# await client.send('Animation.enable');
|
18
|
-
# client.on('Animation.animationCreated', () => console.log('Animation created!'));
|
19
|
-
# const response = await client.send('Animation.getPlaybackRate');
|
20
|
-
# console.log('playback rate is ' + response.playbackRate);
|
21
|
-
# await client.send('Animation.setPlaybackRate', {
|
22
|
-
# playbackRate: response.playbackRate / 2
|
23
|
-
# });
|
24
|
-
# ```
|
25
|
-
#
|
26
|
-
# ```python async
|
27
|
-
# client = await page.context().new_cdp_session(page)
|
28
|
-
# await client.send("animation.enable")
|
29
|
-
# client.on("animation.animation_created", lambda: print("animation created!"))
|
30
|
-
# response = await client.send("animation.get_playback_rate")
|
31
|
-
# print("playback rate is " + response["playback_rate"])
|
32
|
-
# await client.send("animation.set_playback_rate", {
|
33
|
-
# playback_rate: response["playback_rate"] / 2
|
34
|
-
# })
|
35
|
-
# ```
|
36
|
-
#
|
37
14
|
# ```python sync
|
38
15
|
# client = page.context().new_cdp_session(page)
|
39
16
|
# client.send("animation.enable")
|
@@ -2,6 +2,7 @@ module Playwright
|
|
2
2
|
# `ConsoleMessage` objects are dispatched by page via the [`event: Page.console`] event.
|
3
3
|
class ConsoleMessage < PlaywrightApi
|
4
4
|
|
5
|
+
# List of arguments passed to a `console` function call. See also [`event: Page.console`].
|
5
6
|
def args
|
6
7
|
wrap_impl(@impl.args)
|
7
8
|
end
|
@@ -10,6 +11,7 @@ module Playwright
|
|
10
11
|
wrap_impl(@impl.location)
|
11
12
|
end
|
12
13
|
|
14
|
+
# The text of the console message.
|
13
15
|
def text
|
14
16
|
wrap_impl(@impl.text)
|
15
17
|
end
|
@@ -1,73 +1,15 @@
|
|
1
1
|
module Playwright
|
2
2
|
# `Dialog` objects are dispatched by page via the [`event: Page.dialog`] event.
|
3
|
-
#
|
3
|
+
#
|
4
4
|
# An example of using `Dialog` class:
|
5
|
-
#
|
6
5
|
#
|
7
|
-
# ```js
|
8
|
-
# const { chromium } = require('playwright'); // Or 'firefox' or 'webkit'.
|
9
|
-
#
|
10
|
-
# (async () => {
|
11
|
-
# const browser = await chromium.launch();
|
12
|
-
# const page = await browser.newPage();
|
13
|
-
# page.on('dialog', async dialog => {
|
14
|
-
# console.log(dialog.message());
|
15
|
-
# await dialog.dismiss();
|
16
|
-
# });
|
17
|
-
# await page.evaluate(() => alert('1'));
|
18
|
-
# await browser.close();
|
19
|
-
# })();
|
20
|
-
# ```
|
21
|
-
#
|
22
|
-
# ```java
|
23
|
-
# import com.microsoft.playwright.*;
|
24
|
-
#
|
25
|
-
# public class Example {
|
26
|
-
# public static void main(String[] args) {
|
27
|
-
# try (Playwright playwright = Playwright.create()) {
|
28
|
-
# BrowserType chromium = playwright.chromium();
|
29
|
-
# Browser browser = chromium.launch();
|
30
|
-
# Page page = browser.newPage();
|
31
|
-
# page.onDialog(dialog -> {
|
32
|
-
# System.out.println(dialog.message());
|
33
|
-
# dialog.dismiss();
|
34
|
-
# });
|
35
|
-
# page.evaluate("alert('1')");
|
36
|
-
# browser.close();
|
37
|
-
# }
|
38
|
-
# }
|
39
|
-
# }
|
40
|
-
# ```
|
41
|
-
#
|
42
|
-
# ```python async
|
43
|
-
# import asyncio
|
44
|
-
# from playwright.async_api import async_playwright
|
45
|
-
#
|
46
|
-
# async def handle_dialog(dialog):
|
47
|
-
# print(dialog.message)
|
48
|
-
# await dialog.dismiss()
|
49
|
-
#
|
50
|
-
# async def run(playwright):
|
51
|
-
# chromium = playwright.chromium
|
52
|
-
# browser = await chromium.launch()
|
53
|
-
# page = await browser.new_page()
|
54
|
-
# page.on("dialog", handle_dialog)
|
55
|
-
# page.evaluate("alert('1')")
|
56
|
-
# await browser.close()
|
57
|
-
#
|
58
|
-
# async def main():
|
59
|
-
# async with async_playwright() as playwright:
|
60
|
-
# await run(playwright)
|
61
|
-
# asyncio.run(main())
|
62
|
-
# ```
|
63
|
-
#
|
64
6
|
# ```python sync
|
65
7
|
# from playwright.sync_api import sync_playwright
|
66
|
-
#
|
8
|
+
#
|
67
9
|
# def handle_dialog(dialog):
|
68
10
|
# print(dialog.message)
|
69
11
|
# dialog.dismiss()
|
70
|
-
#
|
12
|
+
#
|
71
13
|
# def run(playwright):
|
72
14
|
# chromium = playwright.chromium
|
73
15
|
# browser = chromium.launch()
|
@@ -75,11 +17,11 @@ module Playwright
|
|
75
17
|
# page.on("dialog", handle_dialog)
|
76
18
|
# page.evaluate("alert('1')")
|
77
19
|
# browser.close()
|
78
|
-
#
|
20
|
+
#
|
79
21
|
# with sync_playwright() as playwright:
|
80
22
|
# run(playwright)
|
81
23
|
# ```
|
82
|
-
#
|
24
|
+
#
|
83
25
|
# > NOTE: Dialogs are dismissed automatically, unless there is a [`event: Page.dialog`] listener. When listener is
|
84
26
|
# present, it **must** either [`method: Dialog.accept`] or [`method: Dialog.dismiss`] the dialog - otherwise the page will
|
85
27
|
# [freeze](https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop#never_blocking) waiting for the dialog, and
|
@@ -2,64 +2,13 @@ require_relative './js_handle.rb'
|
|
2
2
|
|
3
3
|
module Playwright
|
4
4
|
# - extends: `JSHandle`
|
5
|
-
#
|
5
|
+
#
|
6
6
|
# ElementHandle represents an in-page DOM element. ElementHandles can be created with the [`method: Page.querySelector`]
|
7
7
|
# method.
|
8
|
-
#
|
9
8
|
#
|
10
|
-
# ```js
|
11
|
-
# const { chromium } = require('playwright'); // Or 'firefox' or 'webkit'.
|
12
|
-
#
|
13
|
-
# (async () => {
|
14
|
-
# const browser = await chromium.launch();
|
15
|
-
# const page = await browser.newPage();
|
16
|
-
# await page.goto('https://example.com');
|
17
|
-
# const hrefElement = await page.$('a');
|
18
|
-
# await hrefElement.click();
|
19
|
-
# // ...
|
20
|
-
# })();
|
21
|
-
# ```
|
22
|
-
#
|
23
|
-
# ```java
|
24
|
-
# import com.microsoft.playwright.*;
|
25
|
-
#
|
26
|
-
# public class Example {
|
27
|
-
# public static void main(String[] args) {
|
28
|
-
# try (Playwright playwright = Playwright.create()) {
|
29
|
-
# BrowserType chromium = playwright.chromium();
|
30
|
-
# Browser browser = chromium.launch();
|
31
|
-
# Page page = browser.newPage();
|
32
|
-
# page.navigate("https://example.com");
|
33
|
-
# ElementHandle hrefElement = page.querySelector("a");
|
34
|
-
# hrefElement.click();
|
35
|
-
# // ...
|
36
|
-
# }
|
37
|
-
# }
|
38
|
-
# }
|
39
|
-
# ```
|
40
|
-
#
|
41
|
-
# ```python async
|
42
|
-
# import asyncio
|
43
|
-
# from playwright.async_api import async_playwright
|
44
|
-
#
|
45
|
-
# async def run(playwright):
|
46
|
-
# chromium = playwright.chromium
|
47
|
-
# browser = await chromium.launch()
|
48
|
-
# page = await browser.new_page()
|
49
|
-
# await page.goto("https://example.com")
|
50
|
-
# href_element = await page.query_selector("a")
|
51
|
-
# await href_element.click()
|
52
|
-
# # ...
|
53
|
-
#
|
54
|
-
# async def main():
|
55
|
-
# async with async_playwright() as playwright:
|
56
|
-
# await run(playwright)
|
57
|
-
# asyncio.run(main())
|
58
|
-
# ```
|
59
|
-
#
|
60
9
|
# ```python sync
|
61
10
|
# from playwright.sync_api import sync_playwright
|
62
|
-
#
|
11
|
+
#
|
63
12
|
# def run(playwright):
|
64
13
|
# chromium = playwright.chromium
|
65
14
|
# browser = chromium.launch()
|
@@ -68,47 +17,31 @@ module Playwright
|
|
68
17
|
# href_element = page.query_selector("a")
|
69
18
|
# href_element.click()
|
70
19
|
# # ...
|
71
|
-
#
|
20
|
+
#
|
72
21
|
# with sync_playwright() as playwright:
|
73
22
|
# run(playwright)
|
74
23
|
# ```
|
75
|
-
#
|
24
|
+
#
|
76
25
|
# ElementHandle prevents DOM element from garbage collection unless the handle is disposed with
|
77
26
|
# [`method: JSHandle.dispose`]. ElementHandles are auto-disposed when their origin frame gets navigated.
|
78
|
-
#
|
27
|
+
#
|
79
28
|
# ElementHandle instances can be used as an argument in [`method: Page.evalOnSelector`] and [`method: Page.evaluate`]
|
80
29
|
# methods.
|
81
30
|
class ElementHandle < JSHandle
|
82
31
|
|
83
32
|
# This method returns the bounding box of the element, or `null` if the element is not visible. The bounding box is
|
84
33
|
# calculated relative to the main frame viewport - which is usually the same as the browser window.
|
85
|
-
#
|
34
|
+
#
|
86
35
|
# Scrolling affects the returned bonding box, similarly to
|
87
36
|
# [Element.getBoundingClientRect](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect). That
|
88
37
|
# means `x` and/or `y` may be negative.
|
89
|
-
#
|
38
|
+
#
|
90
39
|
# Elements from child frames return the bounding box relative to the main frame, unlike the
|
91
40
|
# [Element.getBoundingClientRect](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect).
|
92
|
-
#
|
41
|
+
#
|
93
42
|
# Assuming the page is static, it is safe to use bounding box coordinates to perform input. For example, the following
|
94
43
|
# snippet should click the center of the element.
|
95
|
-
#
|
96
44
|
#
|
97
|
-
# ```js
|
98
|
-
# const box = await elementHandle.boundingBox();
|
99
|
-
# await page.mouse.click(box.x + box.width / 2, box.y + box.height / 2);
|
100
|
-
# ```
|
101
|
-
#
|
102
|
-
# ```java
|
103
|
-
# BoundingBox box = elementHandle.boundingBox();
|
104
|
-
# page.mouse().click(box.x + box.width / 2, box.y + box.height / 2);
|
105
|
-
# ```
|
106
|
-
#
|
107
|
-
# ```python async
|
108
|
-
# box = await element_handle.bounding_box()
|
109
|
-
# await page.mouse.click(box["x"] + box["width"] / 2, box["y"] + box["height"] / 2)
|
110
|
-
# ```
|
111
|
-
#
|
112
45
|
# ```python sync
|
113
46
|
# box = element_handle.bounding_box()
|
114
47
|
# page.mouse.click(box["x"] + box["width"] / 2, box["y"] + box["height"] / 2)
|
@@ -125,13 +58,18 @@ module Playwright
|
|
125
58
|
# 1. Use [`property: Page.mouse`] to click in the center of the element.
|
126
59
|
# 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
|
127
60
|
# 1. Ensure that the element is now checked. If not, this method throws.
|
128
|
-
#
|
61
|
+
#
|
129
62
|
# If the element is detached from the DOM at any moment during the action, this method throws.
|
130
|
-
#
|
63
|
+
#
|
131
64
|
# When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
|
132
65
|
# zero timeout disables this.
|
133
|
-
def check(
|
134
|
-
|
66
|
+
def check(
|
67
|
+
force: nil,
|
68
|
+
noWaitAfter: nil,
|
69
|
+
position: nil,
|
70
|
+
timeout: nil,
|
71
|
+
trial: nil)
|
72
|
+
wrap_impl(@impl.check(force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), position: unwrap_impl(position), timeout: unwrap_impl(timeout), trial: unwrap_impl(trial)))
|
135
73
|
end
|
136
74
|
|
137
75
|
# This method clicks the element by performing the following steps:
|
@@ -139,9 +77,9 @@ module Playwright
|
|
139
77
|
# 1. Scroll the element into view if needed.
|
140
78
|
# 1. Use [`property: Page.mouse`] to click in the center of the element, or the specified `position`.
|
141
79
|
# 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
|
142
|
-
#
|
80
|
+
#
|
143
81
|
# If the element is detached from the DOM at any moment during the action, this method throws.
|
144
|
-
#
|
82
|
+
#
|
145
83
|
# When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
|
146
84
|
# zero timeout disables this.
|
147
85
|
def click(
|
@@ -152,8 +90,9 @@ module Playwright
|
|
152
90
|
modifiers: nil,
|
153
91
|
noWaitAfter: nil,
|
154
92
|
position: nil,
|
155
|
-
timeout: nil
|
156
|
-
|
93
|
+
timeout: nil,
|
94
|
+
trial: nil)
|
95
|
+
wrap_impl(@impl.click(button: unwrap_impl(button), clickCount: unwrap_impl(clickCount), delay: unwrap_impl(delay), force: unwrap_impl(force), modifiers: unwrap_impl(modifiers), noWaitAfter: unwrap_impl(noWaitAfter), position: unwrap_impl(position), timeout: unwrap_impl(timeout), trial: unwrap_impl(trial)))
|
157
96
|
end
|
158
97
|
|
159
98
|
# Returns the content frame for element handles referencing iframe nodes, or `null` otherwise
|
@@ -167,12 +106,12 @@ module Playwright
|
|
167
106
|
# 1. Use [`property: Page.mouse`] to double click in the center of the element, or the specified `position`.
|
168
107
|
# 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set. Note that if the
|
169
108
|
# first click of the `dblclick()` triggers a navigation event, this method will throw.
|
170
|
-
#
|
109
|
+
#
|
171
110
|
# If the element is detached from the DOM at any moment during the action, this method throws.
|
172
|
-
#
|
111
|
+
#
|
173
112
|
# When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
|
174
113
|
# zero timeout disables this.
|
175
|
-
#
|
114
|
+
#
|
176
115
|
# > NOTE: `elementHandle.dblclick()` dispatches two `click` events and a single `dblclick` event.
|
177
116
|
def dblclick(
|
178
117
|
button: nil,
|
@@ -181,34 +120,22 @@ module Playwright
|
|
181
120
|
modifiers: nil,
|
182
121
|
noWaitAfter: nil,
|
183
122
|
position: nil,
|
184
|
-
timeout: nil
|
185
|
-
|
123
|
+
timeout: nil,
|
124
|
+
trial: nil)
|
125
|
+
wrap_impl(@impl.dblclick(button: unwrap_impl(button), delay: unwrap_impl(delay), force: unwrap_impl(force), modifiers: unwrap_impl(modifiers), noWaitAfter: unwrap_impl(noWaitAfter), position: unwrap_impl(position), timeout: unwrap_impl(timeout), trial: unwrap_impl(trial)))
|
186
126
|
end
|
187
127
|
|
188
128
|
# The snippet below dispatches the `click` event on the element. Regardless of the visibility state of the element,
|
189
129
|
# `click` is dispatched. This is equivalent to calling
|
190
130
|
# [element.click()](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click).
|
191
|
-
#
|
192
131
|
#
|
193
|
-
# ```js
|
194
|
-
# await elementHandle.dispatchEvent('click');
|
195
|
-
# ```
|
196
|
-
#
|
197
|
-
# ```java
|
198
|
-
# elementHandle.dispatchEvent("click");
|
199
|
-
# ```
|
200
|
-
#
|
201
|
-
# ```python async
|
202
|
-
# await element_handle.dispatch_event("click")
|
203
|
-
# ```
|
204
|
-
#
|
205
132
|
# ```python sync
|
206
133
|
# element_handle.dispatch_event("click")
|
207
134
|
# ```
|
208
|
-
#
|
135
|
+
#
|
209
136
|
# Under the hood, it creates an instance of an event based on the given `type`, initializes it with `eventInit` properties
|
210
137
|
# and dispatches it on the element. Events are `composed`, `cancelable` and bubble by default.
|
211
|
-
#
|
138
|
+
#
|
212
139
|
# Since `eventInit` is event-specific, please refer to the events documentation for the lists of initial properties:
|
213
140
|
# - [DragEvent](https://developer.mozilla.org/en-US/docs/Web/API/DragEvent/DragEvent)
|
214
141
|
# - [FocusEvent](https://developer.mozilla.org/en-US/docs/Web/API/FocusEvent/FocusEvent)
|
@@ -217,30 +144,9 @@ module Playwright
|
|
217
144
|
# - [PointerEvent](https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/PointerEvent)
|
218
145
|
# - [TouchEvent](https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent/TouchEvent)
|
219
146
|
# - [Event](https://developer.mozilla.org/en-US/docs/Web/API/Event/Event)
|
220
|
-
#
|
147
|
+
#
|
221
148
|
# You can also specify `JSHandle` as the property value if you want live objects to be passed into the event:
|
222
|
-
#
|
223
149
|
#
|
224
|
-
# ```js
|
225
|
-
# // Note you can only create DataTransfer in Chromium and Firefox
|
226
|
-
# const dataTransfer = await page.evaluateHandle(() => new DataTransfer());
|
227
|
-
# await elementHandle.dispatchEvent('dragstart', { dataTransfer });
|
228
|
-
# ```
|
229
|
-
#
|
230
|
-
# ```java
|
231
|
-
# // Note you can only create DataTransfer in Chromium and Firefox
|
232
|
-
# JSHandle dataTransfer = page.evaluateHandle("() => new DataTransfer()");
|
233
|
-
# Map<String, Object> arg = new HashMap<>();
|
234
|
-
# arg.put("dataTransfer", dataTransfer);
|
235
|
-
# elementHandle.dispatchEvent("dragstart", arg);
|
236
|
-
# ```
|
237
|
-
#
|
238
|
-
# ```python async
|
239
|
-
# # note you can only create data_transfer in chromium and firefox
|
240
|
-
# data_transfer = await page.evaluate_handle("new DataTransfer()")
|
241
|
-
# await element_handle.dispatch_event("#source", "dragstart", {"dataTransfer": data_transfer})
|
242
|
-
# ```
|
243
|
-
#
|
244
150
|
# ```python sync
|
245
151
|
# # note you can only create data_transfer in chromium and firefox
|
246
152
|
# data_transfer = page.evaluate_handle("new DataTransfer()")
|
@@ -251,35 +157,16 @@ module Playwright
|
|
251
157
|
end
|
252
158
|
|
253
159
|
# Returns the return value of `expression`.
|
254
|
-
#
|
160
|
+
#
|
255
161
|
# The method finds an element matching the specified selector in the `ElementHandle`s subtree and passes it as a first
|
256
162
|
# argument to `expression`. See [Working with selectors](./selectors.md) for more details. If no elements match the
|
257
163
|
# selector, the method throws an error.
|
258
|
-
#
|
164
|
+
#
|
259
165
|
# If `expression` returns a [Promise], then [`method: ElementHandle.evalOnSelector`] would wait for the promise to resolve
|
260
166
|
# and return its value.
|
261
|
-
#
|
167
|
+
#
|
262
168
|
# Examples:
|
263
|
-
#
|
264
169
|
#
|
265
|
-
# ```js
|
266
|
-
# const tweetHandle = await page.$('.tweet');
|
267
|
-
# expect(await tweetHandle.$eval('.like', node => node.innerText)).toBe('100');
|
268
|
-
# expect(await tweetHandle.$eval('.retweets', node => node.innerText)).toBe('10');
|
269
|
-
# ```
|
270
|
-
#
|
271
|
-
# ```java
|
272
|
-
# ElementHandle tweetHandle = page.querySelector(".tweet");
|
273
|
-
# assertEquals("100", tweetHandle.evalOnSelector(".like", "node => node.innerText"));
|
274
|
-
# assertEquals("10", tweetHandle.evalOnSelector(".retweets", "node => node.innerText"));
|
275
|
-
# ```
|
276
|
-
#
|
277
|
-
# ```python async
|
278
|
-
# tweet_handle = await page.query_selector(".tweet")
|
279
|
-
# assert await tweet_handle.eval_on_selector(".like", "node => node.innerText") == "100"
|
280
|
-
# assert await tweet_handle.eval_on_selector(".retweets", "node => node.innerText") = "10"
|
281
|
-
# ```
|
282
|
-
#
|
283
170
|
# ```python sync
|
284
171
|
# tweet_handle = page.query_selector(".tweet")
|
285
172
|
# assert tweet_handle.eval_on_selector(".like", "node => node.innerText") == "100"
|
@@ -290,38 +177,22 @@ module Playwright
|
|
290
177
|
end
|
291
178
|
|
292
179
|
# Returns the return value of `expression`.
|
293
|
-
#
|
180
|
+
#
|
294
181
|
# The method finds all elements matching the specified selector in the `ElementHandle`'s subtree and passes an array of
|
295
182
|
# matched elements as a first argument to `expression`. See [Working with selectors](./selectors.md) for more details.
|
296
|
-
#
|
183
|
+
#
|
297
184
|
# If `expression` returns a [Promise], then [`method: ElementHandle.evalOnSelectorAll`] would wait for the promise to
|
298
185
|
# resolve and return its value.
|
299
|
-
#
|
186
|
+
#
|
300
187
|
# Examples:
|
301
|
-
#
|
188
|
+
#
|
302
189
|
# ```html
|
303
190
|
# <div class="feed">
|
304
191
|
# <div class="tweet">Hello!</div>
|
305
192
|
# <div class="tweet">Hi!</div>
|
306
193
|
# </div>
|
307
194
|
# ```
|
308
|
-
#
|
309
195
|
#
|
310
|
-
# ```js
|
311
|
-
# const feedHandle = await page.$('.feed');
|
312
|
-
# expect(await feedHandle.$$eval('.tweet', nodes => nodes.map(n => n.innerText))).toEqual(['Hello!', 'Hi!']);
|
313
|
-
# ```
|
314
|
-
#
|
315
|
-
# ```java
|
316
|
-
# ElementHandle feedHandle = page.querySelector(".feed");
|
317
|
-
# assertEquals(Arrays.asList("Hello!", "Hi!"), feedHandle.evalOnSelectorAll(".tweet", "nodes => nodes.map(n => n.innerText)"));
|
318
|
-
# ```
|
319
|
-
#
|
320
|
-
# ```python async
|
321
|
-
# feed_handle = await page.query_selector(".feed")
|
322
|
-
# assert await feed_handle.eval_on_selector_all(".tweet", "nodes => nodes.map(n => n.innerText)") == ["hello!", "hi!"]
|
323
|
-
# ```
|
324
|
-
#
|
325
196
|
# ```python sync
|
326
197
|
# feed_handle = page.query_selector(".feed")
|
327
198
|
# assert feed_handle.eval_on_selector_all(".tweet", "nodes => nodes.map(n => n.innerText)") == ["hello!", "hi!"]
|
@@ -331,10 +202,14 @@ module Playwright
|
|
331
202
|
end
|
332
203
|
|
333
204
|
# This method waits for [actionability](./actionability.md) checks, focuses the element, fills it and triggers an `input`
|
334
|
-
# event after filling.
|
335
|
-
#
|
336
|
-
#
|
337
|
-
#
|
205
|
+
# event after filling. Note that you can pass an empty string to clear the input field.
|
206
|
+
#
|
207
|
+
# If the target element is not an `<input>`, `<textarea>` or `[contenteditable]` element, this method throws an error.
|
208
|
+
# However, if the element is inside the `<label>` element that has an associated
|
209
|
+
# [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), the control will be filled
|
210
|
+
# instead.
|
211
|
+
#
|
212
|
+
# To send fine-grained keyboard events, use [`method: ElementHandle.type`].
|
338
213
|
def fill(value, noWaitAfter: nil, timeout: nil)
|
339
214
|
wrap_impl(@impl.fill(unwrap_impl(value), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
|
340
215
|
end
|
@@ -355,13 +230,18 @@ module Playwright
|
|
355
230
|
# 1. Scroll the element into view if needed.
|
356
231
|
# 1. Use [`property: Page.mouse`] to hover over the center of the element, or the specified `position`.
|
357
232
|
# 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
|
358
|
-
#
|
233
|
+
#
|
359
234
|
# If the element is detached from the DOM at any moment during the action, this method throws.
|
360
|
-
#
|
235
|
+
#
|
361
236
|
# When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
|
362
237
|
# zero timeout disables this.
|
363
|
-
def hover(
|
364
|
-
|
238
|
+
def hover(
|
239
|
+
force: nil,
|
240
|
+
modifiers: nil,
|
241
|
+
position: nil,
|
242
|
+
timeout: nil,
|
243
|
+
trial: nil)
|
244
|
+
wrap_impl(@impl.hover(force: unwrap_impl(force), modifiers: unwrap_impl(modifiers), position: unwrap_impl(position), timeout: unwrap_impl(timeout), trial: unwrap_impl(trial)))
|
365
245
|
end
|
366
246
|
|
367
247
|
# Returns the `element.innerHTML`.
|
@@ -410,21 +290,21 @@ module Playwright
|
|
410
290
|
end
|
411
291
|
|
412
292
|
# Focuses the element, and then uses [`method: Keyboard.down`] and [`method: Keyboard.up`].
|
413
|
-
#
|
293
|
+
#
|
414
294
|
# `key` can specify the intended [keyboardEvent.key](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key)
|
415
295
|
# value or a single character to generate the text for. A superset of the `key` values can be found
|
416
296
|
# [here](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values). Examples of the keys are:
|
417
|
-
#
|
297
|
+
#
|
418
298
|
# `F1` - `F12`, `Digit0`- `Digit9`, `KeyA`- `KeyZ`, `Backquote`, `Minus`, `Equal`, `Backslash`, `Backspace`, `Tab`,
|
419
299
|
# `Delete`, `Escape`, `ArrowDown`, `End`, `Enter`, `Home`, `Insert`, `PageDown`, `PageUp`, `ArrowRight`, `ArrowUp`, etc.
|
420
|
-
#
|
300
|
+
#
|
421
301
|
# Following modification shortcuts are also supported: `Shift`, `Control`, `Alt`, `Meta`, `ShiftLeft`.
|
422
|
-
#
|
302
|
+
#
|
423
303
|
# Holding down `Shift` will type the text that corresponds to the `key` in the upper case.
|
424
|
-
#
|
304
|
+
#
|
425
305
|
# If `key` is a single character, it is case-sensitive, so the values `a` and `A` will generate different respective
|
426
306
|
# texts.
|
427
|
-
#
|
307
|
+
#
|
428
308
|
# Shortcuts such as `key: "Control+o"` or `key: "Control+Shift+T"` are supported as well. When specified with the
|
429
309
|
# modifier, modifier is pressed and being held while the subsequent key is being pressed.
|
430
310
|
def press(key, delay: nil, noWaitAfter: nil, timeout: nil)
|
@@ -444,7 +324,7 @@ module Playwright
|
|
444
324
|
end
|
445
325
|
|
446
326
|
# Returns the buffer with the captured screenshot.
|
447
|
-
#
|
327
|
+
#
|
448
328
|
# This method waits for the [actionability](./actionability.md) checks, then scrolls element into view before taking a
|
449
329
|
# screenshot. If the element is detached from DOM, the method throws an error.
|
450
330
|
def screenshot(
|
@@ -459,50 +339,24 @@ module Playwright
|
|
459
339
|
# This method waits for [actionability](./actionability.md) checks, then tries to scroll element into view, unless it is
|
460
340
|
# completely visible as defined by
|
461
341
|
# [IntersectionObserver](https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API)'s `ratio`.
|
462
|
-
#
|
342
|
+
#
|
463
343
|
# Throws when `elementHandle` does not point to an element
|
464
344
|
# [connected](https://developer.mozilla.org/en-US/docs/Web/API/Node/isConnected) to a Document or a ShadowRoot.
|
465
345
|
def scroll_into_view_if_needed(timeout: nil)
|
466
346
|
wrap_impl(@impl.scroll_into_view_if_needed(timeout: unwrap_impl(timeout)))
|
467
347
|
end
|
468
348
|
|
349
|
+
# This method waits for [actionability](./actionability.md) checks, waits until all specified options are present in the
|
350
|
+
# `<select>` element and selects these options.
|
351
|
+
#
|
352
|
+
# If the target element is not a `<select>` element, this method throws an error. However, if the element is inside the
|
353
|
+
# `<label>` element that has an associated
|
354
|
+
# [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), the control will be used instead.
|
355
|
+
#
|
469
356
|
# Returns the array of option values that have been successfully selected.
|
470
|
-
#
|
471
|
-
# Triggers a `change` and `input` event once all the provided options have been selected.
|
472
|
-
#
|
473
|
-
#
|
474
|
-
# Will wait until all specified options are present in the `<select>` element.
|
475
|
-
#
|
476
|
-
#
|
477
|
-
# ```js
|
478
|
-
# // single selection matching the value
|
479
|
-
# handle.selectOption('blue');
|
480
|
-
#
|
481
|
-
# // single selection matching the label
|
482
|
-
# handle.selectOption({ label: 'Blue' });
|
483
|
-
#
|
484
|
-
# // multiple selection
|
485
|
-
# handle.selectOption(['red', 'green', 'blue']);
|
486
|
-
# ```
|
487
|
-
#
|
488
|
-
# ```java
|
489
|
-
# // single selection matching the value
|
490
|
-
# handle.selectOption("blue");
|
491
|
-
# // single selection matching the label
|
492
|
-
# handle.selectOption(new SelectOption().setLabel("Blue"));
|
493
|
-
# // multiple selection
|
494
|
-
# handle.selectOption(new String[] {"red", "green", "blue"});
|
495
|
-
# ```
|
496
|
-
#
|
497
|
-
# ```python async
|
498
|
-
# # single selection matching the value
|
499
|
-
# await handle.select_option("blue")
|
500
|
-
# # single selection matching the label
|
501
|
-
# await handle.select_option(label="blue")
|
502
|
-
# # multiple selection
|
503
|
-
# await handle.select_option(value=["red", "green", "blue"])
|
504
|
-
# ```
|
505
|
-
#
|
357
|
+
#
|
358
|
+
# Triggers a `change` and `input` event once all the provided options have been selected.
|
359
|
+
#
|
506
360
|
# ```python sync
|
507
361
|
# # single selection matching the value
|
508
362
|
# handle.select_option("blue")
|
@@ -511,7 +365,7 @@ module Playwright
|
|
511
365
|
# # multiple selection
|
512
366
|
# handle.select_option(value=["red", "green", "blue"])
|
513
367
|
# ```
|
514
|
-
#
|
368
|
+
#
|
515
369
|
# ```python sync
|
516
370
|
# # single selection matching the value
|
517
371
|
# handle.select_option("blue")
|
@@ -540,7 +394,7 @@ module Playwright
|
|
540
394
|
|
541
395
|
# This method expects `elementHandle` to point to an
|
542
396
|
# [input element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input).
|
543
|
-
#
|
397
|
+
#
|
544
398
|
# Sets the value of the file input to these file paths or files. If some of the `filePaths` are relative paths, then they
|
545
399
|
# are resolved relative to the the current working directory. For empty array, clears the selected files.
|
546
400
|
def set_input_files(files, noWaitAfter: nil, timeout: nil)
|
@@ -553,20 +407,21 @@ module Playwright
|
|
553
407
|
# 1. Scroll the element into view if needed.
|
554
408
|
# 1. Use [`property: Page.touchscreen`] to tap the center of the element, or the specified `position`.
|
555
409
|
# 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
|
556
|
-
#
|
410
|
+
#
|
557
411
|
# If the element is detached from the DOM at any moment during the action, this method throws.
|
558
|
-
#
|
412
|
+
#
|
559
413
|
# When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
|
560
414
|
# zero timeout disables this.
|
561
|
-
#
|
415
|
+
#
|
562
416
|
# > NOTE: `elementHandle.tap()` requires that the `hasTouch` option of the browser context be set to true.
|
563
417
|
def tap_point(
|
564
418
|
force: nil,
|
565
419
|
modifiers: nil,
|
566
420
|
noWaitAfter: nil,
|
567
421
|
position: nil,
|
568
|
-
timeout: nil
|
569
|
-
|
422
|
+
timeout: nil,
|
423
|
+
trial: nil)
|
424
|
+
wrap_impl(@impl.tap_point(force: unwrap_impl(force), modifiers: unwrap_impl(modifiers), noWaitAfter: unwrap_impl(noWaitAfter), position: unwrap_impl(position), timeout: unwrap_impl(timeout), trial: unwrap_impl(trial)))
|
570
425
|
end
|
571
426
|
|
572
427
|
# Returns the `node.textContent`.
|
@@ -575,51 +430,16 @@ module Playwright
|
|
575
430
|
end
|
576
431
|
|
577
432
|
# Focuses the element, and then sends a `keydown`, `keypress`/`input`, and `keyup` event for each character in the text.
|
578
|
-
#
|
433
|
+
#
|
579
434
|
# To press a special key, like `Control` or `ArrowDown`, use [`method: ElementHandle.press`].
|
580
|
-
#
|
581
435
|
#
|
582
|
-
# ```js
|
583
|
-
# await elementHandle.type('Hello'); // Types instantly
|
584
|
-
# await elementHandle.type('World', {delay: 100}); // Types slower, like a user
|
585
|
-
# ```
|
586
|
-
#
|
587
|
-
# ```java
|
588
|
-
# elementHandle.type("Hello"); // Types instantly
|
589
|
-
# elementHandle.type("World", new ElementHandle.TypeOptions().setDelay(100)); // Types slower, like a user
|
590
|
-
# ```
|
591
|
-
#
|
592
|
-
# ```python async
|
593
|
-
# await element_handle.type("hello") # types instantly
|
594
|
-
# await element_handle.type("world", delay=100) # types slower, like a user
|
595
|
-
# ```
|
596
|
-
#
|
597
436
|
# ```python sync
|
598
437
|
# element_handle.type("hello") # types instantly
|
599
438
|
# element_handle.type("world", delay=100) # types slower, like a user
|
600
439
|
# ```
|
601
|
-
#
|
440
|
+
#
|
602
441
|
# An example of typing into a text field and then submitting the form:
|
603
|
-
#
|
604
442
|
#
|
605
|
-
# ```js
|
606
|
-
# const elementHandle = await page.$('input');
|
607
|
-
# await elementHandle.type('some text');
|
608
|
-
# await elementHandle.press('Enter');
|
609
|
-
# ```
|
610
|
-
#
|
611
|
-
# ```java
|
612
|
-
# ElementHandle elementHandle = page.querySelector("input");
|
613
|
-
# elementHandle.type("some text");
|
614
|
-
# elementHandle.press("Enter");
|
615
|
-
# ```
|
616
|
-
#
|
617
|
-
# ```python async
|
618
|
-
# element_handle = await page.query_selector("input")
|
619
|
-
# await element_handle.type("some text")
|
620
|
-
# await element_handle.press("Enter")
|
621
|
-
# ```
|
622
|
-
#
|
623
443
|
# ```python sync
|
624
444
|
# element_handle = page.query_selector("input")
|
625
445
|
# element_handle.type("some text")
|
@@ -637,17 +457,22 @@ module Playwright
|
|
637
457
|
# 1. Use [`property: Page.mouse`] to click in the center of the element.
|
638
458
|
# 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
|
639
459
|
# 1. Ensure that the element is now unchecked. If not, this method throws.
|
640
|
-
#
|
460
|
+
#
|
641
461
|
# If the element is detached from the DOM at any moment during the action, this method throws.
|
642
|
-
#
|
462
|
+
#
|
643
463
|
# When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
|
644
464
|
# zero timeout disables this.
|
645
|
-
def uncheck(
|
646
|
-
|
465
|
+
def uncheck(
|
466
|
+
force: nil,
|
467
|
+
noWaitAfter: nil,
|
468
|
+
position: nil,
|
469
|
+
timeout: nil,
|
470
|
+
trial: nil)
|
471
|
+
wrap_impl(@impl.uncheck(force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), position: unwrap_impl(position), timeout: unwrap_impl(timeout), trial: unwrap_impl(trial)))
|
647
472
|
end
|
648
473
|
|
649
474
|
# Returns when the element satisfies the `state`.
|
650
|
-
#
|
475
|
+
#
|
651
476
|
# Depending on the `state` parameter, this method waits for one of the [actionability](./actionability.md) checks to pass.
|
652
477
|
# This method throws when the element is detached while waiting, unless waiting for the `"hidden"` state.
|
653
478
|
# - `"visible"` Wait until the element is [visible](./actionability.md#visible).
|
@@ -658,7 +483,7 @@ module Playwright
|
|
658
483
|
# - `"enabled"` Wait until the element is [enabled](./actionability.md#enabled).
|
659
484
|
# - `"disabled"` Wait until the element is [not enabled](./actionability.md#enabled).
|
660
485
|
# - `"editable"` Wait until the element is [editable](./actionability.md#editable).
|
661
|
-
#
|
486
|
+
#
|
662
487
|
# If the element does not satisfy the condition for the `timeout` milliseconds, this method will throw.
|
663
488
|
def wait_for_element_state(state, timeout: nil)
|
664
489
|
wrap_impl(@impl.wait_for_element_state(unwrap_impl(state), timeout: unwrap_impl(timeout)))
|
@@ -666,42 +491,19 @@ module Playwright
|
|
666
491
|
|
667
492
|
# Returns element specified by selector when it satisfies `state` option. Returns `null` if waiting for `hidden` or
|
668
493
|
# `detached`.
|
669
|
-
#
|
494
|
+
#
|
670
495
|
# Wait for the `selector` relative to the element handle to satisfy `state` option (either appear/disappear from dom, or
|
671
496
|
# become visible/hidden). If at the moment of calling the method `selector` already satisfies the condition, the method
|
672
497
|
# will return immediately. If the selector doesn't satisfy the condition for the `timeout` milliseconds, the function will
|
673
498
|
# throw.
|
674
|
-
#
|
675
499
|
#
|
676
|
-
# ```js
|
677
|
-
# await page.setContent(`<div><span></span></div>`);
|
678
|
-
# const div = await page.$('div');
|
679
|
-
# // Waiting for the 'span' selector relative to the div.
|
680
|
-
# const span = await div.waitForSelector('span', { state: 'attached' });
|
681
|
-
# ```
|
682
|
-
#
|
683
|
-
# ```java
|
684
|
-
# page.setContent("<div><span></span></div>");
|
685
|
-
# ElementHandle div = page.querySelector("div");
|
686
|
-
# // Waiting for the "span" selector relative to the div.
|
687
|
-
# ElementHandle span = div.waitForSelector("span", new ElementHandle.WaitForSelectorOptions()
|
688
|
-
# .setState(WaitForSelectorState.ATTACHED));
|
689
|
-
# ```
|
690
|
-
#
|
691
|
-
# ```python async
|
692
|
-
# await page.set_content("<div><span></span></div>")
|
693
|
-
# div = await page.query_selector("div")
|
694
|
-
# # waiting for the "span" selector relative to the div.
|
695
|
-
# span = await div.wait_for_selector("span", state="attached")
|
696
|
-
# ```
|
697
|
-
#
|
698
500
|
# ```python sync
|
699
501
|
# page.set_content("<div><span></span></div>")
|
700
502
|
# div = page.query_selector("div")
|
701
503
|
# # waiting for the "span" selector relative to the div.
|
702
504
|
# span = div.wait_for_selector("span", state="attached")
|
703
505
|
# ```
|
704
|
-
#
|
506
|
+
#
|
705
507
|
# > NOTE: This method does not work across navigations, use [`method: Page.waitForSelector`] instead.
|
706
508
|
def wait_for_selector(selector, state: nil, timeout: nil)
|
707
509
|
wrap_impl(@impl.wait_for_selector(unwrap_impl(selector), state: unwrap_impl(state), timeout: unwrap_impl(timeout)))
|