playwright-ruby-client 0.6.0 → 0.6.5
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 +188 -0
- data/documentation/docs/api/browser_context.md +397 -0
- data/documentation/docs/api/browser_type.md +158 -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 +26 -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 +79 -0
- data/documentation/docs/api/selectors.md +23 -0
- data/documentation/docs/api/touchscreen.md +8 -0
- data/documentation/docs/api/tracing.md +47 -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 +205 -0
- data/documentation/docs/article/guides/recording_video.md +79 -0
- data/{docs → documentation/docs/include}/api_coverage.md +4 -3
- 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 +8785 -0
- data/lib/playwright/channel_owners/binding_call.rb +33 -0
- data/lib/playwright/channel_owners/browser.rb +15 -27
- data/lib/playwright/channel_owners/browser_context.rb +15 -7
- data/lib/playwright/channel_owners/browser_type.rb +23 -8
- 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 +18 -8
- data/lib/playwright/channel_owners/worker.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 +9 -9
- data/lib/playwright/version.rb +1 -1
- data/lib/playwright_api/accessibility.rb +7 -89
- data/lib/playwright_api/android.rb +10 -66
- data/lib/playwright_api/android_device.rb +10 -9
- data/lib/playwright_api/browser.rb +21 -172
- data/lib/playwright_api/browser_context.rb +54 -617
- data/lib/playwright_api/browser_type.rb +20 -108
- 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 +181 -1647
- data/lib/playwright_api/playwright.rb +14 -117
- data/lib/playwright_api/request.rb +15 -121
- data/lib/playwright_api/response.rb +7 -7
- data/lib/playwright_api/route.rb +8 -105
- data/lib/playwright_api/selectors.rb +6 -97
- data/lib/playwright_api/tracing.rb +7 -73
- data/lib/playwright_api/web_socket.rb +1 -1
- data/lib/playwright_api/worker.rb +28 -42
- metadata +57 -4
- data/lib/playwright/javascript/function.rb +0 -67
@@ -1,13 +1,3 @@
|
|
1
1
|
require_relative './javascript/expression'
|
2
|
-
require_relative './javascript/function'
|
3
2
|
require_relative './javascript/value_parser'
|
4
3
|
require_relative './javascript/value_serializer'
|
5
|
-
|
6
|
-
module Playwright
|
7
|
-
module JavaScript
|
8
|
-
# Detect if str is likely to be a function
|
9
|
-
module_function def function?(str)
|
10
|
-
['async', 'function'].any? { |key| str.strip.start_with?(key) } || str.include?('=>')
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
@@ -1,16 +1,15 @@
|
|
1
1
|
module Playwright
|
2
2
|
module JavaScript
|
3
3
|
class Expression
|
4
|
-
def initialize(expression)
|
4
|
+
def initialize(expression, arg)
|
5
5
|
@expression = expression
|
6
|
-
@serialized_arg = ValueSerializer.new(
|
6
|
+
@serialized_arg = ValueSerializer.new(arg).serialize
|
7
7
|
end
|
8
8
|
|
9
9
|
def evaluate(channel)
|
10
10
|
value = channel.send_message_to_server(
|
11
11
|
'evaluateExpression',
|
12
12
|
expression: @expression,
|
13
|
-
isFunction: false,
|
14
13
|
arg: @serialized_arg,
|
15
14
|
)
|
16
15
|
ValueParser.new(value).parse
|
@@ -20,7 +19,6 @@ module Playwright
|
|
20
19
|
resp = channel.send_message_to_server(
|
21
20
|
'evaluateExpressionHandle',
|
22
21
|
expression: @expression,
|
23
|
-
isFunction: false,
|
24
22
|
arg: @serialized_arg,
|
25
23
|
)
|
26
24
|
::Playwright::ChannelOwner.from(resp)
|
@@ -31,7 +29,6 @@ module Playwright
|
|
31
29
|
'evalOnSelector',
|
32
30
|
selector: selector,
|
33
31
|
expression: @expression,
|
34
|
-
isFunction: false,
|
35
32
|
arg: @serialized_arg,
|
36
33
|
)
|
37
34
|
ValueParser.new(value).parse
|
@@ -42,7 +39,6 @@ module Playwright
|
|
42
39
|
'evalOnSelectorAll',
|
43
40
|
selector: selector,
|
44
41
|
expression: @expression,
|
45
|
-
isFunction: false,
|
46
42
|
arg: @serialized_arg,
|
47
43
|
)
|
48
44
|
ValueParser.new(value).parse
|
@@ -51,7 +47,6 @@ module Playwright
|
|
51
47
|
def wait_for_function(channel, polling:, timeout:)
|
52
48
|
params = {
|
53
49
|
expression: @expression,
|
54
|
-
isFunction: false,
|
55
50
|
arg: @serialized_arg,
|
56
51
|
polling: polling,
|
57
52
|
timeout: timeout,
|
@@ -18,6 +18,17 @@ module Playwright
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
+
# Unwrap ChannelOwner / ApiImplementation.
|
22
|
+
# @note Intended for internal use only.
|
23
|
+
def self.unwrap(api)
|
24
|
+
case api
|
25
|
+
when PlaywrightApi
|
26
|
+
api.instance_variable_get(:@impl)
|
27
|
+
else
|
28
|
+
api
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
21
32
|
class ChannelOwnerWrapper
|
22
33
|
def initialize(impl)
|
23
34
|
impl_class_name = impl.class.name
|
@@ -114,6 +125,8 @@ module Playwright
|
|
114
125
|
private def wrap_impl(object)
|
115
126
|
if object.is_a?(Array)
|
116
127
|
object.map { |obj| wrap_impl(obj) }
|
128
|
+
elsif object.is_a?(Hash)
|
129
|
+
object.map { |key, obj| [key, wrap_impl(obj)] }.to_h
|
117
130
|
else
|
118
131
|
::Playwright::PlaywrightApi.wrap(object)
|
119
132
|
end
|
@@ -122,8 +135,10 @@ module Playwright
|
|
122
135
|
private def unwrap_impl(object)
|
123
136
|
if object.is_a?(Array)
|
124
137
|
object.map { |obj| unwrap_impl(obj) }
|
138
|
+
elsif object.is_a?(Hash)
|
139
|
+
object.map { |key, obj| [key, unwrap_impl(obj)] }.to_h
|
125
140
|
elsif object.is_a?(PlaywrightApi)
|
126
|
-
|
141
|
+
::Playwright::PlaywrightApi.unwrap(object)
|
127
142
|
else
|
128
143
|
object
|
129
144
|
end
|
@@ -15,17 +15,17 @@ module Playwright
|
|
15
15
|
end
|
16
16
|
|
17
17
|
# Stop tracing.
|
18
|
-
def stop
|
18
|
+
def stop(path: nil)
|
19
19
|
@channel.send_message_to_server('tracingStop')
|
20
|
-
end
|
21
20
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
21
|
+
if path
|
22
|
+
resp = @channel.send_message_to_server('tracingExport')
|
23
|
+
artifact = ChannelOwners::Artifact.from(resp)
|
24
|
+
# if self._context._browser:
|
25
|
+
# artifact._is_remote = self._context._browser._is_remote
|
26
|
+
artifact.save_as(path)
|
27
|
+
artifact.delete
|
28
|
+
end
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
data/lib/playwright/version.rb
CHANGED
@@ -2,13 +2,13 @@ module Playwright
|
|
2
2
|
# The Accessibility class provides methods for inspecting Chromium's accessibility tree. The accessibility tree is used by
|
3
3
|
# assistive technology such as [screen readers](https://en.wikipedia.org/wiki/Screen_reader) or
|
4
4
|
# [switches](https://en.wikipedia.org/wiki/Switch_access).
|
5
|
-
#
|
5
|
+
#
|
6
6
|
# Accessibility is a very platform-specific thing. On different platforms, there are different screen readers that might
|
7
7
|
# have wildly different output.
|
8
|
-
#
|
8
|
+
#
|
9
9
|
# Rendering engines of Chromium, Firefox and WebKit have a concept of "accessibility tree", which is then translated into
|
10
10
|
# different platform-specific APIs. Accessibility namespace gives access to this Accessibility Tree.
|
11
|
-
#
|
11
|
+
#
|
12
12
|
# Most of the accessibility tree gets filtered out when converting from internal browser AX Tree to Platform-specific
|
13
13
|
# AX-Tree or by assistive technologies themselves. By default, Playwright tries to approximate this filtering, exposing
|
14
14
|
# only the "interesting" nodes of the tree.
|
@@ -16,101 +16,19 @@ module Playwright
|
|
16
16
|
|
17
17
|
# Captures the current state of the accessibility tree. The returned object represents the root accessible node of the
|
18
18
|
# page.
|
19
|
-
#
|
19
|
+
#
|
20
20
|
# > NOTE: The Chromium accessibility tree contains nodes that go unused on most platforms and by most screen readers.
|
21
21
|
# Playwright will discard them as well for an easier to process tree, unless `interestingOnly` is set to `false`.
|
22
|
-
#
|
22
|
+
#
|
23
23
|
# An example of dumping the entire accessibility tree:
|
24
|
-
#
|
25
24
|
#
|
26
|
-
# ```js
|
27
|
-
# const snapshot = await page.accessibility.snapshot();
|
28
|
-
# console.log(snapshot);
|
29
|
-
# ```
|
30
|
-
#
|
31
|
-
# ```java
|
32
|
-
# String snapshot = page.accessibility().snapshot();
|
33
|
-
# System.out.println(snapshot);
|
34
|
-
# ```
|
35
|
-
#
|
36
|
-
# ```python async
|
37
|
-
# snapshot = await page.accessibility.snapshot()
|
38
|
-
# print(snapshot)
|
39
|
-
# ```
|
40
|
-
#
|
41
25
|
# ```python sync
|
42
26
|
# snapshot = page.accessibility.snapshot()
|
43
27
|
# print(snapshot)
|
44
28
|
# ```
|
45
|
-
#
|
46
|
-
# ```csharp
|
47
|
-
# var accessibilitySnapshot = await page.Accessibility.SnapshotAsync();
|
48
|
-
# Console.WriteLine(System.Text.Json.JsonSerializer.Serialize(accessibilitySnapshot));
|
49
|
-
# ```
|
50
|
-
#
|
29
|
+
#
|
51
30
|
# An example of logging the focused node's name:
|
52
|
-
#
|
53
31
|
#
|
54
|
-
# ```js
|
55
|
-
# const snapshot = await page.accessibility.snapshot();
|
56
|
-
# const node = findFocusedNode(snapshot);
|
57
|
-
# console.log(node && node.name);
|
58
|
-
#
|
59
|
-
# function findFocusedNode(node) {
|
60
|
-
# if (node.focused)
|
61
|
-
# return node;
|
62
|
-
# for (const child of node.children || []) {
|
63
|
-
# const foundNode = findFocusedNode(child);
|
64
|
-
# return foundNode;
|
65
|
-
# }
|
66
|
-
# return null;
|
67
|
-
# }
|
68
|
-
# ```
|
69
|
-
#
|
70
|
-
# ```csharp
|
71
|
-
# static AccessibilitySnapshotResult findFocusedNode(AccessibilitySnapshotResult root)
|
72
|
-
# {
|
73
|
-
# var nodes = new Stack<AccessibilitySnapshotResult>(new[] { root });
|
74
|
-
# while (nodes.Count > 0)
|
75
|
-
# {
|
76
|
-
# var node = nodes.Pop();
|
77
|
-
# if (node.Focused) return node;
|
78
|
-
# foreach (var innerNode in node.Children)
|
79
|
-
# {
|
80
|
-
# nodes.Push(innerNode);
|
81
|
-
# }
|
82
|
-
# }
|
83
|
-
#
|
84
|
-
# return null;
|
85
|
-
# }
|
86
|
-
#
|
87
|
-
# var accessibilitySnapshot = await page.Accessibility.SnapshotAsync();
|
88
|
-
# Console.WriteLine(System.Text.Json.JsonSerializer.Serialize(accessibilitySnapshot));
|
89
|
-
# var focusedNode = findFocusedNode(accessibilitySnapshot);
|
90
|
-
# if (focusedNode != null)
|
91
|
-
# Console.WriteLine(focusedNode.Name);
|
92
|
-
# ```
|
93
|
-
#
|
94
|
-
# ```java
|
95
|
-
# // FIXME
|
96
|
-
# String snapshot = page.accessibility().snapshot();
|
97
|
-
# ```
|
98
|
-
#
|
99
|
-
# ```python async
|
100
|
-
# def find_focused_node(node):
|
101
|
-
# if (node.get("focused"))
|
102
|
-
# return node
|
103
|
-
# for child in (node.get("children") or []):
|
104
|
-
# found_node = find_focused_node(child)
|
105
|
-
# return found_node
|
106
|
-
# return None
|
107
|
-
#
|
108
|
-
# snapshot = await page.accessibility.snapshot()
|
109
|
-
# node = find_focused_node(snapshot)
|
110
|
-
# if node:
|
111
|
-
# print(node["name"])
|
112
|
-
# ```
|
113
|
-
#
|
114
32
|
# ```python sync
|
115
33
|
# def find_focused_node(node):
|
116
34
|
# if (node.get("focused"))
|
@@ -119,7 +37,7 @@ module Playwright
|
|
119
37
|
# found_node = find_focused_node(child)
|
120
38
|
# return found_node
|
121
39
|
# return None
|
122
|
-
#
|
40
|
+
#
|
123
41
|
# snapshot = page.accessibility.snapshot()
|
124
42
|
# node = find_focused_node(snapshot)
|
125
43
|
# if node:
|
@@ -1,69 +1,13 @@
|
|
1
1
|
module Playwright
|
2
|
-
# Playwright has **experimental** support for Android automation.
|
3
|
-
#
|
2
|
+
# Playwright has **experimental** support for Android automation. See [here](./mobile.md) for more information. You can
|
3
|
+
# access android namespace via:
|
4
4
|
#
|
5
|
-
# ```js
|
6
|
-
# const { _android: android } = require('playwright');
|
7
|
-
# ```
|
8
|
-
#
|
9
5
|
# An example of the Android automation script would be:
|
10
|
-
#
|
11
6
|
#
|
12
|
-
# ```js
|
13
|
-
# const { _android: android } = require('playwright');
|
14
|
-
#
|
15
|
-
# (async () => {
|
16
|
-
# // Connect to the device.
|
17
|
-
# const [device] = await android.devices();
|
18
|
-
# console.log(`Model: ${device.model()}`);
|
19
|
-
# console.log(`Serial: ${device.serial()}`);
|
20
|
-
# // Take screenshot of the whole device.
|
21
|
-
# await device.screenshot({ path: 'device.png' });
|
22
|
-
#
|
23
|
-
# {
|
24
|
-
# // --------------------- WebView -----------------------
|
25
|
-
#
|
26
|
-
# // Launch an application with WebView.
|
27
|
-
# await device.shell('am force-stop org.chromium.webview_shell');
|
28
|
-
# await device.shell('am start org.chromium.webview_shell/.WebViewBrowserActivity');
|
29
|
-
# // Get the WebView.
|
30
|
-
# const webview = await device.webView({ pkg: 'org.chromium.webview_shell' });
|
31
|
-
#
|
32
|
-
# // Fill the input box.
|
33
|
-
# await device.fill({ res: 'org.chromium.webview_shell:id/url_field' }, 'github.com/microsoft/playwright');
|
34
|
-
# await device.press({ res: 'org.chromium.webview_shell:id/url_field' }, 'Enter');
|
35
|
-
#
|
36
|
-
# // Work with WebView's page as usual.
|
37
|
-
# const page = await webview.page();
|
38
|
-
# await page.waitForNavigation({ url: /.*microsoft\/playwright.*/ });
|
39
|
-
# console.log(await page.title());
|
40
|
-
# }
|
41
|
-
#
|
42
|
-
# {
|
43
|
-
# // --------------------- Browser -----------------------
|
44
|
-
#
|
45
|
-
# // Launch Chrome browser.
|
46
|
-
# await device.shell('am force-stop com.android.chrome');
|
47
|
-
# const context = await device.launchBrowser();
|
48
|
-
#
|
49
|
-
# // Use BrowserContext as usual.
|
50
|
-
# const page = await context.newPage();
|
51
|
-
# await page.goto('https://webkit.org/');
|
52
|
-
# console.log(await page.evaluate(() => window.location.href));
|
53
|
-
# await page.screenshot({ path: 'page.png' });
|
54
|
-
#
|
55
|
-
# await context.close();
|
56
|
-
# }
|
57
|
-
#
|
58
|
-
# // Close the device.
|
59
|
-
# await device.close();
|
60
|
-
# })();
|
61
|
-
# ```
|
62
|
-
#
|
63
7
|
# Note that since you don't need Playwright to install web browsers when testing Android, you can omit browser download
|
64
8
|
# via setting the following environment variable when installing Playwright:
|
65
|
-
#
|
66
|
-
# ```
|
9
|
+
#
|
10
|
+
# ```bash js
|
67
11
|
# PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm i -D playwright
|
68
12
|
# ```
|
69
13
|
class Android < PlaywrightApi
|
@@ -79,12 +23,6 @@ module Playwright
|
|
79
23
|
end
|
80
24
|
alias_method :default_timeout=, :set_default_timeout
|
81
25
|
|
82
|
-
# -- inherited from EventEmitter --
|
83
|
-
# @nodoc
|
84
|
-
def off(event, callback)
|
85
|
-
event_emitter_proxy.off(event, callback)
|
86
|
-
end
|
87
|
-
|
88
26
|
# -- inherited from EventEmitter --
|
89
27
|
# @nodoc
|
90
28
|
def once(event, callback)
|
@@ -97,6 +35,12 @@ module Playwright
|
|
97
35
|
event_emitter_proxy.on(event, callback)
|
98
36
|
end
|
99
37
|
|
38
|
+
# -- inherited from EventEmitter --
|
39
|
+
# @nodoc
|
40
|
+
def off(event, callback)
|
41
|
+
event_emitter_proxy.off(event, callback)
|
42
|
+
end
|
43
|
+
|
100
44
|
private def event_emitter_proxy
|
101
45
|
@event_emitter_proxy ||= EventEmitterProxy.new(self, @impl)
|
102
46
|
end
|
@@ -59,12 +59,13 @@ module Playwright
|
|
59
59
|
record_har_path: nil,
|
60
60
|
record_video_dir: nil,
|
61
61
|
record_video_size: nil,
|
62
|
+
reducedMotion: nil,
|
62
63
|
screen: nil,
|
63
64
|
timezoneId: nil,
|
64
65
|
userAgent: nil,
|
65
66
|
viewport: nil,
|
66
67
|
&block)
|
67
|
-
wrap_impl(@impl.launch_browser(acceptDownloads: unwrap_impl(acceptDownloads), bypassCSP: unwrap_impl(bypassCSP), colorScheme: unwrap_impl(colorScheme), command: unwrap_impl(command), deviceScaleFactor: unwrap_impl(deviceScaleFactor), extraHTTPHeaders: unwrap_impl(extraHTTPHeaders), geolocation: unwrap_impl(geolocation), hasTouch: unwrap_impl(hasTouch), httpCredentials: unwrap_impl(httpCredentials), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), isMobile: unwrap_impl(isMobile), javaScriptEnabled: unwrap_impl(javaScriptEnabled), locale: unwrap_impl(locale), noViewport: unwrap_impl(noViewport), offline: unwrap_impl(offline), permissions: unwrap_impl(permissions), record_har_omit_content: unwrap_impl(record_har_omit_content), record_har_path: unwrap_impl(record_har_path), record_video_dir: unwrap_impl(record_video_dir), record_video_size: unwrap_impl(record_video_size), screen: unwrap_impl(screen), timezoneId: unwrap_impl(timezoneId), userAgent: unwrap_impl(userAgent), viewport: unwrap_impl(viewport), &wrap_block_call(block)))
|
68
|
+
wrap_impl(@impl.launch_browser(acceptDownloads: unwrap_impl(acceptDownloads), bypassCSP: unwrap_impl(bypassCSP), colorScheme: unwrap_impl(colorScheme), command: unwrap_impl(command), deviceScaleFactor: unwrap_impl(deviceScaleFactor), extraHTTPHeaders: unwrap_impl(extraHTTPHeaders), geolocation: unwrap_impl(geolocation), hasTouch: unwrap_impl(hasTouch), httpCredentials: unwrap_impl(httpCredentials), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), isMobile: unwrap_impl(isMobile), javaScriptEnabled: unwrap_impl(javaScriptEnabled), locale: unwrap_impl(locale), noViewport: unwrap_impl(noViewport), offline: unwrap_impl(offline), permissions: unwrap_impl(permissions), record_har_omit_content: unwrap_impl(record_har_omit_content), record_har_path: unwrap_impl(record_har_path), record_video_dir: unwrap_impl(record_video_dir), record_video_size: unwrap_impl(record_video_size), reducedMotion: unwrap_impl(reducedMotion), screen: unwrap_impl(screen), timezoneId: unwrap_impl(timezoneId), userAgent: unwrap_impl(userAgent), viewport: unwrap_impl(viewport), &wrap_block_call(block)))
|
68
69
|
end
|
69
70
|
|
70
71
|
# Performs a long tap on the widget defined by `selector`.
|
@@ -160,20 +161,14 @@ module Playwright
|
|
160
161
|
raise NotImplementedError.new('web_views is not implemented yet.')
|
161
162
|
end
|
162
163
|
|
163
|
-
# @nodoc
|
164
|
-
def tap_on(selector, duration: nil, timeout: nil)
|
165
|
-
wrap_impl(@impl.tap_on(unwrap_impl(selector), duration: unwrap_impl(duration), timeout: unwrap_impl(timeout)))
|
166
|
-
end
|
167
|
-
|
168
164
|
# @nodoc
|
169
165
|
def tree
|
170
166
|
wrap_impl(@impl.tree)
|
171
167
|
end
|
172
168
|
|
173
|
-
# -- inherited from EventEmitter --
|
174
169
|
# @nodoc
|
175
|
-
def
|
176
|
-
|
170
|
+
def tap_on(selector, duration: nil, timeout: nil)
|
171
|
+
wrap_impl(@impl.tap_on(unwrap_impl(selector), duration: unwrap_impl(duration), timeout: unwrap_impl(timeout)))
|
177
172
|
end
|
178
173
|
|
179
174
|
# -- inherited from EventEmitter --
|
@@ -188,6 +183,12 @@ module Playwright
|
|
188
183
|
event_emitter_proxy.on(event, callback)
|
189
184
|
end
|
190
185
|
|
186
|
+
# -- inherited from EventEmitter --
|
187
|
+
# @nodoc
|
188
|
+
def off(event, callback)
|
189
|
+
event_emitter_proxy.off(event, callback)
|
190
|
+
end
|
191
|
+
|
191
192
|
private def event_emitter_proxy
|
192
193
|
@event_emitter_proxy ||= EventEmitterProxy.new(self, @impl)
|
193
194
|
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,
|
@@ -218,17 +84,18 @@ module Playwright
|
|
218
84
|
record_har_path: nil,
|
219
85
|
record_video_dir: nil,
|
220
86
|
record_video_size: nil,
|
87
|
+
reducedMotion: nil,
|
221
88
|
screen: nil,
|
222
89
|
storageState: nil,
|
223
90
|
timezoneId: nil,
|
224
91
|
userAgent: nil,
|
225
92
|
viewport: nil,
|
226
93
|
&block)
|
227
|
-
wrap_impl(@impl.new_context(acceptDownloads: unwrap_impl(acceptDownloads), bypassCSP: unwrap_impl(bypassCSP), colorScheme: unwrap_impl(colorScheme), deviceScaleFactor: unwrap_impl(deviceScaleFactor), extraHTTPHeaders: unwrap_impl(extraHTTPHeaders), geolocation: unwrap_impl(geolocation), hasTouch: unwrap_impl(hasTouch), httpCredentials: unwrap_impl(httpCredentials), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), isMobile: unwrap_impl(isMobile), javaScriptEnabled: unwrap_impl(javaScriptEnabled), locale: unwrap_impl(locale), noViewport: unwrap_impl(noViewport), offline: unwrap_impl(offline), permissions: unwrap_impl(permissions), proxy: unwrap_impl(proxy), record_har_omit_content: unwrap_impl(record_har_omit_content), record_har_path: unwrap_impl(record_har_path), record_video_dir: unwrap_impl(record_video_dir), record_video_size: unwrap_impl(record_video_size), screen: unwrap_impl(screen), storageState: unwrap_impl(storageState), timezoneId: unwrap_impl(timezoneId), userAgent: unwrap_impl(userAgent), viewport: unwrap_impl(viewport), &wrap_block_call(block)))
|
94
|
+
wrap_impl(@impl.new_context(acceptDownloads: unwrap_impl(acceptDownloads), bypassCSP: unwrap_impl(bypassCSP), colorScheme: unwrap_impl(colorScheme), deviceScaleFactor: unwrap_impl(deviceScaleFactor), extraHTTPHeaders: unwrap_impl(extraHTTPHeaders), geolocation: unwrap_impl(geolocation), hasTouch: unwrap_impl(hasTouch), httpCredentials: unwrap_impl(httpCredentials), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), isMobile: unwrap_impl(isMobile), javaScriptEnabled: unwrap_impl(javaScriptEnabled), locale: unwrap_impl(locale), noViewport: unwrap_impl(noViewport), offline: unwrap_impl(offline), permissions: unwrap_impl(permissions), proxy: unwrap_impl(proxy), record_har_omit_content: unwrap_impl(record_har_omit_content), record_har_path: unwrap_impl(record_har_path), record_video_dir: unwrap_impl(record_video_dir), record_video_size: unwrap_impl(record_video_size), reducedMotion: unwrap_impl(reducedMotion), screen: unwrap_impl(screen), storageState: unwrap_impl(storageState), timezoneId: unwrap_impl(timezoneId), userAgent: unwrap_impl(userAgent), viewport: unwrap_impl(viewport), &wrap_block_call(block)))
|
228
95
|
end
|
229
96
|
|
230
97
|
# Creates a new page in a new browser context. Closing this page will close the context as well.
|
231
|
-
#
|
98
|
+
#
|
232
99
|
# This is a convenience API that should only be used for the single-page scenarios and short snippets. Production code and
|
233
100
|
# testing frameworks should explicitly create [`method: Browser.newContext`] followed by the
|
234
101
|
# [`method: BrowserContext.newPage`] to control their exact life times.
|
@@ -253,39 +120,21 @@ module Playwright
|
|
253
120
|
record_har_path: nil,
|
254
121
|
record_video_dir: nil,
|
255
122
|
record_video_size: nil,
|
123
|
+
reducedMotion: nil,
|
256
124
|
screen: nil,
|
257
125
|
storageState: nil,
|
258
126
|
timezoneId: nil,
|
259
127
|
userAgent: nil,
|
260
|
-
viewport: nil
|
261
|
-
|
128
|
+
viewport: nil,
|
129
|
+
&block)
|
130
|
+
wrap_impl(@impl.new_page(acceptDownloads: unwrap_impl(acceptDownloads), bypassCSP: unwrap_impl(bypassCSP), colorScheme: unwrap_impl(colorScheme), deviceScaleFactor: unwrap_impl(deviceScaleFactor), extraHTTPHeaders: unwrap_impl(extraHTTPHeaders), geolocation: unwrap_impl(geolocation), hasTouch: unwrap_impl(hasTouch), httpCredentials: unwrap_impl(httpCredentials), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), isMobile: unwrap_impl(isMobile), javaScriptEnabled: unwrap_impl(javaScriptEnabled), locale: unwrap_impl(locale), noViewport: unwrap_impl(noViewport), offline: unwrap_impl(offline), permissions: unwrap_impl(permissions), proxy: unwrap_impl(proxy), record_har_omit_content: unwrap_impl(record_har_omit_content), record_har_path: unwrap_impl(record_har_path), record_video_dir: unwrap_impl(record_video_dir), record_video_size: unwrap_impl(record_video_size), reducedMotion: unwrap_impl(reducedMotion), screen: unwrap_impl(screen), storageState: unwrap_impl(storageState), timezoneId: unwrap_impl(timezoneId), userAgent: unwrap_impl(userAgent), viewport: unwrap_impl(viewport), &wrap_block_call(block)))
|
262
131
|
end
|
263
132
|
|
264
133
|
# > NOTE: Tracing is only supported on Chromium-based browsers.
|
265
|
-
#
|
134
|
+
#
|
266
135
|
# You can use [`method: Browser.startTracing`] and [`method: Browser.stopTracing`] to create a trace file that can be
|
267
136
|
# opened in Chrome DevTools performance panel.
|
268
|
-
#
|
269
137
|
#
|
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
138
|
# ```python sync
|
290
139
|
# browser.start_tracing(page, path="trace.json")
|
291
140
|
# page.goto("https://www.google.com")
|
@@ -296,7 +145,7 @@ module Playwright
|
|
296
145
|
end
|
297
146
|
|
298
147
|
# > NOTE: Tracing is only supported on Chromium-based browsers.
|
299
|
-
#
|
148
|
+
#
|
300
149
|
# Returns the buffer with trace data.
|
301
150
|
def stop_tracing
|
302
151
|
wrap_impl(@impl.stop_tracing)
|
@@ -307,12 +156,6 @@ module Playwright
|
|
307
156
|
wrap_impl(@impl.version)
|
308
157
|
end
|
309
158
|
|
310
|
-
# -- inherited from EventEmitter --
|
311
|
-
# @nodoc
|
312
|
-
def off(event, callback)
|
313
|
-
event_emitter_proxy.off(event, callback)
|
314
|
-
end
|
315
|
-
|
316
159
|
# -- inherited from EventEmitter --
|
317
160
|
# @nodoc
|
318
161
|
def once(event, callback)
|
@@ -325,6 +168,12 @@ module Playwright
|
|
325
168
|
event_emitter_proxy.on(event, callback)
|
326
169
|
end
|
327
170
|
|
171
|
+
# -- inherited from EventEmitter --
|
172
|
+
# @nodoc
|
173
|
+
def off(event, callback)
|
174
|
+
event_emitter_proxy.off(event, callback)
|
175
|
+
end
|
176
|
+
|
328
177
|
private def event_emitter_proxy
|
329
178
|
@event_emitter_proxy ||= EventEmitterProxy.new(self, @impl)
|
330
179
|
end
|