playwright-ruby-client 0.5.8 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
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 +51 -0
  40. data/{docs → documentation/docs/include}/api_coverage.md +13 -2
  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 +27 -2
  58. data/lib/playwright/channel_owners/browser_context.rb +54 -3
  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 +29 -34
  62. data/lib/playwright/channel_owners/js_handle.rb +2 -10
  63. data/lib/playwright/channel_owners/page.rb +35 -51
  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 +99 -565
  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 +222 -1223
  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,72 +1,32 @@
1
1
  module Playwright
2
2
  # - extends: [EventEmitter]
3
- #
3
+ #
4
4
  # BrowserContexts provide a way to operate multiple independent browser sessions.
5
- #
5
+ #
6
6
  # If a page opens another page, e.g. with a `window.open` call, the popup will belong to the parent page's browser
7
7
  # context.
8
- #
8
+ #
9
9
  # Playwright allows creation of "incognito" browser contexts with `browser.newContext()` method. "Incognito" browser
10
10
  # contexts don't write any browsing data to disk.
11
- #
12
11
  #
13
- # ```js
14
- # // Create a new incognito browser context
15
- # const context = await browser.newContext();
16
- # // Create a new page inside context.
17
- # const page = await context.newPage();
18
- # await page.goto('https://example.com');
19
- # // Dispose context once it's no longer needed.
20
- # await context.close();
21
- # ```
22
- #
23
- # ```java
24
- # // Create a new incognito browser context
25
- # BrowserContext context = browser.newContext();
26
- # // Create a new page inside context.
27
- # Page page = context.newPage();
28
- # page.navigate("https://example.com");
29
- # // Dispose context once it"s no longer needed.
30
- # context.close();
31
- # ```
32
- #
33
- # ```python async
34
- # # create a new incognito browser context
35
- # context = await browser.new_context()
36
- # # create a new page inside context.
37
- # page = await context.new_page()
38
- # await page.goto("https://example.com")
39
- # # dispose context once it"s no longer needed.
40
- # await context.close()
41
- # ```
42
- #
43
12
  # ```python sync
44
13
  # # create a new incognito browser context
45
14
  # context = browser.new_context()
46
15
  # # create a new page inside context.
47
16
  # page = context.new_page()
48
17
  # page.goto("https://example.com")
49
- # # dispose context once it"s no longer needed.
18
+ # # dispose context once it is no longer needed.
50
19
  # context.close()
51
20
  # ```
52
21
  class BrowserContext < PlaywrightApi
53
22
 
23
+ def tracing # property
24
+ wrap_impl(@impl.tracing)
25
+ end
26
+
54
27
  # Adds cookies into this browser context. All pages within this context will have these cookies installed. Cookies can be
55
28
  # obtained via [`method: BrowserContext.cookies`].
56
- #
57
29
  #
58
- # ```js
59
- # await browserContext.addCookies([cookieObject1, cookieObject2]);
60
- # ```
61
- #
62
- # ```java
63
- # browserContext.addCookies(Arrays.asList(cookieObject1, cookieObject2));
64
- # ```
65
- #
66
- # ```python async
67
- # await browser_context.add_cookies([cookie_object1, cookie_object2])
68
- # ```
69
- #
70
30
  # ```python sync
71
31
  # browser_context.add_cookies([cookie_object1, cookie_object2])
72
32
  # ```
@@ -78,41 +38,17 @@ module Playwright
78
38
  # - Whenever a page is created in the browser context or is navigated.
79
39
  # - Whenever a child frame is attached or navigated in any page in the browser context. In this case, the script is
80
40
  # evaluated in the context of the newly attached frame.
81
- #
41
+ #
82
42
  # The script is evaluated after the document was created but before any of its scripts were run. This is useful to amend
83
43
  # the JavaScript environment, e.g. to seed `Math.random`.
84
- #
85
- # An example of overriding `Math.random` before the page loads:
86
- #
87
44
  #
88
- # ```js browser
89
- # // preload.js
90
- # Math.random = () => 42;
91
- # ```
92
- #
45
+ # An example of overriding `Math.random` before the page loads:
93
46
  #
94
- # ```js
95
- # // In your playwright script, assuming the preload.js file is in same directory.
96
- # await browserContext.addInitScript({
97
- # path: 'preload.js'
98
- # });
99
- # ```
100
- #
101
- # ```java
102
- # // In your playwright script, assuming the preload.js file is in same directory.
103
- # browserContext.addInitScript(Paths.get("preload.js"));
104
- # ```
105
- #
106
- # ```python async
107
- # # in your playwright script, assuming the preload.js file is in same directory.
108
- # await browser_context.add_init_script(path="preload.js")
109
- # ```
110
- #
111
47
  # ```python sync
112
48
  # # in your playwright script, assuming the preload.js file is in same directory.
113
49
  # browser_context.add_init_script(path="preload.js")
114
50
  # ```
115
- #
51
+ #
116
52
  # > NOTE: The order of evaluation of multiple scripts installed via [`method: BrowserContext.addInitScript`] and
117
53
  # [`method: Page.addInitScript`] is not defined.
118
54
  def add_init_script(path: nil, script: nil)
@@ -120,7 +56,7 @@ module Playwright
120
56
  end
121
57
 
122
58
  # > NOTE: Background pages are only supported on Chromium-based browsers.
123
- #
59
+ #
124
60
  # All existing background pages in the context.
125
61
  def background_pages
126
62
  raise NotImplementedError.new('background_pages is not implemented yet.')
@@ -137,29 +73,7 @@ module Playwright
137
73
  end
138
74
 
139
75
  # Clears all permission overrides for the browser context.
140
- #
141
76
  #
142
- # ```js
143
- # const context = await browser.newContext();
144
- # await context.grantPermissions(['clipboard-read']);
145
- # // do stuff ..
146
- # context.clearPermissions();
147
- # ```
148
- #
149
- # ```java
150
- # BrowserContext context = browser.newContext();
151
- # context.grantPermissions(Arrays.asList("clipboard-read"));
152
- # // do stuff ..
153
- # context.clearPermissions();
154
- # ```
155
- #
156
- # ```python async
157
- # context = await browser.new_context()
158
- # await context.grant_permissions(["clipboard-read"])
159
- # # do stuff ..
160
- # context.clear_permissions()
161
- # ```
162
- #
163
77
  # ```python sync
164
78
  # context = browser.new_context()
165
79
  # context.grant_permissions(["clipboard-read"])
@@ -171,7 +85,7 @@ module Playwright
171
85
  end
172
86
 
173
87
  # Closes the browser context. All the pages that belong to the browser context will be closed.
174
- #
88
+ #
175
89
  # > NOTE: The default browser context cannot be closed.
176
90
  def close
177
91
  wrap_impl(@impl.close)
@@ -186,90 +100,17 @@ module Playwright
186
100
  # The method adds a function called `name` on the `window` object of every frame in every page in the context. When
187
101
  # called, the function executes `callback` and returns a [Promise] which resolves to the return value of `callback`. If
188
102
  # the `callback` returns a [Promise], it will be awaited.
189
- #
103
+ #
190
104
  # The first argument of the `callback` function contains information about the caller: `{ browserContext: BrowserContext,
191
105
  # page: Page, frame: Frame }`.
192
- #
106
+ #
193
107
  # See [`method: Page.exposeBinding`] for page-only version.
194
- #
108
+ #
195
109
  # An example of exposing page URL to all frames in all pages in the context:
196
- #
197
- #
198
- # ```js
199
- # const { webkit } = require('playwright'); // Or 'chromium' or 'firefox'.
200
- #
201
- # (async () => {
202
- # const browser = await webkit.launch({ headless: false });
203
- # const context = await browser.newContext();
204
- # await context.exposeBinding('pageURL', ({ page }) => page.url());
205
- # const page = await context.newPage();
206
- # await page.setContent(`
207
- # <script>
208
- # async function onClick() {
209
- # document.querySelector('div').textContent = await window.pageURL();
210
- # }
211
- # </script>
212
- # <button onclick="onClick()">Click me</button>
213
- # <div></div>
214
- # `);
215
- # await page.click('button');
216
- # })();
217
- # ```
218
- #
219
- # ```java
220
- # import com.microsoft.playwright.*;
221
- #
222
- # public class Example {
223
- # public static void main(String[] args) {
224
- # try (Playwright playwright = Playwright.create()) {
225
- # BrowserType webkit = playwright.webkit()
226
- # Browser browser = webkit.launch(new BrowserType.LaunchOptions().setHeadless(false));
227
- # BrowserContext context = browser.newContext();
228
- # context.exposeBinding("pageURL", (source, args) -> source.page().url());
229
- # Page page = context.newPage();
230
- # page.setContent("<script>\n" +
231
- # " async function onClick() {\n" +
232
- # " document.querySelector('div').textContent = await window.pageURL();\n" +
233
- # " }\n" +
234
- # "</script>\n" +
235
- # "<button onclick=\"onClick()\">Click me</button>\n" +
236
- # "<div></div>");
237
- # page.click("button");
238
- # }
239
- # }
240
- # }
241
- # ```
242
- #
243
- # ```python async
244
- # import asyncio
245
- # from playwright.async_api import async_playwright
246
- #
247
- # async def run(playwright):
248
- # webkit = playwright.webkit
249
- # browser = await webkit.launch(headless=false)
250
- # context = await browser.new_context()
251
- # await context.expose_binding("pageURL", lambda source: source["page"].url)
252
- # page = await context.new_page()
253
- # await page.set_content("""
254
- # <script>
255
- # async function onClick() {
256
- # document.querySelector('div').textContent = await window.pageURL();
257
- # }
258
- # </script>
259
- # <button onclick="onClick()">Click me</button>
260
- # <div></div>
261
- # """)
262
- # await page.click("button")
263
- #
264
- # async def main():
265
- # async with async_playwright() as playwright:
266
- # await run(playwright)
267
- # asyncio.run(main())
268
- # ```
269
- #
110
+ #
270
111
  # ```python sync
271
112
  # from playwright.sync_api import sync_playwright
272
- #
113
+ #
273
114
  # def run(playwright):
274
115
  # webkit = playwright.webkit
275
116
  # browser = webkit.launch(headless=false)
@@ -286,59 +127,17 @@ module Playwright
286
127
  # <div></div>
287
128
  # """)
288
129
  # page.click("button")
289
- #
130
+ #
290
131
  # with sync_playwright() as playwright:
291
132
  # run(playwright)
292
133
  # ```
293
- #
134
+ #
294
135
  # An example of passing an element handle:
295
- #
296
136
  #
297
- # ```js
298
- # await context.exposeBinding('clicked', async (source, element) => {
299
- # console.log(await element.textContent());
300
- # }, { handle: true });
301
- # await page.setContent(`
302
- # <script>
303
- # document.addEventListener('click', event => window.clicked(event.target));
304
- # </script>
305
- # <div>Click me</div>
306
- # <div>Or click me</div>
307
- # `);
308
- # ```
309
- #
310
- # ```java
311
- # context.exposeBinding("clicked", (source, args) -> {
312
- # ElementHandle element = (ElementHandle) args[0];
313
- # System.out.println(element.textContent());
314
- # return null;
315
- # }, new BrowserContext.ExposeBindingOptions().setHandle(true));
316
- # page.setContent("" +
317
- # "<script>\n" +
318
- # " document.addEventListener('click', event => window.clicked(event.target));\n" +
319
- # "</script>\n" +
320
- # "<div>Click me</div>\n" +
321
- # "<div>Or click me</div>\n");
322
- # ```
323
- #
324
- # ```python async
325
- # async def print(source, element):
326
- # print(await element.text_content())
327
- #
328
- # await context.expose_binding("clicked", print, handle=true)
329
- # await page.set_content("""
330
- # <script>
331
- # document.addEventListener('click', event => window.clicked(event.target));
332
- # </script>
333
- # <div>Click me</div>
334
- # <div>Or click me</div>
335
- # """)
336
- # ```
337
- #
338
137
  # ```python sync
339
138
  # def print(source, element):
340
139
  # print(element.text_content())
341
- #
140
+ #
342
141
  # context.expose_binding("clicked", print, handle=true)
343
142
  # page.set_content("""
344
143
  # <script>
@@ -354,136 +153,40 @@ module Playwright
354
153
 
355
154
  # The method adds a function called `name` on the `window` object of every frame in every page in the context. When
356
155
  # called, the function executes `callback` and returns a [Promise] which resolves to the return value of `callback`.
357
- #
156
+ #
358
157
  # If the `callback` returns a [Promise], it will be awaited.
359
- #
158
+ #
360
159
  # See [`method: Page.exposeFunction`] for page-only version.
361
- #
362
- # An example of adding an `md5` function to all pages in the context:
363
- #
364
- #
365
- # ```js
366
- # const { webkit } = require('playwright'); // Or 'chromium' or 'firefox'.
367
- # const crypto = require('crypto');
368
- #
369
- # (async () => {
370
- # const browser = await webkit.launch({ headless: false });
371
- # const context = await browser.newContext();
372
- # await context.exposeFunction('md5', text => crypto.createHash('md5').update(text).digest('hex'));
373
- # const page = await context.newPage();
374
- # await page.setContent(`
375
- # <script>
376
- # async function onClick() {
377
- # document.querySelector('div').textContent = await window.md5('PLAYWRIGHT');
378
- # }
379
- # </script>
380
- # <button onclick="onClick()">Click me</button>
381
- # <div></div>
382
- # `);
383
- # await page.click('button');
384
- # })();
385
- # ```
386
- #
387
- # ```java
388
- # import com.microsoft.playwright.*;
389
- #
390
- # import java.nio.charset.StandardCharsets;
391
- # import java.security.MessageDigest;
392
- # import java.security.NoSuchAlgorithmException;
393
- # import java.util.Base64;
394
- #
395
- # public class Example {
396
- # public static void main(String[] args) {
397
- # try (Playwright playwright = Playwright.create()) {
398
- # BrowserType webkit = playwright.webkit()
399
- # Browser browser = webkit.launch(new BrowserType.LaunchOptions().setHeadless(false));
400
- # context.exposeFunction("sha1", args -> {
401
- # String text = (String) args[0];
402
- # MessageDigest crypto;
403
- # try {
404
- # crypto = MessageDigest.getInstance("SHA-1");
405
- # } catch (NoSuchAlgorithmException e) {
406
- # return null;
407
- # }
408
- # byte[] token = crypto.digest(text.getBytes(StandardCharsets.UTF_8));
409
- # return Base64.getEncoder().encodeToString(token);
410
- # });
411
- # Page page = context.newPage();
412
- # page.setContent("<script>\n" +
413
- # " async function onClick() {\n" +
414
- # " document.querySelector('div').textContent = await window.sha1('PLAYWRIGHT');\n" +
415
- # " }\n" +
416
- # "</script>\n" +
417
- # "<button onclick=\"onClick()\">Click me</button>\n" +
418
- # "<div></div>\n");
419
- # page.click("button");
420
- # }
421
- # }
422
- # }
423
- # ```
424
- #
425
- # ```python async
426
- # import asyncio
427
- # import hashlib
428
- # from playwright.async_api import async_playwright
429
- #
430
- # async def sha1(text):
431
- # m = hashlib.sha1()
432
- # m.update(bytes(text, "utf8"))
433
- # return m.hexdigest()
434
- #
435
- #
436
- # async def run(playwright):
437
- # webkit = playwright.webkit
438
- # browser = await webkit.launch(headless=False)
439
- # context = await browser.new_context()
440
- # await context.expose_function("sha1", sha1)
441
- # page = await context.new_page()
442
- # await page.set_content("""
443
- # <script>
444
- # async function onClick() {
445
- # document.querySelector('div').textContent = await window.sha1('PLAYWRIGHT');
446
- # }
447
- # </script>
448
- # <button onclick="onClick()">Click me</button>
449
- # <div></div>
450
- # """)
451
- # await page.click("button")
452
- #
453
- # async def main():
454
- # async with async_playwright() as playwright:
455
- # await run(playwright)
456
- # asyncio.run(main())
457
- # ```
458
- #
160
+ #
161
+ # An example of adding a `sha256` function to all pages in the context:
162
+ #
459
163
  # ```python sync
460
164
  # import hashlib
461
165
  # from playwright.sync_api import sync_playwright
462
- #
463
- # def sha1(text):
464
- # m = hashlib.sha1()
166
+ #
167
+ # def sha256(text):
168
+ # m = hashlib.sha256()
465
169
  # m.update(bytes(text, "utf8"))
466
170
  # return m.hexdigest()
467
- #
468
- #
171
+ #
172
+ #
469
173
  # def run(playwright):
470
174
  # webkit = playwright.webkit
471
175
  # browser = webkit.launch(headless=False)
472
176
  # context = browser.new_context()
473
- # context.expose_function("sha1", sha1)
177
+ # context.expose_function("sha256", sha256)
474
178
  # page = context.new_page()
475
- # page.expose_function("sha1", sha1)
476
179
  # page.set_content("""
477
180
  # <script>
478
181
  # async function onClick() {
479
- # document.querySelector('div').textContent = await window.sha1('PLAYWRIGHT');
182
+ # document.querySelector('div').textContent = await window.sha256('PLAYWRIGHT');
480
183
  # }
481
184
  # </script>
482
185
  # <button onclick="onClick()">Click me</button>
483
186
  # <div></div>
484
187
  # """)
485
188
  # page.click("button")
486
- #
189
+ #
487
190
  # with sync_playwright() as playwright:
488
191
  # run(playwright)
489
192
  # ```
@@ -498,7 +201,7 @@ module Playwright
498
201
  end
499
202
 
500
203
  # > NOTE: CDP sessions are only supported on Chromium-based browsers.
501
- #
204
+ #
502
205
  # Returns the newly created session.
503
206
  def new_cdp_session(page)
504
207
  raise NotImplementedError.new('new_cdp_session is not implemented yet.')
@@ -516,34 +219,9 @@ module Playwright
516
219
 
517
220
  # Routing provides the capability to modify network requests that are made by any page in the browser context. Once route
518
221
  # is enabled, every request matching the url pattern will stall unless it's continued, fulfilled or aborted.
519
- #
222
+ #
520
223
  # An example of a naive handler that aborts all image requests:
521
- #
522
- #
523
- # ```js
524
- # const context = await browser.newContext();
525
- # await context.route('**/*.{png,jpg,jpeg}', route => route.abort());
526
- # const page = await context.newPage();
527
- # await page.goto('https://example.com');
528
- # await browser.close();
529
- # ```
530
- #
531
- # ```java
532
- # BrowserContext context = browser.newContext();
533
- # context.route("**/*.{png,jpg,jpeg}", route -> route.abort());
534
- # Page page = context.newPage();
535
- # page.navigate("https://example.com");
536
- # browser.close();
537
- # ```
538
- #
539
- # ```python async
540
- # context = await browser.new_context()
541
- # page = await context.new_page()
542
- # await context.route("**/*.{png,jpg,jpeg}", lambda route: route.abort())
543
- # await page.goto("https://example.com")
544
- # await browser.close()
545
- # ```
546
- #
224
+ #
547
225
  # ```python sync
548
226
  # context = browser.new_context()
549
227
  # page = context.new_page()
@@ -551,35 +229,9 @@ module Playwright
551
229
  # page.goto("https://example.com")
552
230
  # browser.close()
553
231
  # ```
554
- #
232
+ #
555
233
  # or the same snippet using a regex pattern instead:
556
- #
557
- #
558
- # ```js
559
- # const context = await browser.newContext();
560
- # await context.route(/(\.png$)|(\.jpg$)/, route => route.abort());
561
- # const page = await context.newPage();
562
- # await page.goto('https://example.com');
563
- # await browser.close();
564
- # ```
565
- #
566
- # ```java
567
- # BrowserContext context = browser.newContext();
568
- # context.route(Pattern.compile("(\\.png$)|(\\.jpg$)"), route -> route.abort());
569
- # Page page = context.newPage();
570
- # page.navigate("https://example.com");
571
- # browser.close();
572
- # ```
573
- #
574
- # ```python async
575
- # context = await browser.new_context()
576
- # page = await context.new_page()
577
- # await context.route(re.compile(r"(\.png$)|(\.jpg$)"), lambda route: route.abort())
578
- # page = await context.new_page()
579
- # await page.goto("https://example.com")
580
- # await browser.close()
581
- # ```
582
- #
234
+ #
583
235
  # ```python sync
584
236
  # context = browser.new_context()
585
237
  # page = context.new_page()
@@ -589,19 +241,31 @@ module Playwright
589
241
  # page.goto("https://example.com")
590
242
  # browser.close()
591
243
  # ```
592
- #
244
+ #
245
+ # It is possible to examine the request to decide the route action. For example, mocking all requests that contain some
246
+ # post data, and leaving all other requests as is:
247
+ #
248
+ # ```python sync
249
+ # def handle_route(route):
250
+ # if ("my-string" in route.request.post_data)
251
+ # route.fulfill(body="mocked-data")
252
+ # else
253
+ # route.continue_()
254
+ # context.route("/api/**", handle_route)
255
+ # ```
256
+ #
593
257
  # Page routes (set up with [`method: Page.route`]) take precedence over browser context routes when request matches both
594
258
  # handlers.
595
- #
259
+ #
596
260
  # To remove a route with its handler you can use [`method: BrowserContext.unroute`].
597
- #
261
+ #
598
262
  # > NOTE: Enabling routing disables http cache.
599
263
  def route(url, handler)
600
264
  wrap_impl(@impl.route(unwrap_impl(url), unwrap_impl(handler)))
601
265
  end
602
266
 
603
267
  # > NOTE: Service workers are only supported on Chromium-based browsers.
604
- #
268
+ #
605
269
  # All existing service workers in the context.
606
270
  def service_workers
607
271
  raise NotImplementedError.new('service_workers is not implemented yet.')
@@ -614,7 +278,7 @@ module Playwright
614
278
  # - [`method: Page.reload`]
615
279
  # - [`method: Page.setContent`]
616
280
  # - [`method: Page.waitForNavigation`]
617
- #
281
+ #
618
282
  # > NOTE: [`method: Page.setDefaultNavigationTimeout`] and [`method: Page.setDefaultTimeout`] take priority over
619
283
  # [`method: BrowserContext.setDefaultNavigationTimeout`].
620
284
  def set_default_navigation_timeout(timeout)
@@ -623,7 +287,7 @@ module Playwright
623
287
  alias_method :default_navigation_timeout=, :set_default_navigation_timeout
624
288
 
625
289
  # This setting will change the default maximum time for all the methods accepting `timeout` option.
626
- #
290
+ #
627
291
  # > NOTE: [`method: Page.setDefaultNavigationTimeout`], [`method: Page.setDefaultTimeout`] and
628
292
  # [`method: BrowserContext.setDefaultNavigationTimeout`] take priority over [`method: BrowserContext.setDefaultTimeout`].
629
293
  def set_default_timeout(timeout)
@@ -634,7 +298,7 @@ module Playwright
634
298
  # The extra HTTP headers will be sent with every request initiated by any page in the context. These headers are merged
635
299
  # with page-specific extra HTTP headers set with [`method: Page.setExtraHTTPHeaders`]. If page overrides a particular
636
300
  # header, page-specific header value will be used instead of the browser context header value.
637
- #
301
+ #
638
302
  # > NOTE: [`method: BrowserContext.setExtraHTTPHeaders`] does not guarantee the order of headers in the outgoing requests.
639
303
  def set_extra_http_headers(headers)
640
304
  wrap_impl(@impl.set_extra_http_headers(unwrap_impl(headers)))
@@ -642,24 +306,11 @@ module Playwright
642
306
  alias_method :extra_http_headers=, :set_extra_http_headers
643
307
 
644
308
  # Sets the context's geolocation. Passing `null` or `undefined` emulates position unavailable.
645
- #
646
309
  #
647
- # ```js
648
- # await browserContext.setGeolocation({latitude: 59.95, longitude: 30.31667});
649
- # ```
650
- #
651
- # ```java
652
- # browserContext.setGeolocation(new Geolocation(59.95, 30.31667));
653
- # ```
654
- #
655
- # ```python async
656
- # await browser_context.set_geolocation({"latitude": 59.95, "longitude": 30.31667})
657
- # ```
658
- #
659
310
  # ```python sync
660
311
  # browser_context.set_geolocation({"latitude": 59.95, "longitude": 30.31667})
661
312
  # ```
662
- #
313
+ #
663
314
  # > NOTE: Consider using [`method: BrowserContext.grantPermissions`] to grant permissions for the browser context pages to
664
315
  # read its geolocation.
665
316
  def set_geolocation(geolocation)
@@ -685,25 +336,7 @@ module Playwright
685
336
 
686
337
  # Waits for event to fire and passes its value into the predicate function. Returns when the predicate returns truthy
687
338
  # value. Will throw an error if the context closes before the event is fired. Returns the event data value.
688
- #
689
339
  #
690
- # ```js
691
- # const [page, _] = await Promise.all([
692
- # context.waitForEvent('page'),
693
- # page.click('button')
694
- # ]);
695
- # ```
696
- #
697
- # ```java
698
- # Page newPage = context.waitForPage(() -> page.click("button"));
699
- # ```
700
- #
701
- # ```python async
702
- # async with context.expect_event("page") as event_info:
703
- # await page.click("button")
704
- # page = await event_info.value
705
- # ```
706
- #
707
340
  # ```python sync
708
341
  # with context.expect_event("page") as event_info:
709
342
  # page.click("button")
@@ -721,10 +354,10 @@ module Playwright
721
354
  end
722
355
 
723
356
  # > NOTE: In most cases, you should use [`method: BrowserContext.waitForEvent`].
724
- #
357
+ #
725
358
  # Waits for given `event` to fire. If predicate is provided, it passes event's value into the `predicate` function and
726
- # waits for `predicate(event)` to return a truthy value. Will throw an error if the socket is closed before the `event` is
727
- # fired.
359
+ # waits for `predicate(event)` to return a truthy value. Will throw an error if the browser context is closed before the
360
+ # `event` is fired.
728
361
  def wait_for_event(event, predicate: nil, timeout: nil)
729
362
  raise NotImplementedError.new('wait_for_event is not implemented yet.')
730
363
  end
@@ -740,13 +373,13 @@ module Playwright
740
373
  end
741
374
 
742
375
  # @nodoc
743
- def pause
744
- wrap_impl(@impl.pause)
376
+ def options=(req)
377
+ wrap_impl(@impl.options=(unwrap_impl(req)))
745
378
  end
746
379
 
747
380
  # @nodoc
748
- def options=(req)
749
- wrap_impl(@impl.options=(unwrap_impl(req)))
381
+ def pause
382
+ wrap_impl(@impl.pause)
750
383
  end
751
384
 
752
385
  # -- inherited from EventEmitter --