playwright-ruby-client 0.5.9 → 0.6.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.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/documentation/README.md +33 -0
  4. data/documentation/babel.config.js +3 -0
  5. data/documentation/docs/api/accessibility.md +7 -0
  6. data/documentation/docs/api/browser.md +187 -0
  7. data/documentation/docs/api/browser_context.md +397 -0
  8. data/documentation/docs/api/browser_type.md +105 -0
  9. data/documentation/docs/api/cdp_session.md +7 -0
  10. data/documentation/docs/api/console_message.md +41 -0
  11. data/documentation/docs/api/dialog.md +71 -0
  12. data/documentation/docs/api/element_handle.md +618 -0
  13. data/documentation/docs/api/experimental/_category_.yml +3 -0
  14. data/documentation/docs/api/experimental/android.md +25 -0
  15. data/documentation/docs/api/experimental/android_device.md +92 -0
  16. data/documentation/docs/api/experimental/android_input.md +38 -0
  17. data/documentation/docs/api/experimental/android_socket.md +7 -0
  18. data/documentation/docs/api/experimental/android_web_view.md +7 -0
  19. data/documentation/docs/api/file_chooser.md +50 -0
  20. data/documentation/docs/api/frame.md +866 -0
  21. data/documentation/docs/api/js_handle.md +113 -0
  22. data/documentation/docs/api/keyboard.md +157 -0
  23. data/documentation/docs/api/mouse.md +69 -0
  24. data/documentation/docs/api/page.md +1402 -0
  25. data/documentation/docs/api/playwright.md +63 -0
  26. data/documentation/docs/api/request.md +188 -0
  27. data/documentation/docs/api/response.md +97 -0
  28. data/documentation/docs/api/route.md +80 -0
  29. data/documentation/docs/api/selectors.md +23 -0
  30. data/documentation/docs/api/touchscreen.md +8 -0
  31. data/documentation/docs/api/tracing.md +54 -0
  32. data/documentation/docs/api/web_socket.md +7 -0
  33. data/documentation/docs/api/worker.md +24 -0
  34. data/documentation/docs/article/api_coverage.mdx +11 -0
  35. data/documentation/docs/article/getting_started.md +152 -0
  36. data/documentation/docs/article/guides/_category_.yml +3 -0
  37. data/documentation/docs/article/guides/download_playwright_driver.md +49 -0
  38. data/documentation/docs/article/guides/launch_browser.md +119 -0
  39. data/documentation/docs/article/guides/rails_integration.md +162 -0
  40. data/{docs → documentation/docs/include}/api_coverage.md +12 -1
  41. data/documentation/docusaurus.config.js +107 -0
  42. data/documentation/package.json +39 -0
  43. data/documentation/sidebars.js +15 -0
  44. data/documentation/src/components/HomepageFeatures.js +61 -0
  45. data/documentation/src/components/HomepageFeatures.module.css +13 -0
  46. data/documentation/src/css/custom.css +44 -0
  47. data/documentation/src/pages/index.js +50 -0
  48. data/documentation/src/pages/index.module.css +41 -0
  49. data/documentation/src/pages/markdown-page.md +7 -0
  50. data/documentation/static/.nojekyll +0 -0
  51. data/documentation/static/img/playwright-logo.svg +9 -0
  52. data/documentation/static/img/undraw_dropdown_menu.svg +1 -0
  53. data/documentation/static/img/undraw_web_development.svg +1 -0
  54. data/documentation/static/img/undraw_windows.svg +1 -0
  55. data/documentation/yarn.lock +8805 -0
  56. data/lib/playwright/channel_owners/binding_call.rb +33 -0
  57. data/lib/playwright/channel_owners/browser.rb +11 -2
  58. data/lib/playwright/channel_owners/browser_context.rb +58 -6
  59. data/lib/playwright/channel_owners/browser_type.rb +8 -1
  60. data/lib/playwright/channel_owners/element_handle.rb +17 -16
  61. data/lib/playwright/channel_owners/frame.rb +24 -34
  62. data/lib/playwright/channel_owners/js_handle.rb +2 -10
  63. data/lib/playwright/channel_owners/page.rb +37 -52
  64. data/lib/playwright/channel_owners/worker.rb +4 -0
  65. data/lib/playwright/download.rb +3 -2
  66. data/lib/playwright/events.rb +4 -0
  67. data/lib/playwright/input_files.rb +0 -8
  68. data/lib/playwright/javascript.rb +0 -10
  69. data/lib/playwright/javascript/expression.rb +2 -7
  70. data/lib/playwright/playwright_api.rb +16 -1
  71. data/lib/playwright/tracing_impl.rb +31 -0
  72. data/lib/playwright/version.rb +2 -1
  73. data/lib/playwright_api/accessibility.rb +7 -88
  74. data/lib/playwright_api/android.rb +2 -59
  75. data/lib/playwright_api/android_device.rb +6 -5
  76. data/lib/playwright_api/browser.rb +13 -122
  77. data/lib/playwright_api/browser_context.rb +66 -433
  78. data/lib/playwright_api/browser_type.rb +28 -78
  79. data/lib/playwright_api/cdp_session.rb +2 -25
  80. data/lib/playwright_api/console_message.rb +2 -0
  81. data/lib/playwright_api/dialog.rb +5 -63
  82. data/lib/playwright_api/element_handle.rb +96 -294
  83. data/lib/playwright_api/file_chooser.rb +0 -21
  84. data/lib/playwright_api/frame.rb +98 -564
  85. data/lib/playwright_api/js_handle.rb +10 -67
  86. data/lib/playwright_api/keyboard.rb +22 -166
  87. data/lib/playwright_api/mouse.rb +1 -45
  88. data/lib/playwright_api/page.rb +223 -1224
  89. data/lib/playwright_api/playwright.rb +8 -93
  90. data/lib/playwright_api/request.rb +9 -87
  91. data/lib/playwright_api/response.rb +1 -1
  92. data/lib/playwright_api/route.rb +3 -80
  93. data/lib/playwright_api/selectors.rb +0 -66
  94. data/lib/playwright_api/tracing.rb +39 -0
  95. data/lib/playwright_api/web_socket.rb +1 -1
  96. data/lib/playwright_api/worker.rb +28 -42
  97. data/playwright.gemspec +2 -2
  98. metadata +60 -20
  99. data/lib/playwright/javascript/function.rb +0 -67
@@ -1,27 +1,6 @@
1
1
  module Playwright
2
2
  # `FileChooser` objects are dispatched by the page in the [`event: Page.fileChooser`] event.
3
- #
4
3
  #
5
- # ```js
6
- # const [fileChooser] = await Promise.all([
7
- # page.waitForEvent('filechooser'),
8
- # page.click('upload')
9
- # ]);
10
- # await fileChooser.setFiles('myfile.pdf');
11
- # ```
12
- #
13
- # ```java
14
- # FileChooser fileChooser = page.waitForFileChooser(() -> page.click("upload"));
15
- # fileChooser.setFiles(Paths.get("myfile.pdf"));
16
- # ```
17
- #
18
- # ```python async
19
- # async with page.expect_file_chooser() as fc_info:
20
- # await page.click("upload")
21
- # file_chooser = await fc_info.value
22
- # await file_chooser.set_files("myfile.pdf")
23
- # ```
24
- #
25
4
  # ```python sync
26
5
  # with page.expect_file_chooser() as fc_info:
27
6
  # page.click("upload")
@@ -1,85 +1,19 @@
1
1
  module Playwright
2
2
  # At every point of time, page exposes its current frame tree via the [`method: Page.mainFrame`] and
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
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
8
  # - [`event: Page.frameNavigated`] - fired when the frame commits navigation to a different URL.
9
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:
13
- #
14
13
  #
15
- # ```js
16
- # const { firefox } = require('playwright'); // Or 'chromium' or 'webkit'.
17
- #
18
- # (async () => {
19
- # const browser = await firefox.launch();
20
- # const page = await browser.newPage();
21
- # await page.goto('https://www.google.com/chrome/browser/canary.html');
22
- # dumpFrameTree(page.mainFrame(), '');
23
- # await browser.close();
24
- #
25
- # function dumpFrameTree(frame, indent) {
26
- # console.log(indent + frame.url());
27
- # for (const child of frame.childFrames()) {
28
- # dumpFrameTree(child, indent + ' ');
29
- # }
30
- # }
31
- # })();
32
- # ```
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
- #
57
- # ```python async
58
- # import asyncio
59
- # from playwright.async_api import async_playwright
60
- #
61
- # async def run(playwright):
62
- # firefox = playwright.firefox
63
- # browser = await firefox.launch()
64
- # page = await browser.new_page()
65
- # await page.goto("https://www.theverge.com")
66
- # dump_frame_tree(page.main_frame, "")
67
- # await browser.close()
68
- #
69
- # def dump_frame_tree(frame, indent):
70
- # print(indent + frame.name + '@' + frame.url)
71
- # for child in frame.child_frames:
72
- # dump_frame_tree(child, indent + " ")
73
- #
74
- # async def main():
75
- # async with async_playwright() as playwright:
76
- # await run(playwright)
77
- # asyncio.run(main())
78
- # ```
79
- #
80
14
  # ```python sync
81
15
  # from playwright.sync_api import sync_playwright
82
- #
16
+ #
83
17
  # def run(playwright):
84
18
  # firefox = playwright.firefox
85
19
  # browser = firefox.launch()
@@ -87,26 +21,26 @@ module Playwright
87
21
  # page.goto("https://www.theverge.com")
88
22
  # dump_frame_tree(page.main_frame, "")
89
23
  # browser.close()
90
- #
24
+ #
91
25
  # def dump_frame_tree(frame, indent):
92
26
  # print(indent + frame.name + '@' + frame.url)
93
27
  # for child in frame.child_frames:
94
28
  # dump_frame_tree(child, indent + " ")
95
- #
29
+ #
96
30
  # with sync_playwright() as playwright:
97
31
  # run(playwright)
98
32
  # ```
99
33
  class Frame < PlaywrightApi
100
34
 
101
35
  # Returns the added tag when the script's onload fires or when the script content was injected into frame.
102
- #
36
+ #
103
37
  # Adds a `<script>` tag into the page with the desired url or content.
104
38
  def add_script_tag(content: nil, path: nil, type: nil, url: nil)
105
39
  wrap_impl(@impl.add_script_tag(content: unwrap_impl(content), path: unwrap_impl(path), type: unwrap_impl(type), url: unwrap_impl(url)))
106
40
  end
107
41
 
108
42
  # Returns the added tag when the stylesheet's onload fires or when the CSS content was injected into frame.
109
- #
43
+ #
110
44
  # Adds a `<link rel="stylesheet">` tag into the page with the desired url or a `<style type="text/css">` tag with the
111
45
  # content.
112
46
  def add_style_tag(content: nil, path: nil, url: nil)
@@ -123,7 +57,7 @@ module Playwright
123
57
  # 1. Use [`property: Page.mouse`] to click in the center of the element.
124
58
  # 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
125
59
  # 1. Ensure that the element is now checked. If not, this method throws.
126
- #
60
+ #
127
61
  # When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
128
62
  # zero timeout disables this.
129
63
  def check(
@@ -131,8 +65,9 @@ module Playwright
131
65
  force: nil,
132
66
  noWaitAfter: nil,
133
67
  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)))
68
+ timeout: nil,
69
+ trial: nil)
70
+ wrap_impl(@impl.check(unwrap_impl(selector), force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), position: unwrap_impl(position), timeout: unwrap_impl(timeout), trial: unwrap_impl(trial)))
136
71
  end
137
72
 
138
73
  def child_frames
@@ -146,7 +81,7 @@ module Playwright
146
81
  # 1. Scroll the element into view if needed.
147
82
  # 1. Use [`property: Page.mouse`] to click in the center of the element, or the specified `position`.
148
83
  # 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
149
- #
84
+ #
150
85
  # When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
151
86
  # zero timeout disables this.
152
87
  def click(
@@ -158,8 +93,9 @@ module Playwright
158
93
  modifiers: nil,
159
94
  noWaitAfter: nil,
160
95
  position: nil,
161
- timeout: nil)
162
- wrap_impl(@impl.click(unwrap_impl(selector), 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)))
96
+ timeout: nil,
97
+ trial: nil)
98
+ wrap_impl(@impl.click(unwrap_impl(selector), 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)))
163
99
  end
164
100
 
165
101
  # Gets the full HTML contents of the frame, including the doctype.
@@ -175,10 +111,10 @@ module Playwright
175
111
  # 1. Use [`property: Page.mouse`] to double click in the center of the element, or the specified `position`.
176
112
  # 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set. Note that if the
177
113
  # first click of the `dblclick()` triggers a navigation event, this method will throw.
178
- #
114
+ #
179
115
  # When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
180
116
  # zero timeout disables this.
181
- #
117
+ #
182
118
  # > NOTE: `frame.dblclick()` dispatches two `click` events and a single `dblclick` event.
183
119
  def dblclick(
184
120
  selector,
@@ -188,34 +124,22 @@ module Playwright
188
124
  modifiers: nil,
189
125
  noWaitAfter: nil,
190
126
  position: nil,
191
- timeout: nil)
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)))
127
+ timeout: nil,
128
+ trial: nil)
129
+ 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), trial: unwrap_impl(trial)))
193
130
  end
194
131
 
195
132
  # The snippet below dispatches the `click` event on the element. Regardless of the visibility state of the element,
196
133
  # `click` is dispatched. This is equivalent to calling
197
134
  # [element.click()](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click).
198
- #
199
135
  #
200
- # ```js
201
- # await frame.dispatchEvent('button#submit', 'click');
202
- # ```
203
- #
204
- # ```java
205
- # frame.dispatchEvent("button#submit", "click");
206
- # ```
207
- #
208
- # ```python async
209
- # await frame.dispatch_event("button#submit", "click")
210
- # ```
211
- #
212
136
  # ```python sync
213
137
  # frame.dispatch_event("button#submit", "click")
214
138
  # ```
215
- #
139
+ #
216
140
  # Under the hood, it creates an instance of an event based on the given `type`, initializes it with `eventInit` properties
217
141
  # and dispatches it on the element. Events are `composed`, `cancelable` and bubble by default.
218
- #
142
+ #
219
143
  # Since `eventInit` is event-specific, please refer to the events documentation for the lists of initial properties:
220
144
  # - [DragEvent](https://developer.mozilla.org/en-US/docs/Web/API/DragEvent/DragEvent)
221
145
  # - [FocusEvent](https://developer.mozilla.org/en-US/docs/Web/API/FocusEvent/FocusEvent)
@@ -224,30 +148,9 @@ module Playwright
224
148
  # - [PointerEvent](https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/PointerEvent)
225
149
  # - [TouchEvent](https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent/TouchEvent)
226
150
  # - [Event](https://developer.mozilla.org/en-US/docs/Web/API/Event/Event)
227
- #
151
+ #
228
152
  # You can also specify `JSHandle` as the property value if you want live objects to be passed into the event:
229
- #
230
153
  #
231
- # ```js
232
- # // Note you can only create DataTransfer in Chromium and Firefox
233
- # const dataTransfer = await frame.evaluateHandle(() => new DataTransfer());
234
- # await frame.dispatchEvent('#source', 'dragstart', { dataTransfer });
235
- # ```
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
- #
245
- # ```python async
246
- # # note you can only create data_transfer in chromium and firefox
247
- # data_transfer = await frame.evaluate_handle("new DataTransfer()")
248
- # await frame.dispatch_event("#source", "dragstart", { "dataTransfer": data_transfer })
249
- # ```
250
- #
251
154
  # ```python sync
252
155
  # # note you can only create data_transfer in chromium and firefox
253
156
  # data_transfer = frame.evaluate_handle("new DataTransfer()")
@@ -258,35 +161,16 @@ module Playwright
258
161
  end
259
162
 
260
163
  # Returns the return value of `expression`.
261
- #
164
+ #
262
165
  # The method finds an element matching the specified selector within the frame and passes it as a first argument to
263
166
  # `expression`. See [Working with selectors](./selectors.md) for more details. If no elements match the selector, the
264
167
  # method throws an error.
265
- #
168
+ #
266
169
  # If `expression` returns a [Promise], then [`method: Frame.evalOnSelector`] would wait for the promise to resolve and
267
170
  # return its value.
268
- #
171
+ #
269
172
  # Examples:
270
- #
271
173
  #
272
- # ```js
273
- # const searchValue = await frame.$eval('#search', el => el.value);
274
- # const preloadHref = await frame.$eval('link[rel=preload]', el => el.href);
275
- # const html = await frame.$eval('.main-container', (e, suffix) => e.outerHTML + suffix, 'hello');
276
- # ```
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
- #
284
- # ```python async
285
- # search_value = await frame.eval_on_selector("#search", "el => el.value")
286
- # preload_href = await frame.eval_on_selector("link[rel=preload]", "el => el.href")
287
- # html = await frame.eval_on_selector(".main-container", "(e, suffix) => e.outerHTML + suffix", "hello")
288
- # ```
289
- #
290
174
  # ```python sync
291
175
  # search_value = frame.eval_on_selector("#search", "el => el.value")
292
176
  # preload_href = frame.eval_on_selector("link[rel=preload]", "el => el.href")
@@ -297,28 +181,15 @@ module Playwright
297
181
  end
298
182
 
299
183
  # Returns the return value of `expression`.
300
- #
184
+ #
301
185
  # The method finds all elements matching the specified selector within the frame and passes an array of matched elements
302
186
  # as a first argument to `expression`. See [Working with selectors](./selectors.md) for more details.
303
- #
187
+ #
304
188
  # If `expression` returns a [Promise], then [`method: Frame.evalOnSelectorAll`] would wait for the promise to resolve and
305
189
  # return its value.
306
- #
190
+ #
307
191
  # Examples:
308
- #
309
192
  #
310
- # ```js
311
- # const divsCounts = await frame.$$eval('div', (divs, min) => divs.length >= min, 10);
312
- # ```
313
- #
314
- # ```java
315
- # boolean divsCounts = (boolean) page.evalOnSelectorAll("div", "(divs, min) => divs.length >= min", 10);
316
- # ```
317
- #
318
- # ```python async
319
- # divs_counts = await frame.eval_on_selector_all("div", "(divs, min) => divs.length >= min", 10)
320
- # ```
321
- #
322
193
  # ```python sync
323
194
  # divs_counts = frame.eval_on_selector_all("div", "(divs, min) => divs.length >= min", 10)
324
195
  # ```
@@ -327,83 +198,29 @@ module Playwright
327
198
  end
328
199
 
329
200
  # Returns the return value of `expression`.
330
- #
201
+ #
331
202
  # If the function passed to the [`method: Frame.evaluate`] returns a [Promise], then [`method: Frame.evaluate`] would wait
332
203
  # for the promise to resolve and return its value.
333
- #
204
+ #
334
205
  # If the function passed to the [`method: Frame.evaluate`] returns a non-[Serializable] value, then
335
206
  # [`method: Frame.evaluate`] returns `undefined`. Playwright also supports transferring some additional values that are
336
207
  # not serializable by `JSON`: `-0`, `NaN`, `Infinity`, `-Infinity`.
337
- #
338
208
  #
339
- # ```js
340
- # const result = await frame.evaluate(([x, y]) => {
341
- # return Promise.resolve(x * y);
342
- # }, [7, 8]);
343
- # console.log(result); // prints "56"
344
- # ```
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
- #
353
- # ```python async
354
- # result = await frame.evaluate("([x, y]) => Promise.resolve(x * y)", [7, 8])
355
- # print(result) # prints "56"
356
- # ```
357
- #
358
209
  # ```python sync
359
210
  # result = frame.evaluate("([x, y]) => Promise.resolve(x * y)", [7, 8])
360
211
  # print(result) # prints "56"
361
212
  # ```
362
- #
213
+ #
363
214
  # A string can also be passed in instead of a function.
364
- #
365
215
  #
366
- # ```js
367
- # console.log(await frame.evaluate('1 + 2')); // prints "3"
368
- # ```
369
- #
370
- # ```java
371
- # System.out.println(frame.evaluate("1 + 2")); // prints "3"
372
- # ```
373
- #
374
- # ```python async
375
- # print(await frame.evaluate("1 + 2")) # prints "3"
376
- # x = 10
377
- # print(await frame.evaluate(f"1 + {x}")) # prints "11"
378
- # ```
379
- #
380
216
  # ```python sync
381
217
  # print(frame.evaluate("1 + 2")) # prints "3"
382
218
  # x = 10
383
219
  # print(frame.evaluate(f"1 + {x}")) # prints "11"
384
220
  # ```
385
- #
221
+ #
386
222
  # `ElementHandle` instances can be passed as an argument to the [`method: Frame.evaluate`]:
387
- #
388
223
  #
389
- # ```js
390
- # const bodyHandle = await frame.$('body');
391
- # const html = await frame.evaluate(([body, suffix]) => body.innerHTML + suffix, [bodyHandle, 'hello']);
392
- # await bodyHandle.dispose();
393
- # ```
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
- #
401
- # ```python async
402
- # body_handle = await frame.query_selector("body")
403
- # html = await frame.evaluate("([body, suffix]) => body.innerHTML + suffix", [body_handle, "hello"])
404
- # await body_handle.dispose()
405
- # ```
406
- #
407
224
  # ```python sync
408
225
  # body_handle = frame.query_selector("body")
409
226
  # html = frame.evaluate("([body, suffix]) => body.innerHTML + suffix", [body_handle, "hello"])
@@ -414,77 +231,26 @@ module Playwright
414
231
  end
415
232
 
416
233
  # Returns the return value of `expression` as a `JSHandle`.
417
- #
234
+ #
418
235
  # The only difference between [`method: Frame.evaluate`] and [`method: Frame.evaluateHandle`] is that
419
236
  # [`method: Frame.evaluateHandle`] returns `JSHandle`.
420
- #
237
+ #
421
238
  # If the function, passed to the [`method: Frame.evaluateHandle`], returns a [Promise], then
422
239
  # [`method: Frame.evaluateHandle`] would wait for the promise to resolve and return its value.
423
- #
424
240
  #
425
- # ```js
426
- # const aWindowHandle = await frame.evaluateHandle(() => Promise.resolve(window));
427
- # aWindowHandle; // Handle for the window object.
428
- # ```
429
- #
430
- # ```java
431
- # // Handle for the window object.
432
- # JSHandle aWindowHandle = frame.evaluateHandle("() => Promise.resolve(window)");
433
- # ```
434
- #
435
- # ```python async
436
- # a_window_handle = await frame.evaluate_handle("Promise.resolve(window)")
437
- # a_window_handle # handle for the window object.
438
- # ```
439
- #
440
241
  # ```python sync
441
242
  # a_window_handle = frame.evaluate_handle("Promise.resolve(window)")
442
243
  # a_window_handle # handle for the window object.
443
244
  # ```
444
- #
245
+ #
445
246
  # A string can also be passed in instead of a function.
446
- #
447
247
  #
448
- # ```js
449
- # const aHandle = await frame.evaluateHandle('document'); // Handle for the 'document'.
450
- # ```
451
- #
452
- # ```java
453
- # JSHandle aHandle = frame.evaluateHandle("document"); // Handle for the "document".
454
- # ```
455
- #
456
- # ```python async
457
- # a_handle = await page.evaluate_handle("document") # handle for the "document"
458
- # ```
459
- #
460
248
  # ```python sync
461
249
  # a_handle = page.evaluate_handle("document") # handle for the "document"
462
250
  # ```
463
- #
251
+ #
464
252
  # `JSHandle` instances can be passed as an argument to the [`method: Frame.evaluateHandle`]:
465
- #
466
253
  #
467
- # ```js
468
- # const aHandle = await frame.evaluateHandle(() => document.body);
469
- # const resultHandle = await frame.evaluateHandle(([body, suffix]) => body.innerHTML + suffix, [aHandle, 'hello']);
470
- # console.log(await resultHandle.jsonValue());
471
- # await resultHandle.dispose();
472
- # ```
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
- #
481
- # ```python async
482
- # a_handle = await page.evaluate_handle("document.body")
483
- # result_handle = await page.evaluate_handle("body => body.innerHTML", a_handle)
484
- # print(await result_handle.json_value())
485
- # await result_handle.dispose()
486
- # ```
487
- #
488
254
  # ```python sync
489
255
  # a_handle = page.evaluate_handle("document.body")
490
256
  # result_handle = page.evaluate_handle("body => body.innerHTML", a_handle)
@@ -496,11 +262,14 @@ module Playwright
496
262
  end
497
263
 
498
264
  # This method waits for an element matching `selector`, waits for [actionability](./actionability.md) checks, focuses the
499
- # element, fills it and triggers an `input` event after filling. If the element is inside the `<label>` element that has
500
- # associated [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), that control will be
501
- # filled instead. If the element to be filled is not an `<input>`, `<textarea>` or `[contenteditable]` element, this
502
- # method throws an error. Note that you can pass an empty string to clear the input field.
503
- #
265
+ # element, fills it and triggers an `input` event after filling. Note that you can pass an empty string to clear the input
266
+ # field.
267
+ #
268
+ # If the target element is not an `<input>`, `<textarea>` or `[contenteditable]` element, this method throws an error.
269
+ # However, if the element is inside the `<label>` element that has an associated
270
+ # [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), the control will be filled
271
+ # instead.
272
+ #
504
273
  # To send fine-grained keyboard events, use [`method: Frame.type`].
505
274
  def fill(selector, value, noWaitAfter: nil, timeout: nil)
506
275
  wrap_impl(@impl.fill(unwrap_impl(selector), unwrap_impl(value), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
@@ -513,31 +282,12 @@ module Playwright
513
282
  end
514
283
 
515
284
  # Returns the `frame` or `iframe` element handle which corresponds to this frame.
516
- #
285
+ #
517
286
  # This is an inverse of [`method: ElementHandle.contentFrame`]. Note that returned handle actually belongs to the parent
518
287
  # frame.
519
- #
288
+ #
520
289
  # This method throws an error if the frame has been detached before `frameElement()` returns.
521
- #
522
290
  #
523
- # ```js
524
- # const frameElement = await frame.frameElement();
525
- # const contentFrame = await frameElement.contentFrame();
526
- # console.log(frame === contentFrame); // -> true
527
- # ```
528
- #
529
- # ```java
530
- # ElementHandle frameElement = frame.frameElement();
531
- # Frame contentFrame = frameElement.contentFrame();
532
- # System.out.println(frame == contentFrame); // -> true
533
- # ```
534
- #
535
- # ```python async
536
- # frame_element = await frame.frame_element()
537
- # content_frame = await frame_element.content_frame()
538
- # assert frame == content_frame
539
- # ```
540
- #
541
291
  # ```python sync
542
292
  # frame_element = frame.frame_element()
543
293
  # content_frame = frame_element.content_frame()
@@ -554,18 +304,18 @@ module Playwright
554
304
 
555
305
  # Returns the main resource response. In case of multiple redirects, the navigation will resolve with the response of the
556
306
  # last redirect.
557
- #
307
+ #
558
308
  # `frame.goto` will throw an error if:
559
309
  # - there's an SSL error (e.g. in case of self-signed certificates).
560
310
  # - target URL is invalid.
561
311
  # - the `timeout` is exceeded during navigation.
562
312
  # - the remote server does not respond or is unreachable.
563
313
  # - the main resource failed to load.
564
- #
314
+ #
565
315
  # `frame.goto` will not throw an error when any valid HTTP status code is returned by the remote server, including 404
566
316
  # "Not Found" and 500 "Internal Server Error". The status code for such responses can be retrieved by calling
567
317
  # [`method: Response.status`].
568
- #
318
+ #
569
319
  # > NOTE: `frame.goto` either throws an error or returns a main resource response. The only exceptions are navigation to
570
320
  # `about:blank` or navigation to the same URL with a different hash, which would succeed and return `null`.
571
321
  # > NOTE: Headless mode doesn't support navigation to a PDF document. See the
@@ -581,7 +331,7 @@ module Playwright
581
331
  # 1. Scroll the element into view if needed.
582
332
  # 1. Use [`property: Page.mouse`] to hover over the center of the element, or the specified `position`.
583
333
  # 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
584
- #
334
+ #
585
335
  # When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
586
336
  # zero timeout disables this.
587
337
  def hover(
@@ -589,8 +339,9 @@ module Playwright
589
339
  force: nil,
590
340
  modifiers: nil,
591
341
  position: nil,
592
- timeout: nil)
593
- wrap_impl(@impl.hover(unwrap_impl(selector), force: unwrap_impl(force), modifiers: unwrap_impl(modifiers), position: unwrap_impl(position), timeout: unwrap_impl(timeout)))
342
+ timeout: nil,
343
+ trial: nil)
344
+ wrap_impl(@impl.hover(unwrap_impl(selector), force: unwrap_impl(force), modifiers: unwrap_impl(modifiers), position: unwrap_impl(position), timeout: unwrap_impl(timeout), trial: unwrap_impl(trial)))
594
345
  end
595
346
 
596
347
  # Returns `element.innerHTML`.
@@ -641,9 +392,9 @@ module Playwright
641
392
  end
642
393
 
643
394
  # Returns frame's name attribute as specified in the tag.
644
- #
395
+ #
645
396
  # If the name is empty, returns the id attribute instead.
646
- #
397
+ #
647
398
  # > NOTE: This value is calculated once when the frame is created, and will not update if the attribute is changed later.
648
399
  def name
649
400
  wrap_impl(@impl.name)
@@ -662,17 +413,17 @@ module Playwright
662
413
  # `key` can specify the intended [keyboardEvent.key](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key)
663
414
  # value or a single character to generate the text for. A superset of the `key` values can be found
664
415
  # [here](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values). Examples of the keys are:
665
- #
416
+ #
666
417
  # `F1` - `F12`, `Digit0`- `Digit9`, `KeyA`- `KeyZ`, `Backquote`, `Minus`, `Equal`, `Backslash`, `Backspace`, `Tab`,
667
418
  # `Delete`, `Escape`, `ArrowDown`, `End`, `Enter`, `Home`, `Insert`, `PageDown`, `PageUp`, `ArrowRight`, `ArrowUp`, etc.
668
- #
419
+ #
669
420
  # Following modification shortcuts are also supported: `Shift`, `Control`, `Alt`, `Meta`, `ShiftLeft`.
670
- #
421
+ #
671
422
  # Holding down `Shift` will type the text that corresponds to the `key` in the upper case.
672
- #
423
+ #
673
424
  # If `key` is a single character, it is case-sensitive, so the values `a` and `A` will generate different respective
674
425
  # texts.
675
- #
426
+ #
676
427
  # Shortcuts such as `key: "Control+o"` or `key: "Control+Shift+T"` are supported as well. When specified with the
677
428
  # modifier, modifier is pressed and being held while the subsequent key is being pressed.
678
429
  def press(
@@ -685,7 +436,7 @@ module Playwright
685
436
  end
686
437
 
687
438
  # Returns the ElementHandle pointing to the frame element.
688
- #
439
+ #
689
440
  # The method finds an element matching the specified selector within the frame. See
690
441
  # [Working with selectors](./selectors.md) for more details. If no elements match the selector, returns `null`.
691
442
  def query_selector(selector)
@@ -693,50 +444,24 @@ module Playwright
693
444
  end
694
445
 
695
446
  # Returns the ElementHandles pointing to the frame elements.
696
- #
447
+ #
697
448
  # The method finds all elements matching the specified selector within the frame. See
698
449
  # [Working with selectors](./selectors.md) for more details. If no elements match the selector, returns empty array.
699
450
  def query_selector_all(selector)
700
451
  wrap_impl(@impl.query_selector_all(unwrap_impl(selector)))
701
452
  end
702
453
 
454
+ # This method waits for an element matching `selector`, waits for [actionability](./actionability.md) checks, waits until
455
+ # all specified options are present in the `<select>` element and selects these options.
456
+ #
457
+ # If the target element is not a `<select>` element, this method throws an error. However, if the element is inside the
458
+ # `<label>` element that has an associated
459
+ # [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), the control will be used instead.
460
+ #
703
461
  # Returns the array of option values that have been successfully selected.
704
- #
705
- # Triggers a `change` and `input` event once all the provided options have been selected. If there's no `<select>` element
706
- # matching `selector`, the method throws an error.
707
- #
708
- # Will wait until all specified options are present in the `<select>` element.
709
- #
710
- #
711
- # ```js
712
- # // single selection matching the value
713
- # frame.selectOption('select#colors', 'blue');
714
- #
715
- # // single selection matching both the value and the label
716
- # frame.selectOption('select#colors', { label: 'Blue' });
717
- #
718
- # // multiple selection
719
- # frame.selectOption('select#colors', 'red', 'green', 'blue');
720
- # ```
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
- #
731
- # ```python async
732
- # # single selection matching the value
733
- # await frame.select_option("select#colors", "blue")
734
- # # single selection matching the label
735
- # await frame.select_option("select#colors", label="blue")
736
- # # multiple selection
737
- # await frame.select_option("select#colors", value=["red", "green", "blue"])
738
- # ```
739
- #
462
+ #
463
+ # Triggers a `change` and `input` event once all the provided options have been selected.
464
+ #
740
465
  # ```python sync
741
466
  # # single selection matching the value
742
467
  # frame.select_option("select#colors", "blue")
@@ -763,7 +488,7 @@ module Playwright
763
488
 
764
489
  # This method expects `selector` to point to an
765
490
  # [input element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input).
766
- #
491
+ #
767
492
  # Sets the value of the file input to these file paths or files. If some of the `filePaths` are relative paths, then they
768
493
  # are resolved relative to the the current working directory. For empty array, clears the selected files.
769
494
  def set_input_files(selector, files, noWaitAfter: nil, timeout: nil)
@@ -777,10 +502,10 @@ module Playwright
777
502
  # 1. Scroll the element into view if needed.
778
503
  # 1. Use [`property: Page.touchscreen`] to tap the center of the element, or the specified `position`.
779
504
  # 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
780
- #
505
+ #
781
506
  # When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
782
507
  # zero timeout disables this.
783
- #
508
+ #
784
509
  # > NOTE: `frame.tap()` requires that the `hasTouch` option of the browser context be set to true.
785
510
  def tap_point(
786
511
  selector,
@@ -788,8 +513,9 @@ module Playwright
788
513
  modifiers: nil,
789
514
  noWaitAfter: nil,
790
515
  position: nil,
791
- timeout: nil)
792
- wrap_impl(@impl.tap_point(unwrap_impl(selector), force: unwrap_impl(force), modifiers: unwrap_impl(modifiers), noWaitAfter: unwrap_impl(noWaitAfter), position: unwrap_impl(position), timeout: unwrap_impl(timeout)))
516
+ timeout: nil,
517
+ trial: nil)
518
+ wrap_impl(@impl.tap_point(unwrap_impl(selector), force: unwrap_impl(force), modifiers: unwrap_impl(modifiers), noWaitAfter: unwrap_impl(noWaitAfter), position: unwrap_impl(position), timeout: unwrap_impl(timeout), trial: unwrap_impl(trial)))
793
519
  end
794
520
 
795
521
  # Returns `element.textContent`.
@@ -804,27 +530,9 @@ module Playwright
804
530
 
805
531
  # Sends a `keydown`, `keypress`/`input`, and `keyup` event for each character in the text. `frame.type` can be used to
806
532
  # send fine-grained keyboard events. To fill values in form fields, use [`method: Frame.fill`].
807
- #
533
+ #
808
534
  # To press a special key, like `Control` or `ArrowDown`, use [`method: Keyboard.press`].
809
- #
810
535
  #
811
- # ```js
812
- # await frame.type('#mytextarea', 'Hello'); // Types instantly
813
- # await frame.type('#mytextarea', 'World', {delay: 100}); // Types slower, like a user
814
- # ```
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
- #
823
- # ```python async
824
- # await frame.type("#mytextarea", "hello") # types instantly
825
- # await frame.type("#mytextarea", "world", delay=100) # types slower, like a user
826
- # ```
827
- #
828
536
  # ```python sync
829
537
  # frame.type("#mytextarea", "hello") # types instantly
830
538
  # frame.type("#mytextarea", "world", delay=100) # types slower, like a user
@@ -848,7 +556,7 @@ module Playwright
848
556
  # 1. Use [`property: Page.mouse`] to click in the center of the element.
849
557
  # 1. Wait for initiated navigations to either succeed or fail, unless `noWaitAfter` option is set.
850
558
  # 1. Ensure that the element is now unchecked. If not, this method throws.
851
- #
559
+ #
852
560
  # When all steps combined have not finished during the specified `timeout`, this method throws a `TimeoutError`. Passing
853
561
  # zero timeout disables this.
854
562
  def uncheck(
@@ -856,8 +564,9 @@ module Playwright
856
564
  force: nil,
857
565
  noWaitAfter: nil,
858
566
  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)))
567
+ timeout: nil,
568
+ trial: nil)
569
+ wrap_impl(@impl.uncheck(unwrap_impl(selector), force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), position: unwrap_impl(position), timeout: unwrap_impl(timeout), trial: unwrap_impl(trial)))
861
570
  end
862
571
 
863
572
  # Returns frame's url.
@@ -866,61 +575,12 @@ module Playwright
866
575
  end
867
576
 
868
577
  # Returns when the `expression` returns a truthy value, returns that value.
869
- #
578
+ #
870
579
  # The [`method: Frame.waitForFunction`] can be used to observe viewport size change:
871
- #
872
- #
873
- # ```js
874
- # const { firefox } = require('playwright'); // Or 'chromium' or 'webkit'.
875
- #
876
- # (async () => {
877
- # const browser = await firefox.launch();
878
- # const page = await browser.newPage();
879
- # const watchDog = page.mainFrame().waitForFunction('window.innerWidth < 100');
880
- # page.setViewportSize({width: 50, height: 50});
881
- # await watchDog;
882
- # await browser.close();
883
- # })();
884
- # ```
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
- #
903
- # ```python async
904
- # import asyncio
905
- # from playwright.async_api import async_playwright
906
- #
907
- # async def run(playwright):
908
- # webkit = playwright.webkit
909
- # browser = await webkit.launch()
910
- # page = await browser.new_page()
911
- # await page.evaluate("window.x = 0; setTimeout(() => { window.x = 100 }, 1000);")
912
- # await page.main_frame.wait_for_function("() => window.x > 0")
913
- # await browser.close()
914
- #
915
- # async def main():
916
- # async with async_playwright() as playwright:
917
- # await run(playwright)
918
- # asyncio.run(main())
919
- # ```
920
- #
580
+ #
921
581
  # ```python sync
922
582
  # from playwright.sync_api import sync_playwright
923
- #
583
+ #
924
584
  # def run(playwright):
925
585
  # webkit = playwright.webkit
926
586
  # browser = webkit.launch()
@@ -928,29 +588,13 @@ module Playwright
928
588
  # page.evaluate("window.x = 0; setTimeout(() => { window.x = 100 }, 1000);")
929
589
  # page.main_frame.wait_for_function("() => window.x > 0")
930
590
  # browser.close()
931
- #
591
+ #
932
592
  # with sync_playwright() as playwright:
933
593
  # run(playwright)
934
594
  # ```
935
- #
595
+ #
936
596
  # To pass an argument to the predicate of `frame.waitForFunction` function:
937
- #
938
597
  #
939
- # ```js
940
- # const selector = '.foo';
941
- # await frame.waitForFunction(selector => !!document.querySelector(selector), selector);
942
- # ```
943
- #
944
- # ```java
945
- # String selector = ".foo";
946
- # frame.waitForFunction("selector => !!document.querySelector(selector)", selector);
947
- # ```
948
- #
949
- # ```python async
950
- # selector = ".foo"
951
- # await frame.wait_for_function("selector => !!document.querySelector(selector)", selector)
952
- # ```
953
- #
954
598
  # ```python sync
955
599
  # selector = ".foo"
956
600
  # frame.wait_for_function("selector => !!document.querySelector(selector)", selector)
@@ -960,26 +604,10 @@ module Playwright
960
604
  end
961
605
 
962
606
  # Waits for the required load state to be reached.
963
- #
607
+ #
964
608
  # This returns when the frame reaches a required load state, `load` by default. The navigation must have been committed
965
609
  # when this method is called. If current document has already reached the required state, resolves immediately.
966
- #
967
610
  #
968
- # ```js
969
- # await frame.click('button'); // Click triggers navigation.
970
- # await frame.waitForLoadState(); // Waits for 'load' state by default.
971
- # ```
972
- #
973
- # ```java
974
- # frame.click("button"); // Click triggers navigation.
975
- # frame.waitForLoadState(); // Waits for "load" state by default.
976
- # ```
977
- #
978
- # ```python async
979
- # await frame.click("button") # click triggers navigation.
980
- # await frame.wait_for_load_state() # the promise resolves after "load" event.
981
- # ```
982
- #
983
611
  # ```python sync
984
612
  # frame.click("button") # click triggers navigation.
985
613
  # frame.wait_for_load_state() # the promise resolves after "load" event.
@@ -991,38 +619,16 @@ module Playwright
991
619
  # Waits for the frame navigation and returns the main resource response. In case of multiple redirects, the navigation
992
620
  # will resolve with the response of the last redirect. In case of navigation to a different anchor or navigation due to
993
621
  # History API usage, the navigation will resolve with `null`.
994
- #
622
+ #
995
623
  # This method waits for the frame to navigate to a new URL. It is useful for when you run code which will indirectly cause
996
624
  # the frame to navigate. Consider this example:
997
- #
998
625
  #
999
- # ```js
1000
- # const [response] = await Promise.all([
1001
- # frame.waitForNavigation(), // The promise resolves after navigation has finished
1002
- # frame.click('a.delayed-navigation'), // Clicking the link will indirectly cause a navigation
1003
- # ]);
1004
- # ```
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
- #
1014
- # ```python async
1015
- # async with frame.expect_navigation():
1016
- # await frame.click("a.delayed-navigation") # clicking the link will indirectly cause a navigation
1017
- # # Resolves after navigation has finished
1018
- # ```
1019
- #
1020
626
  # ```python sync
1021
627
  # with frame.expect_navigation():
1022
628
  # frame.click("a.delayed-navigation") # clicking the link will indirectly cause a navigation
1023
629
  # # Resolves after navigation has finished
1024
630
  # ```
1025
- #
631
+ #
1026
632
  # > NOTE: Usage of the [History API](https://developer.mozilla.org/en-US/docs/Web/API/History_API) to change the URL is
1027
633
  # considered a navigation.
1028
634
  def expect_navigation(timeout: nil, url: nil, waitUntil: nil, &block)
@@ -1031,72 +637,16 @@ module Playwright
1031
637
 
1032
638
  # Returns when element specified by selector satisfies `state` option. Returns `null` if waiting for `hidden` or
1033
639
  # `detached`.
1034
- #
640
+ #
1035
641
  # Wait for the `selector` to satisfy `state` option (either appear/disappear from dom, or become visible/hidden). If at
1036
642
  # the moment of calling the method `selector` already satisfies the condition, the method will return immediately. If the
1037
643
  # selector doesn't satisfy the condition for the `timeout` milliseconds, the function will throw.
1038
- #
644
+ #
1039
645
  # This method works across navigations:
1040
- #
1041
- #
1042
- # ```js
1043
- # const { chromium } = require('playwright'); // Or 'firefox' or 'webkit'.
1044
- #
1045
- # (async () => {
1046
- # const browser = await chromium.launch();
1047
- # const page = await browser.newPage();
1048
- # for (let currentURL of ['https://google.com', 'https://bbc.com']) {
1049
- # await page.goto(currentURL);
1050
- # const element = await page.mainFrame().waitForSelector('img');
1051
- # console.log('Loaded image: ' + await element.getAttribute('src'));
1052
- # }
1053
- # await browser.close();
1054
- # })();
1055
- # ```
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
- #
1077
- # ```python async
1078
- # import asyncio
1079
- # from playwright.async_api import async_playwright
1080
- #
1081
- # async def run(playwright):
1082
- # chromium = playwright.chromium
1083
- # browser = await chromium.launch()
1084
- # page = await browser.new_page()
1085
- # for current_url in ["https://google.com", "https://bbc.com"]:
1086
- # await page.goto(current_url, wait_until="domcontentloaded")
1087
- # element = await page.main_frame.wait_for_selector("img")
1088
- # print("Loaded image: " + str(await element.get_attribute("src")))
1089
- # await browser.close()
1090
- #
1091
- # async def main():
1092
- # async with async_playwright() as playwright:
1093
- # await run(playwright)
1094
- # asyncio.run(main())
1095
- # ```
1096
- #
646
+ #
1097
647
  # ```python sync
1098
648
  # from playwright.sync_api import sync_playwright
1099
- #
649
+ #
1100
650
  # def run(playwright):
1101
651
  # chromium = playwright.chromium
1102
652
  # browser = chromium.launch()
@@ -1106,7 +656,7 @@ module Playwright
1106
656
  # element = page.main_frame.wait_for_selector("img")
1107
657
  # print("Loaded image: " + str(element.get_attribute("src")))
1108
658
  # browser.close()
1109
- #
659
+ #
1110
660
  # with sync_playwright() as playwright:
1111
661
  # run(playwright)
1112
662
  # ```
@@ -1115,7 +665,7 @@ module Playwright
1115
665
  end
1116
666
 
1117
667
  # Waits for the given `timeout` in milliseconds.
1118
- #
668
+ #
1119
669
  # Note that `frame.waitForTimeout()` should only be used for debugging. Tests using the timer in production are going to
1120
670
  # be flaky. Use signals such as network events, selectors becoming visible and others instead.
1121
671
  def wait_for_timeout(timeout)
@@ -1123,23 +673,7 @@ module Playwright
1123
673
  end
1124
674
 
1125
675
  # Waits for the frame to navigate to the given URL.
1126
- #
1127
676
  #
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
677
  # ```python sync
1144
678
  # frame.click("a.delayed-navigation") # clicking the link will indirectly cause a navigation
1145
679
  # frame.wait_for_url("**/target.html")