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.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +20 -8
  3. data/docs/api_coverage.md +123 -73
  4. data/lib/playwright.rb +48 -9
  5. data/lib/playwright/channel.rb +12 -2
  6. data/lib/playwright/channel_owner.rb +3 -5
  7. data/lib/playwright/channel_owners/android.rb +1 -1
  8. data/lib/playwright/channel_owners/android_device.rb +11 -11
  9. data/lib/playwright/channel_owners/artifact.rb +30 -0
  10. data/lib/playwright/channel_owners/binding_call.rb +3 -0
  11. data/lib/playwright/channel_owners/browser.rb +22 -1
  12. data/lib/playwright/channel_owners/browser_context.rb +155 -4
  13. data/lib/playwright/channel_owners/browser_type.rb +28 -0
  14. data/lib/playwright/channel_owners/dialog.rb +28 -0
  15. data/lib/playwright/channel_owners/element_handle.rb +18 -5
  16. data/lib/playwright/channel_owners/frame.rb +40 -5
  17. data/lib/playwright/channel_owners/js_handle.rb +3 -3
  18. data/lib/playwright/channel_owners/page.rb +172 -51
  19. data/lib/playwright/channel_owners/playwright.rb +24 -27
  20. data/lib/playwright/channel_owners/request.rb +27 -3
  21. data/lib/playwright/channel_owners/response.rb +60 -0
  22. data/lib/playwright/channel_owners/route.rb +78 -0
  23. data/lib/playwright/channel_owners/selectors.rb +19 -1
  24. data/lib/playwright/channel_owners/stream.rb +15 -0
  25. data/lib/playwright/connection.rb +11 -32
  26. data/lib/playwright/download.rb +27 -0
  27. data/lib/playwright/errors.rb +6 -0
  28. data/lib/playwright/events.rb +2 -5
  29. data/lib/playwright/keyboard_impl.rb +1 -1
  30. data/lib/playwright/mouse_impl.rb +41 -0
  31. data/lib/playwright/playwright_api.rb +3 -1
  32. data/lib/playwright/route_handler_entry.rb +28 -0
  33. data/lib/playwright/select_option_values.rb +14 -4
  34. data/lib/playwright/transport.rb +28 -7
  35. data/lib/playwright/url_matcher.rb +1 -1
  36. data/lib/playwright/utils.rb +11 -2
  37. data/lib/playwright/version.rb +1 -1
  38. data/lib/playwright/video.rb +51 -0
  39. data/lib/playwright/wait_helper.rb +2 -2
  40. data/lib/playwright_api/accessibility.rb +39 -1
  41. data/lib/playwright_api/android.rb +72 -5
  42. data/lib/playwright_api/android_device.rb +139 -26
  43. data/lib/playwright_api/android_input.rb +17 -13
  44. data/lib/playwright_api/android_socket.rb +16 -0
  45. data/lib/playwright_api/android_web_view.rb +21 -0
  46. data/lib/playwright_api/browser.rb +87 -19
  47. data/lib/playwright_api/browser_context.rb +216 -32
  48. data/lib/playwright_api/browser_type.rb +45 -58
  49. data/lib/playwright_api/dialog.rb +54 -7
  50. data/lib/playwright_api/element_handle.rb +113 -33
  51. data/lib/playwright_api/file_chooser.rb +6 -1
  52. data/lib/playwright_api/frame.rb +238 -43
  53. data/lib/playwright_api/js_handle.rb +20 -2
  54. data/lib/playwright_api/keyboard.rb +48 -1
  55. data/lib/playwright_api/mouse.rb +26 -5
  56. data/lib/playwright_api/page.rb +534 -63
  57. data/lib/playwright_api/playwright.rb +43 -47
  58. data/lib/playwright_api/request.rb +38 -12
  59. data/lib/playwright_api/response.rb +27 -10
  60. data/lib/playwright_api/route.rb +51 -6
  61. data/lib/playwright_api/selectors.rb +28 -2
  62. data/lib/playwright_api/touchscreen.rb +1 -1
  63. data/lib/playwright_api/web_socket.rb +15 -0
  64. data/lib/playwright_api/worker.rb +25 -1
  65. data/playwright.gemspec +4 -2
  66. metadata +42 -14
  67. data/lib/playwright/channel_owners/chromium_browser.rb +0 -8
  68. data/lib/playwright/channel_owners/chromium_browser_context.rb +0 -8
  69. data/lib/playwright/channel_owners/download.rb +0 -27
  70. data/lib/playwright/channel_owners/firefox_browser.rb +0 -8
  71. data/lib/playwright/channel_owners/webkit_browser.rb +0 -8
  72. data/lib/playwright_api/binding_call.rb +0 -27
  73. data/lib/playwright_api/chromium_browser_context.rb +0 -59
  74. data/lib/playwright_api/download.rb +0 -100
  75. data/lib/playwright_api/video.rb +0 -24
@@ -20,6 +20,16 @@ module Playwright
20
20
  # await context.close();
21
21
  # ```
22
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
+ #
23
33
  # ```python async
24
34
  # # create a new incognito browser context
25
35
  # context = await browser.new_context()
@@ -49,6 +59,10 @@ module Playwright
49
59
  # await browserContext.addCookies([cookieObject1, cookieObject2]);
50
60
  # ```
51
61
  #
62
+ # ```java
63
+ # browserContext.addCookies(Arrays.asList(cookieObject1, cookieObject2));
64
+ # ```
65
+ #
52
66
  # ```python async
53
67
  # await browser_context.add_cookies([cookie_object1, cookie_object2])
54
68
  # ```
@@ -57,7 +71,7 @@ module Playwright
57
71
  # browser_context.add_cookies([cookie_object1, cookie_object2])
58
72
  # ```
59
73
  def add_cookies(cookies)
60
- raise NotImplementedError.new('add_cookies is not implemented yet.')
74
+ wrap_impl(@impl.add_cookies(unwrap_impl(cookies)))
61
75
  end
62
76
 
63
77
  # Adds a script which would be evaluated in one of the following scenarios:
@@ -84,6 +98,11 @@ module Playwright
84
98
  # });
85
99
  # ```
86
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
+ #
87
106
  # ```python async
88
107
  # # in your playwright script, assuming the preload.js file is in same directory.
89
108
  # await browser_context.add_init_script(path="preload.js")
@@ -96,18 +115,25 @@ module Playwright
96
115
  #
97
116
  # > NOTE: The order of evaluation of multiple scripts installed via [`method: BrowserContext.addInitScript`] and
98
117
  # [`method: Page.addInitScript`] is not defined.
99
- def add_init_script(script, arg: nil)
100
- raise NotImplementedError.new('add_init_script is not implemented yet.')
118
+ def add_init_script(path: nil, script: nil)
119
+ wrap_impl(@impl.add_init_script(path: unwrap_impl(path), script: unwrap_impl(script)))
120
+ end
121
+
122
+ # > NOTE: Background pages are only supported on Chromium-based browsers.
123
+ #
124
+ # All existing background pages in the context.
125
+ def background_pages
126
+ raise NotImplementedError.new('background_pages is not implemented yet.')
101
127
  end
102
128
 
103
129
  # Returns the browser instance of the context. If it was launched as a persistent context null gets returned.
104
130
  def browser
105
- raise NotImplementedError.new('browser is not implemented yet.')
131
+ wrap_impl(@impl.browser)
106
132
  end
107
133
 
108
134
  # Clears context cookies.
109
135
  def clear_cookies
110
- raise NotImplementedError.new('clear_cookies is not implemented yet.')
136
+ wrap_impl(@impl.clear_cookies)
111
137
  end
112
138
 
113
139
  # Clears all permission overrides for the browser context.
@@ -120,6 +146,13 @@ module Playwright
120
146
  # context.clearPermissions();
121
147
  # ```
122
148
  #
149
+ # ```java
150
+ # BrowserContext context = browser.newContext();
151
+ # context.grantPermissions(Arrays.asList("clipboard-read"));
152
+ # // do stuff ..
153
+ # context.clearPermissions();
154
+ # ```
155
+ #
123
156
  # ```python async
124
157
  # context = await browser.new_context()
125
158
  # await context.grant_permissions(["clipboard-read"])
@@ -134,7 +167,7 @@ module Playwright
134
167
  # context.clear_permissions()
135
168
  # ```
136
169
  def clear_permissions
137
- raise NotImplementedError.new('clear_permissions is not implemented yet.')
170
+ wrap_impl(@impl.clear_permissions)
138
171
  end
139
172
 
140
173
  # Closes the browser context. All the pages that belong to the browser context will be closed.
@@ -147,7 +180,7 @@ module Playwright
147
180
  # If no URLs are specified, this method returns all cookies. If URLs are specified, only cookies that affect those URLs
148
181
  # are returned.
149
182
  def cookies(urls: nil)
150
- raise NotImplementedError.new('cookies is not implemented yet.')
183
+ wrap_impl(@impl.cookies(urls: unwrap_impl(urls)))
151
184
  end
152
185
 
153
186
  # The method adds a function called `name` on the `window` object of every frame in every page in the context. When
@@ -183,6 +216,30 @@ module Playwright
183
216
  # })();
184
217
  # ```
185
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
+ #
186
243
  # ```python async
187
244
  # import asyncio
188
245
  # from playwright.async_api import async_playwright
@@ -250,6 +307,20 @@ module Playwright
250
307
  # `);
251
308
  # ```
252
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
+ #
253
324
  # ```python async
254
325
  # async def print(source, element):
255
326
  # print(await element.text_content())
@@ -278,7 +349,7 @@ module Playwright
278
349
  # """)
279
350
  # ```
280
351
  def expose_binding(name, callback, handle: nil)
281
- raise NotImplementedError.new('expose_binding is not implemented yet.')
352
+ wrap_impl(@impl.expose_binding(unwrap_impl(name), unwrap_impl(callback), handle: unwrap_impl(handle)))
282
353
  end
283
354
 
284
355
  # The method adds a function called `name` on the `window` object of every frame in every page in the context. When
@@ -313,6 +384,44 @@ module Playwright
313
384
  # })();
314
385
  # ```
315
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
+ #
316
425
  # ```python async
317
426
  # import asyncio
318
427
  # import hashlib
@@ -379,13 +488,20 @@ module Playwright
379
488
  # run(playwright)
380
489
  # ```
381
490
  def expose_function(name, callback)
382
- raise NotImplementedError.new('expose_function is not implemented yet.')
491
+ wrap_impl(@impl.expose_function(unwrap_impl(name), unwrap_impl(callback)))
383
492
  end
384
493
 
385
494
  # Grants specified permissions to the browser context. Only grants corresponding permissions to the given origin if
386
495
  # specified.
387
496
  def grant_permissions(permissions, origin: nil)
388
- raise NotImplementedError.new('grant_permissions is not implemented yet.')
497
+ wrap_impl(@impl.grant_permissions(unwrap_impl(permissions), origin: unwrap_impl(origin)))
498
+ end
499
+
500
+ # > NOTE: CDP sessions are only supported on Chromium-based browsers.
501
+ #
502
+ # Returns the newly created session.
503
+ def new_cdp_session(page)
504
+ raise NotImplementedError.new('new_cdp_session is not implemented yet.')
389
505
  end
390
506
 
391
507
  # Creates a new page in the browser context.
@@ -393,8 +509,7 @@ module Playwright
393
509
  wrap_impl(@impl.new_page)
394
510
  end
395
511
 
396
- # Returns all open pages in the context. Non visible pages, such as `"background_page"`, will not be listed here. You can
397
- # find them using [`method: ChromiumBrowserContext.backgroundPages`].
512
+ # Returns all open pages in the context.
398
513
  def pages
399
514
  wrap_impl(@impl.pages)
400
515
  end
@@ -402,7 +517,7 @@ module Playwright
402
517
  # Routing provides the capability to modify network requests that are made by any page in the browser context. Once route
403
518
  # is enabled, every request matching the url pattern will stall unless it's continued, fulfilled or aborted.
404
519
  #
405
- # An example of a naïve handler that aborts all image requests:
520
+ # An example of a naive handler that aborts all image requests:
406
521
  #
407
522
  #
408
523
  # ```js
@@ -413,6 +528,14 @@ module Playwright
413
528
  # await browser.close();
414
529
  # ```
415
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
+ #
416
539
  # ```python async
417
540
  # context = await browser.new_context()
418
541
  # page = await context.new_page()
@@ -440,6 +563,14 @@ module Playwright
440
563
  # await browser.close();
441
564
  # ```
442
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
+ #
443
574
  # ```python async
444
575
  # context = await browser.new_context()
445
576
  # page = await context.new_page()
@@ -462,9 +593,18 @@ module Playwright
462
593
  # Page routes (set up with [`method: Page.route`]) take precedence over browser context routes when request matches both
463
594
  # handlers.
464
595
  #
596
+ # To remove a route with its handler you can use [`method: BrowserContext.unroute`].
597
+ #
465
598
  # > NOTE: Enabling routing disables http cache.
466
599
  def route(url, handler)
467
- raise NotImplementedError.new('route is not implemented yet.')
600
+ wrap_impl(@impl.route(unwrap_impl(url), unwrap_impl(handler)))
601
+ end
602
+
603
+ # > NOTE: Service workers are only supported on Chromium-based browsers.
604
+ #
605
+ # All existing service workers in the context.
606
+ def service_workers
607
+ raise NotImplementedError.new('service_workers is not implemented yet.')
468
608
  end
469
609
 
470
610
  # This setting will change the default maximum navigation time for the following methods and related shortcuts:
@@ -478,7 +618,7 @@ module Playwright
478
618
  # > NOTE: [`method: Page.setDefaultNavigationTimeout`] and [`method: Page.setDefaultTimeout`] take priority over
479
619
  # [`method: BrowserContext.setDefaultNavigationTimeout`].
480
620
  def set_default_navigation_timeout(timeout)
481
- raise NotImplementedError.new('set_default_navigation_timeout is not implemented yet.')
621
+ wrap_impl(@impl.set_default_navigation_timeout(unwrap_impl(timeout)))
482
622
  end
483
623
  alias_method :default_navigation_timeout=, :set_default_navigation_timeout
484
624
 
@@ -487,7 +627,7 @@ module Playwright
487
627
  # > NOTE: [`method: Page.setDefaultNavigationTimeout`], [`method: Page.setDefaultTimeout`] and
488
628
  # [`method: BrowserContext.setDefaultNavigationTimeout`] take priority over [`method: BrowserContext.setDefaultTimeout`].
489
629
  def set_default_timeout(timeout)
490
- raise NotImplementedError.new('set_default_timeout is not implemented yet.')
630
+ wrap_impl(@impl.set_default_timeout(unwrap_impl(timeout)))
491
631
  end
492
632
  alias_method :default_timeout=, :set_default_timeout
493
633
 
@@ -497,7 +637,7 @@ module Playwright
497
637
  #
498
638
  # > NOTE: [`method: BrowserContext.setExtraHTTPHeaders`] does not guarantee the order of headers in the outgoing requests.
499
639
  def set_extra_http_headers(headers)
500
- raise NotImplementedError.new('set_extra_http_headers is not implemented yet.')
640
+ wrap_impl(@impl.set_extra_http_headers(unwrap_impl(headers)))
501
641
  end
502
642
  alias_method :extra_http_headers=, :set_extra_http_headers
503
643
 
@@ -508,6 +648,10 @@ module Playwright
508
648
  # await browserContext.setGeolocation({latitude: 59.95, longitude: 30.31667});
509
649
  # ```
510
650
  #
651
+ # ```java
652
+ # browserContext.setGeolocation(new Geolocation(59.95, 30.31667));
653
+ # ```
654
+ #
511
655
  # ```python async
512
656
  # await browser_context.set_geolocation({"latitude": 59.95, "longitude": 30.31667})
513
657
  # ```
@@ -519,18 +663,12 @@ module Playwright
519
663
  # > NOTE: Consider using [`method: BrowserContext.grantPermissions`] to grant permissions for the browser context pages to
520
664
  # read its geolocation.
521
665
  def set_geolocation(geolocation)
522
- raise NotImplementedError.new('set_geolocation is not implemented yet.')
666
+ wrap_impl(@impl.set_geolocation(unwrap_impl(geolocation)))
523
667
  end
524
668
  alias_method :geolocation=, :set_geolocation
525
669
 
526
- # **DEPRECATED** Browsers may cache credentials after successful authentication. Create a new browser context instead.
527
- def set_http_credentials(httpCredentials)
528
- raise NotImplementedError.new('set_http_credentials is not implemented yet.')
529
- end
530
- alias_method :http_credentials=, :set_http_credentials
531
-
532
670
  def set_offline(offline)
533
- raise NotImplementedError.new('set_offline is not implemented yet.')
671
+ wrap_impl(@impl.set_offline(unwrap_impl(offline)))
534
672
  end
535
673
  alias_method :offline=, :set_offline
536
674
 
@@ -542,12 +680,58 @@ module Playwright
542
680
  # Removes a route created with [`method: BrowserContext.route`]. When `handler` is not specified, removes all routes for
543
681
  # the `url`.
544
682
  def unroute(url, handler: nil)
545
- raise NotImplementedError.new('unroute is not implemented yet.')
683
+ wrap_impl(@impl.unroute(unwrap_impl(url), handler: unwrap_impl(handler)))
684
+ end
685
+
686
+ # Waits for event to fire and passes its value into the predicate function. Returns when the predicate returns truthy
687
+ # value. Will throw an error if the context closes before the event is fired. Returns the event data value.
688
+ #
689
+ #
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
+ # ```python sync
708
+ # with context.expect_event("page") as event_info:
709
+ # page.click("button")
710
+ # page = event_info.value
711
+ # ```
712
+ def expect_event(event, predicate: nil, timeout: nil, &block)
713
+ wrap_impl(@impl.expect_event(unwrap_impl(event), predicate: unwrap_impl(predicate), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
714
+ end
715
+
716
+ # Performs action and waits for a new `Page` to be created in the context. If predicate is provided, it passes `Page`
717
+ # value into the `predicate` function and waits for `predicate(event)` to return a truthy value. Will throw an error if
718
+ # the context closes before new `Page` is created.
719
+ def expect_page(predicate: nil, timeout: nil)
720
+ wrap_impl(@impl.expect_page(predicate: unwrap_impl(predicate), timeout: unwrap_impl(timeout)))
721
+ end
722
+
723
+ # > NOTE: In most cases, you should use [`method: BrowserContext.waitForEvent`].
724
+ #
725
+ # 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.
728
+ def wait_for_event(event, predicate: nil, timeout: nil)
729
+ raise NotImplementedError.new('wait_for_event is not implemented yet.')
546
730
  end
547
731
 
548
732
  # @nodoc
549
- def after_initialize
550
- wrap_impl(@impl.after_initialize)
733
+ def options=(req)
734
+ wrap_impl(@impl.options=(unwrap_impl(req)))
551
735
  end
552
736
 
553
737
  # @nodoc
@@ -556,13 +740,13 @@ module Playwright
556
740
  end
557
741
 
558
742
  # @nodoc
559
- def owner_page=(req)
560
- wrap_impl(@impl.owner_page=(unwrap_impl(req)))
743
+ def pause
744
+ wrap_impl(@impl.pause)
561
745
  end
562
746
 
563
747
  # @nodoc
564
- def options=(req)
565
- wrap_impl(@impl.options=(unwrap_impl(req)))
748
+ def owner_page=(req)
749
+ wrap_impl(@impl.owner_page=(unwrap_impl(req)))
566
750
  end
567
751
 
568
752
  # -- inherited from EventEmitter --
@@ -15,6 +15,23 @@ module Playwright
15
15
  # })();
16
16
  # ```
17
17
  #
18
+ # ```java
19
+ # import com.microsoft.playwright.*;
20
+ #
21
+ # public class Example {
22
+ # public static void main(String[] args) {
23
+ # try (Playwright playwright = Playwright.create()) {
24
+ # BrowserType chromium = playwright.chromium();
25
+ # Browser browser = chromium.launch();
26
+ # Page page = browser.newPage();
27
+ # page.navigate("https://example.com");
28
+ # // other actions...
29
+ # browser.close();
30
+ # }
31
+ # }
32
+ # }
33
+ # ```
34
+ #
18
35
  # ```python async
19
36
  # import asyncio
20
37
  # from playwright.async_api import async_playwright
@@ -49,11 +66,6 @@ module Playwright
49
66
  # ```
50
67
  class BrowserType < PlaywrightApi
51
68
 
52
- # This methods attaches Playwright to an existing browser instance.
53
- def connect(params)
54
- raise NotImplementedError.new('connect is not implemented yet.')
55
- end
56
-
57
69
  # A path where Playwright expects to find a bundled browser executable.
58
70
  def executable_path
59
71
  wrap_impl(@impl.executable_path)
@@ -70,6 +82,12 @@ module Playwright
70
82
  # });
71
83
  # ```
72
84
  #
85
+ # ```java
86
+ # // Or "firefox" or "webkit".
87
+ # Browser browser = chromium.launch(new BrowserType.LaunchOptions()
88
+ # .setIgnoreDefaultArgs(Arrays.asList("--mute-audio")));
89
+ # ```
90
+ #
73
91
  # ```python async
74
92
  # browser = await playwright.chromium.launch( # or "firefox" or "webkit".
75
93
  # ignore_default_args=["--mute-audio"]
@@ -82,22 +100,23 @@ module Playwright
82
100
  # )
83
101
  # ```
84
102
  #
85
- # > **Chromium-only** Playwright can also be used to control the Chrome browser, but it works best with the version of
86
- # Chromium it is bundled with. There is no guarantee it will work with any other version. Use `executablePath` option with
87
- # extreme caution.
103
+ # > **Chromium-only** Playwright can also be used to control the Google Chrome or Microsoft Edge browsers, but it works
104
+ # best with the version of Chromium it is bundled with. There is no guarantee it will work with any other version. Use
105
+ # `executablePath` option with extreme caution.
88
106
  # >
89
107
  # > If Google Chrome (rather than Chromium) is preferred, a
90
108
  # [Chrome Canary](https://www.google.com/chrome/browser/canary.html) or
91
109
  # [Dev Channel](https://www.chromium.org/getting-involved/dev-channel) build is suggested.
92
110
  # >
93
- # > In [`method: BrowserType.launch`] above, any mention of Chromium also applies to Chrome.
94
- # >
95
- # > See [`this article`](https://www.howtogeek.com/202825/what%E2%80%99s-the-difference-between-chromium-and-chrome/) for
96
- # a description of the differences between Chromium and Chrome.
97
- # [`This article`](https://chromium.googlesource.com/chromium/src/+/lkgr/docs/chromium_browser_vs_google_chrome.md)
111
+ # > Stock browsers like Google Chrome and Microsoft Edge are suitable for tests that require proprietary media codecs for
112
+ # video playback. See
113
+ # [this article](https://www.howtogeek.com/202825/what%E2%80%99s-the-difference-between-chromium-and-chrome/) for other
114
+ # differences between Chromium and Chrome.
115
+ # [This article](https://chromium.googlesource.com/chromium/src/+/lkgr/docs/chromium_browser_vs_google_chrome.md)
98
116
  # describes some differences for Linux users.
99
117
  def launch(
100
118
  args: nil,
119
+ channel: nil,
101
120
  chromiumSandbox: nil,
102
121
  devtools: nil,
103
122
  downloadsPath: nil,
@@ -108,14 +127,12 @@ module Playwright
108
127
  handleSIGINT: nil,
109
128
  handleSIGTERM: nil,
110
129
  headless: nil,
111
- ignoreAllDefaultArgs: nil,
112
130
  ignoreDefaultArgs: nil,
113
- logger: nil,
114
131
  proxy: nil,
115
132
  slowMo: nil,
116
133
  timeout: nil,
117
134
  &block)
118
- wrap_impl(@impl.launch(args: unwrap_impl(args), chromiumSandbox: unwrap_impl(chromiumSandbox), devtools: unwrap_impl(devtools), downloadsPath: unwrap_impl(downloadsPath), env: unwrap_impl(env), executablePath: unwrap_impl(executablePath), firefoxUserPrefs: unwrap_impl(firefoxUserPrefs), handleSIGHUP: unwrap_impl(handleSIGHUP), handleSIGINT: unwrap_impl(handleSIGINT), handleSIGTERM: unwrap_impl(handleSIGTERM), headless: unwrap_impl(headless), ignoreAllDefaultArgs: unwrap_impl(ignoreAllDefaultArgs), ignoreDefaultArgs: unwrap_impl(ignoreDefaultArgs), logger: unwrap_impl(logger), proxy: unwrap_impl(proxy), slowMo: unwrap_impl(slowMo), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
135
+ wrap_impl(@impl.launch(args: unwrap_impl(args), channel: unwrap_impl(channel), chromiumSandbox: unwrap_impl(chromiumSandbox), devtools: unwrap_impl(devtools), downloadsPath: unwrap_impl(downloadsPath), env: unwrap_impl(env), executablePath: unwrap_impl(executablePath), firefoxUserPrefs: unwrap_impl(firefoxUserPrefs), handleSIGHUP: unwrap_impl(handleSIGHUP), handleSIGINT: unwrap_impl(handleSIGINT), handleSIGTERM: unwrap_impl(handleSIGTERM), headless: unwrap_impl(headless), ignoreDefaultArgs: unwrap_impl(ignoreDefaultArgs), proxy: unwrap_impl(proxy), slowMo: unwrap_impl(slowMo), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
119
136
  end
120
137
 
121
138
  # Returns the persistent browser context instance.
@@ -127,6 +144,7 @@ module Playwright
127
144
  acceptDownloads: nil,
128
145
  args: nil,
129
146
  bypassCSP: nil,
147
+ channel: nil,
130
148
  chromiumSandbox: nil,
131
149
  colorScheme: nil,
132
150
  deviceScaleFactor: nil,
@@ -142,69 +160,38 @@ module Playwright
142
160
  hasTouch: nil,
143
161
  headless: nil,
144
162
  httpCredentials: nil,
145
- ignoreAllDefaultArgs: nil,
146
163
  ignoreDefaultArgs: nil,
147
164
  ignoreHTTPSErrors: nil,
148
165
  isMobile: nil,
149
166
  javaScriptEnabled: nil,
150
167
  locale: nil,
151
- logger: nil,
168
+ noViewport: nil,
152
169
  offline: nil,
153
170
  permissions: nil,
154
171
  proxy: nil,
155
- recordHar: nil,
156
- recordVideo: nil,
172
+ record_har_omit_content: nil,
173
+ record_har_path: nil,
174
+ record_video_dir: nil,
175
+ record_video_size: nil,
176
+ screen: nil,
157
177
  slowMo: nil,
158
178
  timeout: nil,
159
179
  timezoneId: nil,
160
180
  userAgent: nil,
161
- videoSize: nil,
162
- videosPath: nil,
163
181
  viewport: nil)
164
182
  raise NotImplementedError.new('launch_persistent_context is not implemented yet.')
165
183
  end
166
184
 
167
- # Returns the browser app instance.
168
- #
169
- # Launches browser server that client can connect to. An example of launching a browser executable and connecting to it
170
- # later:
171
- #
172
- #
173
- # ```js
174
- # const { chromium } = require('playwright'); // Or 'webkit' or 'firefox'.
175
- #
176
- # (async () => {
177
- # const browserServer = await chromium.launchServer();
178
- # const wsEndpoint = browserServer.wsEndpoint();
179
- # // Use web socket endpoint later to establish a connection.
180
- # const browser = await chromium.connect({ wsEndpoint });
181
- # // Close browser instance.
182
- # await browserServer.close();
183
- # })();
184
- # ```
185
- def launch_server(
186
- args: nil,
187
- chromiumSandbox: nil,
188
- devtools: nil,
189
- downloadsPath: nil,
190
- executablePath: nil,
191
- firefoxUserPrefs: nil,
192
- handleSIGHUP: nil,
193
- handleSIGINT: nil,
194
- handleSIGTERM: nil,
195
- headless: nil,
196
- logger: nil,
197
- port: nil,
198
- proxy: nil,
199
- timeout: nil)
200
- raise NotImplementedError.new('launch_server is not implemented yet.')
201
- end
202
-
203
185
  # Returns browser name. For example: `'chromium'`, `'webkit'` or `'firefox'`.
204
186
  def name
205
187
  wrap_impl(@impl.name)
206
188
  end
207
189
 
190
+ # @nodoc
191
+ def connect_over_cdp(endpointURL, slowMo: nil, timeout: nil, &block)
192
+ wrap_impl(@impl.connect_over_cdp(unwrap_impl(endpointURL), slowMo: unwrap_impl(slowMo), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
193
+ end
194
+
208
195
  # -- inherited from EventEmitter --
209
196
  # @nodoc
210
197
  def once(event, callback)