@smoothdeploy/playwright-core 1.58.4 → 1.60.1

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 (380) hide show
  1. package/ThirdPartyNotices.txt +7 -4070
  2. package/browsers.json +16 -14
  3. package/cli.js +4 -1
  4. package/index.js +1 -1
  5. package/lib/bootstrap.js +77 -0
  6. package/lib/coreBundle.js +70057 -0
  7. package/lib/entry/cliDaemon.js +5 -0
  8. package/lib/entry/dashboardApp.js +3 -0
  9. package/lib/entry/mcp.js +10 -0
  10. package/lib/entry/oopBrowserDownload.js +3 -0
  11. package/lib/{server/deviceDescriptors.js → package.js} +18 -7
  12. package/lib/server/deviceDescriptorsSource.json +137 -137
  13. package/lib/server/electron/loader.js +99 -13
  14. package/lib/serverRegistry.js +7343 -0
  15. package/lib/serverRegistry.js.LICENSE +354 -0
  16. package/lib/tools/cli-client/channelSessions.js +141 -0
  17. package/lib/tools/cli-client/cli.js +6 -0
  18. package/lib/tools/cli-client/help.json +679 -0
  19. package/lib/tools/cli-client/minimist.js +128 -0
  20. package/lib/tools/cli-client/output.js +343 -0
  21. package/lib/tools/cli-client/program.js +380 -0
  22. package/lib/tools/cli-client/registry.js +176 -0
  23. package/lib/tools/cli-client/session.js +265 -0
  24. package/lib/tools/cli-client/skill/SKILL.md +388 -0
  25. package/lib/tools/cli-client/skill/references/element-attributes.md +23 -0
  26. package/lib/tools/cli-client/skill/references/playwright-tests.md +39 -0
  27. package/lib/tools/cli-client/skill/references/request-mocking.md +87 -0
  28. package/lib/tools/cli-client/skill/references/running-code.md +241 -0
  29. package/lib/tools/cli-client/skill/references/session-management.md +225 -0
  30. package/lib/tools/cli-client/skill/references/spec-driven-testing.md +305 -0
  31. package/lib/tools/cli-client/skill/references/storage-state.md +275 -0
  32. package/lib/tools/cli-client/skill/references/test-generation.md +134 -0
  33. package/lib/tools/cli-client/skill/references/tracing.md +139 -0
  34. package/lib/tools/cli-client/skill/references/video-recording.md +143 -0
  35. package/lib/tools/dashboard/appIcon.png +0 -0
  36. package/lib/tools/trace/SKILL.md +171 -0
  37. package/lib/{server/utils/profiler.js → tools/utils/extension.js} +42 -29
  38. package/lib/tools/utils/socketConnection.js +108 -0
  39. package/lib/utilsBundle.js +85377 -68
  40. package/lib/utilsBundle.js.LICENSE +2002 -0
  41. package/lib/vite/dashboard/assets/codicon-DCmgc-ay.ttf +0 -0
  42. package/lib/vite/dashboard/assets/firefox-1bWoP6pv.svg +1 -0
  43. package/lib/vite/dashboard/assets/firefox-beta-k3eOH_eK.svg +1 -0
  44. package/lib/vite/dashboard/assets/firefox-nightly-Cp5nfeDT.svg +1 -0
  45. package/lib/vite/dashboard/assets/index-BY2S1tHT.css +1 -0
  46. package/lib/vite/dashboard/assets/index-DpEq2p62.js +52 -0
  47. package/lib/vite/dashboard/assets/safari-na3_-uQk.svg +1 -0
  48. package/lib/vite/dashboard/index.html +29 -0
  49. package/lib/vite/dashboard/playwright-logo.svg +24 -0
  50. package/lib/vite/htmlReport/index.html +2 -70
  51. package/lib/vite/htmlReport/report.css +1 -0
  52. package/lib/vite/htmlReport/report.js +72 -0
  53. package/lib/vite/recorder/assets/{codeMirrorModule-SGmxtuwi.js → codeMirrorModule-DyIpd_mA.js} +20 -20
  54. package/lib/vite/recorder/assets/index-4ZiSSCmn.css +1 -0
  55. package/lib/vite/recorder/assets/index-5q9Mg4LR.js +195 -0
  56. package/lib/vite/recorder/index.html +2 -2
  57. package/lib/vite/traceViewer/assets/{codeMirrorModule-BOUrQdmH.js → codeMirrorModule-DZq9EItR.js} +20 -20
  58. package/lib/vite/traceViewer/assets/defaultSettingsView-D4EpQvB-.js +262 -0
  59. package/lib/vite/traceViewer/assets/urlMatch-BYQrIQwR.js +1 -0
  60. package/lib/vite/traceViewer/defaultSettingsView.BDKsFU3c.css +1 -0
  61. package/lib/vite/traceViewer/{index.BVu7tZDe.css → index.CzXZzn5A.css} +1 -1
  62. package/lib/vite/traceViewer/index.html +5 -4
  63. package/lib/vite/traceViewer/index.uj4g7lWX.js +2 -0
  64. package/lib/vite/traceViewer/snapshot.html +4 -15
  65. package/lib/vite/traceViewer/snapshot.v8KI4P3m.js +2 -0
  66. package/lib/vite/traceViewer/sw.bundle.js +4 -4
  67. package/lib/vite/traceViewer/uiMode.B1W9rAxj.js +6 -0
  68. package/lib/vite/traceViewer/uiMode.html +4 -3
  69. package/package.json +4 -14
  70. package/types/protocol.d.ts +1084 -343
  71. package/types/types.d.ts +6035 -4360
  72. package/lib/androidServerImpl.js +0 -65
  73. package/lib/browserServerImpl.js +0 -120
  74. package/lib/cli/driver.js +0 -97
  75. package/lib/cli/program.js +0 -589
  76. package/lib/cli/programWithTestStub.js +0 -74
  77. package/lib/client/android.js +0 -361
  78. package/lib/client/api.js +0 -137
  79. package/lib/client/artifact.js +0 -79
  80. package/lib/client/browser.js +0 -161
  81. package/lib/client/browserContext.js +0 -582
  82. package/lib/client/browserType.js +0 -185
  83. package/lib/client/cdpSession.js +0 -51
  84. package/lib/client/channelOwner.js +0 -195
  85. package/lib/client/clientHelper.js +0 -64
  86. package/lib/client/clientInstrumentation.js +0 -65
  87. package/lib/client/clientStackTrace.js +0 -69
  88. package/lib/client/clock.js +0 -68
  89. package/lib/client/connection.js +0 -318
  90. package/lib/client/consoleMessage.js +0 -58
  91. package/lib/client/coverage.js +0 -44
  92. package/lib/client/dialog.js +0 -56
  93. package/lib/client/download.js +0 -62
  94. package/lib/client/electron.js +0 -138
  95. package/lib/client/elementHandle.js +0 -284
  96. package/lib/client/errors.js +0 -77
  97. package/lib/client/eventEmitter.js +0 -314
  98. package/lib/client/events.js +0 -103
  99. package/lib/client/fetch.js +0 -368
  100. package/lib/client/fileChooser.js +0 -46
  101. package/lib/client/fileUtils.js +0 -34
  102. package/lib/client/frame.js +0 -409
  103. package/lib/client/harRouter.js +0 -87
  104. package/lib/client/input.js +0 -84
  105. package/lib/client/jsHandle.js +0 -109
  106. package/lib/client/jsonPipe.js +0 -39
  107. package/lib/client/localUtils.js +0 -60
  108. package/lib/client/locator.js +0 -369
  109. package/lib/client/network.js +0 -747
  110. package/lib/client/page.js +0 -745
  111. package/lib/client/pageAgent.js +0 -64
  112. package/lib/client/platform.js +0 -77
  113. package/lib/client/playwright.js +0 -71
  114. package/lib/client/selectors.js +0 -55
  115. package/lib/client/stream.js +0 -39
  116. package/lib/client/timeoutSettings.js +0 -79
  117. package/lib/client/tracing.js +0 -119
  118. package/lib/client/types.js +0 -28
  119. package/lib/client/video.js +0 -59
  120. package/lib/client/waiter.js +0 -142
  121. package/lib/client/webError.js +0 -39
  122. package/lib/client/webSocket.js +0 -93
  123. package/lib/client/worker.js +0 -85
  124. package/lib/client/writableStream.js +0 -39
  125. package/lib/generated/bindingsControllerSource.js +0 -28
  126. package/lib/generated/clockSource.js +0 -28
  127. package/lib/generated/injectedScriptSource.js +0 -28
  128. package/lib/generated/pollingRecorderSource.js +0 -28
  129. package/lib/generated/storageScriptSource.js +0 -28
  130. package/lib/generated/utilityScriptSource.js +0 -28
  131. package/lib/generated/webSocketMockSource.js +0 -336
  132. package/lib/inProcessFactory.js +0 -60
  133. package/lib/inprocess.js +0 -3
  134. package/lib/mcpBundle.js +0 -84
  135. package/lib/mcpBundleImpl/index.js +0 -147
  136. package/lib/outofprocess.js +0 -76
  137. package/lib/protocol/serializers.js +0 -197
  138. package/lib/protocol/validator.js +0 -3023
  139. package/lib/protocol/validatorPrimitives.js +0 -193
  140. package/lib/remote/playwrightConnection.js +0 -129
  141. package/lib/remote/playwrightServer.js +0 -334
  142. package/lib/server/agent/actionRunner.js +0 -335
  143. package/lib/server/agent/actions.js +0 -128
  144. package/lib/server/agent/codegen.js +0 -111
  145. package/lib/server/agent/context.js +0 -150
  146. package/lib/server/agent/expectTools.js +0 -156
  147. package/lib/server/agent/pageAgent.js +0 -204
  148. package/lib/server/agent/performTools.js +0 -262
  149. package/lib/server/agent/tool.js +0 -109
  150. package/lib/server/android/android.js +0 -465
  151. package/lib/server/android/backendAdb.js +0 -177
  152. package/lib/server/artifact.js +0 -127
  153. package/lib/server/bidi/bidiBrowser.js +0 -549
  154. package/lib/server/bidi/bidiChromium.js +0 -149
  155. package/lib/server/bidi/bidiConnection.js +0 -213
  156. package/lib/server/bidi/bidiDeserializer.js +0 -116
  157. package/lib/server/bidi/bidiExecutionContext.js +0 -267
  158. package/lib/server/bidi/bidiFirefox.js +0 -128
  159. package/lib/server/bidi/bidiInput.js +0 -146
  160. package/lib/server/bidi/bidiNetworkManager.js +0 -383
  161. package/lib/server/bidi/bidiOverCdp.js +0 -102
  162. package/lib/server/bidi/bidiPage.js +0 -583
  163. package/lib/server/bidi/bidiPdf.js +0 -106
  164. package/lib/server/bidi/third_party/bidiCommands.d.js +0 -22
  165. package/lib/server/bidi/third_party/bidiKeyboard.js +0 -256
  166. package/lib/server/bidi/third_party/bidiProtocol.js +0 -24
  167. package/lib/server/bidi/third_party/bidiProtocolCore.js +0 -180
  168. package/lib/server/bidi/third_party/bidiProtocolPermissions.js +0 -42
  169. package/lib/server/bidi/third_party/bidiSerializer.js +0 -148
  170. package/lib/server/bidi/third_party/firefoxPrefs.js +0 -259
  171. package/lib/server/browser.js +0 -149
  172. package/lib/server/browserContext.js +0 -700
  173. package/lib/server/browserType.js +0 -336
  174. package/lib/server/callLog.js +0 -82
  175. package/lib/server/chromium/chromium.js +0 -397
  176. package/lib/server/chromium/chromiumSwitches.js +0 -104
  177. package/lib/server/chromium/crBrowser.js +0 -520
  178. package/lib/server/chromium/crConnection.js +0 -197
  179. package/lib/server/chromium/crCoverage.js +0 -235
  180. package/lib/server/chromium/crDevTools.js +0 -111
  181. package/lib/server/chromium/crDragDrop.js +0 -131
  182. package/lib/server/chromium/crExecutionContext.js +0 -146
  183. package/lib/server/chromium/crInput.js +0 -187
  184. package/lib/server/chromium/crNetworkManager.js +0 -707
  185. package/lib/server/chromium/crPage.js +0 -1001
  186. package/lib/server/chromium/crPdf.js +0 -121
  187. package/lib/server/chromium/crProtocolHelper.js +0 -145
  188. package/lib/server/chromium/crServiceWorker.js +0 -136
  189. package/lib/server/chromium/defaultFontFamilies.js +0 -162
  190. package/lib/server/chromium/protocol.d.js +0 -16
  191. package/lib/server/clock.js +0 -149
  192. package/lib/server/codegen/csharp.js +0 -327
  193. package/lib/server/codegen/java.js +0 -274
  194. package/lib/server/codegen/javascript.js +0 -247
  195. package/lib/server/codegen/jsonl.js +0 -52
  196. package/lib/server/codegen/language.js +0 -133
  197. package/lib/server/codegen/languages.js +0 -68
  198. package/lib/server/codegen/python.js +0 -279
  199. package/lib/server/codegen/types.js +0 -16
  200. package/lib/server/console.js +0 -57
  201. package/lib/server/cookieStore.js +0 -206
  202. package/lib/server/debugController.js +0 -181
  203. package/lib/server/debugger.js +0 -119
  204. package/lib/server/dialog.js +0 -116
  205. package/lib/server/dispatchers/androidDispatcher.js +0 -325
  206. package/lib/server/dispatchers/artifactDispatcher.js +0 -118
  207. package/lib/server/dispatchers/browserContextDispatcher.js +0 -384
  208. package/lib/server/dispatchers/browserDispatcher.js +0 -118
  209. package/lib/server/dispatchers/browserTypeDispatcher.js +0 -64
  210. package/lib/server/dispatchers/cdpSessionDispatcher.js +0 -44
  211. package/lib/server/dispatchers/debugControllerDispatcher.js +0 -78
  212. package/lib/server/dispatchers/dialogDispatcher.js +0 -47
  213. package/lib/server/dispatchers/dispatcher.js +0 -364
  214. package/lib/server/dispatchers/electronDispatcher.js +0 -89
  215. package/lib/server/dispatchers/elementHandlerDispatcher.js +0 -181
  216. package/lib/server/dispatchers/frameDispatcher.js +0 -227
  217. package/lib/server/dispatchers/jsHandleDispatcher.js +0 -85
  218. package/lib/server/dispatchers/jsonPipeDispatcher.js +0 -58
  219. package/lib/server/dispatchers/localUtilsDispatcher.js +0 -149
  220. package/lib/server/dispatchers/networkDispatchers.js +0 -213
  221. package/lib/server/dispatchers/pageAgentDispatcher.js +0 -96
  222. package/lib/server/dispatchers/pageDispatcher.js +0 -393
  223. package/lib/server/dispatchers/playwrightDispatcher.js +0 -108
  224. package/lib/server/dispatchers/streamDispatcher.js +0 -67
  225. package/lib/server/dispatchers/tracingDispatcher.js +0 -68
  226. package/lib/server/dispatchers/webSocketRouteDispatcher.js +0 -165
  227. package/lib/server/dispatchers/writableStreamDispatcher.js +0 -79
  228. package/lib/server/dom.js +0 -815
  229. package/lib/server/download.js +0 -70
  230. package/lib/server/electron/electron.js +0 -273
  231. package/lib/server/errors.js +0 -69
  232. package/lib/server/fetch.js +0 -621
  233. package/lib/server/fileChooser.js +0 -43
  234. package/lib/server/fileUploadUtils.js +0 -84
  235. package/lib/server/firefox/ffBrowser.js +0 -418
  236. package/lib/server/firefox/ffConnection.js +0 -142
  237. package/lib/server/firefox/ffExecutionContext.js +0 -150
  238. package/lib/server/firefox/ffInput.js +0 -159
  239. package/lib/server/firefox/ffNetworkManager.js +0 -256
  240. package/lib/server/firefox/ffPage.js +0 -497
  241. package/lib/server/firefox/firefox.js +0 -114
  242. package/lib/server/firefox/protocol.d.js +0 -16
  243. package/lib/server/formData.js +0 -147
  244. package/lib/server/frameSelectors.js +0 -160
  245. package/lib/server/frames.js +0 -1471
  246. package/lib/server/har/harRecorder.js +0 -147
  247. package/lib/server/har/harTracer.js +0 -607
  248. package/lib/server/harBackend.js +0 -157
  249. package/lib/server/helper.js +0 -96
  250. package/lib/server/index.js +0 -58
  251. package/lib/server/input.js +0 -277
  252. package/lib/server/instrumentation.js +0 -72
  253. package/lib/server/javascript.js +0 -291
  254. package/lib/server/launchApp.js +0 -128
  255. package/lib/server/localUtils.js +0 -214
  256. package/lib/server/macEditingCommands.js +0 -143
  257. package/lib/server/network.js +0 -667
  258. package/lib/server/page.js +0 -830
  259. package/lib/server/pipeTransport.js +0 -89
  260. package/lib/server/playwright.js +0 -69
  261. package/lib/server/progress.js +0 -132
  262. package/lib/server/protocolError.js +0 -52
  263. package/lib/server/recorder/chat.js +0 -161
  264. package/lib/server/recorder/recorderApp.js +0 -366
  265. package/lib/server/recorder/recorderRunner.js +0 -138
  266. package/lib/server/recorder/recorderSignalProcessor.js +0 -83
  267. package/lib/server/recorder/recorderUtils.js +0 -157
  268. package/lib/server/recorder/throttledFile.js +0 -57
  269. package/lib/server/recorder.js +0 -554
  270. package/lib/server/registry/browserFetcher.js +0 -177
  271. package/lib/server/registry/dependencies.js +0 -371
  272. package/lib/server/registry/index.js +0 -1422
  273. package/lib/server/registry/nativeDeps.js +0 -1280
  274. package/lib/server/registry/oopDownloadBrowserMain.js +0 -127
  275. package/lib/server/screencast.js +0 -190
  276. package/lib/server/screenshotCompositor.js +0 -153
  277. package/lib/server/screenshotter.js +0 -333
  278. package/lib/server/selectors.js +0 -112
  279. package/lib/server/socksClientCertificatesInterceptor.js +0 -383
  280. package/lib/server/socksInterceptor.js +0 -95
  281. package/lib/server/trace/recorder/snapshotter.js +0 -147
  282. package/lib/server/trace/recorder/snapshotterInjected.js +0 -561
  283. package/lib/server/trace/recorder/tracing.js +0 -604
  284. package/lib/server/trace/viewer/traceParser.js +0 -72
  285. package/lib/server/trace/viewer/traceViewer.js +0 -245
  286. package/lib/server/transport.js +0 -181
  287. package/lib/server/types.js +0 -28
  288. package/lib/server/usKeyboardLayout.js +0 -145
  289. package/lib/server/utils/ascii.js +0 -44
  290. package/lib/server/utils/comparators.js +0 -139
  291. package/lib/server/utils/crypto.js +0 -216
  292. package/lib/server/utils/debug.js +0 -42
  293. package/lib/server/utils/debugLogger.js +0 -122
  294. package/lib/server/utils/env.js +0 -73
  295. package/lib/server/utils/eventsHelper.js +0 -39
  296. package/lib/server/utils/expectUtils.js +0 -123
  297. package/lib/server/utils/fileUtils.js +0 -191
  298. package/lib/server/utils/happyEyeballs.js +0 -207
  299. package/lib/server/utils/hostPlatform.js +0 -138
  300. package/lib/server/utils/httpServer.js +0 -203
  301. package/lib/server/utils/imageUtils.js +0 -141
  302. package/lib/server/utils/image_tools/colorUtils.js +0 -89
  303. package/lib/server/utils/image_tools/compare.js +0 -109
  304. package/lib/server/utils/image_tools/imageChannel.js +0 -78
  305. package/lib/server/utils/image_tools/stats.js +0 -102
  306. package/lib/server/utils/linuxUtils.js +0 -71
  307. package/lib/server/utils/network.js +0 -242
  308. package/lib/server/utils/nodePlatform.js +0 -154
  309. package/lib/server/utils/pipeTransport.js +0 -84
  310. package/lib/server/utils/processLauncher.js +0 -241
  311. package/lib/server/utils/socksProxy.js +0 -511
  312. package/lib/server/utils/spawnAsync.js +0 -41
  313. package/lib/server/utils/task.js +0 -51
  314. package/lib/server/utils/userAgent.js +0 -98
  315. package/lib/server/utils/wsServer.js +0 -121
  316. package/lib/server/utils/zipFile.js +0 -74
  317. package/lib/server/utils/zones.js +0 -57
  318. package/lib/server/videoRecorder.js +0 -124
  319. package/lib/server/webkit/protocol.d.js +0 -16
  320. package/lib/server/webkit/webkit.js +0 -108
  321. package/lib/server/webkit/wkBrowser.js +0 -335
  322. package/lib/server/webkit/wkConnection.js +0 -144
  323. package/lib/server/webkit/wkExecutionContext.js +0 -154
  324. package/lib/server/webkit/wkInput.js +0 -181
  325. package/lib/server/webkit/wkInterceptableRequest.js +0 -197
  326. package/lib/server/webkit/wkPage.js +0 -1159
  327. package/lib/server/webkit/wkProvisionalPage.js +0 -83
  328. package/lib/server/webkit/wkWorkers.js +0 -105
  329. package/lib/third_party/pixelmatch.js +0 -255
  330. package/lib/utils/isomorphic/ariaSnapshot.js +0 -455
  331. package/lib/utils/isomorphic/assert.js +0 -31
  332. package/lib/utils/isomorphic/colors.js +0 -72
  333. package/lib/utils/isomorphic/cssParser.js +0 -245
  334. package/lib/utils/isomorphic/cssTokenizer.js +0 -1051
  335. package/lib/utils/isomorphic/headers.js +0 -53
  336. package/lib/utils/isomorphic/locatorGenerators.js +0 -689
  337. package/lib/utils/isomorphic/locatorParser.js +0 -176
  338. package/lib/utils/isomorphic/locatorUtils.js +0 -81
  339. package/lib/utils/isomorphic/lruCache.js +0 -51
  340. package/lib/utils/isomorphic/manualPromise.js +0 -114
  341. package/lib/utils/isomorphic/mimeType.js +0 -459
  342. package/lib/utils/isomorphic/multimap.js +0 -80
  343. package/lib/utils/isomorphic/protocolFormatter.js +0 -81
  344. package/lib/utils/isomorphic/protocolMetainfo.js +0 -330
  345. package/lib/utils/isomorphic/rtti.js +0 -43
  346. package/lib/utils/isomorphic/selectorParser.js +0 -386
  347. package/lib/utils/isomorphic/semaphore.js +0 -54
  348. package/lib/utils/isomorphic/stackTrace.js +0 -158
  349. package/lib/utils/isomorphic/stringUtils.js +0 -204
  350. package/lib/utils/isomorphic/time.js +0 -49
  351. package/lib/utils/isomorphic/timeoutRunner.js +0 -66
  352. package/lib/utils/isomorphic/trace/entries.js +0 -16
  353. package/lib/utils/isomorphic/trace/snapshotRenderer.js +0 -499
  354. package/lib/utils/isomorphic/trace/snapshotServer.js +0 -120
  355. package/lib/utils/isomorphic/trace/snapshotStorage.js +0 -89
  356. package/lib/utils/isomorphic/trace/traceLoader.js +0 -131
  357. package/lib/utils/isomorphic/trace/traceModel.js +0 -365
  358. package/lib/utils/isomorphic/trace/traceModernizer.js +0 -400
  359. package/lib/utils/isomorphic/trace/versions/traceV3.js +0 -16
  360. package/lib/utils/isomorphic/trace/versions/traceV4.js +0 -16
  361. package/lib/utils/isomorphic/trace/versions/traceV5.js +0 -16
  362. package/lib/utils/isomorphic/trace/versions/traceV6.js +0 -16
  363. package/lib/utils/isomorphic/trace/versions/traceV7.js +0 -16
  364. package/lib/utils/isomorphic/trace/versions/traceV8.js +0 -16
  365. package/lib/utils/isomorphic/traceUtils.js +0 -58
  366. package/lib/utils/isomorphic/types.js +0 -16
  367. package/lib/utils/isomorphic/urlMatch.js +0 -190
  368. package/lib/utils/isomorphic/utilityScriptSerializers.js +0 -251
  369. package/lib/utils/isomorphic/yaml.js +0 -84
  370. package/lib/utils.js +0 -111
  371. package/lib/utilsBundleImpl/index.js +0 -218
  372. package/lib/vite/recorder/assets/index-BSjZa4pk.css +0 -1
  373. package/lib/vite/recorder/assets/index-xK8wYVpV.js +0 -195
  374. package/lib/vite/traceViewer/assets/defaultSettingsView-k0nPICvc.js +0 -266
  375. package/lib/vite/traceViewer/defaultSettingsView.7ch9cixO.css +0 -1
  376. package/lib/vite/traceViewer/index.CVz8LATg.js +0 -2
  377. package/lib/vite/traceViewer/uiMode.C7uDu3VD.js +0 -5
  378. package/lib/zipBundle.js +0 -34
  379. package/lib/zipBundleImpl.js +0 -5
  380. /package/lib/{utilsBundleImpl/xdg-open → xdg-open} +0 -0
@@ -0,0 +1,265 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var session_exports = {};
30
+ __export(session_exports, {
31
+ Session: () => Session
32
+ });
33
+ module.exports = __toCommonJS(session_exports);
34
+ var import_child_process = require("child_process");
35
+ var import_fs = __toESM(require("fs"));
36
+ var import_net = __toESM(require("net"));
37
+ var import_os = __toESM(require("os"));
38
+ var import_path = __toESM(require("path"));
39
+ var import_package = require("../../package");
40
+ var import_socketConnection = require("../utils/socketConnection");
41
+ var import_registry = require("./registry");
42
+ class Session {
43
+ constructor(sessionFile) {
44
+ this.config = sessionFile.config;
45
+ this.name = this.config.name;
46
+ this._sessionFile = sessionFile;
47
+ }
48
+ isCompatible(clientInfo) {
49
+ return (0, import_socketConnection.compareSemver)(clientInfo.version, this.config.version) >= 0;
50
+ }
51
+ async run(clientInfo, args, options) {
52
+ if (!this.isCompatible(clientInfo))
53
+ throw new Error(`Client is v${clientInfo.version}, session '${this.name}' is v${this.config.version}. Run
54
+
55
+ playwright-cli${this.name !== "default" ? ` -s=${this.name}` : ""} open
56
+
57
+ to restart the browser session.`);
58
+ const { socket } = await this._connect();
59
+ if (!socket)
60
+ throw new Error(`Browser '${this.name}' is not open. Run
61
+
62
+ playwright-cli${this.name !== "default" ? ` -s=${this.name}` : ""} open
63
+
64
+ to start the browser session.`);
65
+ return await SocketConnectionClient.sendAndClose(socket, "run", { args, cwd: process.cwd(), raw: options?.raw, json: options?.json });
66
+ }
67
+ async stop() {
68
+ if (!await this.canConnect())
69
+ return { wasOpen: false };
70
+ await this._stopDaemon();
71
+ return { wasOpen: true };
72
+ }
73
+ async deleteData() {
74
+ await this.stop();
75
+ const dataDirs = await import_fs.default.promises.readdir(this._sessionFile.daemonDir).catch(() => []);
76
+ const matchingEntries = dataDirs.filter((file) => file === `${this.name}.session` || file.startsWith(`ud-${this.name}-`));
77
+ if (matchingEntries.length === 0)
78
+ return { existed: false, deletedUserDataDir: false };
79
+ let deletedUserDataDir = false;
80
+ for (const entry of matchingEntries) {
81
+ const userDataDir = import_path.default.resolve(this._sessionFile.daemonDir, entry);
82
+ for (let i = 0; i < 5; i++) {
83
+ try {
84
+ await import_fs.default.promises.rm(userDataDir, { recursive: true });
85
+ if (entry.startsWith("ud-"))
86
+ deletedUserDataDir = true;
87
+ break;
88
+ } catch (e) {
89
+ if (e.code === "ENOENT")
90
+ break;
91
+ await new Promise((resolve) => setTimeout(resolve, 1e3));
92
+ if (i === 4)
93
+ throw e;
94
+ }
95
+ }
96
+ }
97
+ return { existed: true, deletedUserDataDir };
98
+ }
99
+ async _connect() {
100
+ return await new Promise((resolve) => {
101
+ const socket = import_net.default.createConnection(this.config.socketPath, () => {
102
+ resolve({ socket });
103
+ });
104
+ socket.on("error", (error) => {
105
+ if (import_os.default.platform() !== "win32")
106
+ void import_fs.default.promises.unlink(this.config.socketPath).catch(() => {
107
+ }).then(() => resolve({ error }));
108
+ else
109
+ resolve({ error });
110
+ });
111
+ });
112
+ }
113
+ async canConnect() {
114
+ const { socket } = await this._connect();
115
+ if (socket) {
116
+ socket.destroy();
117
+ return true;
118
+ }
119
+ return false;
120
+ }
121
+ static async startDaemon(clientInfo, cliArgs, mode) {
122
+ await import_fs.default.promises.mkdir(clientInfo.daemonProfilesDir, { recursive: true });
123
+ const cliPath = (0, import_package.libPath)("entry", "cliDaemon.js");
124
+ const sessionName = (0, import_registry.resolveSessionName)(cliArgs.session);
125
+ const errLog = import_path.default.join(clientInfo.daemonProfilesDir, sessionName + ".err");
126
+ const err = import_fs.default.openSync(errLog, "w");
127
+ const args = [
128
+ cliPath,
129
+ sessionName
130
+ ];
131
+ if (cliArgs.headed)
132
+ args.push("--headed");
133
+ if (cliArgs.extension)
134
+ args.push("--extension");
135
+ if (cliArgs.browser)
136
+ args.push(`--browser=${cliArgs.browser}`);
137
+ if (cliArgs.persistent)
138
+ args.push("--persistent");
139
+ if (cliArgs.profile)
140
+ args.push(`--profile=${cliArgs.profile}`);
141
+ if (cliArgs.config)
142
+ args.push(`--config=${cliArgs.config}`);
143
+ if (cliArgs.cdp)
144
+ args.push(`--cdp=${cliArgs.cdp}`);
145
+ if (cliArgs.endpoint)
146
+ args.push(`--endpoint=${cliArgs.endpoint}`);
147
+ else if (mode === "attach" && process.env.PLAYWRIGHT_CLI_SESSION)
148
+ args.push(`--endpoint=${process.env.PLAYWRIGHT_CLI_SESSION}`);
149
+ const child = (0, import_child_process.spawn)(process.execPath, args, {
150
+ detached: true,
151
+ stdio: ["ignore", "pipe", err],
152
+ cwd: process.cwd()
153
+ // Will be used as root.
154
+ });
155
+ let signalled = false;
156
+ const sigintHandler = () => {
157
+ signalled = true;
158
+ child.kill("SIGINT");
159
+ };
160
+ const sigtermHandler = () => {
161
+ signalled = true;
162
+ child.kill("SIGTERM");
163
+ };
164
+ process.on("SIGINT", sigintHandler);
165
+ process.on("SIGTERM", sigtermHandler);
166
+ let outLog = "";
167
+ const rejectWithPid = (reject, message) => reject(Object.assign(new Error(`Daemon pid=${child.pid}: ${message}`), { daemonPid: child.pid }));
168
+ await new Promise((resolve, reject) => {
169
+ child.stdout.on("data", (data) => {
170
+ outLog += data.toString();
171
+ if (!outLog.includes("<EOF>"))
172
+ return;
173
+ const errorMatch = outLog.match(/### Error\n([\s\S]*)<EOF>/);
174
+ const error = errorMatch ? errorMatch[1].trim() : void 0;
175
+ if (error) {
176
+ const errLogContent = import_fs.default.readFileSync(errLog, "utf-8");
177
+ rejectWithPid(reject, error + (errLogContent ? "\n" + errLogContent : ""));
178
+ }
179
+ const successMatch = outLog.match(/### Success\nDaemon listening on (.*)\n<EOF>/);
180
+ if (successMatch)
181
+ resolve();
182
+ });
183
+ child.on("close", (code) => {
184
+ if (!signalled) {
185
+ const errLogContent = import_fs.default.readFileSync(errLog, "utf-8");
186
+ rejectWithPid(reject, `Daemon process exited with code ${code}` + (errLogContent ? "\n" + errLogContent : ""));
187
+ }
188
+ });
189
+ });
190
+ process.off("SIGINT", sigintHandler);
191
+ process.off("SIGTERM", sigtermHandler);
192
+ child.stdout.destroy();
193
+ child.unref();
194
+ return { pid: child.pid, sessionName, endpoint: cliArgs.endpoint };
195
+ }
196
+ async _stopDaemon() {
197
+ const { socket } = await this._connect();
198
+ if (!socket)
199
+ return;
200
+ let error;
201
+ await SocketConnectionClient.sendAndClose(socket, "stop", {}).catch((e) => error = e);
202
+ if (error && !error?.message?.includes("Session closed"))
203
+ throw error;
204
+ }
205
+ async deleteSessionConfig() {
206
+ await import_fs.default.promises.rm(this._sessionFile.file).catch(() => {
207
+ });
208
+ }
209
+ }
210
+ class SocketConnectionClient {
211
+ constructor(socket) {
212
+ this._nextMessageId = 1;
213
+ this._callbacks = /* @__PURE__ */ new Map();
214
+ this._connection = new import_socketConnection.SocketConnection(socket);
215
+ this._connection.onmessage = (message) => this._onMessage(message);
216
+ this._connection.onclose = () => this._rejectCallbacks();
217
+ }
218
+ async send(method, params = {}) {
219
+ const messageId = this._nextMessageId++;
220
+ const message = {
221
+ id: messageId,
222
+ method,
223
+ params
224
+ };
225
+ const responsePromise = new Promise((resolve, reject) => {
226
+ this._callbacks.set(messageId, { resolve, reject, method, params });
227
+ });
228
+ const [result] = await Promise.all([responsePromise, this._connection.send(message)]);
229
+ return result;
230
+ }
231
+ static async sendAndClose(socket, method, params = {}) {
232
+ const connection = new SocketConnectionClient(socket);
233
+ try {
234
+ return await connection.send(method, params);
235
+ } finally {
236
+ connection.close();
237
+ }
238
+ }
239
+ close() {
240
+ this._connection.close();
241
+ }
242
+ _onMessage(object) {
243
+ if (object.id && this._callbacks.has(object.id)) {
244
+ const callback = this._callbacks.get(object.id);
245
+ this._callbacks.delete(object.id);
246
+ if (object.error)
247
+ callback.reject(new Error(object.error));
248
+ else
249
+ callback.resolve(object.result);
250
+ } else if (object.id) {
251
+ throw new Error(`Unexpected message id: ${object.id}`);
252
+ } else {
253
+ throw new Error(`Unexpected message without id: ${JSON.stringify(object)}`);
254
+ }
255
+ }
256
+ _rejectCallbacks() {
257
+ for (const callback of this._callbacks.values())
258
+ callback.reject(new Error("Session closed"));
259
+ this._callbacks.clear();
260
+ }
261
+ }
262
+ // Annotate the CommonJS export names for ESM import in node:
263
+ 0 && (module.exports = {
264
+ Session
265
+ });
@@ -0,0 +1,388 @@
1
+ ---
2
+ name: playwright-cli
3
+ description: Automate browser interactions, test web pages and work with Playwright tests.
4
+ allowed-tools: Bash(playwright-cli:*) Bash(npx:*) Bash(npm:*)
5
+ ---
6
+
7
+ # Browser Automation with playwright-cli
8
+
9
+ ## Quick start
10
+
11
+ ```bash
12
+ # open new browser
13
+ playwright-cli open
14
+ # navigate to a page
15
+ playwright-cli goto https://playwright.dev
16
+ # interact with the page using refs from the snapshot
17
+ playwright-cli click e15
18
+ playwright-cli type "page.click"
19
+ playwright-cli press Enter
20
+ # take a screenshot (rarely used, as snapshot is more common)
21
+ playwright-cli screenshot
22
+ # close the browser
23
+ playwright-cli close
24
+ ```
25
+
26
+ ## Commands
27
+
28
+ ### Core
29
+
30
+ ```bash
31
+ playwright-cli open
32
+ # open and navigate right away
33
+ playwright-cli open https://example.com/
34
+ playwright-cli goto https://playwright.dev
35
+ playwright-cli type "search query"
36
+ playwright-cli click e3
37
+ playwright-cli dblclick e7
38
+ # --submit presses Enter after filling the element
39
+ playwright-cli fill e5 "user@example.com" --submit
40
+ playwright-cli drag e2 e8
41
+ # drop files or data onto an element (from outside the page)
42
+ playwright-cli drop e4 --path=./image.png
43
+ playwright-cli drop e4 --data="text/plain=hello world"
44
+ playwright-cli hover e4
45
+ playwright-cli select e9 "option-value"
46
+ playwright-cli upload ./document.pdf
47
+ playwright-cli check e12
48
+ playwright-cli uncheck e12
49
+ playwright-cli snapshot
50
+ playwright-cli eval "document.title"
51
+ playwright-cli eval "el => el.textContent" e5
52
+ # get element id, class, or any attribute not visible in the snapshot
53
+ playwright-cli eval "el => el.id" e5
54
+ playwright-cli eval "el => el.getAttribute('data-testid')" e5
55
+ playwright-cli dialog-accept
56
+ playwright-cli dialog-accept "confirmation text"
57
+ playwright-cli dialog-dismiss
58
+ playwright-cli resize 1920 1080
59
+ playwright-cli close
60
+ ```
61
+
62
+ ### Navigation
63
+
64
+ ```bash
65
+ playwright-cli go-back
66
+ playwright-cli go-forward
67
+ playwright-cli reload
68
+ ```
69
+
70
+ ### Keyboard
71
+
72
+ ```bash
73
+ playwright-cli press Enter
74
+ playwright-cli press ArrowDown
75
+ playwright-cli keydown Shift
76
+ playwright-cli keyup Shift
77
+ ```
78
+
79
+ ### Mouse
80
+
81
+ ```bash
82
+ playwright-cli mousemove 150 300
83
+ playwright-cli mousedown
84
+ playwright-cli mousedown right
85
+ playwright-cli mouseup
86
+ playwright-cli mouseup right
87
+ playwright-cli mousewheel 0 100
88
+ ```
89
+
90
+ ### Save as
91
+
92
+ ```bash
93
+ playwright-cli screenshot
94
+ playwright-cli screenshot e5
95
+ playwright-cli screenshot --filename=page.png
96
+ playwright-cli pdf --filename=page.pdf
97
+ ```
98
+
99
+ ### Tabs
100
+
101
+ ```bash
102
+ playwright-cli tab-list
103
+ playwright-cli tab-new
104
+ playwright-cli tab-new https://example.com/page
105
+ playwright-cli tab-close
106
+ playwright-cli tab-close 2
107
+ playwright-cli tab-select 0
108
+ ```
109
+
110
+ ### Storage
111
+
112
+ ```bash
113
+ playwright-cli state-save
114
+ playwright-cli state-save auth.json
115
+ playwright-cli state-load auth.json
116
+
117
+ # Cookies
118
+ playwright-cli cookie-list
119
+ playwright-cli cookie-list --domain=example.com
120
+ playwright-cli cookie-get session_id
121
+ playwright-cli cookie-set session_id abc123
122
+ playwright-cli cookie-set session_id abc123 --domain=example.com --httpOnly --secure
123
+ playwright-cli cookie-delete session_id
124
+ playwright-cli cookie-clear
125
+
126
+ # LocalStorage
127
+ playwright-cli localstorage-list
128
+ playwright-cli localstorage-get theme
129
+ playwright-cli localstorage-set theme dark
130
+ playwright-cli localstorage-delete theme
131
+ playwright-cli localstorage-clear
132
+
133
+ # SessionStorage
134
+ playwright-cli sessionstorage-list
135
+ playwright-cli sessionstorage-get step
136
+ playwright-cli sessionstorage-set step 3
137
+ playwright-cli sessionstorage-delete step
138
+ playwright-cli sessionstorage-clear
139
+ ```
140
+
141
+ ### Network
142
+
143
+ ```bash
144
+ playwright-cli route "**/*.jpg" --status=404
145
+ playwright-cli route "https://api.example.com/**" --body='{"mock": true}'
146
+ playwright-cli route-list
147
+ playwright-cli unroute "**/*.jpg"
148
+ playwright-cli unroute
149
+ ```
150
+
151
+ ### DevTools
152
+
153
+ ```bash
154
+ playwright-cli console
155
+ playwright-cli console warning
156
+ playwright-cli requests
157
+ playwright-cli request 5
158
+ playwright-cli run-code "async page => await page.context().grantPermissions(['geolocation'])"
159
+ playwright-cli run-code --filename=script.js
160
+ playwright-cli tracing-start
161
+ playwright-cli tracing-stop
162
+ playwright-cli video-start video.webm
163
+ playwright-cli video-chapter "Chapter Title" --description="Details" --duration=2000
164
+ playwright-cli video-stop
165
+
166
+ # launch the dashboard for UI review / design feedback — user annotates the page, you receive the annotated screenshot, snapshot, and notes
167
+ playwright-cli show --annotate
168
+
169
+ # generate a Playwright locator for an element from its ref or selector
170
+ playwright-cli generate-locator e5 --raw
171
+
172
+ # show a persistent highlight overlay for an element, optionally with a custom style
173
+ playwright-cli highlight e5
174
+ playwright-cli highlight e5 --style="outline: 3px dashed red"
175
+ # hide a single element highlight, or all page highlights when no target is given
176
+ playwright-cli highlight e5 --hide
177
+ playwright-cli highlight --hide
178
+ ```
179
+
180
+ ## Raw output
181
+
182
+ The global `--raw` option strips page status, generated code, and snapshot sections from the output, returning only the result value. Use it to pipe command output into other tools. Commands that don't produce output return nothing.
183
+
184
+ ```bash
185
+ playwright-cli --raw eval "JSON.stringify(performance.timing)" | jq '.loadEventEnd - .navigationStart'
186
+ playwright-cli --raw eval "JSON.stringify([...document.querySelectorAll('a')].map(a => a.href))" > links.json
187
+ playwright-cli --raw snapshot > before.yml
188
+ playwright-cli click e5
189
+ playwright-cli --raw snapshot > after.yml
190
+ diff before.yml after.yml
191
+ TOKEN=$(playwright-cli --raw cookie-get session_id)
192
+ playwright-cli --raw localstorage-get theme
193
+ ```
194
+
195
+ For structured output wrapping every reply as JSON, pass --json
196
+ ```bash
197
+ playwright-cli list --json
198
+ ```
199
+
200
+ ## Open parameters
201
+ ```bash
202
+ # Use specific browser when creating session
203
+ playwright-cli open --browser=chrome
204
+ playwright-cli open --browser=firefox
205
+ playwright-cli open --browser=webkit
206
+ playwright-cli open --browser=msedge
207
+
208
+ # Use persistent profile (by default profile is in-memory)
209
+ playwright-cli open --persistent
210
+ # Use persistent profile with custom directory
211
+ playwright-cli open --profile=/path/to/profile
212
+
213
+ # Connect to browser via Playwright Extension
214
+ playwright-cli attach --extension=chrome
215
+
216
+ # Connect to a running Chrome or Edge by channel name
217
+ playwright-cli attach --cdp=chrome
218
+ playwright-cli attach --cdp=msedge
219
+
220
+ # Connect to a running browser via CDP endpoint
221
+ playwright-cli attach --cdp=http://localhost:9222
222
+
223
+ # Start with config file
224
+ playwright-cli open --config=my-config.json
225
+
226
+ # Close the browser
227
+ playwright-cli close
228
+ # Detach from an attached browser (leaves the external browser running)
229
+ playwright-cli -s=msedge detach
230
+ # Delete user data for the default session
231
+ playwright-cli delete-data
232
+ ```
233
+
234
+ ## Snapshots
235
+
236
+ After each command, playwright-cli provides a snapshot of the current browser state.
237
+
238
+ ```bash
239
+ > playwright-cli goto https://example.com
240
+ ### Page
241
+ - Page URL: https://example.com/
242
+ - Page Title: Example Domain
243
+ ### Snapshot
244
+ [Snapshot](.playwright-cli/page-2026-02-14T19-22-42-679Z.yml)
245
+ ```
246
+
247
+ You can also take a snapshot on demand using `playwright-cli snapshot` command. All the options below can be combined as needed.
248
+
249
+ ```bash
250
+ # default - save to a file with timestamp-based name
251
+ playwright-cli snapshot
252
+
253
+ # save to file, use when snapshot is a part of the workflow result
254
+ playwright-cli snapshot --filename=after-click.yaml
255
+
256
+ # snapshot an element instead of the whole page
257
+ playwright-cli snapshot "#main"
258
+
259
+ # limit snapshot depth for efficiency, take a partial snapshot afterwards
260
+ playwright-cli snapshot --depth=4
261
+ playwright-cli snapshot e34
262
+
263
+ # include each element's bounding box as [box=x,y,width,height]
264
+ playwright-cli snapshot --boxes
265
+ ```
266
+
267
+ ## Targeting elements
268
+
269
+ By default, use refs from the snapshot to interact with page elements.
270
+
271
+ ```bash
272
+ # get snapshot with refs
273
+ playwright-cli snapshot
274
+
275
+ # interact using a ref
276
+ playwright-cli click e15
277
+ ```
278
+
279
+ You can also use css selectors or Playwright locators.
280
+
281
+ ```bash
282
+ # css selector
283
+ playwright-cli click "#main > button.submit"
284
+
285
+ # role locator
286
+ playwright-cli click "getByRole('button', { name: 'Submit' })"
287
+
288
+ # test id
289
+ playwright-cli click "getByTestId('submit-button')"
290
+ ```
291
+
292
+ ## Browser Sessions
293
+
294
+ ```bash
295
+ # create new browser session named "mysession" with persistent profile
296
+ playwright-cli -s=mysession open example.com --persistent
297
+ # same with manually specified profile directory (use when requested explicitly)
298
+ playwright-cli -s=mysession open example.com --profile=/path/to/profile
299
+ playwright-cli -s=mysession click e6
300
+ playwright-cli -s=mysession close # stop a named browser
301
+ playwright-cli -s=mysession delete-data # delete user data for persistent session
302
+
303
+ playwright-cli list
304
+ # Close all browsers
305
+ playwright-cli close-all
306
+ # Forcefully kill all browser processes
307
+ playwright-cli kill-all
308
+ ```
309
+
310
+ ## Installation
311
+
312
+ If global `playwright-cli` command is not available, try a local version via `npx playwright-cli`:
313
+
314
+ ```bash
315
+ npx --no-install playwright-cli --version
316
+ ```
317
+
318
+ When local version is available, use `npx playwright-cli` in all commands. Otherwise, install `playwright-cli` as a global command:
319
+
320
+ ```bash
321
+ npm install -g @playwright/cli@latest
322
+ ```
323
+
324
+ ## Example: Form submission
325
+
326
+ ```bash
327
+ playwright-cli open https://example.com/form
328
+ playwright-cli snapshot
329
+
330
+ playwright-cli fill e1 "user@example.com"
331
+ playwright-cli fill e2 "password123"
332
+ playwright-cli click e3
333
+ playwright-cli snapshot
334
+ playwright-cli close
335
+ ```
336
+
337
+ ## Example: Multi-tab workflow
338
+
339
+ ```bash
340
+ playwright-cli open https://example.com
341
+ playwright-cli tab-new https://example.com/other
342
+ playwright-cli tab-list
343
+ playwright-cli tab-select 0
344
+ playwright-cli snapshot
345
+ playwright-cli close
346
+ ```
347
+
348
+ ## Example: Debugging with DevTools
349
+
350
+ ```bash
351
+ playwright-cli open https://example.com
352
+ playwright-cli click e4
353
+ playwright-cli fill e7 "test"
354
+ playwright-cli console
355
+ playwright-cli requests
356
+ playwright-cli close
357
+ ```
358
+
359
+ ```bash
360
+ playwright-cli open https://example.com
361
+ playwright-cli tracing-start
362
+ playwright-cli click e4
363
+ playwright-cli fill e7 "test"
364
+ playwright-cli tracing-stop
365
+ playwright-cli close
366
+ ```
367
+
368
+ ## Example: Interactive session
369
+
370
+ Ask the user for UI review or design feedback. The user draws boxes on the live page and types comments; you receive the annotated screenshot, the snapshot of the marked region, and the user's notes. Use this whenever the user asks for "UI review", "design feedback", or to "ask the user what they think / want / mean":
371
+
372
+ ```bash
373
+ playwright-cli open https://example.com
374
+ playwright-cli show --annotate
375
+ ```
376
+
377
+ ## Specific tasks
378
+
379
+ * **Running and Debugging Playwright tests** [references/playwright-tests.md](references/playwright-tests.md)
380
+ * **Request mocking** [references/request-mocking.md](references/request-mocking.md)
381
+ * **Running Playwright code** [references/running-code.md](references/running-code.md)
382
+ * **Browser session management** [references/session-management.md](references/session-management.md)
383
+ * **Spec-driven testing (plan / generate / heal)** [references/spec-driven-testing.md](references/spec-driven-testing.md)
384
+ * **Storage state (cookies, localStorage)** [references/storage-state.md](references/storage-state.md)
385
+ * **Test generation** [references/test-generation.md](references/test-generation.md)
386
+ * **Tracing** [references/tracing.md](references/tracing.md)
387
+ * **Video recording** [references/video-recording.md](references/video-recording.md)
388
+ * **Inspecting element attributes** [references/element-attributes.md](references/element-attributes.md)
@@ -0,0 +1,23 @@
1
+ # Inspecting Element Attributes
2
+
3
+ When the snapshot doesn't show an element's `id`, `class`, `data-*` attributes, or other DOM properties, use `eval` to inspect them.
4
+
5
+ ## Examples
6
+
7
+ ```bash
8
+ playwright-cli snapshot
9
+ # snapshot shows a button as e7 but doesn't reveal its id or data attributes
10
+
11
+ # get the element's id
12
+ playwright-cli eval "el => el.id" e7
13
+
14
+ # get all CSS classes
15
+ playwright-cli eval "el => el.className" e7
16
+
17
+ # get a specific attribute
18
+ playwright-cli eval "el => el.getAttribute('data-testid')" e7
19
+ playwright-cli eval "el => el.getAttribute('aria-label')" e7
20
+
21
+ # get a computed style property
22
+ playwright-cli eval "el => getComputedStyle(el).display" e7
23
+ ```