@checkly/playwright-core 1.48.22 → 1.51.11-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +3 -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,12 +4,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.RawTouchscreenImpl = exports.RawMouseImpl = exports.RawKeyboardImpl = void 0;
|
|
7
|
+
var _utils = require("../../utils");
|
|
7
8
|
var input = _interopRequireWildcard(require("../input"));
|
|
8
9
|
var _macEditingCommands = require("../macEditingCommands");
|
|
9
|
-
var _utils = require("../../utils");
|
|
10
10
|
var _crProtocolHelper = require("./crProtocolHelper");
|
|
11
11
|
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); }
|
|
12
|
-
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 &&
|
|
12
|
+
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; }
|
|
13
13
|
/**
|
|
14
14
|
* Copyright 2017 Google Inc. All rights reserved.
|
|
15
15
|
* Modifications copyright (c) Microsoft Corporation.
|
|
@@ -48,13 +48,19 @@ class RawKeyboardImpl {
|
|
|
48
48
|
// remove the trailing : to match the Chromium command names.
|
|
49
49
|
return commands.map(c => c.substring(0, c.length - 1));
|
|
50
50
|
}
|
|
51
|
-
async keydown(modifiers,
|
|
51
|
+
async keydown(modifiers, keyName, description, autoRepeat) {
|
|
52
|
+
const {
|
|
53
|
+
code,
|
|
54
|
+
key,
|
|
55
|
+
location,
|
|
56
|
+
text
|
|
57
|
+
} = description;
|
|
52
58
|
if (code === 'Escape' && (await this._dragManger.cancelDrag())) return;
|
|
53
59
|
const commands = this._commandsForCode(code, modifiers);
|
|
54
60
|
await this._client.send('Input.dispatchKeyEvent', {
|
|
55
61
|
type: text ? 'keyDown' : 'rawKeyDown',
|
|
56
62
|
modifiers: (0, _crProtocolHelper.toModifiersMask)(modifiers),
|
|
57
|
-
windowsVirtualKeyCode: keyCodeWithoutLocation,
|
|
63
|
+
windowsVirtualKeyCode: description.keyCodeWithoutLocation,
|
|
58
64
|
code,
|
|
59
65
|
commands,
|
|
60
66
|
key,
|
|
@@ -65,12 +71,17 @@ class RawKeyboardImpl {
|
|
|
65
71
|
isKeypad: location === input.keypadLocation
|
|
66
72
|
});
|
|
67
73
|
}
|
|
68
|
-
async keyup(modifiers,
|
|
74
|
+
async keyup(modifiers, keyName, description) {
|
|
75
|
+
const {
|
|
76
|
+
code,
|
|
77
|
+
key,
|
|
78
|
+
location
|
|
79
|
+
} = description;
|
|
69
80
|
await this._client.send('Input.dispatchKeyEvent', {
|
|
70
81
|
type: 'keyUp',
|
|
71
82
|
modifiers: (0, _crProtocolHelper.toModifiersMask)(modifiers),
|
|
72
83
|
key,
|
|
73
|
-
windowsVirtualKeyCode: keyCodeWithoutLocation,
|
|
84
|
+
windowsVirtualKeyCode: description.keyCodeWithoutLocation,
|
|
74
85
|
code,
|
|
75
86
|
location
|
|
76
87
|
});
|
|
@@ -4,13 +4,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.CRNetworkManager = void 0;
|
|
7
|
+
var _utils = require("../../utils");
|
|
8
|
+
var _eventsHelper = require("../utils/eventsHelper");
|
|
7
9
|
var _helper = require("../helper");
|
|
8
|
-
var _eventsHelper = require("../../utils/eventsHelper");
|
|
9
10
|
var network = _interopRequireWildcard(require("../network"));
|
|
10
|
-
var _utils = require("../../utils");
|
|
11
11
|
var _protocolError = require("../protocolError");
|
|
12
12
|
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); }
|
|
13
|
-
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 &&
|
|
13
|
+
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; }
|
|
14
14
|
/**
|
|
15
15
|
* Copyright 2017 Google Inc. All rights reserved.
|
|
16
16
|
* Modifications copyright (c) Microsoft Corporation.
|
|
@@ -5,16 +5,17 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.CRPage = void 0;
|
|
7
7
|
var _path = _interopRequireDefault(require("path"));
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
var
|
|
8
|
+
var _assert = require("../../utils/isomorphic/assert");
|
|
9
|
+
var _crypto = require("../utils/crypto");
|
|
10
|
+
var _eventsHelper = require("../utils/eventsHelper");
|
|
11
|
+
var _stackTrace = require("../../utils/isomorphic/stackTrace");
|
|
12
12
|
var dialog = _interopRequireWildcard(require("../dialog"));
|
|
13
13
|
var dom = _interopRequireWildcard(require("../dom"));
|
|
14
14
|
var frames = _interopRequireWildcard(require("../frames"));
|
|
15
15
|
var _helper = require("../helper");
|
|
16
16
|
var network = _interopRequireWildcard(require("../network"));
|
|
17
17
|
var _page = require("../page");
|
|
18
|
+
var _registry = require("../registry");
|
|
18
19
|
var _crAccessibility = require("./crAccessibility");
|
|
19
20
|
var _crBrowser = require("./crBrowser");
|
|
20
21
|
var _crCoverage = require("./crCoverage");
|
|
@@ -30,8 +31,8 @@ var _browserContext = require("../browserContext");
|
|
|
30
31
|
var _errors = require("../errors");
|
|
31
32
|
var _protocolError = require("../protocolError");
|
|
32
33
|
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); }
|
|
33
|
-
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 &&
|
|
34
|
-
function _interopRequireDefault(
|
|
34
|
+
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; }
|
|
35
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
35
36
|
/**
|
|
36
37
|
* Copyright 2017 Google Inc. All rights reserved.
|
|
37
38
|
* Modifications copyright (c) Microsoft Corporation.
|
|
@@ -68,8 +69,6 @@ class CRPage {
|
|
|
68
69
|
this._pdf = void 0;
|
|
69
70
|
this._coverage = void 0;
|
|
70
71
|
this._browserContext = void 0;
|
|
71
|
-
this._pagePromise = void 0;
|
|
72
|
-
this._initializedPage = null;
|
|
73
72
|
this._isBackgroundPage = void 0;
|
|
74
73
|
// Holds window features for the next popup being opened via window.open,
|
|
75
74
|
// until the popup target arrives. This could be racy if two oopifs
|
|
@@ -105,29 +104,15 @@ class CRPage {
|
|
|
105
104
|
screen: viewportSize
|
|
106
105
|
};
|
|
107
106
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
throw e;
|
|
116
|
-
}).then(() => {
|
|
117
|
-
this._initializedPage = this._page;
|
|
118
|
-
this._reportAsNew();
|
|
119
|
-
return this._page;
|
|
120
|
-
}).catch(e => {
|
|
121
|
-
this._reportAsNew(e);
|
|
122
|
-
return e;
|
|
107
|
+
const createdEvent = this._isBackgroundPage ? _crBrowser.CRBrowserContext.CREvents.BackgroundPage : _browserContext.BrowserContext.Events.Page;
|
|
108
|
+
this._mainFrameSession._initialize(bits.hasUIWindow).then(() => {
|
|
109
|
+
var _this$_opener;
|
|
110
|
+
return this._page.reportAsNew((_this$_opener = this._opener) === null || _this$_opener === void 0 ? void 0 : _this$_opener._page, undefined, createdEvent);
|
|
111
|
+
}, error => {
|
|
112
|
+
var _this$_opener2;
|
|
113
|
+
return this._page.reportAsNew((_this$_opener2 = this._opener) === null || _this$_opener2 === void 0 ? void 0 : _this$_opener2._page, error, createdEvent);
|
|
123
114
|
});
|
|
124
115
|
}
|
|
125
|
-
potentiallyUninitializedPage() {
|
|
126
|
-
return this._page;
|
|
127
|
-
}
|
|
128
|
-
_reportAsNew(error) {
|
|
129
|
-
this._page.reportAsNew(error, this._isBackgroundPage ? _crBrowser.CRBrowserContext.CREvents.BackgroundPage : _browserContext.BrowserContext.Events.Page);
|
|
130
|
-
}
|
|
131
116
|
async _forAllFrameSessions(cb) {
|
|
132
117
|
const frameSessions = Array.from(this._sessions.values());
|
|
133
118
|
await Promise.all(frameSessions.map(frameSession => {
|
|
@@ -155,9 +140,6 @@ class CRPage {
|
|
|
155
140
|
willBeginDownload() {
|
|
156
141
|
this._mainFrameSession._willBeginDownload();
|
|
157
142
|
}
|
|
158
|
-
async pageOrError() {
|
|
159
|
-
return this._pagePromise;
|
|
160
|
-
}
|
|
161
143
|
didClose() {
|
|
162
144
|
for (const session of this._sessions.values()) session.dispose();
|
|
163
145
|
this._page._didClose();
|
|
@@ -270,9 +252,6 @@ class CRPage {
|
|
|
270
252
|
async getOwnerFrame(handle) {
|
|
271
253
|
return this._sessionForHandle(handle)._getOwnerFrame(handle);
|
|
272
254
|
}
|
|
273
|
-
isElementHandle(remoteObject) {
|
|
274
|
-
return remoteObject.subtype === 'node';
|
|
275
|
-
}
|
|
276
255
|
async getBoundingBox(handle) {
|
|
277
256
|
return this._sessionForHandle(handle)._getBoundingBox(handle);
|
|
278
257
|
}
|
|
@@ -297,9 +276,6 @@ class CRPage {
|
|
|
297
276
|
async getContentQuads(handle) {
|
|
298
277
|
return this._sessionForHandle(handle)._getContentQuads(handle);
|
|
299
278
|
}
|
|
300
|
-
async setInputFiles(handle, files) {
|
|
301
|
-
await handle.evaluateInUtility(([injected, node, files]) => injected.setInputFiles(node, files), files);
|
|
302
|
-
}
|
|
303
279
|
async setInputFilePaths(handle, files) {
|
|
304
280
|
const frame = await handle.ownerFrame();
|
|
305
281
|
if (!frame) throw new Error('Cannot set input files to detached input element');
|
|
@@ -318,7 +294,10 @@ class CRPage {
|
|
|
318
294
|
async inputActionEpilogue() {
|
|
319
295
|
await this._mainFrameSession._client.send('Page.enable').catch(e => {});
|
|
320
296
|
}
|
|
321
|
-
async resetForReuse() {
|
|
297
|
+
async resetForReuse() {
|
|
298
|
+
// See https://github.com/microsoft/playwright/issues/22432.
|
|
299
|
+
await this.rawMouse.move(-1, -1, 'none', new Set(), new Set(), true);
|
|
300
|
+
}
|
|
322
301
|
async pdf(options) {
|
|
323
302
|
return this._pdf.generate(options);
|
|
324
303
|
}
|
|
@@ -379,6 +358,9 @@ class FrameSession {
|
|
|
379
358
|
this._firstNonInitialNavigationCommittedFulfill = f;
|
|
380
359
|
this._firstNonInitialNavigationCommittedReject = r;
|
|
381
360
|
});
|
|
361
|
+
// The Promise is not always awaited (e.g. FrameSession._initialize can throw)
|
|
362
|
+
// so we catch errors here to prevent unhandled promise rejection.
|
|
363
|
+
this._firstNonInitialNavigationCommittedPromise.catch(() => {});
|
|
382
364
|
}
|
|
383
365
|
_isMainFrame() {
|
|
384
366
|
return this._targetId === this._crPage._targetId;
|
|
@@ -399,7 +381,7 @@ class FrameSession {
|
|
|
399
381
|
}
|
|
400
382
|
let screencastOptions;
|
|
401
383
|
if (!isSettingStorageState && this._isMainFrame() && this._crPage._browserContext._options.recordVideo && hasUIWindow) {
|
|
402
|
-
const screencastId = (0,
|
|
384
|
+
const screencastId = (0, _crypto.createGuid)();
|
|
403
385
|
const outputFile = _path.default.join(this._crPage._browserContext._options.recordVideo.dir, screencastId + '.webm');
|
|
404
386
|
screencastOptions = {
|
|
405
387
|
// validateBrowserContextOptions ensures correct video size.
|
|
@@ -410,7 +392,7 @@ class FrameSession {
|
|
|
410
392
|
// Note: it is important to start video recorder before sending Page.startScreencast,
|
|
411
393
|
// and it is equally important to send Page.startScreencast before sending Runtime.runIfWaitingForDebugger.
|
|
412
394
|
await this._createVideoRecorder(screencastId, screencastOptions);
|
|
413
|
-
this._crPage.
|
|
395
|
+
this._crPage._page.waitForInitializedOrError().then(p => {
|
|
414
396
|
if (p instanceof Error) this._stopVideoRecording().catch(() => {});
|
|
415
397
|
});
|
|
416
398
|
}
|
|
@@ -589,8 +571,7 @@ class FrameSession {
|
|
|
589
571
|
let worldName;
|
|
590
572
|
if (contextPayload.auxData && !!contextPayload.auxData.isDefault) worldName = 'main';else if (contextPayload.name === UTILITY_WORLD_NAME) worldName = 'utility';else return;
|
|
591
573
|
const context = new dom.FrameExecutionContext(delegate, frame, worldName);
|
|
592
|
-
|
|
593
|
-
frame._contextCreated(worldName, context);
|
|
574
|
+
if (worldName) frame._contextCreated(worldName, context);
|
|
594
575
|
this._contextIdToContext.set(contextPayload.id, context);
|
|
595
576
|
}
|
|
596
577
|
_onExecutionContextDestroyed(executionContextId) {
|
|
@@ -611,6 +592,9 @@ class FrameSession {
|
|
|
611
592
|
const frame = this._page._frameManager.frame(targetId);
|
|
612
593
|
if (!frame) return; // Subtree may be already gone due to renderer/browser race.
|
|
613
594
|
this._page._frameManager.removeChildFramesRecursively(frame);
|
|
595
|
+
for (const [contextId, context] of this._contextIdToContext) {
|
|
596
|
+
if (context.frame === frame) this._onExecutionContextDestroyed(contextId);
|
|
597
|
+
}
|
|
614
598
|
const frameSession = new FrameSession(this._crPage, session, targetId, this);
|
|
615
599
|
this._crPage._sessions.set(targetId, frameSession);
|
|
616
600
|
frameSession._initialize(false).catch(e => e);
|
|
@@ -640,7 +624,7 @@ class FrameSession {
|
|
|
640
624
|
session.on('Target.attachedToTarget', event => this._onAttachedToTarget(event));
|
|
641
625
|
session.on('Target.detachedFromTarget', event => this._onDetachedFromTarget(event));
|
|
642
626
|
session.on('Runtime.consoleAPICalled', event => {
|
|
643
|
-
const args = event.args.map(o => worker._existingExecutionContext
|
|
627
|
+
const args = event.args.map(o => (0, _crExecutionContext.createHandle)(worker._existingExecutionContext, o));
|
|
644
628
|
this._page._addConsoleMessage(event.type, args, (0, _crProtocolHelper.toConsoleMessageLocation)(event.stackTrace));
|
|
645
629
|
});
|
|
646
630
|
session.on('Runtime.exceptionThrown', exception => this._page.emitOnContextOnceInitialized(_browserContext.BrowserContext.Events.PageError, (0, _crProtocolHelper.exceptionToError)(exception.exceptionDetails), this._page));
|
|
@@ -697,11 +681,11 @@ class FrameSession {
|
|
|
697
681
|
}
|
|
698
682
|
const context = this._contextIdToContext.get(event.executionContextId);
|
|
699
683
|
if (!context) return;
|
|
700
|
-
const values = event.args.map(arg =>
|
|
684
|
+
const values = event.args.map(arg => (0, _crExecutionContext.createHandle)(context, arg));
|
|
701
685
|
this._page._addConsoleMessage(event.type, values, (0, _crProtocolHelper.toConsoleMessageLocation)(event.stackTrace));
|
|
702
686
|
}
|
|
703
687
|
async _onBindingCalled(event) {
|
|
704
|
-
const pageOrError = await this._crPage.
|
|
688
|
+
const pageOrError = await this._crPage._page.waitForInitializedOrError();
|
|
705
689
|
if (!(pageOrError instanceof Error)) {
|
|
706
690
|
const context = this._contextIdToContext.get(event.executionContextId);
|
|
707
691
|
if (context) await this._page._onBindingCalled(event.payload, context);
|
|
@@ -710,6 +694,8 @@ class FrameSession {
|
|
|
710
694
|
_onDialog(event) {
|
|
711
695
|
if (!this._page._frameManager.frame(this._targetId)) return; // Our frame/subtree may be gone already.
|
|
712
696
|
this._page.emitOnContext(_browserContext.BrowserContext.Events.Dialog, new dialog.Dialog(this._page, event.type, event.message, async (accept, promptText) => {
|
|
697
|
+
// TODO: this should actually be a CDP event that notifies about a cancelled navigation attempt.
|
|
698
|
+
if (this._isMainFrame() && event.type === 'beforeunload' && !accept) this._page._frameManager.frameAbortedNavigation(this._page.mainFrame()._id, 'navigation cancelled by beforeunload dialog');
|
|
713
699
|
await this._client.send('Page.handleJavaScriptDialog', {
|
|
714
700
|
accept,
|
|
715
701
|
promptText
|
|
@@ -757,8 +743,7 @@ class FrameSession {
|
|
|
757
743
|
await this._page._onFileChooserOpened(handle);
|
|
758
744
|
}
|
|
759
745
|
_willBeginDownload() {
|
|
760
|
-
|
|
761
|
-
if (!originPage) {
|
|
746
|
+
if (!this._crPage._page.initializedOrUndefined()) {
|
|
762
747
|
// Resume the page creation with an error. The page will automatically close right
|
|
763
748
|
// after the download begins.
|
|
764
749
|
this._firstNonInitialNavigationCommittedReject(new Error('Starting new page download'));
|
|
@@ -779,14 +764,14 @@ class FrameSession {
|
|
|
779
764
|
});
|
|
780
765
|
}
|
|
781
766
|
async _createVideoRecorder(screencastId, options) {
|
|
782
|
-
(0,
|
|
767
|
+
(0, _assert.assert)(!this._screencastId);
|
|
783
768
|
const ffmpegPath = _registry.registry.findExecutable('ffmpeg').executablePathOrDie(this._page.attribution.playwright.options.sdkLanguage);
|
|
784
769
|
this._videoRecorder = await _videoRecorder.VideoRecorder.launch(this._crPage._page, ffmpegPath, options);
|
|
785
770
|
this._screencastId = screencastId;
|
|
786
771
|
}
|
|
787
772
|
async _startVideoRecording(options) {
|
|
788
773
|
const screencastId = this._screencastId;
|
|
789
|
-
(0,
|
|
774
|
+
(0, _assert.assert)(screencastId);
|
|
790
775
|
this._page.once(_page.Page.Events.Close, () => this._stopVideoRecording().catch(() => {}));
|
|
791
776
|
const gotFirstFrame = new Promise(f => this._client.once('Page.screencastFrame', f));
|
|
792
777
|
await this._startScreencast(this._videoRecorder, {
|
|
@@ -797,7 +782,7 @@ class FrameSession {
|
|
|
797
782
|
});
|
|
798
783
|
// Wait for the first frame before reporting video to the client.
|
|
799
784
|
gotFirstFrame.then(() => {
|
|
800
|
-
this._crPage._browserContext._browser._videoStarted(this._crPage._browserContext, screencastId, options.outputFile, this._crPage.
|
|
785
|
+
this._crPage._browserContext._browser._videoStarted(this._crPage._browserContext, screencastId, options.outputFile, this._crPage._page.waitForInitializedOrError());
|
|
801
786
|
});
|
|
802
787
|
}
|
|
803
788
|
async _stopVideoRecording() {
|
|
@@ -827,7 +812,7 @@ class FrameSession {
|
|
|
827
812
|
}
|
|
828
813
|
async _updateViewport(preserveWindowBoundaries) {
|
|
829
814
|
if (this._crPage._browserContext._browser.isClank()) return;
|
|
830
|
-
(0,
|
|
815
|
+
(0, _assert.assert)(this._isMainFrame());
|
|
831
816
|
const options = this._crPage._browserContext._options;
|
|
832
817
|
const emulatedSize = this._page.emulatedSize();
|
|
833
818
|
if (emulatedSize === null) return;
|
|
@@ -912,6 +897,7 @@ class FrameSession {
|
|
|
912
897
|
const colorScheme = emulatedMedia.colorScheme === 'no-override' ? '' : emulatedMedia.colorScheme;
|
|
913
898
|
const reducedMotion = emulatedMedia.reducedMotion === 'no-override' ? '' : emulatedMedia.reducedMotion;
|
|
914
899
|
const forcedColors = emulatedMedia.forcedColors === 'no-override' ? '' : emulatedMedia.forcedColors;
|
|
900
|
+
const contrast = emulatedMedia.contrast === 'no-override' ? '' : emulatedMedia.contrast;
|
|
915
901
|
const features = [{
|
|
916
902
|
name: 'prefers-color-scheme',
|
|
917
903
|
value: colorScheme
|
|
@@ -921,6 +907,9 @@ class FrameSession {
|
|
|
921
907
|
}, {
|
|
922
908
|
name: 'forced-colors',
|
|
923
909
|
value: forcedColors
|
|
910
|
+
}, {
|
|
911
|
+
name: 'prefers-contrast',
|
|
912
|
+
value: contrast
|
|
924
913
|
}];
|
|
925
914
|
await this._client.send('Emulation.setEmulatedMedia', {
|
|
926
915
|
media,
|
|
@@ -1056,10 +1045,10 @@ class FrameSession {
|
|
|
1056
1045
|
async _adoptBackendNodeId(backendNodeId, to) {
|
|
1057
1046
|
const result = await this._client._sendMayFail('DOM.resolveNode', {
|
|
1058
1047
|
backendNodeId,
|
|
1059
|
-
executionContextId: to
|
|
1048
|
+
executionContextId: to.delegate._contextId
|
|
1060
1049
|
});
|
|
1061
1050
|
if (!result || result.object.subtype === 'null') throw new Error(dom.kUnableToAdoptErrorMessage);
|
|
1062
|
-
return
|
|
1051
|
+
return (0, _crExecutionContext.createHandle)(to, result.object).asElement();
|
|
1063
1052
|
}
|
|
1064
1053
|
}
|
|
1065
1054
|
async function emulateLocale(session, locale) {
|
|
@@ -1086,7 +1075,6 @@ async function emulateTimezone(session, timezoneId) {
|
|
|
1086
1075
|
throw exception;
|
|
1087
1076
|
}
|
|
1088
1077
|
}
|
|
1089
|
-
const contextDelegateSymbol = Symbol('delegate');
|
|
1090
1078
|
|
|
1091
1079
|
// Chromium reference: https://source.chromium.org/chromium/chromium/src/+/main:components/embedder_support/user_agent_utils.cc;l=434;drc=70a6711e08e9f9e0d8e4c48e9ba5cab62eb010c2
|
|
1092
1080
|
function calculateUserAgentMetadata(options) {
|
|
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.CRPDF = void 0;
|
|
7
|
-
var _utils = require("../../utils");
|
|
8
7
|
var _crProtocolHelper = require("./crProtocolHelper");
|
|
8
|
+
var _utils = require("../../utils");
|
|
9
9
|
/**
|
|
10
10
|
* Copyright 2017 Google Inc. All rights reserved.
|
|
11
11
|
* Modifications copyright (c) Microsoft Corporation.
|
|
@@ -12,9 +12,9 @@ exports.toButtonsMask = toButtonsMask;
|
|
|
12
12
|
exports.toConsoleMessageLocation = toConsoleMessageLocation;
|
|
13
13
|
exports.toModifiersMask = toModifiersMask;
|
|
14
14
|
var _fs = _interopRequireDefault(require("fs"));
|
|
15
|
-
var
|
|
16
|
-
var
|
|
17
|
-
function _interopRequireDefault(
|
|
15
|
+
var _stackTrace = require("../../utils/isomorphic/stackTrace");
|
|
16
|
+
var _fileUtils = require("../utils/fileUtils");
|
|
17
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
18
18
|
/**
|
|
19
19
|
* Copyright 2017 Google Inc. All rights reserved.
|
|
20
20
|
* Modifications copyright (c) Microsoft Corporation.
|
|
@@ -7,10 +7,10 @@ exports.CRServiceWorker = void 0;
|
|
|
7
7
|
var _page = require("../page");
|
|
8
8
|
var _crExecutionContext = require("./crExecutionContext");
|
|
9
9
|
var _crNetworkManager = require("./crNetworkManager");
|
|
10
|
-
var network = _interopRequireWildcard(require("../network"));
|
|
11
10
|
var _browserContext = require("../browserContext");
|
|
11
|
+
var network = _interopRequireWildcard(require("../network"));
|
|
12
12
|
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); }
|
|
13
|
-
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 &&
|
|
13
|
+
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; }
|
|
14
14
|
/**
|
|
15
15
|
* Copyright (c) Microsoft Corporation.
|
|
16
16
|
*
|
|
@@ -5,10 +5,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.VideoRecorder = void 0;
|
|
7
7
|
var _utils = require("../../utils");
|
|
8
|
+
var _instrumentation = require("../instrumentation");
|
|
8
9
|
var _page = require("../page");
|
|
9
|
-
var _processLauncher = require("
|
|
10
|
+
var _processLauncher = require("../utils/processLauncher");
|
|
10
11
|
var _progress = require("../progress");
|
|
11
|
-
var _instrumentation = require("../instrumentation");
|
|
12
12
|
/**
|
|
13
13
|
* Copyright (c) Microsoft Corporation.
|
|
14
14
|
*
|
package/lib/server/clock.js
CHANGED
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.Clock = void 0;
|
|
7
7
|
var clockSource = _interopRequireWildcard(require("../generated/clockSource"));
|
|
8
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 &&
|
|
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 && {}.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; }
|
|
10
10
|
/**
|
|
11
11
|
* Copyright (c) Microsoft Corporation.
|
|
12
12
|
*
|
|
@@ -130,6 +130,8 @@ class CSharpLanguageGenerator {
|
|
|
130
130
|
const assertion = action.value ? `ToHaveValueAsync(${quote(action.value)})` : `ToBeEmptyAsync()`;
|
|
131
131
|
return `await Expect(${subject}.${this._asLocator(action.selector)}).${assertion};`;
|
|
132
132
|
}
|
|
133
|
+
case 'assertSnapshot':
|
|
134
|
+
return `await Expect(${subject}.${this._asLocator(action.selector)}).ToMatchAriaSnapshotAsync(${quote(action.snapshot)});`;
|
|
133
135
|
}
|
|
134
136
|
}
|
|
135
137
|
_asLocator(selector) {
|
|
@@ -149,6 +151,12 @@ class CSharpLanguageGenerator {
|
|
|
149
151
|
using var playwright = await Playwright.CreateAsync();
|
|
150
152
|
await using var browser = await playwright.${toPascal(options.browserName)}.LaunchAsync(${formatObject(options.launchOptions, ' ', 'BrowserTypeLaunchOptions')});
|
|
151
153
|
var context = await browser.NewContextAsync(${formatContextOptions(options.contextOptions, options.deviceName)});`);
|
|
154
|
+
if (options.contextOptions.recordHar) {
|
|
155
|
+
const url = options.contextOptions.recordHar.urlFilter;
|
|
156
|
+
formatter.add(` await context.RouteFromHARAsync(${quote(options.contextOptions.recordHar.path)}${url ? `, ${formatObject({
|
|
157
|
+
url
|
|
158
|
+
}, ' ', 'BrowserContextRouteFromHAROptions')}` : ''});`);
|
|
159
|
+
}
|
|
152
160
|
formatter.newLine();
|
|
153
161
|
return formatter.format();
|
|
154
162
|
}
|
|
@@ -173,6 +181,12 @@ class CSharpLanguageGenerator {
|
|
|
173
181
|
formatter.add(` [${this._mode === 'nunit' ? 'Test' : 'TestMethod'}]
|
|
174
182
|
public async Task MyTest()
|
|
175
183
|
{`);
|
|
184
|
+
if (options.contextOptions.recordHar) {
|
|
185
|
+
const url = options.contextOptions.recordHar.urlFilter;
|
|
186
|
+
formatter.add(` await Context.RouteFromHARAsync(${quote(options.contextOptions.recordHar.path)}${url ? `, ${formatObject({
|
|
187
|
+
url
|
|
188
|
+
}, ' ', 'BrowserContextRouteFromHAROptions')}` : ''});`);
|
|
189
|
+
}
|
|
176
190
|
return formatter.format();
|
|
177
191
|
}
|
|
178
192
|
generateFooter(saveStorage) {
|
|
@@ -238,29 +252,20 @@ function getPropertyName(key) {
|
|
|
238
252
|
function toPascal(value) {
|
|
239
253
|
return value[0].toUpperCase() + value.slice(1);
|
|
240
254
|
}
|
|
241
|
-
function
|
|
242
|
-
|
|
243
|
-
...
|
|
255
|
+
function formatContextOptions(contextOptions, deviceName) {
|
|
256
|
+
let options = {
|
|
257
|
+
...contextOptions
|
|
244
258
|
};
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
result['recordHarContent'] = options.recordHar.content;
|
|
248
|
-
result['recordHarMode'] = options.recordHar.mode;
|
|
249
|
-
result['recordHarOmitContent'] = options.recordHar.omitContent;
|
|
250
|
-
result['recordHarUrlFilter'] = options.recordHar.urlFilter;
|
|
251
|
-
delete result.recordHar;
|
|
252
|
-
}
|
|
253
|
-
return result;
|
|
254
|
-
}
|
|
255
|
-
function formatContextOptions(options, deviceName) {
|
|
259
|
+
// recordHAR is replaced with routeFromHAR in the generated code.
|
|
260
|
+
delete options.recordHar;
|
|
256
261
|
const device = deviceName && _deviceDescriptors.deviceDescriptors[deviceName];
|
|
257
262
|
if (!device) {
|
|
258
263
|
if (!Object.entries(options).length) return '';
|
|
259
|
-
return formatObject(
|
|
264
|
+
return formatObject(options, ' ', 'BrowserNewContextOptions');
|
|
260
265
|
}
|
|
261
266
|
options = (0, _language.sanitizeDeviceOptions)(device, options);
|
|
262
267
|
if (!Object.entries(options).length) return `playwright.Devices[${quote(deviceName)}]`;
|
|
263
|
-
return formatObject(
|
|
268
|
+
return formatObject(options, ' ', `BrowserNewContextOptions(playwright.Devices[${quote(deviceName)}])`);
|
|
264
269
|
}
|
|
265
270
|
class CSharpFormatter {
|
|
266
271
|
constructor(offset = 0) {
|
|
@@ -108,7 +108,7 @@ class JavaLanguageGenerator {
|
|
|
108
108
|
case 'navigate':
|
|
109
109
|
return `${subject}.navigate(${quote(action.url)});`;
|
|
110
110
|
case 'select':
|
|
111
|
-
return `${subject}.${this._asLocator(action.selector, inFrameLocator)}.selectOption(${formatSelectOption(action.options.length
|
|
111
|
+
return `${subject}.${this._asLocator(action.selector, inFrameLocator)}.selectOption(${formatSelectOption(action.options.length === 1 ? action.options[0] : action.options)});`;
|
|
112
112
|
case 'assertText':
|
|
113
113
|
return `assertThat(${subject}.${this._asLocator(action.selector, inFrameLocator)}).${action.substring ? 'containsText' : 'hasText'}(${quote(action.text)});`;
|
|
114
114
|
case 'assertChecked':
|
|
@@ -120,6 +120,8 @@ class JavaLanguageGenerator {
|
|
|
120
120
|
const assertion = action.value ? `hasValue(${quote(action.value)})` : `isEmpty()`;
|
|
121
121
|
return `assertThat(${subject}.${this._asLocator(action.selector, inFrameLocator)}).${assertion};`;
|
|
122
122
|
}
|
|
123
|
+
case 'assertSnapshot':
|
|
124
|
+
return `assertThat(${subject}.${this._asLocator(action.selector, inFrameLocator)}).matchesAriaSnapshot(${quote(action.snapshot)});`;
|
|
123
125
|
}
|
|
124
126
|
}
|
|
125
127
|
_asLocator(selector, inFrameLocator) {
|
|
@@ -133,26 +135,38 @@ class JavaLanguageGenerator {
|
|
|
133
135
|
import com.microsoft.playwright.Page;
|
|
134
136
|
import com.microsoft.playwright.options.*;
|
|
135
137
|
|
|
136
|
-
import org.junit.jupiter.api.*;
|
|
138
|
+
${options.contextOptions.recordHar ? `import java.nio.file.Paths;\n` : ''}import org.junit.jupiter.api.*;
|
|
137
139
|
import static com.microsoft.playwright.assertions.PlaywrightAssertions.*;
|
|
138
140
|
|
|
139
141
|
@UsePlaywright
|
|
140
142
|
public class TestExample {
|
|
141
143
|
@Test
|
|
142
144
|
void test(Page page) {`);
|
|
145
|
+
if (options.contextOptions.recordHar) {
|
|
146
|
+
const url = options.contextOptions.recordHar.urlFilter;
|
|
147
|
+
const recordHarOptions = typeof url === 'string' ? `, new Page.RouteFromHAROptions()
|
|
148
|
+
.setUrl(${quote(url)})` : '';
|
|
149
|
+
formatter.add(` page.routeFromHAR(Paths.get(${quote(options.contextOptions.recordHar.path)})${recordHarOptions});`);
|
|
150
|
+
}
|
|
143
151
|
return formatter.format();
|
|
144
152
|
}
|
|
145
153
|
formatter.add(`
|
|
146
154
|
import com.microsoft.playwright.*;
|
|
147
155
|
import com.microsoft.playwright.options.*;
|
|
148
156
|
import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;
|
|
149
|
-
import java.util.*;
|
|
157
|
+
${options.contextOptions.recordHar ? `import java.nio.file.Paths;\n` : ''}import java.util.*;
|
|
150
158
|
|
|
151
159
|
public class Example {
|
|
152
160
|
public static void main(String[] args) {
|
|
153
161
|
try (Playwright playwright = Playwright.create()) {
|
|
154
162
|
Browser browser = playwright.${options.browserName}().launch(${formatLaunchOptions(options.launchOptions)});
|
|
155
163
|
BrowserContext context = browser.newContext(${formatContextOptions(options.contextOptions, options.deviceName)});`);
|
|
164
|
+
if (options.contextOptions.recordHar) {
|
|
165
|
+
const url = options.contextOptions.recordHar.urlFilter;
|
|
166
|
+
const recordHarOptions = typeof url === 'string' ? `, new BrowserContext.RouteFromHAROptions()
|
|
167
|
+
.setUrl(${quote(url)})` : '';
|
|
168
|
+
formatter.add(` context.routeFromHAR(Paths.get(${quote(options.contextOptions.recordHar.path)})${recordHarOptions});`);
|
|
169
|
+
}
|
|
156
170
|
return formatter.format();
|
|
157
171
|
}
|
|
158
172
|
generateFooter(saveStorage) {
|
|
@@ -190,7 +204,6 @@ function formatLaunchOptions(options) {
|
|
|
190
204
|
return lines.join('\n');
|
|
191
205
|
}
|
|
192
206
|
function formatContextOptions(contextOptions, deviceName) {
|
|
193
|
-
var _options$recordHar, _options$recordHar2, _options$recordHar3, _options$recordHar4, _options$recordHar5, _options$recordHar6, _options$recordHar7;
|
|
194
207
|
const lines = [];
|
|
195
208
|
if (!Object.keys(contextOptions).length && !deviceName) return '';
|
|
196
209
|
const device = deviceName ? _deviceDescriptors.deviceDescriptors[deviceName] : {};
|
|
@@ -208,11 +221,6 @@ function formatContextOptions(contextOptions, deviceName) {
|
|
|
208
221
|
if (options.isMobile) lines.push(` .setIsMobile(${options.isMobile})`);
|
|
209
222
|
if (options.locale) lines.push(` .setLocale(${quote(options.locale)})`);
|
|
210
223
|
if (options.proxy) lines.push(` .setProxy(new Proxy(${quote(options.proxy.server)}))`);
|
|
211
|
-
if ((_options$recordHar = options.recordHar) !== null && _options$recordHar !== void 0 && _options$recordHar.content) lines.push(` .setRecordHarContent(HarContentPolicy.${(_options$recordHar2 = options.recordHar) === null || _options$recordHar2 === void 0 ? void 0 : _options$recordHar2.content.toUpperCase()})`);
|
|
212
|
-
if ((_options$recordHar3 = options.recordHar) !== null && _options$recordHar3 !== void 0 && _options$recordHar3.mode) lines.push(` .setRecordHarMode(HarMode.${(_options$recordHar4 = options.recordHar) === null || _options$recordHar4 === void 0 ? void 0 : _options$recordHar4.mode.toUpperCase()})`);
|
|
213
|
-
if ((_options$recordHar5 = options.recordHar) !== null && _options$recordHar5 !== void 0 && _options$recordHar5.omitContent) lines.push(` .setRecordHarOmitContent(true)`);
|
|
214
|
-
if ((_options$recordHar6 = options.recordHar) !== null && _options$recordHar6 !== void 0 && _options$recordHar6.path) lines.push(` .setRecordHarPath(Paths.get(${quote(options.recordHar.path)}))`);
|
|
215
|
-
if ((_options$recordHar7 = options.recordHar) !== null && _options$recordHar7 !== void 0 && _options$recordHar7.urlFilter) lines.push(` .setRecordHarUrlFilter(${quote(options.recordHar.urlFilter)})`);
|
|
216
224
|
if (options.serviceWorkers) lines.push(` .setServiceWorkers(ServiceWorkerPolicy.${options.serviceWorkers.toUpperCase()})`);
|
|
217
225
|
if (options.storageState) lines.push(` .setStorageStatePath(Paths.get(${quote(options.storageState)}))`);
|
|
218
226
|
if (options.timezoneId) lines.push(` .setTimezoneId(${quote(options.timezoneId)})`);
|