rebrowser-playwright-core 1.49.1 → 1.52.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 +381 -55
- package/bin/reinstall_msedge_beta_linux.sh +6 -0
- package/bin/reinstall_msedge_dev_linux.sh +6 -0
- package/bin/reinstall_msedge_stable_linux.sh +6 -0
- package/browsers.json +28 -13
- package/index.js +0 -1
- package/lib/androidServerImpl.js +42 -48
- package/lib/browserServerImpl.js +60 -64
- package/lib/cli/driver.js +71 -69
- package/lib/cli/program.js +314 -354
- package/lib/cli/programWithTestStub.js +51 -44
- package/lib/client/accessibility.js +31 -32
- package/lib/client/android.js +146 -254
- package/lib/client/api.js +135 -283
- package/lib/client/artifact.js +39 -39
- package/lib/client/browser.js +59 -68
- package/lib/client/browserContext.js +302 -322
- package/lib/client/browserType.js +95 -143
- package/lib/client/cdpSession.js +29 -31
- package/lib/client/channelOwner.js +109 -139
- package/lib/client/clientHelper.js +49 -42
- package/lib/client/clientInstrumentation.js +40 -35
- package/lib/client/clientStackTrace.js +69 -0
- package/lib/client/clock.js +36 -36
- package/lib/client/connection.js +203 -218
- package/lib/client/consoleMessage.js +33 -33
- 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 +74 -76
- package/lib/client/elementHandle.js +126 -163
- package/lib/client/errors.js +53 -53
- package/lib/client/eventEmitter.js +127 -127
- package/lib/client/events.js +72 -68
- package/lib/client/fetch.js +154 -178
- package/lib/client/fileChooser.js +25 -24
- package/lib/client/fileUtils.js +34 -0
- package/lib/client/frame.js +189 -307
- package/lib/client/harRouter.js +44 -56
- package/lib/client/input.js +40 -69
- package/lib/client/jsHandle.js +55 -71
- package/lib/client/jsonPipe.js +27 -23
- package/lib/client/localUtils.js +53 -28
- package/lib/client/locator.js +144 -230
- package/lib/client/network.js +285 -301
- package/lib/client/page.js +273 -312
- package/lib/client/platform.js +74 -0
- package/lib/client/playwright.js +62 -57
- package/lib/client/selectors.js +51 -43
- package/lib/client/stream.js +30 -45
- package/lib/client/timeoutSettings.js +75 -0
- package/lib/client/tracing.js +49 -82
- package/lib/client/types.js +26 -22
- package/lib/client/video.js +35 -27
- package/lib/client/waiter.js +71 -91
- package/lib/client/webError.js +25 -23
- package/lib/client/webSocket.js +111 -0
- package/lib/client/worker.js +48 -56
- package/lib/client/writableStream.js +28 -43
- package/lib/generated/clockSource.js +26 -5
- package/lib/generated/consoleApiSource.js +26 -5
- package/lib/generated/injectedScriptSource.js +26 -5
- package/lib/generated/pollingRecorderSource.js +26 -5
- package/lib/generated/utilityScriptSource.js +26 -5
- package/lib/generated/webSocketMockSource.js +375 -4
- package/lib/inProcessFactory.js +53 -48
- package/lib/inprocess.js +2 -19
- package/lib/outofprocess.js +53 -42
- package/lib/protocol/debug.js +209 -25
- package/lib/protocol/serializers.js +153 -134
- package/lib/protocol/validator.js +2712 -2667
- package/lib/protocol/validatorPrimitives.js +115 -75
- package/lib/remote/playwrightConnection.js +144 -152
- package/lib/remote/playwrightServer.js +106 -77
- package/lib/server/accessibility.js +44 -37
- package/lib/server/android/android.js +216 -206
- package/lib/server/android/backendAdb.js +89 -82
- package/lib/server/artifact.js +78 -55
- package/lib/server/bidi/bidiBrowser.js +227 -158
- package/lib/server/bidi/bidiChromium.js +106 -78
- package/lib/server/bidi/bidiConnection.js +66 -83
- package/lib/server/bidi/bidiExecutionContext.js +161 -97
- package/lib/server/bidi/bidiFirefox.js +76 -68
- package/lib/server/bidi/bidiInput.js +90 -102
- package/lib/server/bidi/bidiNetworkManager.js +141 -159
- package/lib/server/bidi/bidiOverCdp.js +57 -58
- package/lib/server/bidi/bidiPage.js +262 -261
- 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 +241 -223
- package/lib/server/bidi/third_party/bidiProtocol.js +144 -131
- package/lib/server/bidi/third_party/bidiSerializer.js +67 -63
- package/lib/server/bidi/third_party/firefoxPrefs.js +149 -111
- package/lib/server/browser.js +76 -84
- package/lib/server/browserContext.js +343 -360
- package/lib/server/browserType.js +169 -181
- package/lib/server/callLog.js +82 -0
- package/lib/server/chromium/chromium.js +212 -190
- package/lib/server/chromium/chromiumSwitches.js +99 -44
- package/lib/server/chromium/crAccessibility.js +157 -131
- package/lib/server/chromium/crBrowser.js +262 -280
- package/lib/server/chromium/crConnection.js +121 -178
- package/lib/server/chromium/crCoverage.js +113 -127
- package/lib/server/chromium/crDevTools.js +64 -55
- package/lib/server/chromium/crDragDrop.js +62 -79
- package/lib/server/chromium/crExecutionContext.js +100 -91
- package/lib/server/chromium/crInput.js +101 -88
- package/lib/server/chromium/crNetworkManager.js +269 -370
- package/lib/server/chromium/crPage.js +509 -597
- package/lib/server/chromium/crPdf.js +54 -86
- package/lib/server/chromium/crProtocolHelper.js +92 -80
- package/lib/server/chromium/crServiceWorker.js +85 -69
- package/lib/server/chromium/defaultFontFamilies.js +152 -135
- package/lib/server/chromium/protocol.d.js +16 -0
- package/lib/server/chromium/videoRecorder.js +65 -99
- package/lib/server/clock.js +58 -46
- package/lib/server/codegen/csharp.js +191 -156
- package/lib/server/codegen/java.js +163 -125
- package/lib/server/codegen/javascript.js +166 -143
- package/lib/server/codegen/jsonl.js +33 -29
- package/lib/server/codegen/language.js +75 -52
- package/lib/server/codegen/languages.js +65 -27
- package/lib/server/codegen/python.js +141 -125
- package/lib/server/codegen/types.js +15 -4
- package/lib/server/console.js +28 -32
- package/lib/server/cookieStore.js +105 -86
- package/lib/server/debugController.js +102 -154
- package/lib/server/debugger.js +82 -78
- package/lib/server/deviceDescriptors.js +37 -24
- package/lib/server/deviceDescriptorsSource.json +131 -131
- package/lib/server/dialog.js +36 -35
- package/lib/server/dispatchers/androidDispatcher.js +196 -107
- package/lib/server/dispatchers/artifactDispatcher.js +62 -62
- package/lib/server/dispatchers/browserContextDispatcher.js +177 -217
- package/lib/server/dispatchers/browserDispatcher.js +78 -97
- package/lib/server/dispatchers/browserTypeDispatcher.js +35 -35
- package/lib/server/dispatchers/cdpSessionDispatcher.js +32 -36
- package/lib/server/dispatchers/debugControllerDispatcher.js +48 -64
- package/lib/server/dispatchers/dialogDispatcher.js +30 -27
- package/lib/server/dispatchers/dispatcher.js +180 -229
- package/lib/server/dispatchers/electronDispatcher.js +54 -57
- package/lib/server/dispatchers/elementHandlerDispatcher.js +79 -116
- package/lib/server/dispatchers/frameDispatcher.js +93 -162
- package/lib/server/dispatchers/jsHandleDispatcher.js +49 -66
- package/lib/server/dispatchers/jsonPipeDispatcher.js +35 -36
- package/lib/server/dispatchers/localUtilsDispatcher.js +107 -365
- package/lib/server/dispatchers/networkDispatchers.js +92 -109
- package/lib/server/dispatchers/pageDispatcher.js +130 -169
- package/lib/server/dispatchers/playwrightDispatcher.js +69 -76
- package/lib/server/dispatchers/selectorsDispatcher.js +28 -24
- package/lib/server/dispatchers/streamDispatcher.js +42 -44
- package/lib/server/dispatchers/tracingDispatcher.js +36 -41
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +100 -135
- package/lib/server/dispatchers/writableStreamDispatcher.js +54 -39
- package/lib/server/dom.js +424 -443
- package/lib/server/download.js +45 -35
- package/lib/server/electron/electron.js +156 -175
- package/lib/server/electron/loader.js +8 -36
- package/lib/server/errors.js +47 -46
- package/lib/server/fetch.js +302 -331
- package/lib/server/fileChooser.js +25 -24
- package/lib/server/fileUploadUtils.js +66 -57
- package/lib/server/firefox/ffAccessibility.js +153 -131
- package/lib/server/firefox/ffBrowser.js +218 -274
- package/lib/server/firefox/ffConnection.js +63 -84
- package/lib/server/firefox/ffExecutionContext.js +103 -77
- package/lib/server/firefox/ffInput.js +72 -63
- package/lib/server/firefox/ffNetworkManager.js +131 -110
- package/lib/server/firefox/ffPage.js +244 -302
- package/lib/server/firefox/firefox.js +76 -69
- package/lib/server/firefox/protocol.d.js +16 -0
- package/lib/server/formData.js +107 -35
- package/lib/server/frameSelectors.js +77 -111
- package/lib/server/frames.js +719 -855
- package/lib/server/har/harRecorder.js +85 -77
- package/lib/server/har/harTracer.js +288 -224
- package/lib/server/harBackend.js +157 -0
- package/lib/server/helper.js +56 -59
- package/lib/server/index.js +59 -106
- package/lib/server/input.js +136 -166
- package/lib/server/instrumentation.js +49 -44
- package/lib/server/javascript.js +157 -151
- package/lib/server/launchApp.js +92 -73
- package/lib/server/localUtils.js +211 -0
- package/lib/server/macEditingCommands.js +141 -137
- package/lib/server/network.js +263 -297
- package/lib/server/page.js +351 -434
- package/lib/server/pageBinding.js +88 -0
- package/lib/server/pipeTransport.js +49 -45
- package/lib/server/playwright.js +60 -67
- package/lib/server/progress.js +56 -51
- package/lib/server/protocolError.js +34 -31
- package/lib/server/recorder/chat.js +161 -0
- package/lib/server/recorder/contextRecorder.js +135 -148
- package/lib/server/recorder/recorderApp.js +129 -132
- package/lib/server/recorder/recorderCollection.js +57 -57
- package/lib/server/recorder/recorderFrontend.js +15 -4
- package/lib/server/recorder/recorderRunner.js +80 -100
- package/lib/server/recorder/recorderUtils.js +59 -72
- package/lib/server/recorder/throttledFile.js +42 -31
- package/lib/server/recorder.js +186 -190
- package/lib/server/registry/browserFetcher.js +107 -100
- package/lib/server/registry/dependencies.js +247 -198
- package/lib/server/registry/index.js +928 -709
- package/lib/server/registry/nativeDeps.js +1073 -461
- package/lib/server/registry/oopDownloadBrowserMain.js +57 -75
- package/lib/server/screenshotter.js +166 -182
- package/lib/server/selectors.js +85 -46
- package/lib/server/socksClientCertificatesInterceptor.js +166 -185
- package/lib/server/socksInterceptor.js +62 -67
- package/lib/server/storageScript.js +154 -0
- package/lib/server/timeoutSettings.js +89 -0
- package/lib/server/trace/recorder/snapshotter.js +70 -88
- package/lib/server/trace/recorder/snapshotterInjected.js +246 -218
- package/lib/server/trace/recorder/tracing.js +324 -327
- package/lib/server/trace/test/inMemorySnapshotter.js +46 -52
- package/lib/server/trace/viewer/traceViewer.js +172 -137
- package/lib/server/transport.js +125 -133
- package/lib/server/types.js +26 -22
- package/lib/server/usKeyboardLayout.js +135 -545
- package/lib/server/utils/ascii.js +44 -0
- package/lib/server/utils/comparators.js +161 -0
- package/lib/server/utils/crypto.js +216 -0
- package/lib/server/utils/debug.js +47 -0
- package/lib/server/utils/debugLogger.js +114 -0
- package/lib/server/utils/env.js +68 -0
- package/lib/server/utils/eventsHelper.js +39 -0
- package/lib/server/utils/expectUtils.js +38 -0
- package/lib/server/utils/fileUtils.js +191 -0
- package/lib/server/utils/happyEyeballs.js +207 -0
- package/lib/server/utils/hostPlatform.js +109 -0
- package/lib/server/utils/httpServer.js +218 -0
- package/lib/server/utils/image_tools/colorUtils.js +89 -0
- package/lib/{image_tools → server/utils/image_tools}/compare.js +44 -43
- package/lib/server/utils/image_tools/imageChannel.js +78 -0
- package/lib/{image_tools → server/utils/image_tools}/stats.js +40 -40
- package/lib/server/utils/linuxUtils.js +71 -0
- package/lib/server/utils/network.js +217 -0
- package/lib/server/utils/nodePlatform.js +148 -0
- package/lib/server/utils/pipeTransport.js +84 -0
- package/lib/server/utils/processLauncher.js +238 -0
- package/lib/server/utils/profiler.js +65 -0
- package/lib/server/utils/socksProxy.js +511 -0
- package/lib/server/utils/spawnAsync.js +41 -0
- package/lib/server/utils/task.js +51 -0
- package/lib/server/utils/userAgent.js +98 -0
- package/lib/server/utils/wsServer.js +132 -0
- package/lib/server/utils/zipFile.js +74 -0
- package/lib/server/utils/zones.js +57 -0
- package/lib/server/webkit/protocol.d.js +16 -0
- package/lib/server/webkit/webkit.js +76 -63
- package/lib/server/webkit/wkAccessibility.js +161 -118
- package/lib/server/webkit/wkBrowser.js +163 -180
- package/lib/server/webkit/wkConnection.js +59 -83
- package/lib/server/webkit/wkExecutionContext.js +96 -73
- package/lib/server/webkit/wkInput.js +87 -75
- package/lib/server/webkit/wkInterceptableRequest.js +102 -95
- package/lib/server/webkit/wkPage.js +536 -647
- package/lib/server/webkit/wkProvisionalPage.js +45 -56
- package/lib/server/webkit/wkWorkers.js +77 -77
- package/lib/utils/isomorphic/ariaSnapshot.js +245 -128
- package/lib/utils/isomorphic/assert.js +31 -0
- package/lib/utils/isomorphic/builtins.js +90 -0
- package/lib/utils/isomorphic/colors.js +72 -0
- package/lib/utils/isomorphic/cssParser.js +123 -127
- package/lib/utils/isomorphic/cssTokenizer.js +436 -364
- package/lib/utils/isomorphic/headers.js +53 -0
- package/lib/utils/isomorphic/locatorGenerators.js +344 -349
- package/lib/utils/isomorphic/locatorParser.js +103 -106
- package/lib/utils/isomorphic/locatorUtils.js +63 -44
- package/lib/utils/isomorphic/manualPromise.js +115 -0
- package/lib/utils/isomorphic/mimeType.js +453 -22
- package/lib/utils/isomorphic/multimap.js +81 -0
- package/lib/utils/isomorphic/rtti.js +43 -0
- package/lib/utils/isomorphic/selectorParser.js +183 -193
- package/lib/utils/isomorphic/semaphore.js +54 -0
- package/lib/utils/isomorphic/stackTrace.js +158 -0
- package/lib/utils/isomorphic/stringUtils.js +113 -106
- package/lib/utils/isomorphic/time.js +44 -0
- package/lib/utils/isomorphic/timeoutRunner.js +67 -0
- package/lib/utils/isomorphic/traceUtils.js +52 -32
- package/lib/utils/isomorphic/types.js +16 -0
- package/lib/utils/isomorphic/urlMatch.js +114 -71
- package/lib/utils/isomorphic/utilityScriptSerializers.js +248 -0
- package/lib/utils.js +101 -0
- package/lib/utilsBundle.js +101 -76
- package/lib/utilsBundleImpl/index.js +114 -116
- package/lib/vite/htmlReport/index.html +26 -20
- package/lib/vite/recorder/assets/{codeMirrorModule-C5j27SYZ.js → codeMirrorModule-DVQi6prl.js} +13 -13
- package/lib/vite/recorder/assets/index-97EUAAbk.js +184 -0
- package/lib/vite/recorder/assets/{index-iA1aAGZg.css → index-eHBmevrY.css} +1 -1
- package/lib/vite/recorder/index.html +2 -2
- package/lib/vite/traceViewer/assets/codeMirrorModule-DwAiTpyC.js +24 -0
- package/lib/vite/traceViewer/assets/defaultSettingsView-DkkRvn5X.js +265 -0
- package/lib/vite/traceViewer/assets/{xtermModule-BeNbaIVa.js → xtermModule-BoAIEibi.js} +7 -7
- package/lib/vite/traceViewer/defaultSettingsView.QdHITyLI.css +1 -0
- package/lib/vite/traceViewer/index.DvtSwn6E.js +2 -0
- package/lib/vite/traceViewer/index.html +4 -7
- package/lib/vite/traceViewer/sw.bundle.js +3 -3
- package/lib/vite/traceViewer/{uiMode.voC1ZiOQ.css → uiMode.BatfzHMG.css} +1 -1
- package/lib/vite/traceViewer/uiMode.Sdytl9wc.js +5 -0
- package/lib/vite/traceViewer/uiMode.html +4 -7
- package/lib/zipBundle.js +32 -23
- package/lib/zipBundleImpl.js +4 -4
- package/package.json +7 -7
- package/types/protocol.d.ts +819 -127
- package/types/types.d.ts +181 -69
- package/bin/PrintDeps.exe +0 -0
- package/bin/README.md +0 -2
- 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/imageChannel.js +0 -70
- package/lib/protocol/transport.js +0 -82
- package/lib/server/ariaSnapshot.js +0 -33
- package/lib/server/isomorphic/utilityScriptSerializers.js +0 -226
- package/lib/server/recorder/recorderInTraceViewer.js +0 -144
- package/lib/utils/ascii.js +0 -31
- package/lib/utils/comparators.js +0 -153
- package/lib/utils/crypto.js +0 -171
- 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/expectUtils.js +0 -33
- package/lib/utils/fileUtils.js +0 -205
- package/lib/utils/happy-eyeballs.js +0 -194
- package/lib/utils/headers.js +0 -52
- package/lib/utils/hostPlatform.js +0 -139
- package/lib/utils/httpServer.js +0 -237
- package/lib/utils/index.js +0 -368
- package/lib/utils/isomorphic/recorderUtils.js +0 -227
- 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/sequence.js +0 -64
- package/lib/utils/spawnAsync.js +0 -45
- package/lib/utils/stackTrace.js +0 -134
- 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 -71
- package/lib/vite/recorder/assets/index-m0XdVJHe.js +0 -184
- package/lib/vite/traceViewer/assets/codeMirrorModule-BBCX0spr.js +0 -24
- package/lib/vite/traceViewer/assets/inspectorTab-B4Iw34Ow.js +0 -68
- package/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +0 -1
- package/lib/vite/traceViewer/assets/workbench-DFlGYqou.js +0 -9
- package/lib/vite/traceViewer/embedded.CmarehFk.js +0 -2
- package/lib/vite/traceViewer/embedded.html +0 -18
- package/lib/vite/traceViewer/embedded.w7WN2u1R.css +0 -1
- package/lib/vite/traceViewer/index.FBucu_gE.js +0 -2
- package/lib/vite/traceViewer/inspectorTab.DEOUW62d.css +0 -1
- package/lib/vite/traceViewer/recorder.B_SY1GJM.css +0 -0
- package/lib/vite/traceViewer/recorder.CW_rzcEp.js +0 -2
- package/lib/vite/traceViewer/recorder.html +0 -17
- package/lib/vite/traceViewer/uiMode.CDUVjusr.js +0 -5
- package/lib/vite/traceViewer/workbench.C-zR9ysA.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/{index.CrbWWHbf.css → index.CFOW-Ezb.css} +0 -0
- /package/lib/vite/traceViewer/{xtermModule.DSXBckUd.css → xtermModule.Beg8tuEN.css} +0 -0
|
@@ -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_java.JavaLanguageGenerator("junit"),
|
|
32
|
+
new import_java.JavaLanguageGenerator("library"),
|
|
33
|
+
new import_javascript.JavaScriptLanguageGenerator(
|
|
34
|
+
/* isPlaywrightTest */
|
|
35
|
+
false
|
|
36
|
+
),
|
|
37
|
+
new import_javascript.JavaScriptLanguageGenerator(
|
|
38
|
+
/* isPlaywrightTest */
|
|
39
|
+
true
|
|
40
|
+
),
|
|
41
|
+
new import_python.PythonLanguageGenerator(
|
|
42
|
+
/* isAsync */
|
|
43
|
+
false,
|
|
44
|
+
/* isPytest */
|
|
45
|
+
true
|
|
46
|
+
),
|
|
47
|
+
new import_python.PythonLanguageGenerator(
|
|
48
|
+
/* isAsync */
|
|
49
|
+
false,
|
|
50
|
+
/* isPytest */
|
|
51
|
+
false
|
|
52
|
+
),
|
|
53
|
+
new import_python.PythonLanguageGenerator(
|
|
54
|
+
/* isAsync */
|
|
55
|
+
true,
|
|
56
|
+
/* isPytest */
|
|
57
|
+
false
|
|
58
|
+
),
|
|
59
|
+
new import_csharp.CSharpLanguageGenerator("mstest"),
|
|
60
|
+
new import_csharp.CSharpLanguageGenerator("nunit"),
|
|
61
|
+
new import_csharp.CSharpLanguageGenerator("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,71 +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
|
-
case 'assertSnapshot':
|
|
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":
|
|
118
114
|
return `expect(${subject}.${this._asLocator(action.selector)}).to_match_aria_snapshot(${quote(action.snapshot)})`;
|
|
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();
|
|
122
|
+
const recordHar = options.contextOptions.recordHar;
|
|
126
123
|
if (this._isPyTest) {
|
|
127
|
-
const contextOptions = formatContextOptions(
|
|
124
|
+
const contextOptions = formatContextOptions(
|
|
125
|
+
options.contextOptions,
|
|
126
|
+
options.deviceName,
|
|
127
|
+
true
|
|
128
|
+
/* asDict */
|
|
129
|
+
);
|
|
128
130
|
const fixture = contextOptions ? `
|
|
129
131
|
|
|
130
132
|
@pytest.fixture(scope="session")
|
|
131
133
|
def browser_context_args(browser_context_args, playwright) {
|
|
132
134
|
return {${contextOptions}}
|
|
133
135
|
}
|
|
134
|
-
` :
|
|
135
|
-
formatter.add(`${options.deviceName ?
|
|
136
|
+
` : "";
|
|
137
|
+
formatter.add(`${options.deviceName || contextOptions ? "import pytest\n" : ""}import re
|
|
136
138
|
from playwright.sync_api import Page, expect
|
|
137
139
|
${fixture}
|
|
138
140
|
|
|
139
141
|
def test_example(page: Page) -> None {`);
|
|
140
|
-
if (
|
|
142
|
+
if (recordHar)
|
|
143
|
+
formatter.add(` page.route_from_har(${quote(recordHar.path)}${typeof recordHar.urlFilter === "string" ? `, url=${quote(recordHar.urlFilter)}` : ""})`);
|
|
141
144
|
} else if (this._isAsync) {
|
|
142
145
|
formatter.add(`
|
|
143
146
|
import asyncio
|
|
@@ -148,7 +151,8 @@ from playwright.async_api import Playwright, async_playwright, expect
|
|
|
148
151
|
async def run(playwright: Playwright) -> None {
|
|
149
152
|
browser = await playwright.${options.browserName}.launch(${formatOptions(options.launchOptions, false)})
|
|
150
153
|
context = await browser.new_context(${formatContextOptions(options.contextOptions, options.deviceName)})`);
|
|
151
|
-
if (
|
|
154
|
+
if (recordHar)
|
|
155
|
+
formatter.add(` await context.route_from_har(${quote(recordHar.path)}${typeof recordHar.urlFilter === "string" ? `, url=${quote(recordHar.urlFilter)}` : ""})`);
|
|
152
156
|
} else {
|
|
153
157
|
formatter.add(`
|
|
154
158
|
import re
|
|
@@ -158,16 +162,19 @@ from playwright.sync_api import Playwright, sync_playwright, expect
|
|
|
158
162
|
def run(playwright: Playwright) -> None {
|
|
159
163
|
browser = playwright.${options.browserName}.launch(${formatOptions(options.launchOptions, false)})
|
|
160
164
|
context = browser.new_context(${formatContextOptions(options.contextOptions, options.deviceName)})`);
|
|
161
|
-
if (
|
|
165
|
+
if (recordHar)
|
|
166
|
+
formatter.add(` context.route_from_har(${quote(recordHar.path)}${typeof recordHar.urlFilter === "string" ? `, url=${quote(recordHar.urlFilter)}` : ""})`);
|
|
162
167
|
}
|
|
163
168
|
return formatter.format();
|
|
164
169
|
}
|
|
165
170
|
generateFooter(saveStorage) {
|
|
166
171
|
if (this._isPyTest) {
|
|
167
|
-
return
|
|
172
|
+
return "";
|
|
168
173
|
} else if (this._isAsync) {
|
|
169
|
-
const storageStateLine = saveStorage ?
|
|
170
|
-
|
|
174
|
+
const storageStateLine = saveStorage ? `
|
|
175
|
+
await context.storage_state(path=${quote(saveStorage)})` : "";
|
|
176
|
+
return `
|
|
177
|
+
# ---------------------${storageStateLine}
|
|
171
178
|
await context.close()
|
|
172
179
|
await browser.close()
|
|
173
180
|
|
|
@@ -180,8 +187,10 @@ async def main() -> None:
|
|
|
180
187
|
asyncio.run(main())
|
|
181
188
|
`;
|
|
182
189
|
} else {
|
|
183
|
-
const storageStateLine = saveStorage ?
|
|
184
|
-
|
|
190
|
+
const storageStateLine = saveStorage ? `
|
|
191
|
+
context.storage_state(path=${quote(saveStorage)})` : "";
|
|
192
|
+
return `
|
|
193
|
+
# ---------------------${storageStateLine}
|
|
185
194
|
context.close()
|
|
186
195
|
browser.close()
|
|
187
196
|
|
|
@@ -192,70 +201,77 @@ with sync_playwright() as playwright:
|
|
|
192
201
|
}
|
|
193
202
|
}
|
|
194
203
|
}
|
|
195
|
-
exports.PythonLanguageGenerator = PythonLanguageGenerator;
|
|
196
204
|
function formatValue(value) {
|
|
197
|
-
if (value === false)
|
|
198
|
-
|
|
199
|
-
if (value ===
|
|
200
|
-
|
|
201
|
-
if (
|
|
202
|
-
|
|
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);
|
|
203
217
|
return String(value);
|
|
204
218
|
}
|
|
205
219
|
function formatOptions(value, hasArguments, asDict) {
|
|
206
|
-
const keys = Object.keys(value).filter(key => value[key] !==
|
|
207
|
-
if (!keys.length)
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
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(", ");
|
|
212
228
|
}
|
|
213
229
|
function formatContextOptions(options, deviceName, asDict) {
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
};
|
|
219
|
-
const device = deviceName && _deviceDescriptors.deviceDescriptors[deviceName];
|
|
220
|
-
if (!device) return formatOptions(options, false, asDict);
|
|
221
|
-
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);
|
|
222
235
|
}
|
|
223
236
|
class PythonFormatter {
|
|
224
237
|
constructor(offset = 0) {
|
|
225
|
-
this._baseIndent = void 0;
|
|
226
|
-
this._baseOffset = void 0;
|
|
227
238
|
this._lines = [];
|
|
228
|
-
this._baseIndent =
|
|
229
|
-
this._baseOffset =
|
|
239
|
+
this._baseIndent = " ".repeat(4);
|
|
240
|
+
this._baseOffset = " ".repeat(offset);
|
|
230
241
|
}
|
|
231
242
|
prepend(text) {
|
|
232
|
-
this._lines = text.trim().split(
|
|
243
|
+
this._lines = text.trim().split("\n").map((line) => line.trim()).concat(this._lines);
|
|
233
244
|
}
|
|
234
245
|
add(text) {
|
|
235
|
-
this._lines.push(...text.trim().split(
|
|
246
|
+
this._lines.push(...text.trim().split("\n").map((line) => line.trim()));
|
|
236
247
|
}
|
|
237
248
|
newLine() {
|
|
238
|
-
this._lines.push(
|
|
249
|
+
this._lines.push("");
|
|
239
250
|
}
|
|
240
251
|
format() {
|
|
241
|
-
let spaces =
|
|
252
|
+
let spaces = "";
|
|
242
253
|
const lines = [];
|
|
243
|
-
this._lines.forEach(line => {
|
|
244
|
-
if (line ===
|
|
245
|
-
|
|
254
|
+
this._lines.forEach((line) => {
|
|
255
|
+
if (line === "")
|
|
256
|
+
return lines.push(line);
|
|
257
|
+
if (line === "}") {
|
|
246
258
|
spaces = spaces.substring(this._baseIndent.length);
|
|
247
259
|
return;
|
|
248
260
|
}
|
|
249
261
|
line = spaces + line;
|
|
250
|
-
if (line.endsWith(
|
|
262
|
+
if (line.endsWith("{")) {
|
|
251
263
|
spaces += this._baseIndent;
|
|
252
|
-
line = line.substring(0, line.length - 1).trimEnd() +
|
|
264
|
+
line = line.substring(0, line.length - 1).trimEnd() + ":";
|
|
253
265
|
}
|
|
254
266
|
return lines.push(this._baseOffset + line);
|
|
255
267
|
});
|
|
256
|
-
return lines.join(
|
|
268
|
+
return lines.join("\n");
|
|
257
269
|
}
|
|
258
270
|
}
|
|
259
271
|
function quote(text) {
|
|
260
|
-
return (0,
|
|
261
|
-
}
|
|
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);
|