@checkly/playwright-core 1.48.22 → 1.51.11-beta.2

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 (307) hide show
  1. package/ThirdPartyNotices.txt +60 -48
  2. package/bin/reinstall_chrome_beta_linux.sh +10 -8
  3. package/bin/reinstall_chrome_stable_linux.sh +10 -8
  4. package/bin/reinstall_msedge_beta_linux.sh +17 -9
  5. package/bin/reinstall_msedge_dev_linux.sh +17 -9
  6. package/bin/reinstall_msedge_stable_linux.sh +17 -9
  7. package/browsers.json +33 -12
  8. package/index.js +0 -1
  9. package/lib/androidServerImpl.js +5 -5
  10. package/lib/browserServerImpl.js +18 -9
  11. package/lib/checkly/secretsFilter.js +1 -1
  12. package/lib/cli/driver.js +6 -6
  13. package/lib/cli/program.js +38 -43
  14. package/lib/cli/programWithTestStub.js +2 -1
  15. package/lib/client/android.js +37 -58
  16. package/lib/client/artifact.js +4 -7
  17. package/lib/client/browser.js +10 -15
  18. package/lib/client/browserContext.js +69 -62
  19. package/lib/client/browserType.js +30 -64
  20. package/lib/client/channelOwner.js +53 -68
  21. package/lib/client/clientHelper.js +4 -6
  22. package/lib/client/clientInstrumentation.js +2 -0
  23. package/lib/client/clientStackTrace.js +65 -0
  24. package/lib/client/connection.js +48 -41
  25. package/lib/client/consoleMessage.js +4 -7
  26. package/lib/client/electron.js +10 -10
  27. package/lib/client/elementHandle.js +32 -33
  28. package/lib/client/errors.js +2 -2
  29. package/lib/client/eventEmitter.js +5 -8
  30. package/lib/client/fetch.js +61 -62
  31. package/lib/client/fileUtils.js +31 -0
  32. package/lib/client/frame.js +22 -23
  33. package/lib/client/harRouter.js +7 -9
  34. package/lib/client/jsHandle.js +3 -4
  35. package/lib/client/localUtils.js +24 -0
  36. package/lib/client/locator.js +27 -13
  37. package/lib/client/network.js +44 -37
  38. package/lib/client/page.js +50 -41
  39. package/lib/client/platform.js +71 -0
  40. package/lib/client/playwright.js +21 -1
  41. package/lib/client/selectors.js +8 -2
  42. package/lib/client/stream.js +2 -21
  43. package/lib/client/timeoutSettings.js +65 -0
  44. package/lib/client/tracing.js +29 -7
  45. package/lib/client/video.js +2 -2
  46. package/lib/client/waiter.js +19 -16
  47. package/lib/client/webSocket.js +106 -0
  48. package/lib/client/worker.js +4 -4
  49. package/lib/client/writableStream.js +2 -21
  50. package/lib/generated/consoleApiSource.js +1 -1
  51. package/lib/generated/injectedScriptSource.js +1 -1
  52. package/lib/generated/pollingRecorderSource.js +1 -1
  53. package/lib/generated/recorderSource.js +7 -0
  54. package/lib/generated/webSocketMockSource.js +1 -1
  55. package/lib/inProcessFactory.js +8 -3
  56. package/lib/outofprocess.js +12 -8
  57. package/lib/protocol/debug.js +1 -1
  58. package/lib/protocol/validator.js +77 -11
  59. package/lib/protocol/validatorPrimitives.js +1 -2
  60. package/lib/remote/playwrightConnection.js +21 -12
  61. package/lib/remote/playwrightServer.js +22 -8
  62. package/lib/server/android/android.js +17 -14
  63. package/lib/server/android/backendAdb.js +14 -14
  64. package/lib/server/artifact.js +3 -3
  65. package/lib/server/bidi/bidiBrowser.js +11 -8
  66. package/lib/server/bidi/bidiChromium.js +5 -4
  67. package/lib/server/bidi/bidiConnection.js +1 -3
  68. package/lib/server/bidi/bidiExecutionContext.js +71 -25
  69. package/lib/server/bidi/bidiFirefox.js +4 -3
  70. package/lib/server/bidi/bidiInput.js +11 -12
  71. package/lib/server/bidi/bidiNetworkManager.js +11 -12
  72. package/lib/server/bidi/bidiOverCdp.js +2 -2
  73. package/lib/server/bidi/bidiPage.js +39 -66
  74. package/lib/server/bidi/third_party/bidiKeyboard.js +9 -7
  75. package/lib/server/bidi/third_party/firefoxPrefs.js +19 -3
  76. package/lib/server/browser.js +2 -2
  77. package/lib/server/browserContext.js +60 -55
  78. package/lib/server/browserType.js +22 -18
  79. package/lib/server/callLog.js +79 -0
  80. package/lib/server/chromium/chromium.js +20 -16
  81. package/lib/server/chromium/chromiumSwitches.js +32 -9
  82. package/lib/server/chromium/crBrowser.js +25 -24
  83. package/lib/server/chromium/crConnection.js +2 -2
  84. package/lib/server/chromium/crCoverage.js +1 -1
  85. package/lib/server/chromium/crDevTools.js +1 -1
  86. package/lib/server/chromium/crDragDrop.js +1 -1
  87. package/lib/server/chromium/crExecutionContext.js +26 -35
  88. package/lib/server/chromium/crInput.js +17 -6
  89. package/lib/server/chromium/crNetworkManager.js +3 -3
  90. package/lib/server/chromium/crPage.js +43 -55
  91. package/lib/server/chromium/crPdf.js +1 -1
  92. package/lib/server/chromium/crProtocolHelper.js +3 -3
  93. package/lib/server/chromium/crServiceWorker.js +2 -2
  94. package/lib/server/chromium/videoRecorder.js +2 -2
  95. package/lib/server/clock.js +1 -1
  96. package/lib/server/codegen/csharp.js +21 -16
  97. package/lib/server/codegen/java.js +17 -9
  98. package/lib/server/codegen/javascript.js +37 -7
  99. package/lib/server/codegen/jsonl.js +1 -1
  100. package/lib/server/codegen/languages.js +2 -2
  101. package/lib/server/codegen/python.js +14 -17
  102. package/lib/server/debugController.js +23 -45
  103. package/lib/server/debugger.js +1 -1
  104. package/lib/server/deviceDescriptors.js +1 -1
  105. package/lib/server/deviceDescriptorsSource.json +131 -131
  106. package/lib/server/dispatchers/androidDispatcher.js +14 -3
  107. package/lib/server/dispatchers/artifactDispatcher.js +3 -3
  108. package/lib/server/dispatchers/browserContextDispatcher.js +21 -32
  109. package/lib/server/dispatchers/browserTypeDispatcher.js +1 -1
  110. package/lib/server/dispatchers/cdpSessionDispatcher.js +1 -1
  111. package/lib/server/dispatchers/debugControllerDispatcher.js +5 -3
  112. package/lib/server/dispatchers/dispatcher.js +27 -25
  113. package/lib/server/dispatchers/electronDispatcher.js +3 -3
  114. package/lib/server/dispatchers/elementHandlerDispatcher.js +7 -2
  115. package/lib/server/dispatchers/frameDispatcher.js +9 -3
  116. package/lib/server/dispatchers/jsonPipeDispatcher.js +2 -2
  117. package/lib/server/dispatchers/localUtilsDispatcher.js +25 -291
  118. package/lib/server/dispatchers/networkDispatchers.js +3 -3
  119. package/lib/server/dispatchers/pageDispatcher.js +10 -8
  120. package/lib/server/dispatchers/playwrightDispatcher.js +5 -5
  121. package/lib/server/dispatchers/streamDispatcher.js +4 -3
  122. package/lib/server/dispatchers/tracingDispatcher.js +10 -0
  123. package/lib/server/dispatchers/webSocketRouteDispatcher.js +18 -18
  124. package/lib/server/dispatchers/writableStreamDispatcher.js +5 -6
  125. package/lib/server/dom.js +102 -48
  126. package/lib/server/download.js +1 -1
  127. package/lib/server/electron/electron.js +17 -16
  128. package/lib/server/errors.js +1 -1
  129. package/lib/server/fetch.js +49 -33
  130. package/lib/server/fileUploadUtils.js +7 -4
  131. package/lib/server/firefox/ffBrowser.js +17 -9
  132. package/lib/server/firefox/ffConnection.js +1 -1
  133. package/lib/server/firefox/ffExecutionContext.js +25 -29
  134. package/lib/server/firefox/ffInput.js +15 -4
  135. package/lib/server/firefox/ffNetworkManager.js +3 -3
  136. package/lib/server/firefox/ffPage.js +29 -50
  137. package/lib/server/firefox/firefox.js +7 -9
  138. package/lib/server/frameSelectors.js +1 -1
  139. package/lib/server/frames.js +65 -55
  140. package/lib/server/har/harRecorder.js +4 -4
  141. package/lib/server/har/harTracer.js +8 -9
  142. package/lib/server/harBackend.js +157 -0
  143. package/lib/server/helper.js +2 -2
  144. package/lib/server/index.js +1 -14
  145. package/lib/server/input.js +3 -4
  146. package/lib/server/instrumentation.js +2 -2
  147. package/lib/server/isomorphic/utilityScriptSerializers.js +3 -0
  148. package/lib/server/javascript.js +26 -33
  149. package/lib/server/launchApp.js +7 -7
  150. package/lib/server/localUtils.js +203 -0
  151. package/lib/server/network.js +5 -5
  152. package/lib/server/page.js +76 -37
  153. package/lib/server/pipeTransport.js +1 -1
  154. package/lib/server/playwright.js +5 -5
  155. package/lib/server/progress.js +1 -4
  156. package/lib/server/protocolError.js +1 -1
  157. package/lib/server/recorder/chat.js +177 -0
  158. package/lib/server/recorder/codeGenerator.js +154 -0
  159. package/lib/server/recorder/contextRecorder.js +9 -18
  160. package/lib/server/recorder/csharp.js +311 -0
  161. package/lib/server/recorder/java.js +249 -0
  162. package/lib/server/recorder/javascript.js +230 -0
  163. package/lib/server/recorder/jsonl.js +48 -0
  164. package/lib/server/recorder/language.js +45 -0
  165. package/lib/server/recorder/python.js +276 -0
  166. package/lib/server/recorder/recorderActions.js +6 -0
  167. package/lib/server/recorder/recorderApp.js +25 -28
  168. package/lib/server/recorder/recorderCollection.js +9 -21
  169. package/lib/server/recorder/recorderInTraceViewer.js +1 -1
  170. package/lib/server/recorder/recorderRunner.js +7 -3
  171. package/lib/server/recorder/recorderUtils.js +5 -28
  172. package/lib/server/recorder/throttledFile.js +3 -4
  173. package/lib/server/recorder/utils.js +46 -0
  174. package/lib/server/recorder.js +83 -43
  175. package/lib/server/registry/browserFetcher.js +10 -8
  176. package/lib/server/registry/dependencies.js +20 -20
  177. package/lib/server/registry/index.js +215 -61
  178. package/lib/server/registry/nativeDeps.js +10 -4
  179. package/lib/server/registry/oopDownloadBrowserMain.js +3 -3
  180. package/lib/server/screenshotter.js +1 -1
  181. package/lib/server/selectors.js +3 -3
  182. package/lib/server/socksClientCertificatesInterceptor.js +8 -8
  183. package/lib/server/socksInterceptor.js +8 -5
  184. package/lib/server/storageScript.js +160 -0
  185. package/lib/server/timeoutSettings.js +74 -0
  186. package/lib/server/trace/recorder/snapshotter.js +10 -20
  187. package/lib/server/trace/recorder/snapshotterInjected.js +26 -1
  188. package/lib/server/trace/recorder/tracing.js +108 -45
  189. package/lib/server/trace/test/inMemorySnapshotter.js +6 -6
  190. package/lib/server/trace/viewer/traceViewer.js +21 -7
  191. package/lib/server/transport.js +3 -2
  192. package/lib/server/utils/ascii.js +31 -0
  193. package/lib/server/utils/comparators.js +159 -0
  194. package/lib/server/utils/crypto.js +171 -0
  195. package/lib/server/utils/debug.js +38 -0
  196. package/lib/server/utils/debugLogger.js +93 -0
  197. package/lib/server/utils/env.js +53 -0
  198. package/lib/server/utils/eventsHelper.js +38 -0
  199. package/lib/server/utils/expectUtils.js +33 -0
  200. package/lib/server/utils/fileUtils.js +204 -0
  201. package/lib/server/utils/happyEyeballs.js +207 -0
  202. package/lib/server/utils/hostPlatform.js +145 -0
  203. package/lib/server/utils/httpServer.js +233 -0
  204. package/lib/server/utils/image_tools/colorUtils.js +98 -0
  205. package/lib/server/utils/image_tools/compare.js +108 -0
  206. package/lib/server/utils/image_tools/imageChannel.js +70 -0
  207. package/lib/server/utils/image_tools/stats.js +102 -0
  208. package/lib/server/utils/linuxUtils.js +58 -0
  209. package/lib/server/utils/network.js +160 -0
  210. package/lib/server/utils/nodePlatform.js +140 -0
  211. package/lib/server/utils/pipeTransport.js +82 -0
  212. package/lib/server/utils/processLauncher.js +248 -0
  213. package/lib/server/utils/profiler.js +52 -0
  214. package/lib/server/utils/socksProxy.js +570 -0
  215. package/lib/server/utils/spawnAsync.js +45 -0
  216. package/lib/server/utils/task.js +58 -0
  217. package/lib/server/utils/userAgent.js +91 -0
  218. package/lib/server/utils/wsServer.js +128 -0
  219. package/lib/server/utils/zipFile.js +75 -0
  220. package/lib/server/utils/zones.js +54 -0
  221. package/lib/server/webkit/webkit.js +4 -4
  222. package/lib/server/webkit/wkBrowser.js +10 -10
  223. package/lib/server/webkit/wkConnection.js +1 -1
  224. package/lib/server/webkit/wkExecutionContext.js +26 -30
  225. package/lib/server/webkit/wkInput.js +17 -7
  226. package/lib/server/webkit/wkInterceptableRequest.js +2 -2
  227. package/lib/server/webkit/wkPage.js +80 -66
  228. package/lib/server/webkit/wkProvisionalPage.js +1 -1
  229. package/lib/server/webkit/wkWorkers.js +2 -2
  230. package/lib/utils/fileUtils.js +1 -1
  231. package/lib/utils/glob.js +84 -0
  232. package/lib/utils/isomorphic/ariaSnapshot.js +392 -0
  233. package/lib/utils/isomorphic/assert.js +25 -0
  234. package/lib/utils/isomorphic/colors.js +65 -0
  235. package/lib/utils/isomorphic/cssParser.js +5 -5
  236. package/lib/utils/isomorphic/headers.js +52 -0
  237. package/lib/utils/isomorphic/locatorGenerators.js +38 -8
  238. package/lib/utils/isomorphic/locatorParser.js +19 -13
  239. package/lib/utils/isomorphic/manualPromise.js +107 -0
  240. package/lib/utils/isomorphic/mimeType.js +11 -3
  241. package/lib/utils/isomorphic/multimap.js +73 -0
  242. package/lib/utils/isomorphic/rtti.js +41 -0
  243. package/lib/utils/isomorphic/semaphore.js +51 -0
  244. package/lib/utils/isomorphic/stackTrace.js +169 -0
  245. package/lib/utils/isomorphic/stringUtils.js +31 -1
  246. package/lib/utils/isomorphic/time.js +25 -0
  247. package/lib/utils/isomorphic/timeoutRunner.js +66 -0
  248. package/lib/utils/isomorphic/traceUtils.js +23 -0
  249. package/lib/utils/isomorphic/types.js +5 -0
  250. package/lib/utils/isomorphic/urlMatch.js +7 -5
  251. package/lib/utils/mimeType.js +30 -0
  252. package/lib/utils/stackTrace.js +1 -1
  253. package/lib/utils.js +447 -0
  254. package/lib/utilsBundle.js +4 -29
  255. package/lib/utilsBundleImpl/index.js +188 -33
  256. package/lib/vite/htmlReport/index.html +20 -17
  257. package/lib/vite/recorder/assets/codeMirrorModule-B9YMkrwa.js +24 -0
  258. package/lib/vite/recorder/assets/index-ELPgmkwA.js +184 -0
  259. package/lib/vite/recorder/assets/{index-BW-aOBcL.css → index-eHBmevrY.css} +1 -1
  260. package/lib/vite/recorder/index.html +2 -2
  261. package/lib/vite/traceViewer/assets/codeMirrorModule-gU1OOCQO.js +24 -0
  262. package/lib/vite/traceViewer/assets/defaultSettingsView-B5n_FjMx.js +1 -0
  263. package/lib/vite/traceViewer/assets/inspectorTab-6Tru8Mn_.js +235 -0
  264. package/lib/vite/traceViewer/assets/workbench-B_Nj4NA2.js +25 -0
  265. package/lib/vite/traceViewer/assets/{xtermModule-BeNbaIVa.js → xtermModule-BoAIEibi.js} +7 -7
  266. package/lib/vite/traceViewer/defaultSettingsView.CO3FR0CX.css +1 -0
  267. package/lib/vite/traceViewer/{embedded.BkvOrz5Z.js → embedded.DpNPH6mk.js} +2 -2
  268. package/lib/vite/traceViewer/embedded.html +6 -6
  269. package/lib/vite/traceViewer/index.CuE3SYGw.js +2 -0
  270. package/lib/vite/traceViewer/index.html +27 -9
  271. package/lib/vite/traceViewer/inspectorTab.CXDulcFG.css +1 -0
  272. package/lib/vite/traceViewer/{recorder.DNMfnSiu.js → recorder.BD-uZJs7.js} +2 -2
  273. package/lib/vite/traceViewer/recorder.html +4 -4
  274. package/lib/vite/traceViewer/sw.bundle.js +7888 -3
  275. package/lib/vite/traceViewer/{uiMode.CAYqod-m.css → uiMode.BatfzHMG.css} +1 -1
  276. package/lib/vite/traceViewer/uiMode.DHrNgddz.js +5 -0
  277. package/lib/vite/traceViewer/uiMode.html +8 -7
  278. package/lib/vite/traceViewer/workbench.B9vIAzH9.css +1 -0
  279. package/lib/zipBundleImpl.js +4 -4
  280. package/package.json +7 -7
  281. package/types/protocol.d.ts +820 -153
  282. package/types/types.d.ts +285 -82
  283. package/bin/PrintDeps.exe +0 -0
  284. package/bin/README.md +0 -2
  285. package/lib/vite/recorder/assets/codeMirrorModule-d0KhC1qL.js +0 -24
  286. package/lib/vite/recorder/assets/index-Bxxcmxlu.js +0 -42
  287. package/lib/vite/traceViewer/assets/codeMirrorModule-pBPtArIT.js +0 -24
  288. package/lib/vite/traceViewer/assets/codeMirrorModule-tzBrK1V4.js +0 -24
  289. package/lib/vite/traceViewer/assets/inspectorTab-BuJ3wAX_.js +0 -64
  290. package/lib/vite/traceViewer/assets/inspectorTab-Soeeuvzv.js +0 -64
  291. package/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +0 -1
  292. package/lib/vite/traceViewer/assets/workbench-DdmJ9AJV.js +0 -9
  293. package/lib/vite/traceViewer/assets/workbench-lypYlf00.js +0 -9
  294. package/lib/vite/traceViewer/embedded.DInvAijy.js +0 -2
  295. package/lib/vite/traceViewer/index.Dha3cgqs.js +0 -2
  296. package/lib/vite/traceViewer/index._Iolt-uE.js +0 -2
  297. package/lib/vite/traceViewer/inspectorTab.DLjBDrQR.css +0 -1
  298. package/lib/vite/traceViewer/recorder.DTSaNaly.js +0 -2
  299. package/lib/vite/traceViewer/uiMode.BM7yhjzl.js +0 -5
  300. package/lib/vite/traceViewer/uiMode.Cr1tvTWS.js +0 -5
  301. package/lib/vite/traceViewer/workbench.DlsCx8k5.css +0 -1
  302. /package/lib/vite/recorder/assets/{codeMirrorModule-ez37Vkbh.css → codeMirrorModule-C3UTv-Ge.css} +0 -0
  303. /package/lib/vite/traceViewer/{codeMirrorModule.ez37Vkbh.css → codeMirrorModule.C3UTv-Ge.css} +0 -0
  304. /package/lib/vite/traceViewer/{embedded.w7WN2u1R.css → embedded.mLhjB5IF.css} +0 -0
  305. /package/lib/vite/traceViewer/{index.CrbWWHbf.css → index.CFOW-Ezb.css} +0 -0
  306. /package/lib/vite/traceViewer/{recorder.B_SY1GJM.css → recorder.tn0RQdqM.css} +0 -0
  307. /package/lib/vite/traceViewer/{xtermModule.DSXBckUd.css → xtermModule.Beg8tuEN.css} +0 -0
@@ -4,15 +4,15 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.RecorderApp = exports.EmptyRecorderApp = void 0;
7
+ var _events = require("events");
7
8
  var _fs = _interopRequireDefault(require("fs"));
8
9
  var _path = _interopRequireDefault(require("path"));
9
- var _progress = require("../progress");
10
- var _events = require("events");
11
- var _instrumentation = require("../instrumentation");
12
- var _utils = require("../../utils");
10
+ var _debug = require("../utils/debug");
13
11
  var _utilsBundle = require("../../utilsBundle");
12
+ var _instrumentation = require("../instrumentation");
14
13
  var _launchApp = require("../launchApp");
15
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+ var _progress = require("../progress");
15
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
16
  /**
17
17
  * Copyright (c) Microsoft Corporation.
18
18
  *
@@ -38,9 +38,9 @@ class EmptyRecorderApp extends _events.EventEmitter {
38
38
  async setPaused(paused) {}
39
39
  async setMode(mode) {}
40
40
  async setRunningFile(file) {}
41
- async setSelector(selector, userGesture) {}
41
+ async elementPicked(elementInfo, userGesture) {}
42
42
  async updateCallLogs(callLogs) {}
43
- async setSources(sources) {}
43
+ async setSources(sources, primaryPageURL) {}
44
44
  async setActions(actions, sources) {}
45
45
  }
46
46
  exports.EmptyRecorderApp = EmptyRecorderApp;
@@ -87,7 +87,7 @@ class RecorderApp extends _events.EventEmitter {
87
87
  }).catch(() => {});
88
88
  });
89
89
  const mainFrame = this._page.mainFrame();
90
- await mainFrame.goto((0, _instrumentation.serverSideCallMetadata)(), 'https://playwright/index.html');
90
+ await mainFrame.goto((0, _instrumentation.serverSideCallMetadata)(), process.env.PW_HMR ? 'http://localhost:44225' : 'https://playwright/index.html');
91
91
  }
92
92
  static factory(context) {
93
93
  return async recorder => {
@@ -117,8 +117,8 @@ class RecorderApp extends _events.EventEmitter {
117
117
  },
118
118
  persistentContextOptions: {
119
119
  noDefaultViewport: true,
120
- headless: !!process.env.PWTEST_CLI_HEADLESS || (0, _utils.isUnderTest)() && !headed,
121
- useWebSocket: (0, _utils.isUnderTest)(),
120
+ headless: !!process.env.PWTEST_CLI_HEADLESS || (0, _debug.isUnderTest)() && !headed,
121
+ useWebSocket: (0, _debug.isUnderTest)(),
122
122
  handleSIGINT: recorder.handleSIGINT,
123
123
  executablePath: inspectedContext._browser.options.isChromium ? inspectedContext._browser.options.customExecutablePath : undefined
124
124
  }
@@ -152,12 +152,18 @@ class RecorderApp extends _events.EventEmitter {
152
152
  isFunction: true
153
153
  }, paused).catch(() => {});
154
154
  }
155
- async setSources(sources) {
156
- await this._page.mainFrame().evaluateExpression((sources => {
157
- window.playwrightSetSources(sources);
155
+ async setSources(sources, primaryPageURL) {
156
+ await this._page.mainFrame().evaluateExpression((({
157
+ sources,
158
+ primaryPageURL
159
+ }) => {
160
+ window.playwrightSetSources(sources, primaryPageURL);
158
161
  }).toString(), {
159
162
  isFunction: true
160
- }, sources).catch(() => {});
163
+ }, {
164
+ sources,
165
+ primaryPageURL
166
+ }).catch(() => {});
161
167
 
162
168
  // Testing harness for runCLI mode.
163
169
  if (process.env.PWTEST_CLI_IS_UNDER_TEST && sources.length) {
@@ -165,23 +171,14 @@ class RecorderApp extends _events.EventEmitter {
165
171
  }
166
172
  }
167
173
  async setActions(actions, sources) {}
168
- async setSelector(selector, userGesture) {
169
- if (userGesture) {
170
- var _this$_recorder;
171
- if (((_this$_recorder = this._recorder) === null || _this$_recorder === void 0 ? void 0 : _this$_recorder.mode()) === 'inspecting') {
172
- this._recorder.setMode('standby');
173
- this._page.bringToFront();
174
- } else {
175
- var _this$_recorder2;
176
- (_this$_recorder2 = this._recorder) === null || _this$_recorder2 === void 0 || _this$_recorder2.setMode('recording');
177
- }
178
- }
179
- await this._page.mainFrame().evaluateExpression((data => {
180
- window.playwrightSetSelector(data.selector, data.userGesture);
174
+ async elementPicked(elementInfo, userGesture) {
175
+ if (userGesture) this._page.bringToFront();
176
+ await this._page.mainFrame().evaluateExpression((param => {
177
+ window.playwrightElementPicked(param.elementInfo, param.userGesture);
181
178
  }).toString(), {
182
179
  isFunction: true
183
180
  }, {
184
- selector,
181
+ elementInfo,
185
182
  userGesture
186
183
  }).catch(() => {});
187
184
  }
@@ -5,11 +5,10 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.RecorderCollection = void 0;
7
7
  var _events = require("events");
8
- var _time = require("../../utils/time");
9
- var _recorderUtils = require("./recorderUtils");
10
- var _errors = require("../errors");
11
8
  var _recorderRunner = require("./recorderRunner");
12
- var _debug = require("../../utils/debug");
9
+ var _recorderUtils = require("./recorderUtils");
10
+ var _debug = require("../utils/debug");
11
+ var _time = require("../../utils/isomorphic/time");
13
12
  /**
14
13
  * Copyright (c) Microsoft Corporation.
15
14
  *
@@ -36,14 +35,14 @@ class RecorderCollection extends _events.EventEmitter {
36
35
  }
37
36
  restart() {
38
37
  this._actions = [];
39
- this._fireChange();
38
+ this.emit('change', []);
40
39
  }
41
40
  setEnabled(enabled) {
42
41
  this._enabled = enabled;
43
42
  }
44
43
  async performAction(actionInContext) {
45
- await this._addAction(actionInContext, async callMetadata => {
46
- await (0, _recorderRunner.performAction)(callMetadata, this._pageAliases, actionInContext);
44
+ await this._addAction(actionInContext, async () => {
45
+ await (0, _recorderRunner.performAction)(this._pageAliases, actionInContext);
47
46
  });
48
47
  }
49
48
  addRecordedAction(actionInContext) {
@@ -61,21 +60,10 @@ class RecorderCollection extends _events.EventEmitter {
61
60
  this._fireChange();
62
61
  return;
63
62
  }
64
- const {
65
- callMetadata,
66
- mainFrame
67
- } = (0, _recorderUtils.callMetadataForAction)(this._pageAliases, actionInContext);
68
- await mainFrame.instrumentation.onBeforeCall(mainFrame, callMetadata);
69
63
  this._actions.push(actionInContext);
70
64
  this._fireChange();
71
- const error = await (callback === null || callback === void 0 ? void 0 : callback(callMetadata).catch(e => e));
72
- callMetadata.endTime = (0, _time.monotonicTime)();
73
- actionInContext.endTime = callMetadata.endTime;
74
- callMetadata.error = error ? (0, _errors.serializeError)(error) : undefined;
75
- // Do not wait for onAfterCall so that performAction returned immediately after the action.
76
- mainFrame.instrumentation.onAfterCall(mainFrame, callMetadata).then(() => {
77
- this._fireChange();
78
- }).catch(() => {});
65
+ await (callback === null || callback === void 0 ? void 0 : callback().catch());
66
+ actionInContext.endTime = (0, _time.monotonicTime)();
79
67
  }
80
68
  signal(pageAlias, frame, signal) {
81
69
  if (!this._enabled) return;
@@ -84,7 +72,7 @@ class RecorderCollection extends _events.EventEmitter {
84
72
  const lastAction = this._actions[this._actions.length - 1];
85
73
  const signalThreshold = (0, _debug.isUnderTest)() ? 500 : 5000;
86
74
  let generateGoto = false;
87
- if (!lastAction) generateGoto = true;else if (lastAction.action.name !== 'click' && lastAction.action.name !== 'press') generateGoto = true;else if (timestamp - lastAction.startTime > signalThreshold) generateGoto = true;
75
+ if (!lastAction) generateGoto = true;else if (lastAction.action.name !== 'click' && lastAction.action.name !== 'press' && lastAction.action.name !== 'fill') generateGoto = true;else if (timestamp - lastAction.startTime > signalThreshold) generateGoto = true;
88
76
  if (generateGoto) {
89
77
  this.addRecordedAction({
90
78
  frame: {
@@ -8,7 +8,7 @@ var _path = _interopRequireDefault(require("path"));
8
8
  var _events = require("events");
9
9
  var _traceViewer = require("../trace/viewer/traceViewer");
10
10
  var _manualPromise = require("../../utils/manualPromise");
11
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
12
  /**
13
13
  * Copyright (c) Microsoft Corporation.
14
14
  *
@@ -7,8 +7,8 @@ exports.performAction = performAction;
7
7
  exports.toClickOptions = toClickOptions;
8
8
  var _utils = require("../../utils");
9
9
  var _language = require("../codegen/language");
10
+ var _instrumentation = require("../instrumentation");
10
11
  var _recorderUtils = require("./recorderUtils");
11
- var _recorderUtils2 = require("../../utils/isomorphic/recorderUtils");
12
12
  /**
13
13
  * Copyright (c) Microsoft Corporation.
14
14
  *
@@ -25,7 +25,8 @@ var _recorderUtils2 = require("../../utils/isomorphic/recorderUtils");
25
25
  * limitations under the License.
26
26
  */
27
27
 
28
- async function performAction(callMetadata, pageAliases, actionInContext) {
28
+ async function performAction(pageAliases, actionInContext) {
29
+ const callMetadata = (0, _instrumentation.serverSideCallMetadata)();
29
30
  const mainFrame = (0, _recorderUtils.mainFrameForAction)(pageAliases, actionInContext);
30
31
  const {
31
32
  action
@@ -42,7 +43,7 @@ async function performAction(callMetadata, pageAliases, actionInContext) {
42
43
  await mainFrame._page.close(callMetadata);
43
44
  return;
44
45
  }
45
- const selector = (0, _recorderUtils2.buildFullSelector)(actionInContext.frame.framePath, action.selector);
46
+ const selector = (0, _recorderUtils.buildFullSelector)(actionInContext.frame.framePath, action.selector);
46
47
  if (action.name === 'click') {
47
48
  const options = toClickOptions(action);
48
49
  await mainFrame.click(callMetadata, selector, {
@@ -105,6 +106,9 @@ async function performAction(callMetadata, pageAliases, actionInContext) {
105
106
  await mainFrame.expect(callMetadata, selector, {
106
107
  selector,
107
108
  expression: 'to.be.checked',
109
+ expectedValue: {
110
+ checked: action.checked
111
+ },
108
112
  isNot: !action.checked,
109
113
  timeout: kActionTimeout
110
114
  });
@@ -3,13 +3,11 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.callMetadataForAction = callMetadataForAction;
6
+ exports.buildFullSelector = buildFullSelector;
7
7
  exports.collapseActions = collapseActions;
8
8
  exports.frameForAction = frameForAction;
9
9
  exports.mainFrameForAction = mainFrameForAction;
10
10
  exports.metadataToCallLog = metadataToCallLog;
11
- var _utils = require("../../utils");
12
- var _recorderUtils = require("../../utils/isomorphic/recorderUtils");
13
11
  /**
14
12
  * Copyright (c) Microsoft Corporation.
15
13
  *
@@ -26,6 +24,9 @@ var _recorderUtils = require("../../utils/isomorphic/recorderUtils");
26
24
  * limitations under the License.
27
25
  */
28
26
 
27
+ function buildFullSelector(framePath, selector) {
28
+ return [...framePath, selector].join(' >> internal:control=enter-frame >> ');
29
+ }
29
30
  function metadataToCallLog(metadata, status) {
30
31
  var _metadata$params, _metadata$params2, _metadata$error;
31
32
  let title = metadata.apiName || metadata.method;
@@ -64,35 +65,11 @@ async function frameForAction(pageAliases, actionInContext, action) {
64
65
  const pageAlias = actionInContext.frame.pageAlias;
65
66
  const page = (_find2 = [...pageAliases.entries()].find(([, alias]) => pageAlias === alias)) === null || _find2 === void 0 ? void 0 : _find2[0];
66
67
  if (!page) throw new Error('Internal error: page not found');
67
- const fullSelector = (0, _recorderUtils.buildFullSelector)(actionInContext.frame.framePath, action.selector);
68
+ const fullSelector = buildFullSelector(actionInContext.frame.framePath, action.selector);
68
69
  const result = await page.mainFrame().selectors.resolveFrameForSelector(fullSelector);
69
70
  if (!result) throw new Error('Internal error: frame not found');
70
71
  return result.frame;
71
72
  }
72
- function callMetadataForAction(pageAliases, actionInContext) {
73
- const mainFrame = mainFrameForAction(pageAliases, actionInContext);
74
- const {
75
- method,
76
- params
77
- } = (0, _recorderUtils.traceParamsForAction)(actionInContext);
78
- const callMetadata = {
79
- id: `call@${(0, _utils.createGuid)()}`,
80
- apiName: 'page.' + method,
81
- objectId: mainFrame.guid,
82
- pageId: mainFrame._page.guid,
83
- frameId: mainFrame.guid,
84
- startTime: actionInContext.startTime,
85
- endTime: 0,
86
- type: 'Frame',
87
- method,
88
- params,
89
- log: []
90
- };
91
- return {
92
- callMetadata,
93
- mainFrame
94
- };
95
- }
96
73
  function collapseActions(actions) {
97
74
  const result = [];
98
75
  for (const action of actions) {
@@ -4,9 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.ThrottledFile = void 0;
7
- var fs = _interopRequireWildcard(require("fs"));
8
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
9
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
7
+ var _fs = _interopRequireDefault(require("fs"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
9
  /**
11
10
  * Copyright (c) Microsoft Corporation.
12
11
  *
@@ -39,7 +38,7 @@ class ThrottledFile {
39
38
  clearTimeout(this._timer);
40
39
  this._timer = undefined;
41
40
  }
42
- if (this._text) fs.writeFileSync(this._file, this._text);
41
+ if (this._text) _fs.default.writeFileSync(this._file, this._text);
43
42
  this._text = undefined;
44
43
  }
45
44
  }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.toClickOptions = toClickOptions;
7
+ exports.toModifiers = toModifiers;
8
+ /**
9
+ * Copyright (c) Microsoft Corporation.
10
+ *
11
+ * Licensed under the Apache License, Version 2.0 (the "License");
12
+ * you may not use this file except in compliance with the License.
13
+ * You may obtain a copy of the License at
14
+ *
15
+ * http://www.apache.org/licenses/LICENSE-2.0
16
+ *
17
+ * Unless required by applicable law or agreed to in writing, software
18
+ * distributed under the License is distributed on an "AS IS" BASIS,
19
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20
+ * See the License for the specific language governing permissions and
21
+ * limitations under the License.
22
+ */
23
+
24
+ function toClickOptions(action) {
25
+ let method = 'click';
26
+ if (action.clickCount === 2) method = 'dblclick';
27
+ const modifiers = toModifiers(action.modifiers);
28
+ const options = {};
29
+ if (action.button !== 'left') options.button = action.button;
30
+ if (modifiers.length) options.modifiers = modifiers;
31
+ if (action.clickCount > 2) options.clickCount = action.clickCount;
32
+ if (action.position) options.position = action.position;
33
+ return {
34
+ method,
35
+ options
36
+ };
37
+ }
38
+ function toModifiers(modifiers) {
39
+ const result = [];
40
+ if (modifiers & 1) result.push('Alt');
41
+ if (modifiers & 2) result.push('Control');
42
+ if (modifiers & 4) result.push('Meta');
43
+ if (modifiers & 8) result.push('Shift');
44
+ return result;
45
+ }
46
+ //# sourceMappingURL=utils.js.map
@@ -4,17 +4,18 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Recorder = void 0;
7
- var fs = _interopRequireWildcard(require("fs"));
7
+ var _fs = _interopRequireDefault(require("fs"));
8
8
  var consoleApiSource = _interopRequireWildcard(require("../generated/consoleApiSource"));
9
9
  var _utils = require("../utils");
10
- var _locatorParser = require("../utils/isomorphic/locatorParser");
11
10
  var _browserContext = require("./browserContext");
12
11
  var _debugger = require("./debugger");
13
12
  var _contextRecorder = require("./recorder/contextRecorder");
14
13
  var _recorderUtils = require("./recorder/recorderUtils");
15
- var _recorderUtils2 = require("../utils/isomorphic/recorderUtils");
14
+ var _locatorParser = require("../utils/isomorphic/locatorParser");
15
+ var _selectorParser = require("../utils/isomorphic/selectorParser");
16
16
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
17
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
17
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
18
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
18
19
  /**
19
20
  * Copyright (c) Microsoft Corporation.
20
21
  *
@@ -35,30 +36,30 @@ const recorderSymbol = Symbol('recorderSymbol');
35
36
  class Recorder {
36
37
  static async showInspector(context, params, recorderAppFactory) {
37
38
  if ((0, _utils.isUnderTest)()) params.language = process.env.TEST_INSPECTOR_LANGUAGE;
38
- return await Recorder.show('actions', context, recorderAppFactory, params);
39
+ return await Recorder.show(context, recorderAppFactory, params);
39
40
  }
40
41
  static showInspectorNoReply(context, recorderAppFactory) {
41
42
  Recorder.showInspector(context, {}, recorderAppFactory).catch(() => {});
42
43
  }
43
- static show(codegenMode, context, recorderAppFactory, params) {
44
+ static show(context, recorderAppFactory, params) {
44
45
  let recorderPromise = context[recorderSymbol];
45
46
  if (!recorderPromise) {
46
- recorderPromise = Recorder._create(codegenMode, context, recorderAppFactory, params);
47
+ recorderPromise = Recorder._create(context, recorderAppFactory, params);
47
48
  context[recorderSymbol] = recorderPromise;
48
49
  }
49
50
  return recorderPromise;
50
51
  }
51
- static async _create(codegenMode, context, recorderAppFactory, params = {}) {
52
- const recorder = new Recorder(codegenMode, context, params);
52
+ static async _create(context, recorderAppFactory, params = {}) {
53
+ const recorder = new Recorder(context, params);
53
54
  const recorderApp = await recorderAppFactory(recorder);
54
55
  await recorder._install(recorderApp);
55
56
  return recorder;
56
57
  }
57
- constructor(codegenMode, context, params) {
58
+ constructor(context, params) {
58
59
  this.handleSIGINT = void 0;
59
60
  this._context = void 0;
60
61
  this._mode = void 0;
61
- this._highlightedSelector = '';
62
+ this._highlightedElement = {};
62
63
  this._overlayState = {
63
64
  offsetX: 0
64
65
  };
@@ -72,7 +73,7 @@ class Recorder {
72
73
  this._currentLanguage = void 0;
73
74
  this._mode = params.mode || 'none';
74
75
  this.handleSIGINT = params.handleSIGINT;
75
- this._contextRecorder = new _contextRecorder.ContextRecorder(codegenMode, context, params, {});
76
+ this._contextRecorder = new _contextRecorder.ContextRecorder(context, params, {});
76
77
  this._context = context;
77
78
  this._omitCallTracking = !!params.omitCallTracking;
78
79
  this._debugger = context.debugger();
@@ -94,8 +95,9 @@ class Recorder {
94
95
  this.setMode(data.params.mode);
95
96
  return;
96
97
  }
97
- if (data.event === 'selectorUpdated') {
98
- this.setHighlightedSelector(this._currentLanguage, data.params.selector);
98
+ if (data.event === 'highlightRequested') {
99
+ if (data.params.selector) this.setHighlightedSelector(this._currentLanguage, data.params.selector);
100
+ if (data.params.ariaTemplate) this.setHighlightedAriaTemplate(data.params.ariaTemplate);
99
101
  return;
100
102
  }
101
103
  if (data.event === 'step') {
@@ -119,6 +121,10 @@ class Recorder {
119
121
  this._contextRecorder.clearScript();
120
122
  return;
121
123
  }
124
+ if (data.event === 'runTask') {
125
+ this._contextRecorder.runTask(data.params.task);
126
+ return;
127
+ }
122
128
  });
123
129
  await Promise.all([recorderApp.setMode(this._mode), recorderApp.setPaused(this._debugger.isPaused()), this._pushAllSources()]);
124
130
  this._context.once(_browserContext.BrowserContext.Events.Close, () => {
@@ -133,12 +139,12 @@ class Recorder {
133
139
  recorderApp.setRunningFile(undefined);
134
140
  this._pushAllSources();
135
141
  });
136
- await this._context.exposeBinding('__pw_recorderState', false, source => {
137
- let actionSelector = '';
142
+ await this._context.exposeBinding('__pw_recorderState', false, async source => {
143
+ let actionSelector;
138
144
  let actionPoint;
139
145
  const hasActiveScreenshotCommand = [...this._currentCallsMetadata.keys()].some(isScreenshotCommand);
140
146
  if (!hasActiveScreenshotCommand) {
141
- actionSelector = this._highlightedSelector;
147
+ actionSelector = await this._scopeHighlightedSelectorToFrame(source.frame);
142
148
  for (const [metadata, sdkObject] of this._currentCallsMetadata) {
143
149
  if (source.page === sdkObject.attribution.page) {
144
150
  actionPoint = metadata.point || actionPoint;
@@ -150,18 +156,22 @@ class Recorder {
150
156
  mode: this._mode,
151
157
  actionPoint,
152
158
  actionSelector,
159
+ ariaTemplate: this._highlightedElement.ariaTemplate,
153
160
  language: this._currentLanguage,
154
161
  testIdAttributeName: this._contextRecorder.testIdAttributeName(),
155
162
  overlay: this._overlayState
156
163
  };
157
164
  return uiState;
158
165
  });
159
- await this._context.exposeBinding('__pw_recorderSetSelector', false, async ({
166
+ await this._context.exposeBinding('__pw_recorderElementPicked', false, async ({
160
167
  frame
161
- }, selector) => {
168
+ }, elementInfo) => {
162
169
  var _this$_recorderApp2;
163
170
  const selectorChain = await (0, _contextRecorder.generateFrameSelector)(frame);
164
- await ((_this$_recorderApp2 = this._recorderApp) === null || _this$_recorderApp2 === void 0 ? void 0 : _this$_recorderApp2.setSelector((0, _recorderUtils2.buildFullSelector)(selectorChain, selector), true));
171
+ await ((_this$_recorderApp2 = this._recorderApp) === null || _this$_recorderApp2 === void 0 ? void 0 : _this$_recorderApp2.elementPicked({
172
+ selector: (0, _recorderUtils.buildFullSelector)(selectorChain, elementInfo.selector),
173
+ ariaSnapshot: elementInfo.ariaSnapshot
174
+ }, true));
165
175
  });
166
176
  await this._context.exposeBinding('__pw_recorderSetMode', false, async ({
167
177
  frame
@@ -200,11 +210,11 @@ class Recorder {
200
210
  setMode(mode) {
201
211
  var _this$_recorderApp4;
202
212
  if (this._mode === mode) return;
203
- this._highlightedSelector = '';
213
+ this._highlightedElement = {};
204
214
  this._mode = mode;
205
215
  (_this$_recorderApp4 = this._recorderApp) === null || _this$_recorderApp4 === void 0 || _this$_recorderApp4.setMode(this._mode);
206
- this._contextRecorder.setEnabled(this._mode === 'recording' || this._mode === 'assertingText' || this._mode === 'assertingVisibility' || this._mode === 'assertingValue');
207
- this._debugger.setMuted(this._mode === 'recording' || this._mode === 'assertingText' || this._mode === 'assertingVisibility' || this._mode === 'assertingValue');
216
+ this._contextRecorder.setEnabled(this._isRecording());
217
+ this._debugger.setMuted(this._isRecording());
208
218
  if (this._mode !== 'none' && this._mode !== 'standby' && this._context.pages().length === 1) this._context.pages()[0].bringToFront().catch(() => {});
209
219
  this._refreshOverlay();
210
220
  }
@@ -215,40 +225,66 @@ class Recorder {
215
225
  return this._mode;
216
226
  }
217
227
  setHighlightedSelector(language, selector) {
218
- this._highlightedSelector = (0, _locatorParser.locatorOrSelectorAsSelector)(language, selector, this._context.selectors().testIdAttributeName());
228
+ this._highlightedElement = {
229
+ selector: (0, _locatorParser.locatorOrSelectorAsSelector)(language, selector, this._context.selectors().testIdAttributeName())
230
+ };
231
+ this._refreshOverlay();
232
+ }
233
+ setHighlightedAriaTemplate(ariaTemplate) {
234
+ this._highlightedElement = {
235
+ ariaTemplate
236
+ };
219
237
  this._refreshOverlay();
220
238
  }
221
239
  hideHighlightedSelector() {
222
- this._highlightedSelector = '';
240
+ this._highlightedElement = {};
223
241
  this._refreshOverlay();
224
242
  }
243
+ async _scopeHighlightedSelectorToFrame(frame) {
244
+ if (!this._highlightedElement.selector) return;
245
+ try {
246
+ const mainFrame = frame._page.mainFrame();
247
+ const resolved = await mainFrame.selectors.resolveFrameForSelector(this._highlightedElement.selector);
248
+ // selector couldn't be found, don't highlight anything
249
+ if (!resolved) return '';
250
+
251
+ // selector points to no specific frame, highlight in all frames
252
+ if ((resolved === null || resolved === void 0 ? void 0 : resolved.frame) === mainFrame) return (0, _selectorParser.stringifySelector)(resolved.info.parsed);
253
+
254
+ // selector points to this frame, highlight it
255
+ if ((resolved === null || resolved === void 0 ? void 0 : resolved.frame) === frame) return (0, _selectorParser.stringifySelector)(resolved.info.parsed);
256
+
257
+ // selector points to a different frame, highlight nothing
258
+ return '';
259
+ } catch {
260
+ return '';
261
+ }
262
+ }
225
263
  setOutput(codegenId, outputFile) {
226
264
  this._contextRecorder.setOutput(codegenId, outputFile);
227
265
  }
228
266
  _refreshOverlay() {
229
- for (const page of this._context.pages()) page.mainFrame().evaluateExpression('window.__pw_refreshOverlay()').catch(() => {});
267
+ for (const page of this._context.pages()) {
268
+ for (const frame of page.frames()) frame.evaluateExpression('window.__pw_refreshOverlay()').catch(() => {});
269
+ }
230
270
  }
231
271
  async onBeforeCall(sdkObject, metadata) {
232
- if (this._omitCallTracking || this._mode === 'recording' || this._mode === 'assertingText' || this._mode === 'assertingVisibility' || this._mode === 'assertingValue') return;
272
+ if (this._omitCallTracking || this._isRecording()) return;
233
273
  this._currentCallsMetadata.set(metadata, sdkObject);
234
274
  this._updateUserSources();
235
275
  this.updateCallLog([metadata]);
236
- if (isScreenshotCommand(metadata)) {
237
- this.hideHighlightedSelector();
238
- } else if (metadata.params && metadata.params.selector) {
239
- var _this$_recorderApp5;
240
- this._highlightedSelector = metadata.params.selector;
241
- (_this$_recorderApp5 = this._recorderApp) === null || _this$_recorderApp5 === void 0 || _this$_recorderApp5.setSelector(this._highlightedSelector).catch(() => {});
242
- }
276
+ if (isScreenshotCommand(metadata)) this.hideHighlightedSelector();else if (metadata.params && metadata.params.selector) this._highlightedElement = {
277
+ selector: metadata.params.selector
278
+ };
243
279
  }
244
280
  async onAfterCall(sdkObject, metadata) {
245
- if (this._omitCallTracking || this._mode === 'recording' || this._mode === 'assertingText' || this._mode === 'assertingVisibility' || this._mode === 'assertingValue') return;
281
+ if (this._omitCallTracking || this._isRecording()) return;
246
282
  if (!metadata.error) this._currentCallsMetadata.delete(metadata);
247
283
  this._updateUserSources();
248
284
  this.updateCallLog([metadata]);
249
285
  }
250
286
  _updateUserSources() {
251
- var _this$_recorderApp6;
287
+ var _this$_recorderApp5;
252
288
  // Remove old decorations.
253
289
  for (const source of this._userSources.values()) {
254
290
  source.highlight = [];
@@ -286,19 +322,20 @@ class Recorder {
286
322
  }
287
323
  }
288
324
  this._pushAllSources();
289
- if (fileToSelect) (_this$_recorderApp6 = this._recorderApp) === null || _this$_recorderApp6 === void 0 || _this$_recorderApp6.setRunningFile(fileToSelect);
325
+ if (fileToSelect) (_this$_recorderApp5 = this._recorderApp) === null || _this$_recorderApp5 === void 0 || _this$_recorderApp5.setRunningFile(fileToSelect);
290
326
  }
291
327
  _pushAllSources() {
292
- var _this$_recorderApp7;
293
- (_this$_recorderApp7 = this._recorderApp) === null || _this$_recorderApp7 === void 0 || _this$_recorderApp7.setSources([...this._recorderSources, ...this._userSources.values()]);
328
+ var _this$_recorderApp6;
329
+ const primaryPage = this._context.pages()[0];
330
+ (_this$_recorderApp6 = this._recorderApp) === null || _this$_recorderApp6 === void 0 || _this$_recorderApp6.setSources([...this._recorderSources, ...this._userSources.values()], primaryPage === null || primaryPage === void 0 ? void 0 : primaryPage.mainFrame().url());
294
331
  }
295
332
  async onBeforeInputAction(sdkObject, metadata) {}
296
333
  async onCallLog(sdkObject, metadata, logName, message) {
297
334
  this.updateCallLog([metadata]);
298
335
  }
299
336
  updateCallLog(metadatas) {
300
- var _this$_recorderApp8;
301
- if (this._mode === 'recording' || this._mode === 'assertingText' || this._mode === 'assertingVisibility' || this._mode === 'assertingValue') return;
337
+ var _this$_recorderApp7;
338
+ if (this._isRecording()) return;
302
339
  const logs = [];
303
340
  for (const metadata of metadatas) {
304
341
  if (!metadata.method || metadata.internal) continue;
@@ -307,11 +344,14 @@ class Recorder {
307
344
  if (this._debugger.isPaused(metadata)) status = 'paused';
308
345
  logs.push((0, _recorderUtils.metadataToCallLog)(metadata, status));
309
346
  }
310
- (_this$_recorderApp8 = this._recorderApp) === null || _this$_recorderApp8 === void 0 || _this$_recorderApp8.updateCallLogs(logs);
347
+ (_this$_recorderApp7 = this._recorderApp) === null || _this$_recorderApp7 === void 0 || _this$_recorderApp7.updateCallLogs(logs);
348
+ }
349
+ _isRecording() {
350
+ return ['recording', 'assertingText', 'assertingVisibility', 'assertingValue', 'assertingSnapshot'].includes(this._mode);
311
351
  }
312
352
  _readSource(fileName) {
313
353
  try {
314
- return fs.readFileSync(fileName, 'utf-8');
354
+ return _fs.default.readFileSync(fileName, 'utf-8');
315
355
  } catch (e) {
316
356
  return '// No source available';
317
357
  }