playwright-ruby-client 0.1.0 → 0.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +20 -8
- data/docs/api_coverage.md +123 -73
- data/lib/playwright.rb +48 -9
- data/lib/playwright/channel.rb +12 -2
- data/lib/playwright/channel_owner.rb +3 -5
- data/lib/playwright/channel_owners/android.rb +1 -1
- data/lib/playwright/channel_owners/android_device.rb +11 -11
- data/lib/playwright/channel_owners/artifact.rb +30 -0
- data/lib/playwright/channel_owners/binding_call.rb +3 -0
- data/lib/playwright/channel_owners/browser.rb +22 -1
- data/lib/playwright/channel_owners/browser_context.rb +155 -4
- data/lib/playwright/channel_owners/browser_type.rb +28 -0
- data/lib/playwright/channel_owners/dialog.rb +28 -0
- data/lib/playwright/channel_owners/element_handle.rb +18 -5
- data/lib/playwright/channel_owners/frame.rb +40 -5
- data/lib/playwright/channel_owners/js_handle.rb +3 -3
- data/lib/playwright/channel_owners/page.rb +172 -51
- data/lib/playwright/channel_owners/playwright.rb +24 -27
- data/lib/playwright/channel_owners/request.rb +27 -3
- data/lib/playwright/channel_owners/response.rb +60 -0
- data/lib/playwright/channel_owners/route.rb +78 -0
- data/lib/playwright/channel_owners/selectors.rb +19 -1
- data/lib/playwright/channel_owners/stream.rb +15 -0
- data/lib/playwright/connection.rb +11 -32
- data/lib/playwright/download.rb +27 -0
- data/lib/playwright/errors.rb +6 -0
- data/lib/playwright/events.rb +2 -5
- data/lib/playwright/keyboard_impl.rb +1 -1
- data/lib/playwright/mouse_impl.rb +41 -0
- data/lib/playwright/playwright_api.rb +3 -1
- data/lib/playwright/route_handler_entry.rb +28 -0
- data/lib/playwright/select_option_values.rb +14 -4
- data/lib/playwright/transport.rb +28 -7
- data/lib/playwright/url_matcher.rb +1 -1
- data/lib/playwright/utils.rb +11 -2
- data/lib/playwright/version.rb +1 -1
- data/lib/playwright/video.rb +51 -0
- data/lib/playwright/wait_helper.rb +2 -2
- data/lib/playwright_api/accessibility.rb +39 -1
- data/lib/playwright_api/android.rb +72 -5
- data/lib/playwright_api/android_device.rb +139 -26
- data/lib/playwright_api/android_input.rb +17 -13
- data/lib/playwright_api/android_socket.rb +16 -0
- data/lib/playwright_api/android_web_view.rb +21 -0
- data/lib/playwright_api/browser.rb +87 -19
- data/lib/playwright_api/browser_context.rb +216 -32
- data/lib/playwright_api/browser_type.rb +45 -58
- data/lib/playwright_api/dialog.rb +54 -7
- data/lib/playwright_api/element_handle.rb +113 -33
- data/lib/playwright_api/file_chooser.rb +6 -1
- data/lib/playwright_api/frame.rb +238 -43
- data/lib/playwright_api/js_handle.rb +20 -2
- data/lib/playwright_api/keyboard.rb +48 -1
- data/lib/playwright_api/mouse.rb +26 -5
- data/lib/playwright_api/page.rb +534 -63
- data/lib/playwright_api/playwright.rb +43 -47
- data/lib/playwright_api/request.rb +38 -12
- data/lib/playwright_api/response.rb +27 -10
- data/lib/playwright_api/route.rb +51 -6
- data/lib/playwright_api/selectors.rb +28 -2
- data/lib/playwright_api/touchscreen.rb +1 -1
- data/lib/playwright_api/web_socket.rb +15 -0
- data/lib/playwright_api/worker.rb +25 -1
- data/playwright.gemspec +4 -2
- metadata +42 -14
- data/lib/playwright/channel_owners/chromium_browser.rb +0 -8
- data/lib/playwright/channel_owners/chromium_browser_context.rb +0 -8
- data/lib/playwright/channel_owners/download.rb +0 -27
- data/lib/playwright/channel_owners/firefox_browser.rb +0 -8
- data/lib/playwright/channel_owners/webkit_browser.rb +0 -8
- data/lib/playwright_api/binding_call.rb +0 -27
- data/lib/playwright_api/chromium_browser_context.rb +0 -59
- data/lib/playwright_api/download.rb +0 -100
- data/lib/playwright_api/video.rb +0 -24
@@ -13,12 +13,32 @@ module Playwright
|
|
13
13
|
# page.on('dialog', async dialog => {
|
14
14
|
# console.log(dialog.message());
|
15
15
|
# await dialog.dismiss();
|
16
|
-
# await browser.close();
|
17
16
|
# });
|
18
|
-
# page.evaluate(() => alert('1'));
|
17
|
+
# await page.evaluate(() => alert('1'));
|
18
|
+
# await browser.close();
|
19
19
|
# })();
|
20
20
|
# ```
|
21
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
|
+
#
|
22
42
|
# ```python async
|
23
43
|
# import asyncio
|
24
44
|
# from playwright.async_api import async_playwright
|
@@ -68,27 +88,54 @@ module Playwright
|
|
68
88
|
|
69
89
|
# Returns when the dialog has been accepted.
|
70
90
|
def accept(promptText: nil)
|
71
|
-
|
91
|
+
wrap_impl(@impl.accept(promptText: unwrap_impl(promptText)))
|
72
92
|
end
|
73
93
|
|
74
94
|
# If dialog is prompt, returns default prompt value. Otherwise, returns empty string.
|
75
95
|
def default_value
|
76
|
-
|
96
|
+
wrap_impl(@impl.default_value)
|
77
97
|
end
|
78
98
|
|
79
99
|
# Returns when the dialog has been dismissed.
|
80
100
|
def dismiss
|
81
|
-
|
101
|
+
wrap_impl(@impl.dismiss)
|
82
102
|
end
|
83
103
|
|
84
104
|
# A message displayed in the dialog.
|
85
105
|
def message
|
86
|
-
|
106
|
+
wrap_impl(@impl.message)
|
87
107
|
end
|
88
108
|
|
89
109
|
# Returns dialog's type, can be one of `alert`, `beforeunload`, `confirm` or `prompt`.
|
90
110
|
def type
|
91
|
-
|
111
|
+
wrap_impl(@impl.type)
|
112
|
+
end
|
113
|
+
|
114
|
+
# @nodoc
|
115
|
+
def accept_async(promptText: nil)
|
116
|
+
wrap_impl(@impl.accept_async(promptText: unwrap_impl(promptText)))
|
117
|
+
end
|
118
|
+
|
119
|
+
# -- inherited from EventEmitter --
|
120
|
+
# @nodoc
|
121
|
+
def once(event, callback)
|
122
|
+
event_emitter_proxy.once(event, callback)
|
123
|
+
end
|
124
|
+
|
125
|
+
# -- inherited from EventEmitter --
|
126
|
+
# @nodoc
|
127
|
+
def on(event, callback)
|
128
|
+
event_emitter_proxy.on(event, callback)
|
129
|
+
end
|
130
|
+
|
131
|
+
# -- inherited from EventEmitter --
|
132
|
+
# @nodoc
|
133
|
+
def off(event, callback)
|
134
|
+
event_emitter_proxy.off(event, callback)
|
135
|
+
end
|
136
|
+
|
137
|
+
private def event_emitter_proxy
|
138
|
+
@event_emitter_proxy ||= EventEmitterProxy.new(self, @impl)
|
92
139
|
end
|
93
140
|
end
|
94
141
|
end
|
@@ -20,6 +20,24 @@ module Playwright
|
|
20
20
|
# })();
|
21
21
|
# ```
|
22
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
|
+
#
|
23
41
|
# ```python async
|
24
42
|
# import asyncio
|
25
43
|
# from playwright.async_api import async_playwright
|
@@ -81,6 +99,11 @@ module Playwright
|
|
81
99
|
# await page.mouse.click(box.x + box.width / 2, box.y + box.height / 2);
|
82
100
|
# ```
|
83
101
|
#
|
102
|
+
# ```java
|
103
|
+
# BoundingBox box = elementHandle.boundingBox();
|
104
|
+
# page.mouse().click(box.x + box.width / 2, box.y + box.height / 2);
|
105
|
+
# ```
|
106
|
+
#
|
84
107
|
# ```python async
|
85
108
|
# box = await element_handle.bounding_box()
|
86
109
|
# await page.mouse.click(box["x"] + box["width"] / 2, box["y"] + box["height"] / 2)
|
@@ -95,20 +118,20 @@ module Playwright
|
|
95
118
|
end
|
96
119
|
|
97
120
|
# This method checks the element by performing the following steps:
|
98
|
-
# 1. Ensure that element is a checkbox or a radio input. If not, this method
|
99
|
-
#
|
121
|
+
# 1. Ensure that element is a checkbox or a radio input. If not, this method throws. If the element is already checked,
|
122
|
+
# this method returns immediately.
|
100
123
|
# 1. Wait for [actionability](./actionability.md) checks on the element, unless `force` option is set.
|
101
124
|
# 1. Scroll the element into view if needed.
|
102
125
|
# 1. Use [`property: Page.mouse`] to click in the center of the element.
|
103
126
|
# 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
|
104
|
-
# 1. Ensure that the element is now checked. If not, this method
|
127
|
+
# 1. Ensure that the element is now checked. If not, this method throws.
|
105
128
|
#
|
106
|
-
# If the element is detached from the DOM at any moment during the action, this method
|
129
|
+
# If the element is detached from the DOM at any moment during the action, this method throws.
|
107
130
|
#
|
108
|
-
# When all steps combined have not finished during the specified `timeout`, this method
|
109
|
-
#
|
110
|
-
def check(force: nil, noWaitAfter: nil, timeout: nil)
|
111
|
-
wrap_impl(@impl.check(force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
|
131
|
+
# When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
|
132
|
+
# zero timeout disables this.
|
133
|
+
def check(force: nil, noWaitAfter: nil, position: nil, timeout: nil)
|
134
|
+
wrap_impl(@impl.check(force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), position: unwrap_impl(position), timeout: unwrap_impl(timeout)))
|
112
135
|
end
|
113
136
|
|
114
137
|
# This method clicks the element by performing the following steps:
|
@@ -117,10 +140,10 @@ module Playwright
|
|
117
140
|
# 1. Use [`property: Page.mouse`] to click in the center of the element, or the specified `position`.
|
118
141
|
# 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
|
119
142
|
#
|
120
|
-
# If the element is detached from the DOM at any moment during the action, this method
|
143
|
+
# If the element is detached from the DOM at any moment during the action, this method throws.
|
121
144
|
#
|
122
|
-
# When all steps combined have not finished during the specified `timeout`, this method
|
123
|
-
#
|
145
|
+
# When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
|
146
|
+
# zero timeout disables this.
|
124
147
|
def click(
|
125
148
|
button: nil,
|
126
149
|
clickCount: nil,
|
@@ -143,12 +166,12 @@ module Playwright
|
|
143
166
|
# 1. Scroll the element into view if needed.
|
144
167
|
# 1. Use [`property: Page.mouse`] to double click in the center of the element, or the specified `position`.
|
145
168
|
# 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set. Note that if the
|
146
|
-
# first click of the `dblclick()` triggers a navigation event, this method will
|
169
|
+
# first click of the `dblclick()` triggers a navigation event, this method will throw.
|
147
170
|
#
|
148
|
-
# If the element is detached from the DOM at any moment during the action, this method
|
171
|
+
# If the element is detached from the DOM at any moment during the action, this method throws.
|
149
172
|
#
|
150
|
-
# When all steps combined have not finished during the specified `timeout`, this method
|
151
|
-
#
|
173
|
+
# When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
|
174
|
+
# zero timeout disables this.
|
152
175
|
#
|
153
176
|
# > NOTE: `elementHandle.dblclick()` dispatches two `click` events and a single `dblclick` event.
|
154
177
|
def dblclick(
|
@@ -162,8 +185,8 @@ module Playwright
|
|
162
185
|
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)))
|
163
186
|
end
|
164
187
|
|
165
|
-
# The snippet below dispatches the `click` event on the element. Regardless of the visibility state of the
|
166
|
-
# is dispatched. This is
|
188
|
+
# The snippet below dispatches the `click` event on the element. Regardless of the visibility state of the element,
|
189
|
+
# `click` is dispatched. This is equivalent to calling
|
167
190
|
# [element.click()](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click).
|
168
191
|
#
|
169
192
|
#
|
@@ -171,6 +194,10 @@ module Playwright
|
|
171
194
|
# await elementHandle.dispatchEvent('click');
|
172
195
|
# ```
|
173
196
|
#
|
197
|
+
# ```java
|
198
|
+
# elementHandle.dispatchEvent("click");
|
199
|
+
# ```
|
200
|
+
#
|
174
201
|
# ```python async
|
175
202
|
# await element_handle.dispatch_event("click")
|
176
203
|
# ```
|
@@ -200,6 +227,14 @@ module Playwright
|
|
200
227
|
# await elementHandle.dispatchEvent('dragstart', { dataTransfer });
|
201
228
|
# ```
|
202
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
|
+
#
|
203
238
|
# ```python async
|
204
239
|
# # note you can only create data_transfer in chromium and firefox
|
205
240
|
# data_transfer = await page.evaluate_handle("new DataTransfer()")
|
@@ -233,6 +268,12 @@ module Playwright
|
|
233
268
|
# expect(await tweetHandle.$eval('.retweets', node => node.innerText)).toBe('10');
|
234
269
|
# ```
|
235
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
|
+
#
|
236
277
|
# ```python async
|
237
278
|
# tweet_handle = await page.query_selector(".tweet")
|
238
279
|
# assert await tweet_handle.eval_on_selector(".like", "node => node.innerText") == "100"
|
@@ -271,6 +312,11 @@ module Playwright
|
|
271
312
|
# expect(await feedHandle.$$eval('.tweet', nodes => nodes.map(n => n.innerText))).toEqual(['Hello!', 'Hi!']);
|
272
313
|
# ```
|
273
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
|
+
#
|
274
320
|
# ```python async
|
275
321
|
# feed_handle = await page.query_selector(".feed")
|
276
322
|
# assert await feed_handle.eval_on_selector_all(".tweet", "nodes => nodes.map(n => n.innerText)") == ["hello!", "hi!"]
|
@@ -310,10 +356,10 @@ module Playwright
|
|
310
356
|
# 1. Use [`property: Page.mouse`] to hover over the center of the element, or the specified `position`.
|
311
357
|
# 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
|
312
358
|
#
|
313
|
-
# If the element is detached from the DOM at any moment during the action, this method
|
359
|
+
# If the element is detached from the DOM at any moment during the action, this method throws.
|
314
360
|
#
|
315
|
-
# When all steps combined have not finished during the specified `timeout`, this method
|
316
|
-
#
|
361
|
+
# When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
|
362
|
+
# zero timeout disables this.
|
317
363
|
def hover(force: nil, modifiers: nil, position: nil, timeout: nil)
|
318
364
|
wrap_impl(@impl.hover(force: unwrap_impl(force), modifiers: unwrap_impl(modifiers), position: unwrap_impl(position), timeout: unwrap_impl(timeout)))
|
319
365
|
end
|
@@ -379,7 +425,7 @@ module Playwright
|
|
379
425
|
# If `key` is a single character, it is case-sensitive, so the values `a` and `A` will generate different respective
|
380
426
|
# texts.
|
381
427
|
#
|
382
|
-
# Shortcuts such as `key: "Control+o"` or `key: "Control+Shift+T"` are supported as well. When
|
428
|
+
# Shortcuts such as `key: "Control+o"` or `key: "Control+Shift+T"` are supported as well. When specified with the
|
383
429
|
# modifier, modifier is pressed and being held while the subsequent key is being pressed.
|
384
430
|
def press(key, delay: nil, noWaitAfter: nil, timeout: nil)
|
385
431
|
wrap_impl(@impl.press(unwrap_impl(key), delay: unwrap_impl(delay), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
|
@@ -439,6 +485,15 @@ module Playwright
|
|
439
485
|
# handle.selectOption(['red', 'green', 'blue']);
|
440
486
|
# ```
|
441
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
|
+
#
|
442
497
|
# ```python async
|
443
498
|
# # single selection matching the value
|
444
499
|
# await handle.select_option("blue")
|
@@ -467,8 +522,14 @@ module Playwright
|
|
467
522
|
# # multiple selection for blue, red and second option
|
468
523
|
# handle.select_option(value="blue", { index: 2 }, "red")
|
469
524
|
# ```
|
470
|
-
def select_option(
|
471
|
-
|
525
|
+
def select_option(
|
526
|
+
element: nil,
|
527
|
+
index: nil,
|
528
|
+
value: nil,
|
529
|
+
label: nil,
|
530
|
+
noWaitAfter: nil,
|
531
|
+
timeout: nil)
|
532
|
+
wrap_impl(@impl.select_option(element: unwrap_impl(element), index: unwrap_impl(index), value: unwrap_impl(value), label: unwrap_impl(label), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
|
472
533
|
end
|
473
534
|
|
474
535
|
# This method waits for [actionability](./actionability.md) checks, then focuses the element and selects all its text
|
@@ -493,10 +554,10 @@ module Playwright
|
|
493
554
|
# 1. Use [`property: Page.touchscreen`] to tap the center of the element, or the specified `position`.
|
494
555
|
# 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
|
495
556
|
#
|
496
|
-
# If the element is detached from the DOM at any moment during the action, this method
|
557
|
+
# If the element is detached from the DOM at any moment during the action, this method throws.
|
497
558
|
#
|
498
|
-
# When all steps combined have not finished during the specified `timeout`, this method
|
499
|
-
#
|
559
|
+
# When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
|
560
|
+
# zero timeout disables this.
|
500
561
|
#
|
501
562
|
# > NOTE: `elementHandle.tap()` requires that the `hasTouch` option of the browser context be set to true.
|
502
563
|
def tap_point(
|
@@ -523,6 +584,11 @@ module Playwright
|
|
523
584
|
# await elementHandle.type('World', {delay: 100}); // Types slower, like a user
|
524
585
|
# ```
|
525
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
|
+
#
|
526
592
|
# ```python async
|
527
593
|
# await element_handle.type("hello") # types instantly
|
528
594
|
# await element_handle.type("world", delay=100) # types slower, like a user
|
@@ -542,6 +608,12 @@ module Playwright
|
|
542
608
|
# await elementHandle.press('Enter');
|
543
609
|
# ```
|
544
610
|
#
|
611
|
+
# ```java
|
612
|
+
# ElementHandle elementHandle = page.querySelector("input");
|
613
|
+
# elementHandle.type("some text");
|
614
|
+
# elementHandle.press("Enter");
|
615
|
+
# ```
|
616
|
+
#
|
545
617
|
# ```python async
|
546
618
|
# element_handle = await page.query_selector("input")
|
547
619
|
# await element_handle.type("some text")
|
@@ -558,20 +630,20 @@ module Playwright
|
|
558
630
|
end
|
559
631
|
|
560
632
|
# This method checks the element by performing the following steps:
|
561
|
-
# 1. Ensure that element is a checkbox or a radio input. If not, this method
|
633
|
+
# 1. Ensure that element is a checkbox or a radio input. If not, this method throws. If the element is already
|
562
634
|
# unchecked, this method returns immediately.
|
563
635
|
# 1. Wait for [actionability](./actionability.md) checks on the element, unless `force` option is set.
|
564
636
|
# 1. Scroll the element into view if needed.
|
565
637
|
# 1. Use [`property: Page.mouse`] to click in the center of the element.
|
566
638
|
# 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
|
567
|
-
# 1. Ensure that the element is now unchecked. If not, this method
|
639
|
+
# 1. Ensure that the element is now unchecked. If not, this method throws.
|
568
640
|
#
|
569
|
-
# If the element is detached from the DOM at any moment during the action, this method
|
641
|
+
# If the element is detached from the DOM at any moment during the action, this method throws.
|
570
642
|
#
|
571
|
-
# When all steps combined have not finished during the specified `timeout`, this method
|
572
|
-
#
|
573
|
-
def uncheck(force: nil, noWaitAfter: nil, timeout: nil)
|
574
|
-
wrap_impl(@impl.uncheck(force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
|
643
|
+
# When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
|
644
|
+
# zero timeout disables this.
|
645
|
+
def uncheck(force: nil, noWaitAfter: nil, position: nil, timeout: nil)
|
646
|
+
wrap_impl(@impl.uncheck(force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), position: unwrap_impl(position), timeout: unwrap_impl(timeout)))
|
575
647
|
end
|
576
648
|
|
577
649
|
# Returns when the element satisfies the `state`.
|
@@ -608,6 +680,14 @@ module Playwright
|
|
608
680
|
# const span = await div.waitForSelector('span', { state: 'attached' });
|
609
681
|
# ```
|
610
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
|
+
#
|
611
691
|
# ```python async
|
612
692
|
# await page.set_content("<div><span></span></div>")
|
613
693
|
# div = await page.query_selector("div")
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Playwright
|
2
|
-
# `FileChooser` objects are dispatched by the page in the [`event: Page.
|
2
|
+
# `FileChooser` objects are dispatched by the page in the [`event: Page.fileChooser`] event.
|
3
3
|
#
|
4
4
|
#
|
5
5
|
# ```js
|
@@ -10,6 +10,11 @@ module Playwright
|
|
10
10
|
# await fileChooser.setFiles('myfile.pdf');
|
11
11
|
# ```
|
12
12
|
#
|
13
|
+
# ```java
|
14
|
+
# FileChooser fileChooser = page.waitForFileChooser(() -> page.click("upload"));
|
15
|
+
# fileChooser.setFiles(Paths.get("myfile.pdf"));
|
16
|
+
# ```
|
17
|
+
#
|
13
18
|
# ```python async
|
14
19
|
# async with page.expect_file_chooser() as fc_info:
|
15
20
|
# await page.click("upload")
|
data/lib/playwright_api/frame.rb
CHANGED
@@ -3,10 +3,10 @@ module Playwright
|
|
3
3
|
# [`method: Frame.childFrames`] methods.
|
4
4
|
#
|
5
5
|
# `Frame` object's lifecycle is controlled by three events, dispatched on the page object:
|
6
|
-
# - [`event: Page.
|
6
|
+
# - [`event: Page.frameAttached`] - fired when the frame gets attached to the page. A Frame can be attached to the page
|
7
7
|
# only once.
|
8
|
-
# - [`event: Page.
|
9
|
-
# - [`event: Page.
|
8
|
+
# - [`event: Page.frameNavigated`] - fired when the frame commits navigation to a different URL.
|
9
|
+
# - [`event: Page.frameDetached`] - fired when the frame gets detached from the page. A Frame can be detached from the
|
10
10
|
# page only once.
|
11
11
|
#
|
12
12
|
# An example of dumping frame tree:
|
@@ -31,6 +31,29 @@ module Playwright
|
|
31
31
|
# })();
|
32
32
|
# ```
|
33
33
|
#
|
34
|
+
# ```java
|
35
|
+
# import com.microsoft.playwright.*;
|
36
|
+
#
|
37
|
+
# public class Example {
|
38
|
+
# public static void main(String[] args) {
|
39
|
+
# try (Playwright playwright = Playwright.create()) {
|
40
|
+
# BrowserType firefox = playwright.firefox();
|
41
|
+
# Browser browser = firefox.launch();
|
42
|
+
# Page page = browser.newPage();
|
43
|
+
# page.navigate("https://www.google.com/chrome/browser/canary.html");
|
44
|
+
# dumpFrameTree(page.mainFrame(), "");
|
45
|
+
# browser.close();
|
46
|
+
# }
|
47
|
+
# }
|
48
|
+
# static void dumpFrameTree(Frame frame, String indent) {
|
49
|
+
# System.out.println(indent + frame.url());
|
50
|
+
# for (Frame child : frame.childFrames()) {
|
51
|
+
# dumpFrameTree(child, indent + " ");
|
52
|
+
# }
|
53
|
+
# }
|
54
|
+
# }
|
55
|
+
# ```
|
56
|
+
#
|
34
57
|
# ```python async
|
35
58
|
# import asyncio
|
36
59
|
# from playwright.async_api import async_playwright
|
@@ -91,20 +114,25 @@ module Playwright
|
|
91
114
|
end
|
92
115
|
|
93
116
|
# This method checks an element matching `selector` by performing the following steps:
|
94
|
-
# 1. Find an element
|
95
|
-
# 1. Ensure that matched element is a checkbox or a radio input. If not, this method
|
117
|
+
# 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
|
118
|
+
# 1. Ensure that matched element is a checkbox or a radio input. If not, this method throws. If the element is already
|
96
119
|
# checked, this method returns immediately.
|
97
120
|
# 1. Wait for [actionability](./actionability.md) checks on the matched element, unless `force` option is set. If the
|
98
121
|
# element is detached during the checks, the whole action is retried.
|
99
122
|
# 1. Scroll the element into view if needed.
|
100
123
|
# 1. Use [`property: Page.mouse`] to click in the center of the element.
|
101
124
|
# 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
|
102
|
-
# 1. Ensure that the element is now checked. If not, this method
|
125
|
+
# 1. Ensure that the element is now checked. If not, this method throws.
|
103
126
|
#
|
104
|
-
# When all steps combined have not finished during the specified `timeout`, this method
|
105
|
-
#
|
106
|
-
def check(
|
107
|
-
|
127
|
+
# When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
|
128
|
+
# zero timeout disables this.
|
129
|
+
def check(
|
130
|
+
selector,
|
131
|
+
force: nil,
|
132
|
+
noWaitAfter: nil,
|
133
|
+
position: nil,
|
134
|
+
timeout: nil)
|
135
|
+
wrap_impl(@impl.check(unwrap_impl(selector), force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), position: unwrap_impl(position), timeout: unwrap_impl(timeout)))
|
108
136
|
end
|
109
137
|
|
110
138
|
def child_frames
|
@@ -112,15 +140,15 @@ module Playwright
|
|
112
140
|
end
|
113
141
|
|
114
142
|
# This method clicks an element matching `selector` by performing the following steps:
|
115
|
-
# 1. Find an element
|
143
|
+
# 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
|
116
144
|
# 1. Wait for [actionability](./actionability.md) checks on the matched element, unless `force` option is set. If the
|
117
145
|
# element is detached during the checks, the whole action is retried.
|
118
146
|
# 1. Scroll the element into view if needed.
|
119
147
|
# 1. Use [`property: Page.mouse`] to click in the center of the element, or the specified `position`.
|
120
148
|
# 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
|
121
149
|
#
|
122
|
-
# When all steps combined have not finished during the specified `timeout`, this method
|
123
|
-
#
|
150
|
+
# When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
|
151
|
+
# zero timeout disables this.
|
124
152
|
def click(
|
125
153
|
selector,
|
126
154
|
button: nil,
|
@@ -140,16 +168,16 @@ module Playwright
|
|
140
168
|
end
|
141
169
|
|
142
170
|
# This method double clicks an element matching `selector` by performing the following steps:
|
143
|
-
# 1. Find an element
|
171
|
+
# 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
|
144
172
|
# 1. Wait for [actionability](./actionability.md) checks on the matched element, unless `force` option is set. If the
|
145
173
|
# element is detached during the checks, the whole action is retried.
|
146
174
|
# 1. Scroll the element into view if needed.
|
147
175
|
# 1. Use [`property: Page.mouse`] to double click in the center of the element, or the specified `position`.
|
148
176
|
# 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set. Note that if the
|
149
|
-
# first click of the `dblclick()` triggers a navigation event, this method will
|
177
|
+
# first click of the `dblclick()` triggers a navigation event, this method will throw.
|
150
178
|
#
|
151
|
-
# When all steps combined have not finished during the specified `timeout`, this method
|
152
|
-
#
|
179
|
+
# When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
|
180
|
+
# zero timeout disables this.
|
153
181
|
#
|
154
182
|
# > NOTE: `frame.dblclick()` dispatches two `click` events and a single `dblclick` event.
|
155
183
|
def dblclick(
|
@@ -164,8 +192,8 @@ module Playwright
|
|
164
192
|
wrap_impl(@impl.dblclick(unwrap_impl(selector), 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)))
|
165
193
|
end
|
166
194
|
|
167
|
-
# The snippet below dispatches the `click` event on the element. Regardless of the visibility state of the
|
168
|
-
# is dispatched. This is
|
195
|
+
# The snippet below dispatches the `click` event on the element. Regardless of the visibility state of the element,
|
196
|
+
# `click` is dispatched. This is equivalent to calling
|
169
197
|
# [element.click()](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click).
|
170
198
|
#
|
171
199
|
#
|
@@ -173,6 +201,10 @@ module Playwright
|
|
173
201
|
# await frame.dispatchEvent('button#submit', 'click');
|
174
202
|
# ```
|
175
203
|
#
|
204
|
+
# ```java
|
205
|
+
# frame.dispatchEvent("button#submit", "click");
|
206
|
+
# ```
|
207
|
+
#
|
176
208
|
# ```python async
|
177
209
|
# await frame.dispatch_event("button#submit", "click")
|
178
210
|
# ```
|
@@ -202,6 +234,14 @@ module Playwright
|
|
202
234
|
# await frame.dispatchEvent('#source', 'dragstart', { dataTransfer });
|
203
235
|
# ```
|
204
236
|
#
|
237
|
+
# ```java
|
238
|
+
# // Note you can only create DataTransfer in Chromium and Firefox
|
239
|
+
# JSHandle dataTransfer = frame.evaluateHandle("() => new DataTransfer()");
|
240
|
+
# Map<String, Object> arg = new HashMap<>();
|
241
|
+
# arg.put("dataTransfer", dataTransfer);
|
242
|
+
# frame.dispatchEvent("#source", "dragstart", arg);
|
243
|
+
# ```
|
244
|
+
#
|
205
245
|
# ```python async
|
206
246
|
# # note you can only create data_transfer in chromium and firefox
|
207
247
|
# data_transfer = await frame.evaluate_handle("new DataTransfer()")
|
@@ -235,6 +275,12 @@ module Playwright
|
|
235
275
|
# const html = await frame.$eval('.main-container', (e, suffix) => e.outerHTML + suffix, 'hello');
|
236
276
|
# ```
|
237
277
|
#
|
278
|
+
# ```java
|
279
|
+
# String searchValue = (String) frame.evalOnSelector("#search", "el => el.value");
|
280
|
+
# String preloadHref = (String) frame.evalOnSelector("link[rel=preload]", "el => el.href");
|
281
|
+
# String html = (String) frame.evalOnSelector(".main-container", "(e, suffix) => e.outerHTML + suffix", "hello");
|
282
|
+
# ```
|
283
|
+
#
|
238
284
|
# ```python async
|
239
285
|
# search_value = await frame.eval_on_selector("#search", "el => el.value")
|
240
286
|
# preload_href = await frame.eval_on_selector("link[rel=preload]", "el => el.href")
|
@@ -265,6 +311,10 @@ module Playwright
|
|
265
311
|
# const divsCounts = await frame.$$eval('div', (divs, min) => divs.length >= min, 10);
|
266
312
|
# ```
|
267
313
|
#
|
314
|
+
# ```java
|
315
|
+
# boolean divsCounts = (boolean) page.evalOnSelectorAll("div", "(divs, min) => divs.length >= min", 10);
|
316
|
+
# ```
|
317
|
+
#
|
268
318
|
# ```python async
|
269
319
|
# divs_counts = await frame.eval_on_selector_all("div", "(divs, min) => divs.length >= min", 10)
|
270
320
|
# ```
|
@@ -293,6 +343,13 @@ module Playwright
|
|
293
343
|
# console.log(result); // prints "56"
|
294
344
|
# ```
|
295
345
|
#
|
346
|
+
# ```java
|
347
|
+
# Object result = frame.evaluate("([x, y]) => {\n" +
|
348
|
+
# " return Promise.resolve(x * y);\n" +
|
349
|
+
# "}", Arrays.asList(7, 8));
|
350
|
+
# System.out.println(result); // prints "56"
|
351
|
+
# ```
|
352
|
+
#
|
296
353
|
# ```python async
|
297
354
|
# result = await frame.evaluate("([x, y]) => Promise.resolve(x * y)", [7, 8])
|
298
355
|
# print(result) # prints "56"
|
@@ -310,6 +367,10 @@ module Playwright
|
|
310
367
|
# console.log(await frame.evaluate('1 + 2')); // prints "3"
|
311
368
|
# ```
|
312
369
|
#
|
370
|
+
# ```java
|
371
|
+
# System.out.println(frame.evaluate("1 + 2")); // prints "3"
|
372
|
+
# ```
|
373
|
+
#
|
313
374
|
# ```python async
|
314
375
|
# print(await frame.evaluate("1 + 2")) # prints "3"
|
315
376
|
# x = 10
|
@@ -331,6 +392,12 @@ module Playwright
|
|
331
392
|
# await bodyHandle.dispose();
|
332
393
|
# ```
|
333
394
|
#
|
395
|
+
# ```java
|
396
|
+
# ElementHandle bodyHandle = frame.querySelector("body");
|
397
|
+
# String html = (String) frame.evaluate("([body, suffix]) => body.innerHTML + suffix", Arrays.asList(bodyHandle, "hello"));
|
398
|
+
# bodyHandle.dispose();
|
399
|
+
# ```
|
400
|
+
#
|
334
401
|
# ```python async
|
335
402
|
# body_handle = await frame.query_selector("body")
|
336
403
|
# html = await frame.evaluate("([body, suffix]) => body.innerHTML + suffix", [body_handle, "hello"])
|
@@ -349,7 +416,7 @@ module Playwright
|
|
349
416
|
# Returns the return value of `expression` as a `JSHandle`.
|
350
417
|
#
|
351
418
|
# The only difference between [`method: Frame.evaluate`] and [`method: Frame.evaluateHandle`] is that
|
352
|
-
# [method: Frame.evaluateHandle`] returns `JSHandle`.
|
419
|
+
# [`method: Frame.evaluateHandle`] returns `JSHandle`.
|
353
420
|
#
|
354
421
|
# If the function, passed to the [`method: Frame.evaluateHandle`], returns a [Promise], then
|
355
422
|
# [`method: Frame.evaluateHandle`] would wait for the promise to resolve and return its value.
|
@@ -360,6 +427,11 @@ module Playwright
|
|
360
427
|
# aWindowHandle; // Handle for the window object.
|
361
428
|
# ```
|
362
429
|
#
|
430
|
+
# ```java
|
431
|
+
# // Handle for the window object.
|
432
|
+
# JSHandle aWindowHandle = frame.evaluateHandle("() => Promise.resolve(window)");
|
433
|
+
# ```
|
434
|
+
#
|
363
435
|
# ```python async
|
364
436
|
# a_window_handle = await frame.evaluate_handle("Promise.resolve(window)")
|
365
437
|
# a_window_handle # handle for the window object.
|
@@ -377,6 +449,10 @@ module Playwright
|
|
377
449
|
# const aHandle = await frame.evaluateHandle('document'); // Handle for the 'document'.
|
378
450
|
# ```
|
379
451
|
#
|
452
|
+
# ```java
|
453
|
+
# JSHandle aHandle = frame.evaluateHandle("document"); // Handle for the "document".
|
454
|
+
# ```
|
455
|
+
#
|
380
456
|
# ```python async
|
381
457
|
# a_handle = await page.evaluate_handle("document") # handle for the "document"
|
382
458
|
# ```
|
@@ -395,6 +471,13 @@ module Playwright
|
|
395
471
|
# await resultHandle.dispose();
|
396
472
|
# ```
|
397
473
|
#
|
474
|
+
# ```java
|
475
|
+
# JSHandle aHandle = frame.evaluateHandle("() => document.body");
|
476
|
+
# JSHandle resultHandle = frame.evaluateHandle("([body, suffix]) => body.innerHTML + suffix", Arrays.asList(aHandle, "hello"));
|
477
|
+
# System.out.println(resultHandle.jsonValue());
|
478
|
+
# resultHandle.dispose();
|
479
|
+
# ```
|
480
|
+
#
|
398
481
|
# ```python async
|
399
482
|
# a_handle = await page.evaluate_handle("document.body")
|
400
483
|
# result_handle = await page.evaluate_handle("body => body.innerHTML", a_handle)
|
@@ -443,6 +526,12 @@ module Playwright
|
|
443
526
|
# console.log(frame === contentFrame); // -> true
|
444
527
|
# ```
|
445
528
|
#
|
529
|
+
# ```java
|
530
|
+
# ElementHandle frameElement = frame.frameElement();
|
531
|
+
# Frame contentFrame = frameElement.contentFrame();
|
532
|
+
# System.out.println(frame == contentFrame); // -> true
|
533
|
+
# ```
|
534
|
+
#
|
446
535
|
# ```python async
|
447
536
|
# frame_element = await frame.frame_element()
|
448
537
|
# content_frame = await frame_element.content_frame()
|
@@ -486,15 +575,15 @@ module Playwright
|
|
486
575
|
end
|
487
576
|
|
488
577
|
# This method hovers over an element matching `selector` by performing the following steps:
|
489
|
-
# 1. Find an element
|
578
|
+
# 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
|
490
579
|
# 1. Wait for [actionability](./actionability.md) checks on the matched element, unless `force` option is set. If the
|
491
580
|
# element is detached during the checks, the whole action is retried.
|
492
581
|
# 1. Scroll the element into view if needed.
|
493
582
|
# 1. Use [`property: Page.mouse`] to hover over the center of the element, or the specified `position`.
|
494
583
|
# 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
|
495
584
|
#
|
496
|
-
# When all steps combined have not finished during the specified `timeout`, this method
|
497
|
-
#
|
585
|
+
# When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
|
586
|
+
# zero timeout disables this.
|
498
587
|
def hover(
|
499
588
|
selector,
|
500
589
|
force: nil,
|
@@ -539,12 +628,14 @@ module Playwright
|
|
539
628
|
wrap_impl(@impl.enabled?(unwrap_impl(selector), timeout: unwrap_impl(timeout)))
|
540
629
|
end
|
541
630
|
|
542
|
-
# Returns whether the element is hidden, the opposite of [visible](./actionability.md#visible).
|
631
|
+
# Returns whether the element is hidden, the opposite of [visible](./actionability.md#visible). `selector` that does not
|
632
|
+
# match any elements is considered hidden.
|
543
633
|
def hidden?(selector, timeout: nil)
|
544
634
|
wrap_impl(@impl.hidden?(unwrap_impl(selector), timeout: unwrap_impl(timeout)))
|
545
635
|
end
|
546
636
|
|
547
|
-
# Returns whether the element is [visible](./actionability.md#visible).
|
637
|
+
# Returns whether the element is [visible](./actionability.md#visible). `selector` that does not match any elements is
|
638
|
+
# considered not visible.
|
548
639
|
def visible?(selector, timeout: nil)
|
549
640
|
wrap_impl(@impl.visible?(unwrap_impl(selector), timeout: unwrap_impl(timeout)))
|
550
641
|
end
|
@@ -582,7 +673,7 @@ module Playwright
|
|
582
673
|
# If `key` is a single character, it is case-sensitive, so the values `a` and `A` will generate different respective
|
583
674
|
# texts.
|
584
675
|
#
|
585
|
-
# Shortcuts such as `key: "Control+o"` or `key: "Control+Shift+T"` are supported as well. When
|
676
|
+
# Shortcuts such as `key: "Control+o"` or `key: "Control+Shift+T"` are supported as well. When specified with the
|
586
677
|
# modifier, modifier is pressed and being held while the subsequent key is being pressed.
|
587
678
|
def press(
|
588
679
|
selector,
|
@@ -628,6 +719,15 @@ module Playwright
|
|
628
719
|
# frame.selectOption('select#colors', 'red', 'green', 'blue');
|
629
720
|
# ```
|
630
721
|
#
|
722
|
+
# ```java
|
723
|
+
# // single selection matching the value
|
724
|
+
# frame.selectOption("select#colors", "blue");
|
725
|
+
# // single selection matching both the value and the label
|
726
|
+
# frame.selectOption("select#colors", new SelectOption().setLabel("Blue"));
|
727
|
+
# // multiple selection
|
728
|
+
# frame.selectOption("select#colors", new String[] {"red", "green", "blue"});
|
729
|
+
# ```
|
730
|
+
#
|
631
731
|
# ```python async
|
632
732
|
# # single selection matching the value
|
633
733
|
# await frame.select_option("select#colors", "blue")
|
@@ -645,8 +745,15 @@ module Playwright
|
|
645
745
|
# # multiple selection
|
646
746
|
# frame.select_option("select#colors", value=["red", "green", "blue"])
|
647
747
|
# ```
|
648
|
-
def select_option(
|
649
|
-
|
748
|
+
def select_option(
|
749
|
+
selector,
|
750
|
+
element: nil,
|
751
|
+
index: nil,
|
752
|
+
value: nil,
|
753
|
+
label: nil,
|
754
|
+
noWaitAfter: nil,
|
755
|
+
timeout: nil)
|
756
|
+
wrap_impl(@impl.select_option(unwrap_impl(selector), element: unwrap_impl(element), index: unwrap_impl(index), value: unwrap_impl(value), label: unwrap_impl(label), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
|
650
757
|
end
|
651
758
|
|
652
759
|
def set_content(html, timeout: nil, waitUntil: nil)
|
@@ -664,15 +771,15 @@ module Playwright
|
|
664
771
|
end
|
665
772
|
|
666
773
|
# This method taps an element matching `selector` by performing the following steps:
|
667
|
-
# 1. Find an element
|
774
|
+
# 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
|
668
775
|
# 1. Wait for [actionability](./actionability.md) checks on the matched element, unless `force` option is set. If the
|
669
776
|
# element is detached during the checks, the whole action is retried.
|
670
777
|
# 1. Scroll the element into view if needed.
|
671
778
|
# 1. Use [`property: Page.touchscreen`] to tap the center of the element, or the specified `position`.
|
672
779
|
# 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
|
673
780
|
#
|
674
|
-
# When all steps combined have not finished during the specified `timeout`, this method
|
675
|
-
#
|
781
|
+
# When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
|
782
|
+
# zero timeout disables this.
|
676
783
|
#
|
677
784
|
# > NOTE: `frame.tap()` requires that the `hasTouch` option of the browser context be set to true.
|
678
785
|
def tap_point(
|
@@ -706,6 +813,13 @@ module Playwright
|
|
706
813
|
# await frame.type('#mytextarea', 'World', {delay: 100}); // Types slower, like a user
|
707
814
|
# ```
|
708
815
|
#
|
816
|
+
# ```java
|
817
|
+
# // Types instantly
|
818
|
+
# frame.type("#mytextarea", "Hello");
|
819
|
+
# // Types slower, like a user
|
820
|
+
# frame.type("#mytextarea", "World", new Frame.TypeOptions().setDelay(100));
|
821
|
+
# ```
|
822
|
+
#
|
709
823
|
# ```python async
|
710
824
|
# await frame.type("#mytextarea", "hello") # types instantly
|
711
825
|
# await frame.type("#mytextarea", "world", delay=100) # types slower, like a user
|
@@ -725,20 +839,25 @@ module Playwright
|
|
725
839
|
end
|
726
840
|
|
727
841
|
# This method checks an element matching `selector` by performing the following steps:
|
728
|
-
# 1. Find an element
|
729
|
-
# 1. Ensure that matched element is a checkbox or a radio input. If not, this method
|
842
|
+
# 1. Find an element matching `selector`. If there is none, wait until a matching element is attached to the DOM.
|
843
|
+
# 1. Ensure that matched element is a checkbox or a radio input. If not, this method throws. If the element is already
|
730
844
|
# unchecked, this method returns immediately.
|
731
845
|
# 1. Wait for [actionability](./actionability.md) checks on the matched element, unless `force` option is set. If the
|
732
846
|
# element is detached during the checks, the whole action is retried.
|
733
847
|
# 1. Scroll the element into view if needed.
|
734
848
|
# 1. Use [`property: Page.mouse`] to click in the center of the element.
|
735
849
|
# 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
|
736
|
-
# 1. Ensure that the element is now unchecked. If not, this method
|
850
|
+
# 1. Ensure that the element is now unchecked. If not, this method throws.
|
737
851
|
#
|
738
|
-
# When all steps combined have not finished during the specified `timeout`, this method
|
739
|
-
#
|
740
|
-
def uncheck(
|
741
|
-
|
852
|
+
# When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
|
853
|
+
# zero timeout disables this.
|
854
|
+
def uncheck(
|
855
|
+
selector,
|
856
|
+
force: nil,
|
857
|
+
noWaitAfter: nil,
|
858
|
+
position: nil,
|
859
|
+
timeout: nil)
|
860
|
+
wrap_impl(@impl.uncheck(unwrap_impl(selector), force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), position: unwrap_impl(position), timeout: unwrap_impl(timeout)))
|
742
861
|
end
|
743
862
|
|
744
863
|
# Returns frame's url.
|
@@ -764,6 +883,23 @@ module Playwright
|
|
764
883
|
# })();
|
765
884
|
# ```
|
766
885
|
#
|
886
|
+
# ```java
|
887
|
+
# import com.microsoft.playwright.*;
|
888
|
+
#
|
889
|
+
# public class Example {
|
890
|
+
# public static void main(String[] args) {
|
891
|
+
# try (Playwright playwright = Playwright.create()) {
|
892
|
+
# BrowserType firefox = playwright.firefox();
|
893
|
+
# Browser browser = firefox.launch();
|
894
|
+
# Page page = browser.newPage();
|
895
|
+
# page.setViewportSize(50, 50);
|
896
|
+
# page.mainFrame().waitForFunction("window.innerWidth < 100");
|
897
|
+
# browser.close();
|
898
|
+
# }
|
899
|
+
# }
|
900
|
+
# }
|
901
|
+
# ```
|
902
|
+
#
|
767
903
|
# ```python async
|
768
904
|
# import asyncio
|
769
905
|
# from playwright.async_api import async_playwright
|
@@ -805,6 +941,11 @@ module Playwright
|
|
805
941
|
# await frame.waitForFunction(selector => !!document.querySelector(selector), selector);
|
806
942
|
# ```
|
807
943
|
#
|
944
|
+
# ```java
|
945
|
+
# String selector = ".foo";
|
946
|
+
# frame.waitForFunction("selector => !!document.querySelector(selector)", selector);
|
947
|
+
# ```
|
948
|
+
#
|
808
949
|
# ```python async
|
809
950
|
# selector = ".foo"
|
810
951
|
# await frame.wait_for_function("selector => !!document.querySelector(selector)", selector)
|
@@ -829,6 +970,11 @@ module Playwright
|
|
829
970
|
# await frame.waitForLoadState(); // Waits for 'load' state by default.
|
830
971
|
# ```
|
831
972
|
#
|
973
|
+
# ```java
|
974
|
+
# frame.click("button"); // Click triggers navigation.
|
975
|
+
# frame.waitForLoadState(); // Waits for "load" state by default.
|
976
|
+
# ```
|
977
|
+
#
|
832
978
|
# ```python async
|
833
979
|
# await frame.click("button") # click triggers navigation.
|
834
980
|
# await frame.wait_for_load_state() # the promise resolves after "load" event.
|
@@ -857,6 +1003,14 @@ module Playwright
|
|
857
1003
|
# ]);
|
858
1004
|
# ```
|
859
1005
|
#
|
1006
|
+
# ```java
|
1007
|
+
# // The method returns after navigation has finished
|
1008
|
+
# Response response = frame.waitForNavigation(() -> {
|
1009
|
+
# // Clicking the link will indirectly cause a navigation
|
1010
|
+
# frame.click("a.delayed-navigation");
|
1011
|
+
# });
|
1012
|
+
# ```
|
1013
|
+
#
|
860
1014
|
# ```python async
|
861
1015
|
# async with frame.expect_navigation():
|
862
1016
|
# await frame.click("a.delayed-navigation") # clicking the link will indirectly cause a navigation
|
@@ -900,6 +1054,26 @@ module Playwright
|
|
900
1054
|
# })();
|
901
1055
|
# ```
|
902
1056
|
#
|
1057
|
+
# ```java
|
1058
|
+
# import com.microsoft.playwright.*;
|
1059
|
+
#
|
1060
|
+
# public class Example {
|
1061
|
+
# public static void main(String[] args) {
|
1062
|
+
# try (Playwright playwright = Playwright.create()) {
|
1063
|
+
# BrowserType chromium = playwright.chromium();
|
1064
|
+
# Browser browser = chromium.launch();
|
1065
|
+
# Page page = browser.newPage();
|
1066
|
+
# for (String currentURL : Arrays.asList("https://google.com", "https://bbc.com")) {
|
1067
|
+
# page.navigate(currentURL);
|
1068
|
+
# ElementHandle element = page.mainFrame().waitForSelector("img");
|
1069
|
+
# System.out.println("Loaded image: " + element.getAttribute("src"));
|
1070
|
+
# }
|
1071
|
+
# browser.close();
|
1072
|
+
# }
|
1073
|
+
# }
|
1074
|
+
# }
|
1075
|
+
# ```
|
1076
|
+
#
|
903
1077
|
# ```python async
|
904
1078
|
# import asyncio
|
905
1079
|
# from playwright.async_api import async_playwright
|
@@ -948,14 +1122,35 @@ module Playwright
|
|
948
1122
|
raise NotImplementedError.new('wait_for_timeout is not implemented yet.')
|
949
1123
|
end
|
950
1124
|
|
951
|
-
#
|
952
|
-
|
953
|
-
|
1125
|
+
# Waits for the frame to navigate to the given URL.
|
1126
|
+
#
|
1127
|
+
#
|
1128
|
+
# ```js
|
1129
|
+
# await frame.click('a.delayed-navigation'); // Clicking the link will indirectly cause a navigation
|
1130
|
+
# await frame.waitForURL('**/target.html');
|
1131
|
+
# ```
|
1132
|
+
#
|
1133
|
+
# ```java
|
1134
|
+
# frame.click("a.delayed-navigation"); // Clicking the link will indirectly cause a navigation
|
1135
|
+
# frame.waitForURL("**/target.html");
|
1136
|
+
# ```
|
1137
|
+
#
|
1138
|
+
# ```python async
|
1139
|
+
# await frame.click("a.delayed-navigation") # clicking the link will indirectly cause a navigation
|
1140
|
+
# await frame.wait_for_url("**/target.html")
|
1141
|
+
# ```
|
1142
|
+
#
|
1143
|
+
# ```python sync
|
1144
|
+
# frame.click("a.delayed-navigation") # clicking the link will indirectly cause a navigation
|
1145
|
+
# frame.wait_for_url("**/target.html")
|
1146
|
+
# ```
|
1147
|
+
def wait_for_url(url, timeout: nil, waitUntil: nil)
|
1148
|
+
wrap_impl(@impl.wait_for_url(unwrap_impl(url), timeout: unwrap_impl(timeout), waitUntil: unwrap_impl(waitUntil)))
|
954
1149
|
end
|
955
1150
|
|
956
1151
|
# @nodoc
|
957
|
-
def
|
958
|
-
wrap_impl(@impl.
|
1152
|
+
def detached=(req)
|
1153
|
+
wrap_impl(@impl.detached=(unwrap_impl(req)))
|
959
1154
|
end
|
960
1155
|
|
961
1156
|
# -- inherited from EventEmitter --
|