playwright-ruby-client 0.0.8 → 1.58.1.alpha1

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 (209) hide show
  1. checksums.yaml +4 -4
  2. data/AGENTS.md +4 -0
  3. data/CLAUDE/api_generation.md +28 -0
  4. data/CLAUDE/ci_expectations.md +23 -0
  5. data/CLAUDE/gem_release_flow.md +39 -0
  6. data/CLAUDE/past_upgrade_pr_patterns.md +42 -0
  7. data/CLAUDE/playwright_upgrade_workflow.md +35 -0
  8. data/CLAUDE/rspec_debugging.md +30 -0
  9. data/CLAUDE/unimplemented_examples.md +18 -0
  10. data/CLAUDE.md +32 -0
  11. data/CONTRIBUTING.md +5 -0
  12. data/README.md +60 -16
  13. data/documentation/README.md +33 -0
  14. data/documentation/babel.config.js +3 -0
  15. data/documentation/docs/api/api_request.md +7 -0
  16. data/documentation/docs/api/api_request_context.md +298 -0
  17. data/documentation/docs/api/api_response.md +114 -0
  18. data/documentation/docs/api/browser.md +237 -0
  19. data/documentation/docs/api/browser_context.md +503 -0
  20. data/documentation/docs/api/browser_type.md +184 -0
  21. data/documentation/docs/api/cdp_session.md +44 -0
  22. data/documentation/docs/api/clock.md +154 -0
  23. data/documentation/docs/api/console_message.md +85 -0
  24. data/documentation/docs/api/dialog.md +84 -0
  25. data/documentation/docs/api/download.md +111 -0
  26. data/documentation/docs/api/element_handle.md +694 -0
  27. data/documentation/docs/api/experimental/_category_.yml +3 -0
  28. data/documentation/docs/api/experimental/android.md +42 -0
  29. data/documentation/docs/api/experimental/android_device.md +109 -0
  30. data/documentation/docs/api/experimental/android_input.md +43 -0
  31. data/documentation/docs/api/experimental/android_socket.md +7 -0
  32. data/documentation/docs/api/experimental/android_web_view.md +7 -0
  33. data/documentation/docs/api/file_chooser.md +53 -0
  34. data/documentation/docs/api/frame.md +1218 -0
  35. data/documentation/docs/api/frame_locator.md +348 -0
  36. data/documentation/docs/api/js_handle.md +121 -0
  37. data/documentation/docs/api/keyboard.md +170 -0
  38. data/documentation/docs/api/locator.md +1495 -0
  39. data/documentation/docs/api/locator_assertions.md +827 -0
  40. data/documentation/docs/api/mouse.md +86 -0
  41. data/documentation/docs/api/page.md +1946 -0
  42. data/documentation/docs/api/page_assertions.md +65 -0
  43. data/documentation/docs/api/playwright.md +66 -0
  44. data/documentation/docs/api/request.md +255 -0
  45. data/documentation/docs/api/response.md +176 -0
  46. data/documentation/docs/api/route.md +205 -0
  47. data/documentation/docs/api/selectors.md +63 -0
  48. data/documentation/docs/api/touchscreen.md +22 -0
  49. data/documentation/docs/api/tracing.md +129 -0
  50. data/documentation/docs/api/web_socket.md +51 -0
  51. data/documentation/docs/api/worker.md +83 -0
  52. data/documentation/docs/article/api_coverage.mdx +11 -0
  53. data/documentation/docs/article/getting_started.md +161 -0
  54. data/documentation/docs/article/guides/_category_.yml +3 -0
  55. data/documentation/docs/article/guides/download_playwright_driver.md +55 -0
  56. data/documentation/docs/article/guides/inspector.md +31 -0
  57. data/documentation/docs/article/guides/launch_browser.md +121 -0
  58. data/documentation/docs/article/guides/playwright_on_alpine_linux.md +112 -0
  59. data/documentation/docs/article/guides/rails_integration.md +278 -0
  60. data/documentation/docs/article/guides/rails_integration_with_null_driver.md +145 -0
  61. data/documentation/docs/article/guides/recording_video.md +79 -0
  62. data/documentation/docs/article/guides/rspec_integration.md +59 -0
  63. data/documentation/docs/article/guides/semi_automation.md +71 -0
  64. data/documentation/docs/article/guides/use_storage_state.md +78 -0
  65. data/documentation/docs/include/api_coverage.md +671 -0
  66. data/documentation/docusaurus.config.js +114 -0
  67. data/documentation/package.json +39 -0
  68. data/documentation/sidebars.js +15 -0
  69. data/documentation/src/components/HomepageFeatures.js +61 -0
  70. data/documentation/src/components/HomepageFeatures.module.css +13 -0
  71. data/documentation/src/css/custom.css +44 -0
  72. data/documentation/src/pages/index.js +49 -0
  73. data/documentation/src/pages/index.module.css +41 -0
  74. data/documentation/src/pages/markdown-page.md +7 -0
  75. data/documentation/static/.nojekyll +0 -0
  76. data/documentation/static/img/playwright-logo.svg +9 -0
  77. data/documentation/static/img/playwright-ruby-client.png +0 -0
  78. data/documentation/static/img/undraw_dropdown_menu.svg +1 -0
  79. data/documentation/static/img/undraw_web_development.svg +1 -0
  80. data/documentation/static/img/undraw_windows.svg +1 -0
  81. data/documentation/yarn.lock +9005 -0
  82. data/lib/playwright/{input_types/android_input.rb → android_input_impl.rb} +5 -1
  83. data/lib/playwright/api_implementation.rb +18 -0
  84. data/lib/playwright/api_response_impl.rb +77 -0
  85. data/lib/playwright/channel.rb +62 -1
  86. data/lib/playwright/channel_owner.rb +70 -7
  87. data/lib/playwright/channel_owners/android.rb +16 -3
  88. data/lib/playwright/channel_owners/android_device.rb +22 -66
  89. data/lib/playwright/channel_owners/api_request_context.rb +247 -0
  90. data/lib/playwright/channel_owners/artifact.rb +40 -0
  91. data/lib/playwright/channel_owners/binding_call.rb +70 -0
  92. data/lib/playwright/channel_owners/browser.rb +114 -22
  93. data/lib/playwright/channel_owners/browser_context.rb +589 -15
  94. data/lib/playwright/channel_owners/browser_type.rb +90 -1
  95. data/lib/playwright/channel_owners/cdp_session.rb +19 -0
  96. data/lib/playwright/channel_owners/dialog.rb +32 -0
  97. data/lib/playwright/channel_owners/element_handle.rb +107 -43
  98. data/lib/playwright/channel_owners/fetch_request.rb +8 -0
  99. data/lib/playwright/channel_owners/frame.rb +334 -104
  100. data/lib/playwright/channel_owners/js_handle.rb +9 -13
  101. data/lib/playwright/channel_owners/local_utils.rb +82 -0
  102. data/lib/playwright/channel_owners/page.rb +778 -95
  103. data/lib/playwright/channel_owners/playwright.rb +25 -30
  104. data/lib/playwright/channel_owners/request.rb +120 -18
  105. data/lib/playwright/channel_owners/response.rb +113 -0
  106. data/lib/playwright/channel_owners/route.rb +181 -0
  107. data/lib/playwright/channel_owners/stream.rb +30 -0
  108. data/lib/playwright/channel_owners/tracing.rb +117 -0
  109. data/lib/playwright/channel_owners/web_socket.rb +96 -0
  110. data/lib/playwright/channel_owners/worker.rb +46 -0
  111. data/lib/playwright/channel_owners/writable_stream.rb +14 -0
  112. data/lib/playwright/clock_impl.rb +67 -0
  113. data/lib/playwright/connection.rb +111 -63
  114. data/lib/playwright/console_message_impl.rb +29 -0
  115. data/lib/playwright/download_impl.rb +32 -0
  116. data/lib/playwright/errors.rb +42 -5
  117. data/lib/playwright/event_emitter.rb +17 -3
  118. data/lib/playwright/event_emitter_proxy.rb +49 -0
  119. data/lib/playwright/events.rb +10 -5
  120. data/lib/playwright/file_chooser_impl.rb +24 -0
  121. data/lib/playwright/frame_locator_impl.rb +66 -0
  122. data/lib/playwright/har_router.rb +89 -0
  123. data/lib/playwright/http_headers.rb +14 -0
  124. data/lib/playwright/input_files.rb +102 -15
  125. data/lib/playwright/javascript/expression.rb +7 -11
  126. data/lib/playwright/javascript/regex.rb +23 -0
  127. data/lib/playwright/javascript/source_url.rb +16 -0
  128. data/lib/playwright/javascript/value_parser.rb +108 -19
  129. data/lib/playwright/javascript/value_serializer.rb +47 -8
  130. data/lib/playwright/javascript/visitor_info.rb +26 -0
  131. data/lib/playwright/javascript.rb +2 -10
  132. data/lib/playwright/{input_types/keyboard.rb → keyboard_impl.rb} +6 -2
  133. data/lib/playwright/locator_assertions_impl.rb +571 -0
  134. data/lib/playwright/locator_impl.rb +544 -0
  135. data/lib/playwright/locator_utils.rb +136 -0
  136. data/lib/playwright/mouse_impl.rb +57 -0
  137. data/lib/playwright/page_assertions_impl.rb +154 -0
  138. data/lib/playwright/playwright_api.rb +102 -30
  139. data/lib/playwright/raw_headers.rb +61 -0
  140. data/lib/playwright/route_handler.rb +78 -0
  141. data/lib/playwright/select_option_values.rb +34 -13
  142. data/lib/playwright/selectors_impl.rb +45 -0
  143. data/lib/playwright/test.rb +102 -0
  144. data/lib/playwright/timeout_settings.rb +9 -4
  145. data/lib/playwright/touchscreen_impl.rb +14 -0
  146. data/lib/playwright/transport.rb +61 -10
  147. data/lib/playwright/url_matcher.rb +24 -2
  148. data/lib/playwright/utils.rb +48 -13
  149. data/lib/playwright/version.rb +2 -1
  150. data/lib/playwright/video.rb +54 -0
  151. data/lib/playwright/waiter.rb +166 -0
  152. data/lib/playwright/web_socket_client.rb +167 -0
  153. data/lib/playwright/web_socket_transport.rb +116 -0
  154. data/lib/playwright.rb +188 -11
  155. data/lib/playwright_api/android.rb +46 -11
  156. data/lib/playwright_api/android_device.rb +182 -31
  157. data/lib/playwright_api/android_input.rb +22 -13
  158. data/lib/playwright_api/android_socket.rb +18 -0
  159. data/lib/playwright_api/android_web_view.rb +24 -0
  160. data/lib/playwright_api/api_request.rb +26 -0
  161. data/lib/playwright_api/api_request_context.rb +311 -0
  162. data/lib/playwright_api/api_response.rb +92 -0
  163. data/lib/playwright_api/browser.rb +116 -103
  164. data/lib/playwright_api/browser_context.rb +290 -389
  165. data/lib/playwright_api/browser_type.rb +96 -118
  166. data/lib/playwright_api/cdp_session.rb +36 -39
  167. data/lib/playwright_api/clock.rb +121 -0
  168. data/lib/playwright_api/console_message.rb +35 -19
  169. data/lib/playwright_api/dialog.rb +53 -50
  170. data/lib/playwright_api/download.rb +49 -43
  171. data/lib/playwright_api/element_handle.rb +354 -402
  172. data/lib/playwright_api/file_chooser.rb +15 -18
  173. data/lib/playwright_api/frame.rb +703 -603
  174. data/lib/playwright_api/frame_locator.rb +285 -0
  175. data/lib/playwright_api/js_handle.rb +50 -76
  176. data/lib/playwright_api/keyboard.rb +67 -146
  177. data/lib/playwright_api/locator.rb +1304 -0
  178. data/lib/playwright_api/locator_assertions.rb +704 -0
  179. data/lib/playwright_api/mouse.rb +23 -29
  180. data/lib/playwright_api/page.rb +1196 -1176
  181. data/lib/playwright_api/page_assertions.rb +60 -0
  182. data/lib/playwright_api/playwright.rb +54 -122
  183. data/lib/playwright_api/request.rb +112 -74
  184. data/lib/playwright_api/response.rb +92 -20
  185. data/lib/playwright_api/route.rb +152 -62
  186. data/lib/playwright_api/selectors.rb +47 -61
  187. data/lib/playwright_api/touchscreen.rb +8 -2
  188. data/lib/playwright_api/tracing.rb +128 -0
  189. data/lib/playwright_api/web_socket.rb +43 -5
  190. data/lib/playwright_api/worker.rb +74 -34
  191. data/playwright.gemspec +14 -9
  192. data/sig/playwright.rbs +658 -0
  193. metadata +216 -50
  194. data/docs/api_coverage.md +0 -354
  195. data/lib/playwright/channel_owners/chromium_browser.rb +0 -8
  196. data/lib/playwright/channel_owners/chromium_browser_context.rb +0 -8
  197. data/lib/playwright/channel_owners/console_message.rb +0 -21
  198. data/lib/playwright/channel_owners/firefox_browser.rb +0 -8
  199. data/lib/playwright/channel_owners/selectors.rb +0 -4
  200. data/lib/playwright/channel_owners/webkit_browser.rb +0 -8
  201. data/lib/playwright/input_type.rb +0 -19
  202. data/lib/playwright/input_types/mouse.rb +0 -4
  203. data/lib/playwright/input_types/touchscreen.rb +0 -4
  204. data/lib/playwright/javascript/function.rb +0 -67
  205. data/lib/playwright/wait_helper.rb +0 -73
  206. data/lib/playwright_api/accessibility.rb +0 -93
  207. data/lib/playwright_api/binding_call.rb +0 -23
  208. data/lib/playwright_api/chromium_browser_context.rb +0 -57
  209. data/lib/playwright_api/video.rb +0 -24
@@ -1,119 +1,79 @@
1
1
  module Playwright
2
- # - extends: [EventEmitter]
3
- #
4
- # A Browser is created via [`method: BrowserType.launch`]. An example of using a `Browser` to create a [Page]:
5
- #
6
2
  #
7
- # ```js
8
- # const { firefox } = require('playwright'); // Or 'chromium' or 'webkit'.
9
- #
10
- # (async () => {
11
- # const browser = await firefox.launch();
12
- # const page = await browser.newPage();
13
- # await page.goto('https://example.com');
14
- # await browser.close();
15
- # })();
16
- # ```
17
- #
18
- # ```python async
19
- # import asyncio
20
- # from playwright.async_api import async_playwright
21
- #
22
- # async def run(playwright):
23
- # firefox = playwright.firefox
24
- # browser = await firefox.launch()
25
- # page = await browser.new_page()
26
- # await page.goto("https://example.com")
27
- # await browser.close()
28
- #
29
- # async def main():
30
- # async with async_playwright() as playwright:
31
- # await run(playwright)
32
- # asyncio.run(main())
33
- # ```
34
- #
3
+ # A Browser is created via [`method: BrowserType.launch`]. An example of using a `Browser` to create a `Page`:
4
+ #
35
5
  # ```python sync
36
- # from playwright.sync_api import sync_playwright
37
- #
38
- # def run(playwright):
6
+ # from playwright.sync_api import sync_playwright, Playwright
7
+ #
8
+ # def run(playwright: Playwright):
39
9
  # firefox = playwright.firefox
40
10
  # browser = firefox.launch()
41
11
  # page = browser.new_page()
42
12
  # page.goto("https://example.com")
43
13
  # browser.close()
44
- #
14
+ #
45
15
  # with sync_playwright() as playwright:
46
16
  # run(playwright)
47
17
  # ```
48
18
  class Browser < PlaywrightApi
49
19
 
20
+ #
21
+ # Get the browser type (chromium, firefox or webkit) that the browser belongs to.
22
+ def browser_type
23
+ wrap_impl(@impl.browser_type)
24
+ end
25
+
26
+ #
50
27
  # In case this browser is obtained using [`method: BrowserType.launch`], closes the browser and all of its pages (if any
51
28
  # were opened).
52
- #
29
+ #
53
30
  # In case this browser is connected to, clears all created contexts belonging to this browser and disconnects from the
54
31
  # browser server.
55
- #
32
+ #
33
+ # **NOTE**: This is similar to force-quitting the browser. To close pages gracefully and ensure you receive page close events, call [`method: BrowserContext.close`] on any `BrowserContext` instances you explicitly created earlier using [`method: Browser.newContext`] **before** calling [`method: Browser.close`].
34
+ #
56
35
  # The `Browser` object itself is considered to be disposed and cannot be used anymore.
57
- def close
58
- wrap_impl(@impl.close)
36
+ def close(reason: nil)
37
+ wrap_impl(@impl.close(reason: unwrap_impl(reason)))
59
38
  end
60
39
 
40
+ #
61
41
  # Returns an array of all open browser contexts. In a newly created browser, this will return zero browser contexts.
62
- #
63
- #
64
- # ```js
65
- # const browser = await pw.webkit.launch();
66
- # console.log(browser.contexts().length); // prints `0`
67
- #
68
- # const context = await browser.newContext();
69
- # console.log(browser.contexts().length); // prints `1`
70
- # ```
71
- #
72
- # ```python async
73
- # browser = await pw.webkit.launch()
74
- # print(len(browser.contexts())) # prints `0`
75
- # context = await browser.new_context()
76
- # print(len(browser.contexts())) # prints `1`
77
- # ```
78
- #
42
+ #
43
+ # **Usage**
44
+ #
79
45
  # ```python sync
80
46
  # browser = pw.webkit.launch()
81
- # print(len(browser.contexts())) # prints `0`
47
+ # print(len(browser.contexts)) # prints `0`
82
48
  # context = browser.new_context()
83
- # print(len(browser.contexts())) # prints `1`
49
+ # print(len(browser.contexts)) # prints `1`
84
50
  # ```
85
51
  def contexts
86
52
  wrap_impl(@impl.contexts)
87
53
  end
88
54
 
55
+ #
89
56
  # Indicates that the browser is connected.
90
57
  def connected?
91
58
  wrap_impl(@impl.connected?)
92
59
  end
93
60
 
61
+ #
62
+ # **NOTE**: CDP Sessions are only supported on Chromium-based browsers.
63
+ #
64
+ # Returns the newly created browser session.
65
+ def new_browser_cdp_session
66
+ wrap_impl(@impl.new_browser_cdp_session)
67
+ end
68
+
69
+ #
94
70
  # Creates a new browser context. It won't share cookies/cache with other browser contexts.
95
- #
96
- #
97
- # ```js
98
- # (async () => {
99
- # const browser = await playwright.firefox.launch(); // Or 'chromium' or 'webkit'.
100
- # // Create a new incognito browser context.
101
- # const context = await browser.newContext();
102
- # // Create a new page in a pristine context.
103
- # const page = await context.newPage();
104
- # await page.goto('https://example.com');
105
- # })();
106
- # ```
107
- #
108
- # ```python async
109
- # browser = await playwright.firefox.launch() # or "chromium" or "webkit".
110
- # # create a new incognito browser context.
111
- # context = await browser.new_context()
112
- # # create a new page in a pristine context.
113
- # page = await context.new_page()
114
- # await page.goto("https://example.com")
115
- # ```
116
- #
71
+ #
72
+ # **NOTE**: If directly using this method to create `BrowserContext`s, it is best practice to explicitly close the returned context via [`method: BrowserContext.close`] when your code is done with the `BrowserContext`,
73
+ # and before calling [`method: Browser.close`]. This will ensure the `context` is closed gracefully and any artifacts—like HARs and videos—are fully flushed and saved.
74
+ #
75
+ # **Usage**
76
+ #
117
77
  # ```python sync
118
78
  # browser = playwright.firefox.launch() # or "chromium" or "webkit".
119
79
  # # create a new incognito browser context.
@@ -121,13 +81,21 @@ module Playwright
121
81
  # # create a new page in a pristine context.
122
82
  # page = context.new_page()
123
83
  # page.goto("https://example.com")
84
+ #
85
+ # # gracefully close up everything
86
+ # context.close()
87
+ # browser.close()
124
88
  # ```
125
89
  def new_context(
126
90
  acceptDownloads: nil,
91
+ baseURL: nil,
127
92
  bypassCSP: nil,
93
+ clientCertificates: nil,
128
94
  colorScheme: nil,
95
+ contrast: nil,
129
96
  deviceScaleFactor: nil,
130
97
  extraHTTPHeaders: nil,
98
+ forcedColors: nil,
131
99
  geolocation: nil,
132
100
  hasTouch: nil,
133
101
  httpCredentials: nil,
@@ -135,33 +103,45 @@ module Playwright
135
103
  isMobile: nil,
136
104
  javaScriptEnabled: nil,
137
105
  locale: nil,
138
- logger: nil,
106
+ noViewport: nil,
139
107
  offline: nil,
140
108
  permissions: nil,
141
109
  proxy: nil,
142
- recordHar: nil,
143
- recordVideo: nil,
110
+ record_har_content: nil,
111
+ record_har_mode: nil,
112
+ record_har_omit_content: nil,
113
+ record_har_path: nil,
114
+ record_har_url_filter: nil,
115
+ record_video_dir: nil,
116
+ record_video_size: nil,
117
+ reducedMotion: nil,
118
+ screen: nil,
119
+ serviceWorkers: nil,
144
120
  storageState: nil,
121
+ strictSelectors: nil,
145
122
  timezoneId: nil,
146
123
  userAgent: nil,
147
- videoSize: nil,
148
- videosPath: nil,
149
124
  viewport: nil,
150
125
  &block)
151
- wrap_impl(@impl.new_context(acceptDownloads: unwrap_impl(acceptDownloads), bypassCSP: unwrap_impl(bypassCSP), colorScheme: unwrap_impl(colorScheme), deviceScaleFactor: unwrap_impl(deviceScaleFactor), extraHTTPHeaders: unwrap_impl(extraHTTPHeaders), geolocation: unwrap_impl(geolocation), hasTouch: unwrap_impl(hasTouch), httpCredentials: unwrap_impl(httpCredentials), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), isMobile: unwrap_impl(isMobile), javaScriptEnabled: unwrap_impl(javaScriptEnabled), locale: unwrap_impl(locale), logger: unwrap_impl(logger), offline: unwrap_impl(offline), permissions: unwrap_impl(permissions), proxy: unwrap_impl(proxy), recordHar: unwrap_impl(recordHar), recordVideo: unwrap_impl(recordVideo), storageState: unwrap_impl(storageState), timezoneId: unwrap_impl(timezoneId), userAgent: unwrap_impl(userAgent), videoSize: unwrap_impl(videoSize), videosPath: unwrap_impl(videosPath), viewport: unwrap_impl(viewport), &wrap_block_call(block)))
126
+ wrap_impl(@impl.new_context(acceptDownloads: unwrap_impl(acceptDownloads), baseURL: unwrap_impl(baseURL), bypassCSP: unwrap_impl(bypassCSP), clientCertificates: unwrap_impl(clientCertificates), colorScheme: unwrap_impl(colorScheme), contrast: unwrap_impl(contrast), deviceScaleFactor: unwrap_impl(deviceScaleFactor), extraHTTPHeaders: unwrap_impl(extraHTTPHeaders), forcedColors: unwrap_impl(forcedColors), geolocation: unwrap_impl(geolocation), hasTouch: unwrap_impl(hasTouch), httpCredentials: unwrap_impl(httpCredentials), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), isMobile: unwrap_impl(isMobile), javaScriptEnabled: unwrap_impl(javaScriptEnabled), locale: unwrap_impl(locale), noViewport: unwrap_impl(noViewport), offline: unwrap_impl(offline), permissions: unwrap_impl(permissions), proxy: unwrap_impl(proxy), record_har_content: unwrap_impl(record_har_content), record_har_mode: unwrap_impl(record_har_mode), record_har_omit_content: unwrap_impl(record_har_omit_content), record_har_path: unwrap_impl(record_har_path), record_har_url_filter: unwrap_impl(record_har_url_filter), record_video_dir: unwrap_impl(record_video_dir), record_video_size: unwrap_impl(record_video_size), reducedMotion: unwrap_impl(reducedMotion), screen: unwrap_impl(screen), serviceWorkers: unwrap_impl(serviceWorkers), storageState: unwrap_impl(storageState), strictSelectors: unwrap_impl(strictSelectors), timezoneId: unwrap_impl(timezoneId), userAgent: unwrap_impl(userAgent), viewport: unwrap_impl(viewport), &wrap_block_call(block)))
152
127
  end
153
128
 
129
+ #
154
130
  # Creates a new page in a new browser context. Closing this page will close the context as well.
155
- #
131
+ #
156
132
  # This is a convenience API that should only be used for the single-page scenarios and short snippets. Production code and
157
133
  # testing frameworks should explicitly create [`method: Browser.newContext`] followed by the
158
134
  # [`method: BrowserContext.newPage`] to control their exact life times.
159
135
  def new_page(
160
136
  acceptDownloads: nil,
137
+ baseURL: nil,
161
138
  bypassCSP: nil,
139
+ clientCertificates: nil,
162
140
  colorScheme: nil,
141
+ contrast: nil,
163
142
  deviceScaleFactor: nil,
164
143
  extraHTTPHeaders: nil,
144
+ forcedColors: nil,
165
145
  geolocation: nil,
166
146
  hasTouch: nil,
167
147
  httpCredentials: nil,
@@ -169,47 +149,80 @@ module Playwright
169
149
  isMobile: nil,
170
150
  javaScriptEnabled: nil,
171
151
  locale: nil,
172
- logger: nil,
152
+ noViewport: nil,
173
153
  offline: nil,
174
154
  permissions: nil,
175
155
  proxy: nil,
176
- recordHar: nil,
177
- recordVideo: nil,
156
+ record_har_content: nil,
157
+ record_har_mode: nil,
158
+ record_har_omit_content: nil,
159
+ record_har_path: nil,
160
+ record_har_url_filter: nil,
161
+ record_video_dir: nil,
162
+ record_video_size: nil,
163
+ reducedMotion: nil,
164
+ screen: nil,
165
+ serviceWorkers: nil,
178
166
  storageState: nil,
167
+ strictSelectors: nil,
179
168
  timezoneId: nil,
180
169
  userAgent: nil,
181
- videoSize: nil,
182
- videosPath: nil,
183
- viewport: nil)
184
- wrap_impl(@impl.new_page(acceptDownloads: unwrap_impl(acceptDownloads), bypassCSP: unwrap_impl(bypassCSP), colorScheme: unwrap_impl(colorScheme), deviceScaleFactor: unwrap_impl(deviceScaleFactor), extraHTTPHeaders: unwrap_impl(extraHTTPHeaders), geolocation: unwrap_impl(geolocation), hasTouch: unwrap_impl(hasTouch), httpCredentials: unwrap_impl(httpCredentials), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), isMobile: unwrap_impl(isMobile), javaScriptEnabled: unwrap_impl(javaScriptEnabled), locale: unwrap_impl(locale), logger: unwrap_impl(logger), offline: unwrap_impl(offline), permissions: unwrap_impl(permissions), proxy: unwrap_impl(proxy), recordHar: unwrap_impl(recordHar), recordVideo: unwrap_impl(recordVideo), storageState: unwrap_impl(storageState), timezoneId: unwrap_impl(timezoneId), userAgent: unwrap_impl(userAgent), videoSize: unwrap_impl(videoSize), videosPath: unwrap_impl(videosPath), viewport: unwrap_impl(viewport)))
170
+ viewport: nil,
171
+ &block)
172
+ wrap_impl(@impl.new_page(acceptDownloads: unwrap_impl(acceptDownloads), baseURL: unwrap_impl(baseURL), bypassCSP: unwrap_impl(bypassCSP), clientCertificates: unwrap_impl(clientCertificates), colorScheme: unwrap_impl(colorScheme), contrast: unwrap_impl(contrast), deviceScaleFactor: unwrap_impl(deviceScaleFactor), extraHTTPHeaders: unwrap_impl(extraHTTPHeaders), forcedColors: unwrap_impl(forcedColors), geolocation: unwrap_impl(geolocation), hasTouch: unwrap_impl(hasTouch), httpCredentials: unwrap_impl(httpCredentials), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), isMobile: unwrap_impl(isMobile), javaScriptEnabled: unwrap_impl(javaScriptEnabled), locale: unwrap_impl(locale), noViewport: unwrap_impl(noViewport), offline: unwrap_impl(offline), permissions: unwrap_impl(permissions), proxy: unwrap_impl(proxy), record_har_content: unwrap_impl(record_har_content), record_har_mode: unwrap_impl(record_har_mode), record_har_omit_content: unwrap_impl(record_har_omit_content), record_har_path: unwrap_impl(record_har_path), record_har_url_filter: unwrap_impl(record_har_url_filter), record_video_dir: unwrap_impl(record_video_dir), record_video_size: unwrap_impl(record_video_size), reducedMotion: unwrap_impl(reducedMotion), screen: unwrap_impl(screen), serviceWorkers: unwrap_impl(serviceWorkers), storageState: unwrap_impl(storageState), strictSelectors: unwrap_impl(strictSelectors), timezoneId: unwrap_impl(timezoneId), userAgent: unwrap_impl(userAgent), viewport: unwrap_impl(viewport), &wrap_block_call(block)))
185
173
  end
186
174
 
175
+ #
176
+ # **NOTE**: This API controls [Chromium Tracing](https://www.chromium.org/developers/how-tos/trace-event-profiling-tool) which is a low-level chromium-specific debugging tool. API to control [Playwright Tracing](../trace-viewer) could be found [here](./class-tracing).
177
+ #
178
+ # You can use [`method: Browser.startTracing`] and [`method: Browser.stopTracing`] to create a trace file that can
179
+ # be opened in Chrome DevTools performance panel.
180
+ #
181
+ # **Usage**
182
+ #
183
+ # ```python sync
184
+ # browser.start_tracing(page, path="trace.json")
185
+ # page.goto("https://www.google.com")
186
+ # browser.stop_tracing()
187
+ # ```
188
+ def start_tracing(page: nil, categories: nil, path: nil, screenshots: nil)
189
+ wrap_impl(@impl.start_tracing(page: unwrap_impl(page), categories: unwrap_impl(categories), path: unwrap_impl(path), screenshots: unwrap_impl(screenshots)))
190
+ end
191
+
192
+ #
193
+ # **NOTE**: This API controls [Chromium Tracing](https://www.chromium.org/developers/how-tos/trace-event-profiling-tool) which is a low-level chromium-specific debugging tool. API to control [Playwright Tracing](../trace-viewer) could be found [here](./class-tracing).
194
+ #
195
+ # Returns the buffer with trace data.
196
+ def stop_tracing
197
+ wrap_impl(@impl.stop_tracing)
198
+ end
199
+
200
+ #
187
201
  # Returns the browser version.
188
202
  def version
189
203
  wrap_impl(@impl.version)
190
204
  end
191
205
 
206
+ # -- inherited from EventEmitter --
192
207
  # @nodoc
193
- def after_initialize
194
- wrap_impl(@impl.after_initialize)
208
+ def once(event, callback)
209
+ event_emitter_proxy.once(event, callback)
195
210
  end
196
211
 
197
212
  # -- inherited from EventEmitter --
198
213
  # @nodoc
199
214
  def on(event, callback)
200
- wrap_impl(@impl.on(unwrap_impl(event), unwrap_impl(callback)))
215
+ event_emitter_proxy.on(event, callback)
201
216
  end
202
217
 
203
218
  # -- inherited from EventEmitter --
204
219
  # @nodoc
205
220
  def off(event, callback)
206
- wrap_impl(@impl.off(unwrap_impl(event), unwrap_impl(callback)))
221
+ event_emitter_proxy.off(event, callback)
207
222
  end
208
223
 
209
- # -- inherited from EventEmitter --
210
- # @nodoc
211
- def once(event, callback)
212
- wrap_impl(@impl.once(unwrap_impl(event), unwrap_impl(callback)))
224
+ private def event_emitter_proxy
225
+ @event_emitter_proxy ||= EventEmitterProxy.new(self, @impl)
213
226
  end
214
227
  end
215
228
  end