@checkly/playwright-core 1.51.17-beta.1 → 1.54.2-beta.0
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 +65 -123
- package/browsers.json +16 -14
- package/index.js +1 -1
- package/lib/androidServerImpl.js +47 -50
- package/lib/browserServerImpl.js +89 -69
- package/lib/checkly/escapeRegExp.js +23 -27
- package/lib/checkly/fetch.js +64 -46
- package/lib/checkly/secretsFilter.js +49 -36
- package/lib/cli/driver.js +71 -69
- package/lib/cli/program.js +400 -359
- package/lib/cli/programWithTestStub.js +51 -45
- package/lib/client/accessibility.js +31 -32
- package/lib/client/android.js +151 -242
- package/lib/client/api.js +135 -283
- package/lib/client/artifact.js +39 -36
- package/lib/client/browser.js +96 -71
- package/lib/client/browserContext.js +314 -345
- package/lib/client/browserType.js +103 -127
- package/lib/client/cdpSession.js +29 -31
- package/lib/client/channelOwner.js +90 -113
- package/lib/client/clientHelper.js +48 -39
- package/lib/client/clientInstrumentation.js +40 -37
- package/lib/client/clientStackTrace.js +41 -37
- package/lib/client/clock.js +36 -36
- package/lib/client/connection.js +188 -214
- package/lib/client/consoleMessage.js +31 -28
- package/lib/client/coverage.js +25 -22
- package/lib/client/dialog.js +30 -31
- package/lib/client/download.js +25 -25
- package/lib/client/electron.js +80 -77
- package/lib/client/elementHandle.js +120 -159
- package/lib/client/errors.js +53 -53
- package/lib/client/eventEmitter.js +124 -121
- package/lib/client/events.js +72 -68
- package/lib/client/fetch.js +166 -190
- package/lib/client/fileChooser.js +25 -24
- package/lib/client/fileUtils.js +31 -28
- package/lib/client/frame.js +207 -306
- package/lib/client/harRouter.js +42 -52
- package/lib/client/input.js +42 -69
- package/lib/client/jsHandle.js +54 -69
- package/lib/client/jsonPipe.js +27 -23
- package/lib/client/localUtils.js +29 -29
- package/lib/client/locator.js +145 -237
- package/lib/client/network.js +282 -307
- package/lib/client/page.js +269 -318
- package/lib/client/platform.js +46 -43
- package/lib/client/playwright.js +51 -76
- package/lib/client/selectors.js +45 -63
- package/lib/client/stream.js +29 -25
- package/lib/client/timeoutSettings.js +55 -41
- package/lib/client/tracing.js +49 -96
- package/lib/client/types.js +26 -22
- package/lib/client/video.js +35 -27
- package/lib/client/waiter.js +69 -88
- package/lib/client/webError.js +25 -23
- package/lib/client/webSocket.js +43 -56
- package/lib/client/worker.js +48 -56
- package/lib/client/writableStream.js +27 -23
- package/lib/generated/bindingsControllerSource.js +28 -0
- package/lib/generated/clockSource.js +26 -6
- package/lib/generated/consoleApiSource.js +26 -6
- package/lib/generated/injectedScriptSource.js +26 -6
- package/lib/generated/pollingRecorderSource.js +26 -6
- package/lib/generated/storageScriptSource.js +28 -0
- package/lib/generated/utilityScriptSource.js +26 -6
- package/lib/generated/webSocketMockSource.js +333 -5
- package/lib/inProcessFactory.js +51 -53
- package/lib/inprocess.js +2 -19
- package/lib/outofprocess.js +51 -46
- package/lib/protocol/serializers.js +153 -134
- package/lib/protocol/validator.js +2807 -2739
- package/lib/protocol/validatorPrimitives.js +114 -73
- package/lib/remote/playwrightConnection.js +88 -242
- package/lib/remote/playwrightServer.js +305 -92
- package/lib/server/accessibility.js +44 -37
- package/lib/server/android/android.js +251 -241
- package/lib/server/android/backendAdb.js +87 -82
- package/lib/server/artifact.js +78 -55
- package/lib/server/bidi/bidiBrowser.js +297 -158
- package/lib/server/bidi/bidiChromium.js +119 -89
- package/lib/server/bidi/bidiConnection.js +66 -83
- package/lib/server/bidi/bidiExecutionContext.js +129 -113
- package/lib/server/bidi/bidiFirefox.js +86 -76
- package/lib/server/bidi/bidiInput.js +106 -117
- package/lib/server/bidi/bidiNetworkManager.js +142 -159
- package/lib/server/bidi/bidiOverCdp.js +57 -58
- package/lib/server/bidi/bidiPage.js +260 -260
- package/lib/server/bidi/bidiPdf.js +52 -86
- package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
- package/lib/server/bidi/third_party/bidiDeserializer.js +55 -50
- package/lib/server/bidi/third_party/bidiKeyboard.js +236 -220
- package/lib/server/bidi/third_party/bidiProtocol.js +22 -137
- package/lib/server/bidi/third_party/bidiProtocolCore.js +152 -0
- package/lib/server/bidi/third_party/bidiProtocolPermissions.js +42 -0
- package/lib/server/bidi/third_party/bidiSerializer.js +67 -63
- package/lib/server/bidi/third_party/firefoxPrefs.js +141 -119
- package/lib/server/browser.js +93 -95
- package/lib/server/browserContext.js +419 -429
- package/lib/server/browserType.js +186 -216
- package/lib/server/callLog.js +47 -44
- package/lib/server/chromium/chromium.js +235 -203
- package/lib/server/chromium/chromiumSwitches.js +100 -67
- package/lib/server/chromium/crAccessibility.js +157 -131
- package/lib/server/chromium/crBrowser.js +310 -292
- package/lib/server/chromium/crConnection.js +95 -121
- package/lib/server/chromium/crCoverage.js +121 -131
- package/lib/server/chromium/crDevTools.js +60 -51
- package/lib/server/chromium/crDragDrop.js +68 -84
- package/lib/server/chromium/crExecutionContext.js +89 -83
- package/lib/server/chromium/crInput.js +118 -113
- package/lib/server/chromium/crNetworkManager.js +274 -375
- package/lib/server/chromium/crPage.js +536 -593
- package/lib/server/chromium/crPdf.js +54 -86
- package/lib/server/chromium/crProtocolHelper.js +92 -80
- package/lib/server/chromium/crServiceWorker.js +84 -73
- package/lib/server/chromium/defaultFontFamilies.js +152 -135
- package/lib/server/chromium/protocol.d.js +16 -0
- package/lib/server/chromium/videoRecorder.js +66 -99
- package/lib/server/clock.js +107 -83
- package/lib/server/codegen/csharp.js +192 -162
- package/lib/server/codegen/java.js +156 -129
- package/lib/server/codegen/javascript.js +163 -148
- package/lib/server/codegen/jsonl.js +32 -28
- package/lib/server/codegen/language.js +75 -52
- package/lib/server/codegen/languages.js +65 -27
- package/lib/server/codegen/python.js +141 -126
- package/lib/server/codegen/types.js +15 -4
- package/lib/server/console.js +28 -32
- package/lib/server/cookieStore.js +108 -86
- package/lib/server/debugController.js +147 -151
- package/lib/server/debugger.js +86 -78
- package/lib/server/deviceDescriptors.js +37 -24
- package/lib/server/deviceDescriptorsSource.json +238 -128
- package/lib/server/dialog.js +84 -39
- package/lib/server/dispatchers/androidDispatcher.js +257 -148
- package/lib/server/dispatchers/artifactDispatcher.js +79 -79
- package/lib/server/dispatchers/browserContextDispatcher.js +289 -259
- package/lib/server/dispatchers/browserDispatcher.js +96 -148
- package/lib/server/dispatchers/browserTypeDispatcher.js +50 -41
- package/lib/server/dispatchers/cdpSessionDispatcher.js +35 -39
- package/lib/server/dispatchers/debugControllerDispatcher.js +65 -83
- package/lib/server/dispatchers/dialogDispatcher.js +34 -31
- package/lib/server/dispatchers/dispatcher.js +208 -248
- package/lib/server/dispatchers/electronDispatcher.js +66 -70
- package/lib/server/dispatchers/elementHandlerDispatcher.js +164 -216
- package/lib/server/dispatchers/frameDispatcher.js +211 -272
- package/lib/server/dispatchers/jsHandleDispatcher.js +63 -75
- package/lib/server/dispatchers/jsonPipeDispatcher.js +37 -38
- package/lib/server/dispatchers/localUtilsDispatcher.js +121 -119
- package/lib/server/dispatchers/networkDispatchers.js +117 -128
- package/lib/server/dispatchers/pageDispatcher.js +256 -248
- package/lib/server/dispatchers/playwrightDispatcher.js +92 -87
- package/lib/server/dispatchers/streamDispatcher.js +52 -48
- package/lib/server/dispatchers/tracingDispatcher.js +47 -52
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +126 -150
- package/lib/server/dispatchers/writableStreamDispatcher.js +65 -43
- package/lib/server/dom.js +485 -582
- package/lib/server/download.js +47 -37
- package/lib/server/electron/electron.js +216 -243
- package/lib/server/electron/loader.js +9 -37
- package/lib/server/errors.js +47 -46
- package/lib/server/fetch.js +317 -360
- package/lib/server/fileChooser.js +25 -24
- package/lib/server/fileUploadUtils.js +66 -60
- package/lib/server/firefox/ffAccessibility.js +153 -131
- package/lib/server/firefox/ffBrowser.js +268 -305
- package/lib/server/firefox/ffConnection.js +63 -84
- package/lib/server/firefox/ffExecutionContext.js +92 -73
- package/lib/server/firefox/ffInput.js +82 -84
- package/lib/server/firefox/ffNetworkManager.js +137 -114
- package/lib/server/firefox/ffPage.js +261 -293
- package/lib/server/firefox/firefox.js +80 -72
- package/lib/server/firefox/protocol.d.js +16 -0
- package/lib/server/formData.js +107 -35
- package/lib/server/frameSelectors.js +98 -114
- package/lib/server/frames.js +845 -1055
- package/lib/server/har/harRecorder.js +85 -77
- package/lib/server/har/harTracer.js +290 -223
- package/lib/server/harBackend.js +80 -80
- package/lib/server/helper.js +55 -59
- package/lib/server/index.js +59 -99
- package/lib/server/input.js +151 -189
- package/lib/server/instrumentation.js +57 -44
- package/lib/server/javascript.js +133 -134
- package/lib/server/launchApp.js +113 -75
- package/lib/server/localUtils.js +150 -142
- package/lib/server/macEditingCommands.js +141 -137
- package/lib/server/network.js +299 -303
- package/lib/server/page.js +513 -544
- package/lib/server/pipeTransport.js +49 -45
- package/lib/server/playwright.js +58 -67
- package/lib/server/progress.js +137 -68
- package/lib/server/protocolError.js +34 -31
- package/lib/server/recorder/chat.js +70 -86
- package/lib/server/recorder/recorderApp.js +341 -176
- package/lib/server/recorder/recorderInTraceViewer.js +65 -94
- package/lib/server/recorder/recorderRunner.js +93 -116
- package/lib/server/recorder/recorderSignalProcessor.js +83 -0
- package/lib/server/recorder/recorderUtils.js +104 -47
- package/lib/server/recorder/throttledFile.js +42 -30
- package/lib/server/recorder.js +395 -275
- package/lib/server/registry/browserFetcher.js +106 -101
- package/lib/server/registry/dependencies.js +245 -196
- package/lib/server/registry/index.js +930 -803
- package/lib/server/registry/nativeDeps.js +1073 -464
- package/lib/server/registry/oopDownloadBrowserMain.js +57 -75
- package/lib/server/screenshotter.js +160 -191
- package/lib/server/selectors.js +90 -51
- package/lib/server/socksClientCertificatesInterceptor.js +171 -186
- package/lib/server/socksInterceptor.js +62 -70
- package/lib/server/trace/recorder/snapshotter.js +76 -102
- package/lib/server/trace/recorder/snapshotterInjected.js +238 -217
- package/lib/server/trace/recorder/tracing.js +354 -362
- package/lib/server/trace/test/inMemorySnapshotter.js +46 -52
- package/lib/server/trace/viewer/traceViewer.js +160 -147
- package/lib/server/transport.js +119 -134
- package/lib/server/types.js +26 -22
- package/lib/server/usKeyboardLayout.js +135 -545
- package/lib/server/utils/ascii.js +39 -26
- package/lib/server/utils/comparators.js +105 -103
- package/lib/server/utils/crypto.js +157 -112
- package/lib/server/utils/debug.js +36 -32
- package/lib/server/utils/debugLogger.js +77 -48
- package/lib/server/utils/env.js +52 -37
- package/lib/server/utils/eventsHelper.js +29 -28
- package/lib/server/utils/expectUtils.js +31 -26
- package/lib/server/utils/fileUtils.js +123 -136
- package/lib/server/utils/happyEyeballs.js +141 -126
- package/lib/server/utils/hostPlatform.js +84 -120
- package/lib/server/utils/httpServer.js +106 -121
- package/lib/server/utils/image_tools/colorUtils.js +42 -51
- package/lib/server/utils/image_tools/compare.js +44 -43
- package/lib/server/utils/image_tools/imageChannel.js +38 -30
- package/lib/server/utils/image_tools/stats.js +40 -40
- package/lib/server/utils/linuxUtils.js +50 -37
- package/lib/server/utils/network.js +152 -96
- package/lib/server/utils/nodePlatform.js +87 -79
- package/lib/server/utils/pipeTransport.js +44 -42
- package/lib/server/utils/processLauncher.js +111 -121
- package/lib/server/utils/profiler.js +52 -39
- package/lib/server/utils/socksProxy.js +280 -339
- package/lib/server/utils/spawnAsync.js +37 -41
- package/lib/server/utils/task.js +31 -38
- package/lib/server/utils/userAgent.js +73 -66
- package/lib/server/utils/wsServer.js +68 -75
- package/lib/server/utils/zipFile.js +36 -37
- package/lib/server/utils/zones.js +37 -34
- package/lib/server/webkit/protocol.d.js +16 -0
- package/lib/server/webkit/webkit.js +77 -61
- package/lib/server/webkit/wkAccessibility.js +161 -118
- package/lib/server/webkit/wkBrowser.js +193 -184
- package/lib/server/webkit/wkConnection.js +59 -83
- package/lib/server/webkit/wkExecutionContext.js +85 -70
- package/lib/server/webkit/wkInput.js +97 -95
- package/lib/server/webkit/wkInterceptableRequest.js +102 -95
- package/lib/server/webkit/wkPage.js +568 -667
- package/lib/server/webkit/wkProvisionalPage.js +45 -56
- package/lib/server/webkit/wkWorkers.js +79 -79
- package/lib/utils/expectUtils.js +31 -26
- package/lib/utils/isomorphic/ariaSnapshot.js +149 -152
- package/lib/utils/isomorphic/assert.js +28 -22
- package/lib/utils/isomorphic/colors.js +66 -59
- package/lib/utils/isomorphic/cssParser.js +120 -125
- package/lib/utils/isomorphic/cssTokenizer.js +436 -364
- package/lib/utils/isomorphic/headers.js +38 -37
- package/lib/utils/isomorphic/locatorGenerators.js +358 -357
- package/lib/utils/isomorphic/locatorParser.js +96 -105
- package/lib/utils/isomorphic/locatorUtils.js +63 -44
- package/lib/utils/isomorphic/manualPromise.js +46 -39
- package/lib/utils/isomorphic/mimeType.js +447 -25
- package/lib/utils/isomorphic/multimap.js +34 -27
- package/lib/utils/isomorphic/protocolFormatter.js +68 -0
- package/lib/utils/isomorphic/protocolMetainfo.js +321 -0
- package/lib/utils/isomorphic/recorderUtils.js +140 -181
- package/lib/utils/isomorphic/rtti.js +35 -33
- package/lib/utils/isomorphic/selectorParser.js +182 -193
- package/lib/utils/isomorphic/semaphore.js +27 -24
- package/lib/utils/isomorphic/stackTrace.js +87 -98
- package/lib/utils/isomorphic/stringUtils.js +98 -112
- package/lib/utils/isomorphic/time.js +46 -22
- package/lib/utils/isomorphic/timeoutRunner.js +53 -53
- package/lib/utils/isomorphic/traceUtils.js +37 -41
- package/lib/utils/isomorphic/types.js +15 -4
- package/lib/utils/isomorphic/urlMatch.js +113 -67
- package/lib/utils/isomorphic/utilityScriptSerializers.js +251 -0
- package/lib/utils.js +101 -443
- package/lib/utilsBundle.js +101 -52
- package/lib/utilsBundleImpl/index.js +160 -150
- package/lib/zipBundle.js +32 -23
- package/lib/zipBundleImpl.js +4 -4
- package/package.json +1 -1
- package/types/protocol.d.ts +1267 -1057
- package/types/types.d.ts +131 -29
- package/lib/common/socksProxy.js +0 -569
- package/lib/common/timeoutSettings.js +0 -73
- package/lib/common/types.js +0 -5
- package/lib/image_tools/colorUtils.js +0 -98
- package/lib/image_tools/compare.js +0 -108
- package/lib/image_tools/imageChannel.js +0 -70
- package/lib/image_tools/stats.js +0 -102
- package/lib/protocol/debug.js +0 -27
- package/lib/protocol/transport.js +0 -82
- package/lib/server/dispatchers/selectorsDispatcher.js +0 -36
- package/lib/server/isomorphic/utilityScriptSerializers.js +0 -229
- package/lib/server/recorder/contextRecorder.js +0 -290
- package/lib/server/recorder/recorderCollection.js +0 -104
- package/lib/server/recorder/recorderFrontend.js +0 -5
- package/lib/server/storageScript.js +0 -160
- package/lib/server/timeoutSettings.js +0 -74
- package/lib/third_party/diff_match_patch.js +0 -2222
- package/lib/utils/ascii.js +0 -31
- package/lib/utils/comparators.js +0 -171
- package/lib/utils/crypto.js +0 -174
- package/lib/utils/debug.js +0 -46
- package/lib/utils/debugLogger.js +0 -91
- package/lib/utils/env.js +0 -49
- package/lib/utils/eventsHelper.js +0 -38
- package/lib/utils/fileUtils.js +0 -205
- package/lib/utils/happy-eyeballs.js +0 -210
- package/lib/utils/headers.js +0 -52
- package/lib/utils/hostPlatform.js +0 -133
- package/lib/utils/httpServer.js +0 -237
- package/lib/utils/index.js +0 -368
- package/lib/utils/linuxUtils.js +0 -78
- package/lib/utils/manualPromise.js +0 -109
- package/lib/utils/multimap.js +0 -75
- package/lib/utils/network.js +0 -160
- package/lib/utils/processLauncher.js +0 -248
- package/lib/utils/profiler.js +0 -53
- package/lib/utils/rtti.js +0 -44
- package/lib/utils/semaphore.js +0 -51
- package/lib/utils/spawnAsync.js +0 -45
- package/lib/utils/stackTrace.js +0 -121
- package/lib/utils/task.js +0 -58
- package/lib/utils/time.js +0 -37
- package/lib/utils/timeoutRunner.js +0 -66
- package/lib/utils/traceUtils.js +0 -44
- package/lib/utils/userAgent.js +0 -105
- package/lib/utils/wsServer.js +0 -127
- package/lib/utils/zipFile.js +0 -75
- package/lib/utils/zones.js +0 -62
- package/lib/vite/htmlReport/index.html +0 -69
- package/lib/vite/recorder/assets/codeMirrorModule-DrMbgOIo.js +0 -16684
- package/lib/vite/recorder/assets/codeMirrorModule-DuST8d_k.css +0 -344
- package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
- package/lib/vite/recorder/assets/index-5NM3V7eb.css +0 -2524
- package/lib/vite/recorder/assets/index-CT-scFHn.js +0 -16848
- package/lib/vite/recorder/index.html +0 -29
- package/lib/vite/recorder/playwright-logo.svg +0 -9
- package/lib/vite/traceViewer/assets/codeMirrorModule-CB-2okZ8.js +0 -16684
- package/lib/vite/traceViewer/assets/defaultSettingsView-CBiB4avC.js +0 -217
- package/lib/vite/traceViewer/assets/inspectorTab-CwgfffWb.js +0 -25143
- package/lib/vite/traceViewer/assets/workbench-CWZselvp.js +0 -2470
- package/lib/vite/traceViewer/assets/xtermModule-Es_gt_u7.js +0 -5994
- package/lib/vite/traceViewer/codeMirrorModule.DuST8d_k.css +0 -344
- package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
- package/lib/vite/traceViewer/defaultSettingsView.Dp3b_92q.css +0 -41
- package/lib/vite/traceViewer/embedded.BeldSa2G.css +0 -68
- package/lib/vite/traceViewer/embedded.gzudoghF.js +0 -106
- package/lib/vite/traceViewer/embedded.html +0 -18
- package/lib/vite/traceViewer/index.DilotR1h.js +0 -314
- package/lib/vite/traceViewer/index.QewjJ85u.css +0 -131
- package/lib/vite/traceViewer/index.html +0 -47
- package/lib/vite/traceViewer/inspectorTab.DnGm18kV.css +0 -3178
- package/lib/vite/traceViewer/playwright-logo.svg +0 -9
- package/lib/vite/traceViewer/recorder.DLgqV9db.css +0 -15
- package/lib/vite/traceViewer/recorder.DVrkq3Um.js +0 -551
- package/lib/vite/traceViewer/recorder.html +0 -17
- package/lib/vite/traceViewer/snapshot.html +0 -21
- package/lib/vite/traceViewer/sw.bundle.js +0 -3
- package/lib/vite/traceViewer/uiMode.C9_OcpPU.js +0 -1756
- package/lib/vite/traceViewer/uiMode.c5ORgcrX.css +0 -1424
- package/lib/vite/traceViewer/uiMode.html +0 -21
- package/lib/vite/traceViewer/workbench.xUZSA8PY.css +0 -787
- package/lib/vite/traceViewer/xtermModule.EsaqrrTX.css +0 -209
|
@@ -1,47 +1,43 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.
|
|
4
|
-
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var language_exports = {};
|
|
20
|
+
__export(language_exports, {
|
|
21
|
+
fromKeyboardModifiers: () => fromKeyboardModifiers,
|
|
22
|
+
generateCode: () => generateCode,
|
|
23
|
+
sanitizeDeviceOptions: () => sanitizeDeviceOptions,
|
|
24
|
+
toClickOptionsForSourceCode: () => toClickOptionsForSourceCode,
|
|
25
|
+
toKeyboardModifiers: () => toKeyboardModifiers,
|
|
26
|
+
toSignalMap: () => toSignalMap
|
|
5
27
|
});
|
|
6
|
-
exports
|
|
7
|
-
exports.generateCode = generateCode;
|
|
8
|
-
exports.sanitizeDeviceOptions = sanitizeDeviceOptions;
|
|
9
|
-
exports.toClickOptionsForSourceCode = toClickOptionsForSourceCode;
|
|
10
|
-
exports.toKeyboardModifiers = toKeyboardModifiers;
|
|
11
|
-
exports.toSignalMap = toSignalMap;
|
|
12
|
-
/**
|
|
13
|
-
* Copyright (c) Microsoft Corporation.
|
|
14
|
-
*
|
|
15
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
16
|
-
* you may not use this file except in compliance with the License.
|
|
17
|
-
* You may obtain a copy of the License at
|
|
18
|
-
*
|
|
19
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
20
|
-
*
|
|
21
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
22
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
23
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
24
|
-
* See the License for the specific language governing permissions and
|
|
25
|
-
* limitations under the License.
|
|
26
|
-
*/
|
|
27
|
-
|
|
28
|
+
module.exports = __toCommonJS(language_exports);
|
|
28
29
|
function generateCode(actions, languageGenerator, options) {
|
|
29
30
|
const header = languageGenerator.generateHeader(options);
|
|
30
31
|
const footer = languageGenerator.generateFooter(options.saveStorage);
|
|
31
|
-
const actionTexts = actions.map(a => languageGenerator.generateAction(a)).filter(Boolean);
|
|
32
|
-
const text = [header, ...actionTexts, footer].join(
|
|
33
|
-
return {
|
|
34
|
-
header,
|
|
35
|
-
footer,
|
|
36
|
-
actionTexts,
|
|
37
|
-
text
|
|
38
|
-
};
|
|
32
|
+
const actionTexts = actions.map((a) => languageGenerator.generateAction(a)).filter(Boolean);
|
|
33
|
+
const text = [header, ...actionTexts, footer].join("\n");
|
|
34
|
+
return { header, footer, actionTexts, text };
|
|
39
35
|
}
|
|
40
36
|
function sanitizeDeviceOptions(device, options) {
|
|
41
|
-
// Filter out all the properties from the device descriptor.
|
|
42
37
|
const cleanedOptions = {};
|
|
43
38
|
for (const property in options) {
|
|
44
|
-
if (JSON.stringify(device[property]) !== JSON.stringify(options[property]))
|
|
39
|
+
if (JSON.stringify(device[property]) !== JSON.stringify(options[property]))
|
|
40
|
+
cleanedOptions[property] = options[property];
|
|
45
41
|
}
|
|
46
42
|
return cleanedOptions;
|
|
47
43
|
}
|
|
@@ -50,7 +46,12 @@ function toSignalMap(action) {
|
|
|
50
46
|
let download;
|
|
51
47
|
let dialog;
|
|
52
48
|
for (const signal of action.signals) {
|
|
53
|
-
if (signal.name ===
|
|
49
|
+
if (signal.name === "popup")
|
|
50
|
+
popup = signal;
|
|
51
|
+
else if (signal.name === "download")
|
|
52
|
+
download = signal;
|
|
53
|
+
else if (signal.name === "dialog")
|
|
54
|
+
dialog = signal;
|
|
54
55
|
}
|
|
55
56
|
return {
|
|
56
57
|
popup,
|
|
@@ -60,29 +61,51 @@ function toSignalMap(action) {
|
|
|
60
61
|
}
|
|
61
62
|
function toKeyboardModifiers(modifiers) {
|
|
62
63
|
const result = [];
|
|
63
|
-
if (modifiers & 1)
|
|
64
|
-
|
|
65
|
-
if (modifiers &
|
|
66
|
-
|
|
64
|
+
if (modifiers & 1)
|
|
65
|
+
result.push("Alt");
|
|
66
|
+
if (modifiers & 2)
|
|
67
|
+
result.push("ControlOrMeta");
|
|
68
|
+
if (modifiers & 4)
|
|
69
|
+
result.push("ControlOrMeta");
|
|
70
|
+
if (modifiers & 8)
|
|
71
|
+
result.push("Shift");
|
|
67
72
|
return result;
|
|
68
73
|
}
|
|
69
74
|
function fromKeyboardModifiers(modifiers) {
|
|
70
75
|
let result = 0;
|
|
71
|
-
if (!modifiers)
|
|
72
|
-
|
|
73
|
-
if (modifiers.includes(
|
|
74
|
-
|
|
75
|
-
if (modifiers.includes(
|
|
76
|
-
|
|
76
|
+
if (!modifiers)
|
|
77
|
+
return result;
|
|
78
|
+
if (modifiers.includes("Alt"))
|
|
79
|
+
result |= 1;
|
|
80
|
+
if (modifiers.includes("Control"))
|
|
81
|
+
result |= 2;
|
|
82
|
+
if (modifiers.includes("ControlOrMeta"))
|
|
83
|
+
result |= 2;
|
|
84
|
+
if (modifiers.includes("Meta"))
|
|
85
|
+
result |= 4;
|
|
86
|
+
if (modifiers.includes("Shift"))
|
|
87
|
+
result |= 8;
|
|
77
88
|
return result;
|
|
78
89
|
}
|
|
79
90
|
function toClickOptionsForSourceCode(action) {
|
|
80
91
|
const modifiers = toKeyboardModifiers(action.modifiers);
|
|
81
92
|
const options = {};
|
|
82
|
-
if (action.button !==
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
if (action.
|
|
93
|
+
if (action.button !== "left")
|
|
94
|
+
options.button = action.button;
|
|
95
|
+
if (modifiers.length)
|
|
96
|
+
options.modifiers = modifiers;
|
|
97
|
+
if (action.clickCount > 2)
|
|
98
|
+
options.clickCount = action.clickCount;
|
|
99
|
+
if (action.position)
|
|
100
|
+
options.position = action.position;
|
|
87
101
|
return options;
|
|
88
|
-
}
|
|
102
|
+
}
|
|
103
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
104
|
+
0 && (module.exports = {
|
|
105
|
+
fromKeyboardModifiers,
|
|
106
|
+
generateCode,
|
|
107
|
+
sanitizeDeviceOptions,
|
|
108
|
+
toClickOptionsForSourceCode,
|
|
109
|
+
toKeyboardModifiers,
|
|
110
|
+
toSignalMap
|
|
111
|
+
});
|
|
@@ -1,30 +1,68 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.
|
|
4
|
-
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var languages_exports = {};
|
|
20
|
+
__export(languages_exports, {
|
|
21
|
+
languageSet: () => languageSet
|
|
5
22
|
});
|
|
6
|
-
exports
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
/**
|
|
13
|
-
* Copyright (c) Microsoft Corporation.
|
|
14
|
-
*
|
|
15
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
16
|
-
* you may not use this file except in compliance with the License.
|
|
17
|
-
* You may obtain a copy of the License at
|
|
18
|
-
*
|
|
19
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
20
|
-
*
|
|
21
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
22
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
23
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
24
|
-
* See the License for the specific language governing permissions and
|
|
25
|
-
* limitations under the License.
|
|
26
|
-
*/
|
|
27
|
-
|
|
23
|
+
module.exports = __toCommonJS(languages_exports);
|
|
24
|
+
var import_csharp = require("./csharp");
|
|
25
|
+
var import_java = require("./java");
|
|
26
|
+
var import_javascript = require("./javascript");
|
|
27
|
+
var import_jsonl = require("./jsonl");
|
|
28
|
+
var import_python = require("./python");
|
|
28
29
|
function languageSet() {
|
|
29
|
-
return
|
|
30
|
-
|
|
30
|
+
return /* @__PURE__ */ new Set([
|
|
31
|
+
new import_javascript.JavaScriptLanguageGenerator(
|
|
32
|
+
/* isPlaywrightTest */
|
|
33
|
+
true
|
|
34
|
+
),
|
|
35
|
+
new import_javascript.JavaScriptLanguageGenerator(
|
|
36
|
+
/* isPlaywrightTest */
|
|
37
|
+
false
|
|
38
|
+
),
|
|
39
|
+
new import_python.PythonLanguageGenerator(
|
|
40
|
+
/* isAsync */
|
|
41
|
+
false,
|
|
42
|
+
/* isPytest */
|
|
43
|
+
true
|
|
44
|
+
),
|
|
45
|
+
new import_python.PythonLanguageGenerator(
|
|
46
|
+
/* isAsync */
|
|
47
|
+
false,
|
|
48
|
+
/* isPytest */
|
|
49
|
+
false
|
|
50
|
+
),
|
|
51
|
+
new import_python.PythonLanguageGenerator(
|
|
52
|
+
/* isAsync */
|
|
53
|
+
true,
|
|
54
|
+
/* isPytest */
|
|
55
|
+
false
|
|
56
|
+
),
|
|
57
|
+
new import_csharp.CSharpLanguageGenerator("mstest"),
|
|
58
|
+
new import_csharp.CSharpLanguageGenerator("nunit"),
|
|
59
|
+
new import_csharp.CSharpLanguageGenerator("library"),
|
|
60
|
+
new import_java.JavaLanguageGenerator("junit"),
|
|
61
|
+
new import_java.JavaLanguageGenerator("library"),
|
|
62
|
+
new import_jsonl.JsonlLanguageGenerator()
|
|
63
|
+
]);
|
|
64
|
+
}
|
|
65
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
66
|
+
0 && (module.exports = {
|
|
67
|
+
languageSet
|
|
68
|
+
});
|
|
@@ -1,59 +1,57 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.
|
|
4
|
-
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var python_exports = {};
|
|
20
|
+
__export(python_exports, {
|
|
21
|
+
PythonLanguageGenerator: () => PythonLanguageGenerator
|
|
5
22
|
});
|
|
6
|
-
exports
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
/**
|
|
11
|
-
* Copyright (c) Microsoft Corporation.
|
|
12
|
-
*
|
|
13
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
14
|
-
* you may not use this file except in compliance with the License.
|
|
15
|
-
* You may obtain a copy of the License at
|
|
16
|
-
*
|
|
17
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
18
|
-
*
|
|
19
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
20
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
21
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
22
|
-
* See the License for the specific language governing permissions and
|
|
23
|
-
* limitations under the License.
|
|
24
|
-
*/
|
|
25
|
-
|
|
23
|
+
module.exports = __toCommonJS(python_exports);
|
|
24
|
+
var import_language = require("./language");
|
|
25
|
+
var import_utils = require("../../utils");
|
|
26
|
+
var import_deviceDescriptors = require("../deviceDescriptors");
|
|
26
27
|
class PythonLanguageGenerator {
|
|
27
28
|
constructor(isAsync, isPyTest) {
|
|
28
|
-
this.
|
|
29
|
-
this.
|
|
30
|
-
this.
|
|
31
|
-
this.
|
|
32
|
-
this._awaitPrefix = void 0;
|
|
33
|
-
this._asyncPrefix = void 0;
|
|
34
|
-
this._isAsync = void 0;
|
|
35
|
-
this._isPyTest = void 0;
|
|
36
|
-
this.id = isPyTest ? 'python-pytest' : isAsync ? 'python-async' : 'python';
|
|
37
|
-
this.name = isPyTest ? 'Pytest' : isAsync ? 'Library Async' : 'Library';
|
|
29
|
+
this.groupName = "Python";
|
|
30
|
+
this.highlighter = "python";
|
|
31
|
+
this.id = isPyTest ? "python-pytest" : isAsync ? "python-async" : "python";
|
|
32
|
+
this.name = isPyTest ? "Pytest" : isAsync ? "Library Async" : "Library";
|
|
38
33
|
this._isAsync = isAsync;
|
|
39
34
|
this._isPyTest = isPyTest;
|
|
40
|
-
this._awaitPrefix = isAsync ?
|
|
41
|
-
this._asyncPrefix = isAsync ?
|
|
35
|
+
this._awaitPrefix = isAsync ? "await " : "";
|
|
36
|
+
this._asyncPrefix = isAsync ? "async " : "";
|
|
42
37
|
}
|
|
43
38
|
generateAction(actionInContext) {
|
|
44
39
|
const action = actionInContext.action;
|
|
45
|
-
if (this._isPyTest && (action.name ===
|
|
40
|
+
if (this._isPyTest && (action.name === "openPage" || action.name === "closePage"))
|
|
41
|
+
return "";
|
|
46
42
|
const pageAlias = actionInContext.frame.pageAlias;
|
|
47
43
|
const formatter = new PythonFormatter(4);
|
|
48
|
-
if (action.name ===
|
|
44
|
+
if (action.name === "openPage") {
|
|
49
45
|
formatter.add(`${pageAlias} = ${this._awaitPrefix}context.new_page()`);
|
|
50
|
-
if (action.url && action.url !==
|
|
46
|
+
if (action.url && action.url !== "about:blank" && action.url !== "chrome://newtab/")
|
|
47
|
+
formatter.add(`${this._awaitPrefix}${pageAlias}.goto(${quote(action.url)})`);
|
|
51
48
|
return formatter.format();
|
|
52
49
|
}
|
|
53
|
-
const locators = actionInContext.frame.framePath.map(selector => `.${this._asLocator(selector)}.content_frame`);
|
|
54
|
-
const subject = `${pageAlias}${locators.join(
|
|
55
|
-
const signals = (0,
|
|
56
|
-
if (signals.dialog)
|
|
50
|
+
const locators = actionInContext.frame.framePath.map((selector) => `.${this._asLocator(selector)}.content_frame`);
|
|
51
|
+
const subject = `${pageAlias}${locators.join("")}`;
|
|
52
|
+
const signals = (0, import_language.toSignalMap)(action);
|
|
53
|
+
if (signals.dialog)
|
|
54
|
+
formatter.add(` ${pageAlias}.once("dialog", lambda dialog: dialog.dismiss())`);
|
|
57
55
|
let code = `${this._awaitPrefix}${this._generateActionCall(subject, actionInContext)}`;
|
|
58
56
|
if (signals.popup) {
|
|
59
57
|
code = `${this._asyncPrefix}with ${pageAlias}.expect_popup() as ${signals.popup.popupAlias}_info {
|
|
@@ -73,72 +71,76 @@ class PythonLanguageGenerator {
|
|
|
73
71
|
_generateActionCall(subject, actionInContext) {
|
|
74
72
|
const action = actionInContext.action;
|
|
75
73
|
switch (action.name) {
|
|
76
|
-
case
|
|
77
|
-
throw Error(
|
|
78
|
-
case
|
|
74
|
+
case "openPage":
|
|
75
|
+
throw Error("Not reached");
|
|
76
|
+
case "closePage":
|
|
79
77
|
return `${subject}.close()`;
|
|
80
|
-
case
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
case
|
|
78
|
+
case "click": {
|
|
79
|
+
let method = "click";
|
|
80
|
+
if (action.clickCount === 2)
|
|
81
|
+
method = "dblclick";
|
|
82
|
+
const options = (0, import_language.toClickOptionsForSourceCode)(action);
|
|
83
|
+
const optionsString = formatOptions(options, false);
|
|
84
|
+
return `${subject}.${this._asLocator(action.selector)}.${method}(${optionsString})`;
|
|
85
|
+
}
|
|
86
|
+
case "check":
|
|
89
87
|
return `${subject}.${this._asLocator(action.selector)}.check()`;
|
|
90
|
-
case
|
|
88
|
+
case "uncheck":
|
|
91
89
|
return `${subject}.${this._asLocator(action.selector)}.uncheck()`;
|
|
92
|
-
case
|
|
90
|
+
case "fill":
|
|
93
91
|
return `${subject}.${this._asLocator(action.selector)}.fill(${quote(action.text)})`;
|
|
94
|
-
case
|
|
92
|
+
case "setInputFiles":
|
|
95
93
|
return `${subject}.${this._asLocator(action.selector)}.set_input_files(${formatValue(action.files.length === 1 ? action.files[0] : action.files)})`;
|
|
96
|
-
case
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
case 'navigate':
|
|
94
|
+
case "press": {
|
|
95
|
+
const modifiers = (0, import_language.toKeyboardModifiers)(action.modifiers);
|
|
96
|
+
const shortcut = [...modifiers, action.key].join("+");
|
|
97
|
+
return `${subject}.${this._asLocator(action.selector)}.press(${quote(shortcut)})`;
|
|
98
|
+
}
|
|
99
|
+
case "navigate":
|
|
103
100
|
return `${subject}.goto(${quote(action.url)})`;
|
|
104
|
-
case
|
|
101
|
+
case "select":
|
|
105
102
|
return `${subject}.${this._asLocator(action.selector)}.select_option(${formatValue(action.options.length === 1 ? action.options[0] : action.options)})`;
|
|
106
|
-
case
|
|
107
|
-
return `expect(${subject}.${this._asLocator(action.selector)}).${action.substring ?
|
|
108
|
-
case
|
|
109
|
-
return `expect(${subject}.${this._asLocator(action.selector)}).${action.checked ?
|
|
110
|
-
case
|
|
103
|
+
case "assertText":
|
|
104
|
+
return `expect(${subject}.${this._asLocator(action.selector)}).${action.substring ? "to_contain_text" : "to_have_text"}(${quote(action.text)})`;
|
|
105
|
+
case "assertChecked":
|
|
106
|
+
return `expect(${subject}.${this._asLocator(action.selector)}).${action.checked ? "to_be_checked()" : "not_to_be_checked()"}`;
|
|
107
|
+
case "assertVisible":
|
|
111
108
|
return `expect(${subject}.${this._asLocator(action.selector)}).to_be_visible()`;
|
|
112
|
-
case
|
|
113
|
-
{
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
return `expect(${subject}.${this._asLocator(action.selector)}).to_match_aria_snapshot(${quote(action.snapshot)})`;
|
|
109
|
+
case "assertValue": {
|
|
110
|
+
const assertion = action.value ? `to_have_value(${quote(action.value)})` : `to_be_empty()`;
|
|
111
|
+
return `expect(${subject}.${this._asLocator(action.selector)}).${assertion};`;
|
|
112
|
+
}
|
|
113
|
+
case "assertSnapshot":
|
|
114
|
+
return `expect(${subject}.${this._asLocator(action.selector)}).to_match_aria_snapshot(${quote(action.ariaSnapshot)})`;
|
|
119
115
|
}
|
|
120
116
|
}
|
|
121
117
|
_asLocator(selector) {
|
|
122
|
-
return (0,
|
|
118
|
+
return (0, import_utils.asLocator)("python", selector);
|
|
123
119
|
}
|
|
124
120
|
generateHeader(options) {
|
|
125
121
|
const formatter = new PythonFormatter();
|
|
126
122
|
const recordHar = options.contextOptions.recordHar;
|
|
127
123
|
if (this._isPyTest) {
|
|
128
|
-
const contextOptions = formatContextOptions(
|
|
124
|
+
const contextOptions = formatContextOptions(
|
|
125
|
+
options.contextOptions,
|
|
126
|
+
options.deviceName,
|
|
127
|
+
true
|
|
128
|
+
/* asDict */
|
|
129
|
+
);
|
|
129
130
|
const fixture = contextOptions ? `
|
|
130
131
|
|
|
131
132
|
@pytest.fixture(scope="session")
|
|
132
133
|
def browser_context_args(browser_context_args, playwright) {
|
|
133
134
|
return {${contextOptions}}
|
|
134
135
|
}
|
|
135
|
-
` :
|
|
136
|
-
formatter.add(`${options.deviceName || contextOptions ?
|
|
136
|
+
` : "";
|
|
137
|
+
formatter.add(`${options.deviceName || contextOptions ? "import pytest\n" : ""}import re
|
|
137
138
|
from playwright.sync_api import Page, expect
|
|
138
139
|
${fixture}
|
|
139
140
|
|
|
140
141
|
def test_example(page: Page) -> None {`);
|
|
141
|
-
if (recordHar)
|
|
142
|
+
if (recordHar)
|
|
143
|
+
formatter.add(` page.route_from_har(${quote(recordHar.path)}${typeof recordHar.urlFilter === "string" ? `, url=${quote(recordHar.urlFilter)}` : ""})`);
|
|
142
144
|
} else if (this._isAsync) {
|
|
143
145
|
formatter.add(`
|
|
144
146
|
import asyncio
|
|
@@ -149,7 +151,8 @@ from playwright.async_api import Playwright, async_playwright, expect
|
|
|
149
151
|
async def run(playwright: Playwright) -> None {
|
|
150
152
|
browser = await playwright.${options.browserName}.launch(${formatOptions(options.launchOptions, false)})
|
|
151
153
|
context = await browser.new_context(${formatContextOptions(options.contextOptions, options.deviceName)})`);
|
|
152
|
-
if (recordHar)
|
|
154
|
+
if (recordHar)
|
|
155
|
+
formatter.add(` await context.route_from_har(${quote(recordHar.path)}${typeof recordHar.urlFilter === "string" ? `, url=${quote(recordHar.urlFilter)}` : ""})`);
|
|
153
156
|
} else {
|
|
154
157
|
formatter.add(`
|
|
155
158
|
import re
|
|
@@ -159,16 +162,19 @@ from playwright.sync_api import Playwright, sync_playwright, expect
|
|
|
159
162
|
def run(playwright: Playwright) -> None {
|
|
160
163
|
browser = playwright.${options.browserName}.launch(${formatOptions(options.launchOptions, false)})
|
|
161
164
|
context = browser.new_context(${formatContextOptions(options.contextOptions, options.deviceName)})`);
|
|
162
|
-
if (recordHar)
|
|
165
|
+
if (recordHar)
|
|
166
|
+
formatter.add(` context.route_from_har(${quote(recordHar.path)}${typeof recordHar.urlFilter === "string" ? `, url=${quote(recordHar.urlFilter)}` : ""})`);
|
|
163
167
|
}
|
|
164
168
|
return formatter.format();
|
|
165
169
|
}
|
|
166
170
|
generateFooter(saveStorage) {
|
|
167
171
|
if (this._isPyTest) {
|
|
168
|
-
return
|
|
172
|
+
return "";
|
|
169
173
|
} else if (this._isAsync) {
|
|
170
|
-
const storageStateLine = saveStorage ?
|
|
171
|
-
|
|
174
|
+
const storageStateLine = saveStorage ? `
|
|
175
|
+
await context.storage_state(path=${quote(saveStorage)})` : "";
|
|
176
|
+
return `
|
|
177
|
+
# ---------------------${storageStateLine}
|
|
172
178
|
await context.close()
|
|
173
179
|
await browser.close()
|
|
174
180
|
|
|
@@ -181,8 +187,10 @@ async def main() -> None:
|
|
|
181
187
|
asyncio.run(main())
|
|
182
188
|
`;
|
|
183
189
|
} else {
|
|
184
|
-
const storageStateLine = saveStorage ?
|
|
185
|
-
|
|
190
|
+
const storageStateLine = saveStorage ? `
|
|
191
|
+
context.storage_state(path=${quote(saveStorage)})` : "";
|
|
192
|
+
return `
|
|
193
|
+
# ---------------------${storageStateLine}
|
|
186
194
|
context.close()
|
|
187
195
|
browser.close()
|
|
188
196
|
|
|
@@ -193,70 +201,77 @@ with sync_playwright() as playwright:
|
|
|
193
201
|
}
|
|
194
202
|
}
|
|
195
203
|
}
|
|
196
|
-
exports.PythonLanguageGenerator = PythonLanguageGenerator;
|
|
197
204
|
function formatValue(value) {
|
|
198
|
-
if (value === false)
|
|
199
|
-
|
|
200
|
-
if (value ===
|
|
201
|
-
|
|
202
|
-
if (
|
|
203
|
-
|
|
205
|
+
if (value === false)
|
|
206
|
+
return "False";
|
|
207
|
+
if (value === true)
|
|
208
|
+
return "True";
|
|
209
|
+
if (value === void 0)
|
|
210
|
+
return "None";
|
|
211
|
+
if (Array.isArray(value))
|
|
212
|
+
return `[${value.map(formatValue).join(", ")}]`;
|
|
213
|
+
if (typeof value === "string")
|
|
214
|
+
return quote(value);
|
|
215
|
+
if (typeof value === "object")
|
|
216
|
+
return JSON.stringify(value);
|
|
204
217
|
return String(value);
|
|
205
218
|
}
|
|
206
219
|
function formatOptions(value, hasArguments, asDict) {
|
|
207
|
-
const keys = Object.keys(value).filter(key => value[key] !==
|
|
208
|
-
if (!keys.length)
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
220
|
+
const keys = Object.keys(value).filter((key) => value[key] !== void 0).sort();
|
|
221
|
+
if (!keys.length)
|
|
222
|
+
return "";
|
|
223
|
+
return (hasArguments ? ", " : "") + keys.map((key) => {
|
|
224
|
+
if (asDict)
|
|
225
|
+
return `"${(0, import_utils.toSnakeCase)(key)}": ${formatValue(value[key])}`;
|
|
226
|
+
return `${(0, import_utils.toSnakeCase)(key)}=${formatValue(value[key])}`;
|
|
227
|
+
}).join(", ");
|
|
213
228
|
}
|
|
214
229
|
function formatContextOptions(options, deviceName, asDict) {
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
};
|
|
220
|
-
const device = deviceName && _deviceDescriptors.deviceDescriptors[deviceName];
|
|
221
|
-
if (!device) return formatOptions(options, false, asDict);
|
|
222
|
-
return `**playwright.devices[${quote(deviceName)}]` + formatOptions((0, _language.sanitizeDeviceOptions)(device, options), true, asDict);
|
|
230
|
+
options = { ...options, recordHar: void 0 };
|
|
231
|
+
const device = deviceName && import_deviceDescriptors.deviceDescriptors[deviceName];
|
|
232
|
+
if (!device)
|
|
233
|
+
return formatOptions(options, false, asDict);
|
|
234
|
+
return `**playwright.devices[${quote(deviceName)}]` + formatOptions((0, import_language.sanitizeDeviceOptions)(device, options), true, asDict);
|
|
223
235
|
}
|
|
224
236
|
class PythonFormatter {
|
|
225
237
|
constructor(offset = 0) {
|
|
226
|
-
this._baseIndent = void 0;
|
|
227
|
-
this._baseOffset = void 0;
|
|
228
238
|
this._lines = [];
|
|
229
|
-
this._baseIndent =
|
|
230
|
-
this._baseOffset =
|
|
239
|
+
this._baseIndent = " ".repeat(4);
|
|
240
|
+
this._baseOffset = " ".repeat(offset);
|
|
231
241
|
}
|
|
232
242
|
prepend(text) {
|
|
233
|
-
this._lines = text.trim().split(
|
|
243
|
+
this._lines = text.trim().split("\n").map((line) => line.trim()).concat(this._lines);
|
|
234
244
|
}
|
|
235
245
|
add(text) {
|
|
236
|
-
this._lines.push(...text.trim().split(
|
|
246
|
+
this._lines.push(...text.trim().split("\n").map((line) => line.trim()));
|
|
237
247
|
}
|
|
238
248
|
newLine() {
|
|
239
|
-
this._lines.push(
|
|
249
|
+
this._lines.push("");
|
|
240
250
|
}
|
|
241
251
|
format() {
|
|
242
|
-
let spaces =
|
|
252
|
+
let spaces = "";
|
|
243
253
|
const lines = [];
|
|
244
|
-
this._lines.forEach(line => {
|
|
245
|
-
if (line ===
|
|
246
|
-
|
|
254
|
+
this._lines.forEach((line) => {
|
|
255
|
+
if (line === "")
|
|
256
|
+
return lines.push(line);
|
|
257
|
+
if (line === "}") {
|
|
247
258
|
spaces = spaces.substring(this._baseIndent.length);
|
|
248
259
|
return;
|
|
249
260
|
}
|
|
250
261
|
line = spaces + line;
|
|
251
|
-
if (line.endsWith(
|
|
262
|
+
if (line.endsWith("{")) {
|
|
252
263
|
spaces += this._baseIndent;
|
|
253
|
-
line = line.substring(0, line.length - 1).trimEnd() +
|
|
264
|
+
line = line.substring(0, line.length - 1).trimEnd() + ":";
|
|
254
265
|
}
|
|
255
266
|
return lines.push(this._baseOffset + line);
|
|
256
267
|
});
|
|
257
|
-
return lines.join(
|
|
268
|
+
return lines.join("\n");
|
|
258
269
|
}
|
|
259
270
|
}
|
|
260
271
|
function quote(text) {
|
|
261
|
-
return (0,
|
|
262
|
-
}
|
|
272
|
+
return (0, import_utils.escapeWithQuotes)(text, '"');
|
|
273
|
+
}
|
|
274
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
275
|
+
0 && (module.exports = {
|
|
276
|
+
PythonLanguageGenerator
|
|
277
|
+
});
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __copyProps = (to, from, except, desc) => {
|
|
7
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
+
for (let key of __getOwnPropNames(from))
|
|
9
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
+
}
|
|
12
|
+
return to;
|
|
13
|
+
};
|
|
14
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
|
+
var types_exports = {};
|
|
16
|
+
module.exports = __toCommonJS(types_exports);
|