@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.
- package/ThirdPartyNotices.txt +60 -48
- package/bin/reinstall_chrome_beta_linux.sh +10 -8
- package/bin/reinstall_chrome_stable_linux.sh +10 -8
- package/bin/reinstall_msedge_beta_linux.sh +17 -9
- package/bin/reinstall_msedge_dev_linux.sh +17 -9
- package/bin/reinstall_msedge_stable_linux.sh +17 -9
- package/browsers.json +33 -12
- package/index.js +0 -1
- package/lib/androidServerImpl.js +5 -5
- package/lib/browserServerImpl.js +18 -9
- package/lib/checkly/secretsFilter.js +1 -1
- package/lib/cli/driver.js +6 -6
- package/lib/cli/program.js +38 -43
- package/lib/cli/programWithTestStub.js +2 -1
- package/lib/client/android.js +37 -58
- package/lib/client/artifact.js +4 -7
- package/lib/client/browser.js +10 -15
- package/lib/client/browserContext.js +69 -62
- package/lib/client/browserType.js +30 -64
- package/lib/client/channelOwner.js +53 -68
- package/lib/client/clientHelper.js +4 -6
- package/lib/client/clientInstrumentation.js +2 -0
- package/lib/client/clientStackTrace.js +65 -0
- package/lib/client/connection.js +48 -41
- package/lib/client/consoleMessage.js +4 -7
- package/lib/client/electron.js +10 -10
- package/lib/client/elementHandle.js +32 -33
- package/lib/client/errors.js +2 -2
- package/lib/client/eventEmitter.js +5 -8
- package/lib/client/fetch.js +61 -62
- package/lib/client/fileUtils.js +31 -0
- package/lib/client/frame.js +22 -23
- package/lib/client/harRouter.js +7 -9
- package/lib/client/jsHandle.js +3 -4
- package/lib/client/localUtils.js +24 -0
- package/lib/client/locator.js +27 -13
- package/lib/client/network.js +44 -37
- package/lib/client/page.js +50 -41
- package/lib/client/platform.js +71 -0
- package/lib/client/playwright.js +21 -1
- package/lib/client/selectors.js +8 -2
- package/lib/client/stream.js +2 -21
- package/lib/client/timeoutSettings.js +65 -0
- package/lib/client/tracing.js +29 -7
- package/lib/client/video.js +2 -2
- package/lib/client/waiter.js +19 -16
- package/lib/client/webSocket.js +106 -0
- package/lib/client/worker.js +4 -4
- package/lib/client/writableStream.js +2 -21
- package/lib/generated/consoleApiSource.js +1 -1
- package/lib/generated/injectedScriptSource.js +1 -1
- package/lib/generated/pollingRecorderSource.js +1 -1
- package/lib/generated/recorderSource.js +7 -0
- package/lib/generated/webSocketMockSource.js +1 -1
- package/lib/inProcessFactory.js +8 -3
- package/lib/outofprocess.js +12 -8
- package/lib/protocol/debug.js +1 -1
- package/lib/protocol/validator.js +77 -11
- package/lib/protocol/validatorPrimitives.js +1 -2
- package/lib/remote/playwrightConnection.js +21 -12
- package/lib/remote/playwrightServer.js +22 -8
- package/lib/server/android/android.js +17 -14
- package/lib/server/android/backendAdb.js +14 -14
- package/lib/server/artifact.js +3 -3
- package/lib/server/bidi/bidiBrowser.js +11 -8
- package/lib/server/bidi/bidiChromium.js +5 -4
- package/lib/server/bidi/bidiConnection.js +1 -3
- package/lib/server/bidi/bidiExecutionContext.js +71 -25
- package/lib/server/bidi/bidiFirefox.js +4 -3
- package/lib/server/bidi/bidiInput.js +11 -12
- package/lib/server/bidi/bidiNetworkManager.js +11 -12
- package/lib/server/bidi/bidiOverCdp.js +2 -2
- package/lib/server/bidi/bidiPage.js +39 -66
- package/lib/server/bidi/third_party/bidiKeyboard.js +9 -7
- package/lib/server/bidi/third_party/firefoxPrefs.js +19 -3
- package/lib/server/browser.js +2 -2
- package/lib/server/browserContext.js +60 -55
- package/lib/server/browserType.js +22 -18
- package/lib/server/callLog.js +79 -0
- package/lib/server/chromium/chromium.js +20 -16
- package/lib/server/chromium/chromiumSwitches.js +32 -9
- package/lib/server/chromium/crBrowser.js +25 -24
- package/lib/server/chromium/crConnection.js +2 -2
- package/lib/server/chromium/crCoverage.js +1 -1
- package/lib/server/chromium/crDevTools.js +1 -1
- package/lib/server/chromium/crDragDrop.js +1 -1
- package/lib/server/chromium/crExecutionContext.js +26 -35
- package/lib/server/chromium/crInput.js +17 -6
- package/lib/server/chromium/crNetworkManager.js +3 -3
- package/lib/server/chromium/crPage.js +43 -55
- package/lib/server/chromium/crPdf.js +1 -1
- package/lib/server/chromium/crProtocolHelper.js +3 -3
- package/lib/server/chromium/crServiceWorker.js +2 -2
- package/lib/server/chromium/videoRecorder.js +2 -2
- package/lib/server/clock.js +1 -1
- package/lib/server/codegen/csharp.js +21 -16
- package/lib/server/codegen/java.js +17 -9
- package/lib/server/codegen/javascript.js +37 -7
- package/lib/server/codegen/jsonl.js +1 -1
- package/lib/server/codegen/languages.js +2 -2
- package/lib/server/codegen/python.js +14 -17
- package/lib/server/debugController.js +23 -45
- package/lib/server/debugger.js +1 -1
- package/lib/server/deviceDescriptors.js +1 -1
- package/lib/server/deviceDescriptorsSource.json +131 -131
- package/lib/server/dispatchers/androidDispatcher.js +14 -3
- package/lib/server/dispatchers/artifactDispatcher.js +3 -3
- package/lib/server/dispatchers/browserContextDispatcher.js +21 -32
- package/lib/server/dispatchers/browserTypeDispatcher.js +1 -1
- package/lib/server/dispatchers/cdpSessionDispatcher.js +1 -1
- package/lib/server/dispatchers/debugControllerDispatcher.js +5 -3
- package/lib/server/dispatchers/dispatcher.js +27 -25
- package/lib/server/dispatchers/electronDispatcher.js +3 -3
- package/lib/server/dispatchers/elementHandlerDispatcher.js +7 -2
- package/lib/server/dispatchers/frameDispatcher.js +9 -3
- package/lib/server/dispatchers/jsonPipeDispatcher.js +2 -2
- package/lib/server/dispatchers/localUtilsDispatcher.js +25 -291
- package/lib/server/dispatchers/networkDispatchers.js +3 -3
- package/lib/server/dispatchers/pageDispatcher.js +10 -8
- package/lib/server/dispatchers/playwrightDispatcher.js +5 -5
- package/lib/server/dispatchers/streamDispatcher.js +4 -3
- package/lib/server/dispatchers/tracingDispatcher.js +10 -0
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +18 -18
- package/lib/server/dispatchers/writableStreamDispatcher.js +5 -6
- package/lib/server/dom.js +102 -48
- package/lib/server/download.js +1 -1
- package/lib/server/electron/electron.js +17 -16
- package/lib/server/errors.js +1 -1
- package/lib/server/fetch.js +49 -33
- package/lib/server/fileUploadUtils.js +7 -4
- package/lib/server/firefox/ffBrowser.js +17 -9
- package/lib/server/firefox/ffConnection.js +1 -1
- package/lib/server/firefox/ffExecutionContext.js +25 -29
- package/lib/server/firefox/ffInput.js +15 -4
- package/lib/server/firefox/ffNetworkManager.js +3 -3
- package/lib/server/firefox/ffPage.js +29 -50
- package/lib/server/firefox/firefox.js +7 -9
- package/lib/server/frameSelectors.js +1 -1
- package/lib/server/frames.js +65 -55
- package/lib/server/har/harRecorder.js +4 -4
- package/lib/server/har/harTracer.js +8 -9
- package/lib/server/harBackend.js +157 -0
- package/lib/server/helper.js +2 -2
- package/lib/server/index.js +1 -14
- package/lib/server/input.js +3 -4
- package/lib/server/instrumentation.js +2 -2
- package/lib/server/isomorphic/utilityScriptSerializers.js +3 -0
- package/lib/server/javascript.js +26 -33
- package/lib/server/launchApp.js +7 -7
- package/lib/server/localUtils.js +203 -0
- package/lib/server/network.js +5 -5
- package/lib/server/page.js +76 -37
- package/lib/server/pipeTransport.js +1 -1
- package/lib/server/playwright.js +5 -5
- package/lib/server/progress.js +1 -4
- package/lib/server/protocolError.js +1 -1
- package/lib/server/recorder/chat.js +177 -0
- package/lib/server/recorder/codeGenerator.js +154 -0
- package/lib/server/recorder/contextRecorder.js +9 -18
- package/lib/server/recorder/csharp.js +311 -0
- package/lib/server/recorder/java.js +249 -0
- package/lib/server/recorder/javascript.js +230 -0
- package/lib/server/recorder/jsonl.js +48 -0
- package/lib/server/recorder/language.js +45 -0
- package/lib/server/recorder/python.js +276 -0
- package/lib/server/recorder/recorderActions.js +6 -0
- package/lib/server/recorder/recorderApp.js +25 -28
- package/lib/server/recorder/recorderCollection.js +9 -21
- package/lib/server/recorder/recorderInTraceViewer.js +1 -1
- package/lib/server/recorder/recorderRunner.js +7 -3
- package/lib/server/recorder/recorderUtils.js +5 -28
- package/lib/server/recorder/throttledFile.js +3 -4
- package/lib/server/recorder/utils.js +46 -0
- package/lib/server/recorder.js +83 -43
- package/lib/server/registry/browserFetcher.js +10 -8
- package/lib/server/registry/dependencies.js +20 -20
- package/lib/server/registry/index.js +215 -61
- package/lib/server/registry/nativeDeps.js +10 -4
- package/lib/server/registry/oopDownloadBrowserMain.js +3 -3
- package/lib/server/screenshotter.js +1 -1
- package/lib/server/selectors.js +3 -3
- package/lib/server/socksClientCertificatesInterceptor.js +8 -8
- package/lib/server/socksInterceptor.js +8 -5
- package/lib/server/storageScript.js +160 -0
- package/lib/server/timeoutSettings.js +74 -0
- package/lib/server/trace/recorder/snapshotter.js +10 -20
- package/lib/server/trace/recorder/snapshotterInjected.js +26 -1
- package/lib/server/trace/recorder/tracing.js +108 -45
- package/lib/server/trace/test/inMemorySnapshotter.js +6 -6
- package/lib/server/trace/viewer/traceViewer.js +21 -7
- package/lib/server/transport.js +3 -2
- package/lib/server/utils/ascii.js +31 -0
- package/lib/server/utils/comparators.js +159 -0
- package/lib/server/utils/crypto.js +171 -0
- package/lib/server/utils/debug.js +38 -0
- package/lib/server/utils/debugLogger.js +93 -0
- package/lib/server/utils/env.js +53 -0
- package/lib/server/utils/eventsHelper.js +38 -0
- package/lib/server/utils/expectUtils.js +33 -0
- package/lib/server/utils/fileUtils.js +204 -0
- package/lib/server/utils/happyEyeballs.js +207 -0
- package/lib/server/utils/hostPlatform.js +145 -0
- package/lib/server/utils/httpServer.js +233 -0
- package/lib/server/utils/image_tools/colorUtils.js +98 -0
- package/lib/server/utils/image_tools/compare.js +108 -0
- package/lib/server/utils/image_tools/imageChannel.js +70 -0
- package/lib/server/utils/image_tools/stats.js +102 -0
- package/lib/server/utils/linuxUtils.js +58 -0
- package/lib/server/utils/network.js +160 -0
- package/lib/server/utils/nodePlatform.js +140 -0
- package/lib/server/utils/pipeTransport.js +82 -0
- package/lib/server/utils/processLauncher.js +248 -0
- package/lib/server/utils/profiler.js +52 -0
- package/lib/server/utils/socksProxy.js +570 -0
- package/lib/server/utils/spawnAsync.js +45 -0
- package/lib/server/utils/task.js +58 -0
- package/lib/server/utils/userAgent.js +91 -0
- package/lib/server/utils/wsServer.js +128 -0
- package/lib/server/utils/zipFile.js +75 -0
- package/lib/server/utils/zones.js +54 -0
- package/lib/server/webkit/webkit.js +4 -4
- package/lib/server/webkit/wkBrowser.js +10 -10
- package/lib/server/webkit/wkConnection.js +1 -1
- package/lib/server/webkit/wkExecutionContext.js +26 -30
- package/lib/server/webkit/wkInput.js +17 -7
- package/lib/server/webkit/wkInterceptableRequest.js +2 -2
- package/lib/server/webkit/wkPage.js +80 -66
- package/lib/server/webkit/wkProvisionalPage.js +1 -1
- package/lib/server/webkit/wkWorkers.js +2 -2
- package/lib/utils/fileUtils.js +1 -1
- package/lib/utils/glob.js +84 -0
- package/lib/utils/isomorphic/ariaSnapshot.js +392 -0
- package/lib/utils/isomorphic/assert.js +25 -0
- package/lib/utils/isomorphic/colors.js +65 -0
- package/lib/utils/isomorphic/cssParser.js +5 -5
- package/lib/utils/isomorphic/headers.js +52 -0
- package/lib/utils/isomorphic/locatorGenerators.js +38 -8
- package/lib/utils/isomorphic/locatorParser.js +19 -13
- package/lib/utils/isomorphic/manualPromise.js +107 -0
- package/lib/utils/isomorphic/mimeType.js +11 -3
- package/lib/utils/isomorphic/multimap.js +73 -0
- package/lib/utils/isomorphic/rtti.js +41 -0
- package/lib/utils/isomorphic/semaphore.js +51 -0
- package/lib/utils/isomorphic/stackTrace.js +169 -0
- package/lib/utils/isomorphic/stringUtils.js +31 -1
- package/lib/utils/isomorphic/time.js +25 -0
- package/lib/utils/isomorphic/timeoutRunner.js +66 -0
- package/lib/utils/isomorphic/traceUtils.js +23 -0
- package/lib/utils/isomorphic/types.js +5 -0
- package/lib/utils/isomorphic/urlMatch.js +7 -5
- package/lib/utils/mimeType.js +30 -0
- package/lib/utils/stackTrace.js +1 -1
- package/lib/utils.js +447 -0
- package/lib/utilsBundle.js +4 -29
- package/lib/utilsBundleImpl/index.js +188 -33
- package/lib/vite/htmlReport/index.html +20 -17
- package/lib/vite/recorder/assets/codeMirrorModule-B9YMkrwa.js +24 -0
- package/lib/vite/recorder/assets/index-ELPgmkwA.js +184 -0
- package/lib/vite/recorder/assets/{index-BW-aOBcL.css → index-eHBmevrY.css} +1 -1
- package/lib/vite/recorder/index.html +2 -2
- package/lib/vite/traceViewer/assets/codeMirrorModule-gU1OOCQO.js +24 -0
- package/lib/vite/traceViewer/assets/defaultSettingsView-B5n_FjMx.js +1 -0
- package/lib/vite/traceViewer/assets/inspectorTab-6Tru8Mn_.js +235 -0
- package/lib/vite/traceViewer/assets/workbench-B_Nj4NA2.js +25 -0
- package/lib/vite/traceViewer/assets/{xtermModule-BeNbaIVa.js → xtermModule-BoAIEibi.js} +7 -7
- package/lib/vite/traceViewer/defaultSettingsView.CO3FR0CX.css +1 -0
- package/lib/vite/traceViewer/{embedded.BkvOrz5Z.js → embedded.DpNPH6mk.js} +2 -2
- package/lib/vite/traceViewer/embedded.html +6 -6
- package/lib/vite/traceViewer/index.CuE3SYGw.js +2 -0
- package/lib/vite/traceViewer/index.html +27 -9
- package/lib/vite/traceViewer/inspectorTab.CXDulcFG.css +1 -0
- package/lib/vite/traceViewer/{recorder.DNMfnSiu.js → recorder.BD-uZJs7.js} +2 -2
- package/lib/vite/traceViewer/recorder.html +4 -4
- package/lib/vite/traceViewer/sw.bundle.js +7888 -3
- package/lib/vite/traceViewer/{uiMode.CAYqod-m.css → uiMode.BatfzHMG.css} +1 -1
- package/lib/vite/traceViewer/uiMode.DHrNgddz.js +5 -0
- package/lib/vite/traceViewer/uiMode.html +8 -7
- package/lib/vite/traceViewer/workbench.B9vIAzH9.css +1 -0
- package/lib/zipBundleImpl.js +4 -4
- package/package.json +7 -7
- package/types/protocol.d.ts +820 -153
- package/types/types.d.ts +285 -82
- package/bin/PrintDeps.exe +0 -0
- package/bin/README.md +0 -2
- package/lib/vite/recorder/assets/codeMirrorModule-d0KhC1qL.js +0 -24
- package/lib/vite/recorder/assets/index-Bxxcmxlu.js +0 -42
- package/lib/vite/traceViewer/assets/codeMirrorModule-pBPtArIT.js +0 -24
- package/lib/vite/traceViewer/assets/codeMirrorModule-tzBrK1V4.js +0 -24
- package/lib/vite/traceViewer/assets/inspectorTab-BuJ3wAX_.js +0 -64
- package/lib/vite/traceViewer/assets/inspectorTab-Soeeuvzv.js +0 -64
- package/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +0 -1
- package/lib/vite/traceViewer/assets/workbench-DdmJ9AJV.js +0 -9
- package/lib/vite/traceViewer/assets/workbench-lypYlf00.js +0 -9
- package/lib/vite/traceViewer/embedded.DInvAijy.js +0 -2
- package/lib/vite/traceViewer/index.Dha3cgqs.js +0 -2
- package/lib/vite/traceViewer/index._Iolt-uE.js +0 -2
- package/lib/vite/traceViewer/inspectorTab.DLjBDrQR.css +0 -1
- package/lib/vite/traceViewer/recorder.DTSaNaly.js +0 -2
- package/lib/vite/traceViewer/uiMode.BM7yhjzl.js +0 -5
- package/lib/vite/traceViewer/uiMode.Cr1tvTWS.js +0 -5
- package/lib/vite/traceViewer/workbench.DlsCx8k5.css +0 -1
- /package/lib/vite/recorder/assets/{codeMirrorModule-ez37Vkbh.css → codeMirrorModule-C3UTv-Ge.css} +0 -0
- /package/lib/vite/traceViewer/{codeMirrorModule.ez37Vkbh.css → codeMirrorModule.C3UTv-Ge.css} +0 -0
- /package/lib/vite/traceViewer/{embedded.w7WN2u1R.css → embedded.mLhjB5IF.css} +0 -0
- /package/lib/vite/traceViewer/{index.CrbWWHbf.css → index.CFOW-Ezb.css} +0 -0
- /package/lib/vite/traceViewer/{recorder.B_SY1GJM.css → recorder.tn0RQdqM.css} +0 -0
- /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
|
|
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
|
-
|
|
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
|
|
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,
|
|
121
|
-
useWebSocket: (0,
|
|
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((
|
|
157
|
-
|
|
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
|
-
},
|
|
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
|
|
169
|
-
if (userGesture)
|
|
170
|
-
|
|
171
|
-
|
|
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
|
-
|
|
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
|
|
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.
|
|
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
|
|
46
|
-
await (0, _recorderRunner.performAction)(
|
|
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
|
-
|
|
72
|
-
|
|
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(
|
|
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(
|
|
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,
|
|
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.
|
|
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 =
|
|
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
|
|
8
|
-
function
|
|
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)
|
|
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
|
package/lib/server/recorder.js
CHANGED
|
@@ -4,17 +4,18 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.Recorder = void 0;
|
|
7
|
-
var
|
|
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
|
|
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 &&
|
|
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(
|
|
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(
|
|
44
|
+
static show(context, recorderAppFactory, params) {
|
|
44
45
|
let recorderPromise = context[recorderSymbol];
|
|
45
46
|
if (!recorderPromise) {
|
|
46
|
-
recorderPromise = Recorder._create(
|
|
47
|
+
recorderPromise = Recorder._create(context, recorderAppFactory, params);
|
|
47
48
|
context[recorderSymbol] = recorderPromise;
|
|
48
49
|
}
|
|
49
50
|
return recorderPromise;
|
|
50
51
|
}
|
|
51
|
-
static async _create(
|
|
52
|
-
const recorder = new Recorder(
|
|
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(
|
|
58
|
+
constructor(context, params) {
|
|
58
59
|
this.handleSIGINT = void 0;
|
|
59
60
|
this._context = void 0;
|
|
60
61
|
this._mode = void 0;
|
|
61
|
-
this.
|
|
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(
|
|
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 === '
|
|
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.
|
|
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('
|
|
166
|
+
await this._context.exposeBinding('__pw_recorderElementPicked', false, async ({
|
|
160
167
|
frame
|
|
161
|
-
},
|
|
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.
|
|
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.
|
|
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.
|
|
207
|
-
this._debugger.setMuted(this.
|
|
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.
|
|
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.
|
|
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())
|
|
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.
|
|
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
|
-
|
|
238
|
-
}
|
|
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.
|
|
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$
|
|
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$
|
|
325
|
+
if (fileToSelect) (_this$_recorderApp5 = this._recorderApp) === null || _this$_recorderApp5 === void 0 || _this$_recorderApp5.setRunningFile(fileToSelect);
|
|
290
326
|
}
|
|
291
327
|
_pushAllSources() {
|
|
292
|
-
var _this$
|
|
293
|
-
|
|
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$
|
|
301
|
-
if (this.
|
|
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$
|
|
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
|
|
354
|
+
return _fs.default.readFileSync(fileName, 'utf-8');
|
|
315
355
|
} catch (e) {
|
|
316
356
|
return '// No source available';
|
|
317
357
|
}
|