@checkly/playwright-core 1.51.17-beta.2 → 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 -35
- 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-B9YMkrwa.js +0 -24
- package/lib/vite/recorder/assets/codeMirrorModule-C3UTv-Ge.css +0 -1
- package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
- package/lib/vite/recorder/assets/index-ELPgmkwA.js +0 -184
- package/lib/vite/recorder/assets/index-eHBmevrY.css +0 -1
- package/lib/vite/recorder/index.html +0 -29
- package/lib/vite/recorder/playwright-logo.svg +0 -9
- package/lib/vite/traceViewer/assets/codeMirrorModule-gU1OOCQO.js +0 -24
- package/lib/vite/traceViewer/assets/defaultSettingsView-B5n_FjMx.js +0 -1
- package/lib/vite/traceViewer/assets/inspectorTab-6Tru8Mn_.js +0 -235
- package/lib/vite/traceViewer/assets/workbench-B_Nj4NA2.js +0 -25
- package/lib/vite/traceViewer/assets/xtermModule-BoAIEibi.js +0 -9
- package/lib/vite/traceViewer/codeMirrorModule.C3UTv-Ge.css +0 -1
- package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
- package/lib/vite/traceViewer/defaultSettingsView.CO3FR0CX.css +0 -1
- package/lib/vite/traceViewer/embedded.DpNPH6mk.js +0 -2
- package/lib/vite/traceViewer/embedded.html +0 -18
- package/lib/vite/traceViewer/embedded.mLhjB5IF.css +0 -1
- package/lib/vite/traceViewer/index.CFOW-Ezb.css +0 -1
- package/lib/vite/traceViewer/index.CuE3SYGw.js +0 -2
- package/lib/vite/traceViewer/index.html +0 -47
- package/lib/vite/traceViewer/inspectorTab.CXDulcFG.css +0 -1
- package/lib/vite/traceViewer/playwright-logo.svg +0 -9
- package/lib/vite/traceViewer/recorder.BD-uZJs7.js +0 -2
- package/lib/vite/traceViewer/recorder.html +0 -17
- package/lib/vite/traceViewer/recorder.tn0RQdqM.css +0 -0
- package/lib/vite/traceViewer/snapshot.html +0 -21
- package/lib/vite/traceViewer/sw.bundle.js +0 -3
- package/lib/vite/traceViewer/uiMode.BatfzHMG.css +0 -1
- package/lib/vite/traceViewer/uiMode.DHrNgddz.js +0 -5
- package/lib/vite/traceViewer/uiMode.html +0 -21
- package/lib/vite/traceViewer/workbench.B9vIAzH9.css +0 -1
- package/lib/vite/traceViewer/xtermModule.Beg8tuEN.css +0 -32
package/lib/client/page.js
CHANGED
|
@@ -1,180 +1,162 @@
|
|
|
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 page_exports = {};
|
|
20
|
+
__export(page_exports, {
|
|
21
|
+
BindingCall: () => BindingCall,
|
|
22
|
+
Page: () => Page
|
|
5
23
|
});
|
|
6
|
-
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
var
|
|
17
|
-
var
|
|
18
|
-
var
|
|
19
|
-
var
|
|
20
|
-
var
|
|
21
|
-
var
|
|
22
|
-
var
|
|
23
|
-
var
|
|
24
|
-
var
|
|
25
|
-
var
|
|
26
|
-
var
|
|
27
|
-
var
|
|
28
|
-
var
|
|
29
|
-
var
|
|
30
|
-
var
|
|
31
|
-
var
|
|
32
|
-
var
|
|
33
|
-
|
|
34
|
-
* Copyright 2017 Google Inc. All rights reserved.
|
|
35
|
-
* Modifications copyright (c) Microsoft Corporation.
|
|
36
|
-
*
|
|
37
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
38
|
-
* you may not use this file except in compliance with the License.
|
|
39
|
-
* You may obtain a copy of the License at
|
|
40
|
-
*
|
|
41
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
42
|
-
*
|
|
43
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
44
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
45
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
46
|
-
* See the License for the specific language governing permissions and
|
|
47
|
-
* limitations under the License.
|
|
48
|
-
*/
|
|
49
|
-
|
|
50
|
-
class Page extends _channelOwner.ChannelOwner {
|
|
51
|
-
static from(page) {
|
|
52
|
-
return page._object;
|
|
53
|
-
}
|
|
54
|
-
static fromNullable(page) {
|
|
55
|
-
return page ? Page.from(page) : null;
|
|
56
|
-
}
|
|
24
|
+
module.exports = __toCommonJS(page_exports);
|
|
25
|
+
var import_accessibility = require("./accessibility");
|
|
26
|
+
var import_artifact = require("./artifact");
|
|
27
|
+
var import_channelOwner = require("./channelOwner");
|
|
28
|
+
var import_clientHelper = require("./clientHelper");
|
|
29
|
+
var import_coverage = require("./coverage");
|
|
30
|
+
var import_download = require("./download");
|
|
31
|
+
var import_elementHandle = require("./elementHandle");
|
|
32
|
+
var import_errors = require("./errors");
|
|
33
|
+
var import_events = require("./events");
|
|
34
|
+
var import_fileChooser = require("./fileChooser");
|
|
35
|
+
var import_frame = require("./frame");
|
|
36
|
+
var import_harRouter = require("./harRouter");
|
|
37
|
+
var import_input = require("./input");
|
|
38
|
+
var import_jsHandle = require("./jsHandle");
|
|
39
|
+
var import_network = require("./network");
|
|
40
|
+
var import_video = require("./video");
|
|
41
|
+
var import_waiter = require("./waiter");
|
|
42
|
+
var import_worker = require("./worker");
|
|
43
|
+
var import_timeoutSettings = require("./timeoutSettings");
|
|
44
|
+
var import_assert = require("../utils/isomorphic/assert");
|
|
45
|
+
var import_fileUtils = require("./fileUtils");
|
|
46
|
+
var import_headers = require("../utils/isomorphic/headers");
|
|
47
|
+
var import_stringUtils = require("../utils/isomorphic/stringUtils");
|
|
48
|
+
var import_urlMatch = require("../utils/isomorphic/urlMatch");
|
|
49
|
+
var import_manualPromise = require("../utils/isomorphic/manualPromise");
|
|
50
|
+
var import_rtti = require("../utils/isomorphic/rtti");
|
|
51
|
+
class Page extends import_channelOwner.ChannelOwner {
|
|
57
52
|
constructor(parent, type, guid, initializer) {
|
|
58
53
|
super(parent, type, guid, initializer);
|
|
59
|
-
this.
|
|
60
|
-
this.
|
|
61
|
-
this._mainFrame = void 0;
|
|
62
|
-
this._frames = new Set();
|
|
63
|
-
this._workers = new Set();
|
|
54
|
+
this._frames = /* @__PURE__ */ new Set();
|
|
55
|
+
this._workers = /* @__PURE__ */ new Set();
|
|
64
56
|
this._closed = false;
|
|
65
|
-
this._closedOrCrashedScope = new
|
|
66
|
-
this._viewportSize = void 0;
|
|
57
|
+
this._closedOrCrashedScope = new import_manualPromise.LongStandingScope();
|
|
67
58
|
this._routes = [];
|
|
68
59
|
this._webSocketRoutes = [];
|
|
69
|
-
this.
|
|
70
|
-
this.coverage = void 0;
|
|
71
|
-
this.keyboard = void 0;
|
|
72
|
-
this.mouse = void 0;
|
|
73
|
-
this.request = void 0;
|
|
74
|
-
this.touchscreen = void 0;
|
|
75
|
-
this.clock = void 0;
|
|
76
|
-
this._bindings = new Map();
|
|
77
|
-
this._timeoutSettings = void 0;
|
|
60
|
+
this._bindings = /* @__PURE__ */ new Map();
|
|
78
61
|
this._video = null;
|
|
79
|
-
this._opener = void 0;
|
|
80
|
-
this._closeReason = void 0;
|
|
81
62
|
this._closeWasCalled = false;
|
|
82
63
|
this._harRouters = [];
|
|
83
|
-
this._locatorHandlers = new Map();
|
|
64
|
+
this._locatorHandlers = /* @__PURE__ */ new Map();
|
|
84
65
|
this._browserContext = parent;
|
|
85
|
-
this._timeoutSettings = new
|
|
86
|
-
this.accessibility = new
|
|
87
|
-
this.keyboard = new
|
|
88
|
-
this.mouse = new
|
|
66
|
+
this._timeoutSettings = new import_timeoutSettings.TimeoutSettings(this._platform, this._browserContext._timeoutSettings);
|
|
67
|
+
this.accessibility = new import_accessibility.Accessibility(this._channel);
|
|
68
|
+
this.keyboard = new import_input.Keyboard(this);
|
|
69
|
+
this.mouse = new import_input.Mouse(this);
|
|
89
70
|
this.request = this._browserContext.request;
|
|
90
|
-
this.touchscreen = new
|
|
71
|
+
this.touchscreen = new import_input.Touchscreen(this);
|
|
91
72
|
this.clock = this._browserContext.clock;
|
|
92
|
-
this._mainFrame =
|
|
73
|
+
this._mainFrame = import_frame.Frame.from(initializer.mainFrame);
|
|
93
74
|
this._mainFrame._page = this;
|
|
94
75
|
this._frames.add(this._mainFrame);
|
|
95
|
-
this._viewportSize = initializer.viewportSize
|
|
76
|
+
this._viewportSize = initializer.viewportSize;
|
|
96
77
|
this._closed = initializer.isClosed;
|
|
97
78
|
this._opener = Page.fromNullable(initializer.opener);
|
|
98
|
-
this._channel.on(
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
this._channel.on(
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
url,
|
|
105
|
-
suggestedFilename,
|
|
106
|
-
artifact
|
|
107
|
-
}) => {
|
|
108
|
-
const artifactObject = _artifact.Artifact.from(artifact);
|
|
109
|
-
this.emit(_events.Events.Page.Download, new _download.Download(this, url, suggestedFilename, artifactObject));
|
|
79
|
+
this._channel.on("bindingCall", ({ binding }) => this._onBinding(BindingCall.from(binding)));
|
|
80
|
+
this._channel.on("close", () => this._onClose());
|
|
81
|
+
this._channel.on("crash", () => this._onCrash());
|
|
82
|
+
this._channel.on("download", ({ url, suggestedFilename, artifact }) => {
|
|
83
|
+
const artifactObject = import_artifact.Artifact.from(artifact);
|
|
84
|
+
this.emit(import_events.Events.Page.Download, new import_download.Download(this, url, suggestedFilename, artifactObject));
|
|
110
85
|
});
|
|
111
|
-
this._channel.on(
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
this._channel.on(
|
|
116
|
-
|
|
117
|
-
}) =>
|
|
118
|
-
|
|
119
|
-
frame
|
|
120
|
-
}) => this._onFrameDetached(_frame.Frame.from(frame)));
|
|
121
|
-
this._channel.on('locatorHandlerTriggered', ({
|
|
122
|
-
uid
|
|
123
|
-
}) => this._onLocatorHandlerTriggered(uid));
|
|
124
|
-
this._channel.on('route', ({
|
|
125
|
-
route
|
|
126
|
-
}) => this._onRoute(_network.Route.from(route)));
|
|
127
|
-
this._channel.on('webSocketRoute', ({
|
|
128
|
-
webSocketRoute
|
|
129
|
-
}) => this._onWebSocketRoute(_network.WebSocketRoute.from(webSocketRoute)));
|
|
130
|
-
this._channel.on('video', ({
|
|
131
|
-
artifact
|
|
132
|
-
}) => {
|
|
133
|
-
const artifactObject = _artifact.Artifact.from(artifact);
|
|
86
|
+
this._channel.on("fileChooser", ({ element, isMultiple }) => this.emit(import_events.Events.Page.FileChooser, new import_fileChooser.FileChooser(this, import_elementHandle.ElementHandle.from(element), isMultiple)));
|
|
87
|
+
this._channel.on("frameAttached", ({ frame }) => this._onFrameAttached(import_frame.Frame.from(frame)));
|
|
88
|
+
this._channel.on("frameDetached", ({ frame }) => this._onFrameDetached(import_frame.Frame.from(frame)));
|
|
89
|
+
this._channel.on("locatorHandlerTriggered", ({ uid }) => this._onLocatorHandlerTriggered(uid));
|
|
90
|
+
this._channel.on("route", ({ route }) => this._onRoute(import_network.Route.from(route)));
|
|
91
|
+
this._channel.on("webSocketRoute", ({ webSocketRoute }) => this._onWebSocketRoute(import_network.WebSocketRoute.from(webSocketRoute)));
|
|
92
|
+
this._channel.on("video", ({ artifact }) => {
|
|
93
|
+
const artifactObject = import_artifact.Artifact.from(artifact);
|
|
134
94
|
this._forceVideo()._artifactReady(artifactObject);
|
|
135
95
|
});
|
|
136
|
-
this._channel.on(
|
|
137
|
-
|
|
138
|
-
}) => this.
|
|
139
|
-
this.
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
this.
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
96
|
+
this._channel.on("viewportSizeChanged", ({ viewportSize }) => this._viewportSize = viewportSize);
|
|
97
|
+
this._channel.on("webSocket", ({ webSocket }) => this.emit(import_events.Events.Page.WebSocket, import_network.WebSocket.from(webSocket)));
|
|
98
|
+
this._channel.on("worker", ({ worker }) => this._onWorker(import_worker.Worker.from(worker)));
|
|
99
|
+
this.coverage = new import_coverage.Coverage(this._channel);
|
|
100
|
+
this.once(import_events.Events.Page.Close, () => this._closedOrCrashedScope.close(this._closeErrorWithReason()));
|
|
101
|
+
this.once(import_events.Events.Page.Crash, () => this._closedOrCrashedScope.close(new import_errors.TargetClosedError()));
|
|
102
|
+
this._setEventToSubscriptionMapping(/* @__PURE__ */ new Map([
|
|
103
|
+
[import_events.Events.Page.Console, "console"],
|
|
104
|
+
[import_events.Events.Page.Dialog, "dialog"],
|
|
105
|
+
[import_events.Events.Page.Request, "request"],
|
|
106
|
+
[import_events.Events.Page.Response, "response"],
|
|
107
|
+
[import_events.Events.Page.RequestFinished, "requestFinished"],
|
|
108
|
+
[import_events.Events.Page.RequestFailed, "requestFailed"],
|
|
109
|
+
[import_events.Events.Page.FileChooser, "fileChooser"]
|
|
110
|
+
]));
|
|
111
|
+
}
|
|
112
|
+
static from(page) {
|
|
113
|
+
return page._object;
|
|
114
|
+
}
|
|
115
|
+
static fromNullable(page) {
|
|
116
|
+
return page ? Page.from(page) : null;
|
|
146
117
|
}
|
|
147
118
|
_onFrameAttached(frame) {
|
|
148
119
|
frame._page = this;
|
|
149
120
|
this._frames.add(frame);
|
|
150
|
-
if (frame._parentFrame)
|
|
151
|
-
|
|
121
|
+
if (frame._parentFrame)
|
|
122
|
+
frame._parentFrame._childFrames.add(frame);
|
|
123
|
+
this.emit(import_events.Events.Page.FrameAttached, frame);
|
|
152
124
|
}
|
|
153
125
|
_onFrameDetached(frame) {
|
|
154
126
|
this._frames.delete(frame);
|
|
155
127
|
frame._detached = true;
|
|
156
|
-
if (frame._parentFrame)
|
|
157
|
-
|
|
128
|
+
if (frame._parentFrame)
|
|
129
|
+
frame._parentFrame._childFrames.delete(frame);
|
|
130
|
+
this.emit(import_events.Events.Page.FrameDetached, frame);
|
|
158
131
|
}
|
|
159
132
|
async _onRoute(route) {
|
|
160
133
|
route._context = this.context();
|
|
161
134
|
const routeHandlers = this._routes.slice();
|
|
162
135
|
for (const routeHandler of routeHandlers) {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
if (!routeHandler.matches(route.request().url()))
|
|
136
|
+
if (this._closeWasCalled || this._browserContext._closingStatus !== "none")
|
|
137
|
+
return;
|
|
138
|
+
if (!routeHandler.matches(route.request().url()))
|
|
139
|
+
continue;
|
|
166
140
|
const index = this._routes.indexOf(routeHandler);
|
|
167
|
-
if (index === -1)
|
|
168
|
-
|
|
141
|
+
if (index === -1)
|
|
142
|
+
continue;
|
|
143
|
+
if (routeHandler.willExpire())
|
|
144
|
+
this._routes.splice(index, 1);
|
|
169
145
|
const handled = await routeHandler.handle(route);
|
|
170
|
-
if (!this._routes.length)
|
|
171
|
-
|
|
146
|
+
if (!this._routes.length)
|
|
147
|
+
this._updateInterceptionPatterns().catch(() => {
|
|
148
|
+
});
|
|
149
|
+
if (handled)
|
|
150
|
+
return;
|
|
172
151
|
}
|
|
173
152
|
await this._browserContext._onRoute(route);
|
|
174
153
|
}
|
|
175
154
|
async _onWebSocketRoute(webSocketRoute) {
|
|
176
|
-
const routeHandler = this._webSocketRoutes.find(route => route.matches(webSocketRoute.url()));
|
|
177
|
-
if (routeHandler)
|
|
155
|
+
const routeHandler = this._webSocketRoutes.find((route) => route.matches(webSocketRoute.url()));
|
|
156
|
+
if (routeHandler)
|
|
157
|
+
await routeHandler.handle(webSocketRoute);
|
|
158
|
+
else
|
|
159
|
+
await this._browserContext._onWebSocketRoute(webSocketRoute);
|
|
178
160
|
}
|
|
179
161
|
async _onBinding(bindingCall) {
|
|
180
162
|
const func = this._bindings.get(bindingCall._initializer.name);
|
|
@@ -187,35 +169,37 @@ class Page extends _channelOwner.ChannelOwner {
|
|
|
187
169
|
_onWorker(worker) {
|
|
188
170
|
this._workers.add(worker);
|
|
189
171
|
worker._page = this;
|
|
190
|
-
this.emit(
|
|
172
|
+
this.emit(import_events.Events.Page.Worker, worker);
|
|
191
173
|
}
|
|
192
174
|
_onClose() {
|
|
193
175
|
this._closed = true;
|
|
194
176
|
this._browserContext._pages.delete(this);
|
|
195
177
|
this._browserContext._backgroundPages.delete(this);
|
|
196
178
|
this._disposeHarRouters();
|
|
197
|
-
this.emit(
|
|
179
|
+
this.emit(import_events.Events.Page.Close, this);
|
|
198
180
|
}
|
|
199
181
|
_onCrash() {
|
|
200
|
-
this.emit(
|
|
182
|
+
this.emit(import_events.Events.Page.Crash, this);
|
|
201
183
|
}
|
|
202
184
|
context() {
|
|
203
185
|
return this._browserContext;
|
|
204
186
|
}
|
|
205
187
|
async opener() {
|
|
206
|
-
if (!this._opener || this._opener.isClosed())
|
|
188
|
+
if (!this._opener || this._opener.isClosed())
|
|
189
|
+
return null;
|
|
207
190
|
return this._opener;
|
|
208
191
|
}
|
|
209
192
|
mainFrame() {
|
|
210
193
|
return this._mainFrame;
|
|
211
194
|
}
|
|
212
195
|
frame(frameSelector) {
|
|
213
|
-
const name = (0,
|
|
214
|
-
const url = (0,
|
|
215
|
-
(0,
|
|
216
|
-
return this.frames().find(f => {
|
|
217
|
-
if (name)
|
|
218
|
-
|
|
196
|
+
const name = (0, import_rtti.isString)(frameSelector) ? frameSelector : frameSelector.name;
|
|
197
|
+
const url = (0, import_rtti.isObject)(frameSelector) ? frameSelector.url : void 0;
|
|
198
|
+
(0, import_assert.assert)(name || url, "Either name or url matcher should be specified");
|
|
199
|
+
return this.frames().find((f) => {
|
|
200
|
+
if (name)
|
|
201
|
+
return f.name() === name;
|
|
202
|
+
return (0, import_urlMatch.urlMatches)(this._browserContext._options.baseURL, f.url(), url);
|
|
219
203
|
}) || null;
|
|
220
204
|
}
|
|
221
205
|
frames() {
|
|
@@ -223,29 +207,18 @@ class Page extends _channelOwner.ChannelOwner {
|
|
|
223
207
|
}
|
|
224
208
|
setDefaultNavigationTimeout(timeout) {
|
|
225
209
|
this._timeoutSettings.setDefaultNavigationTimeout(timeout);
|
|
226
|
-
this._wrapApiCall(async () => {
|
|
227
|
-
await this._channel.setDefaultNavigationTimeoutNoReply({
|
|
228
|
-
timeout
|
|
229
|
-
});
|
|
230
|
-
}, true).catch(() => {});
|
|
231
210
|
}
|
|
232
211
|
setDefaultTimeout(timeout) {
|
|
233
212
|
this._timeoutSettings.setDefaultTimeout(timeout);
|
|
234
|
-
this._wrapApiCall(async () => {
|
|
235
|
-
await this._channel.setDefaultTimeoutNoReply({
|
|
236
|
-
timeout
|
|
237
|
-
});
|
|
238
|
-
}, true).catch(() => {});
|
|
239
213
|
}
|
|
240
214
|
_forceVideo() {
|
|
241
|
-
if (!this._video)
|
|
215
|
+
if (!this._video)
|
|
216
|
+
this._video = new import_video.Video(this, this._connection);
|
|
242
217
|
return this._video;
|
|
243
218
|
}
|
|
244
219
|
video() {
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
// too late during launchPersistentContext.
|
|
248
|
-
if (!this._browserContext._options.recordVideo) return null;
|
|
220
|
+
if (!this._browserContext._options.recordVideo)
|
|
221
|
+
return null;
|
|
249
222
|
return this._forceVideo();
|
|
250
223
|
}
|
|
251
224
|
async $(selector, options) {
|
|
@@ -258,15 +231,15 @@ class Page extends _channelOwner.ChannelOwner {
|
|
|
258
231
|
return await this._mainFrame.dispatchEvent(selector, type, eventInit, options);
|
|
259
232
|
}
|
|
260
233
|
async evaluateHandle(pageFunction, arg) {
|
|
261
|
-
(0,
|
|
234
|
+
(0, import_jsHandle.assertMaxArguments)(arguments.length, 2);
|
|
262
235
|
return await this._mainFrame.evaluateHandle(pageFunction, arg);
|
|
263
236
|
}
|
|
264
237
|
async $eval(selector, pageFunction, arg) {
|
|
265
|
-
(0,
|
|
238
|
+
(0, import_jsHandle.assertMaxArguments)(arguments.length, 3);
|
|
266
239
|
return await this._mainFrame.$eval(selector, pageFunction, arg);
|
|
267
240
|
}
|
|
268
241
|
async $$eval(selector, pageFunction, arg) {
|
|
269
|
-
(0,
|
|
242
|
+
(0, import_jsHandle.assertMaxArguments)(arguments.length, 3);
|
|
270
243
|
return await this._mainFrame.$$eval(selector, pageFunction, arg);
|
|
271
244
|
}
|
|
272
245
|
async $$(selector) {
|
|
@@ -279,24 +252,17 @@ class Page extends _channelOwner.ChannelOwner {
|
|
|
279
252
|
return await this._mainFrame.addStyleTag(options);
|
|
280
253
|
}
|
|
281
254
|
async exposeFunction(name, callback) {
|
|
282
|
-
await this._channel.exposeBinding({
|
|
283
|
-
name
|
|
284
|
-
});
|
|
255
|
+
await this._channel.exposeBinding({ name });
|
|
285
256
|
const binding = (source, ...args) => callback(...args);
|
|
286
257
|
this._bindings.set(name, binding);
|
|
287
258
|
}
|
|
288
259
|
async exposeBinding(name, callback, options = {}) {
|
|
289
|
-
await this._channel.exposeBinding({
|
|
290
|
-
name,
|
|
291
|
-
needsHandle: options.handle
|
|
292
|
-
});
|
|
260
|
+
await this._channel.exposeBinding({ name, needsHandle: options.handle });
|
|
293
261
|
this._bindings.set(name, callback);
|
|
294
262
|
}
|
|
295
263
|
async setExtraHTTPHeaders(headers) {
|
|
296
|
-
(0,
|
|
297
|
-
await this._channel.setExtraHTTPHeaders({
|
|
298
|
-
headers: (0, _headers.headersObjectToArray)(headers)
|
|
299
|
-
});
|
|
264
|
+
(0, import_network.validateHeaders)(headers);
|
|
265
|
+
await this._channel.setExtraHTTPHeaders({ headers: (0, import_headers.headersObjectToArray)(headers) });
|
|
300
266
|
}
|
|
301
267
|
url() {
|
|
302
268
|
return this._mainFrame.url();
|
|
@@ -311,51 +277,40 @@ class Page extends _channelOwner.ChannelOwner {
|
|
|
311
277
|
return await this._mainFrame.goto(url, options);
|
|
312
278
|
}
|
|
313
279
|
async reload(options = {}) {
|
|
314
|
-
const waitUntil = (0,
|
|
315
|
-
return
|
|
316
|
-
...options,
|
|
317
|
-
waitUntil
|
|
318
|
-
})).response);
|
|
280
|
+
const waitUntil = (0, import_frame.verifyLoadState)("waitUntil", options.waitUntil === void 0 ? "load" : options.waitUntil);
|
|
281
|
+
return import_network.Response.fromNullable((await this._channel.reload({ ...options, waitUntil, timeout: this._timeoutSettings.navigationTimeout(options) })).response);
|
|
319
282
|
}
|
|
320
283
|
async addLocatorHandler(locator, handler, options = {}) {
|
|
321
|
-
if (locator._frame !== this._mainFrame)
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
} = await this._channel.registerLocatorHandler({
|
|
326
|
-
|
|
327
|
-
noWaitAfter: options.noWaitAfter
|
|
328
|
-
});
|
|
329
|
-
this._locatorHandlers.set(uid, {
|
|
330
|
-
locator,
|
|
331
|
-
handler,
|
|
332
|
-
times: options.times
|
|
333
|
-
});
|
|
284
|
+
if (locator._frame !== this._mainFrame)
|
|
285
|
+
throw new Error(`Locator must belong to the main frame of this page`);
|
|
286
|
+
if (options.times === 0)
|
|
287
|
+
return;
|
|
288
|
+
const { uid } = await this._channel.registerLocatorHandler({ selector: locator._selector, noWaitAfter: options.noWaitAfter });
|
|
289
|
+
this._locatorHandlers.set(uid, { locator, handler, times: options.times });
|
|
334
290
|
}
|
|
335
291
|
async _onLocatorHandlerTriggered(uid) {
|
|
336
292
|
let remove = false;
|
|
337
293
|
try {
|
|
338
294
|
const handler = this._locatorHandlers.get(uid);
|
|
339
295
|
if (handler && handler.times !== 0) {
|
|
340
|
-
if (handler.times !==
|
|
296
|
+
if (handler.times !== void 0)
|
|
297
|
+
handler.times--;
|
|
341
298
|
await handler.handler(handler.locator);
|
|
342
299
|
}
|
|
343
|
-
remove =
|
|
300
|
+
remove = handler?.times === 0;
|
|
344
301
|
} finally {
|
|
345
|
-
if (remove)
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
}), true).catch(() => {});
|
|
302
|
+
if (remove)
|
|
303
|
+
this._locatorHandlers.delete(uid);
|
|
304
|
+
this._channel.resolveLocatorHandlerNoReply({ uid, remove }).catch(() => {
|
|
305
|
+
});
|
|
350
306
|
}
|
|
351
307
|
}
|
|
352
308
|
async removeLocatorHandler(locator) {
|
|
353
309
|
for (const [uid, data] of this._locatorHandlers) {
|
|
354
310
|
if (data.locator._equals(locator)) {
|
|
355
311
|
this._locatorHandlers.delete(uid);
|
|
356
|
-
await this._channel.unregisterLocatorHandler({
|
|
357
|
-
|
|
358
|
-
}).catch(() => {});
|
|
312
|
+
await this._channel.unregisterLocatorHandler({ uid }).catch(() => {
|
|
313
|
+
});
|
|
359
314
|
}
|
|
360
315
|
}
|
|
361
316
|
}
|
|
@@ -369,179 +324,165 @@ class Page extends _channelOwner.ChannelOwner {
|
|
|
369
324
|
return await this._mainFrame.waitForURL(url, options);
|
|
370
325
|
}
|
|
371
326
|
async waitForRequest(urlOrPredicate, options = {}) {
|
|
372
|
-
const predicate = async request => {
|
|
373
|
-
if ((0,
|
|
327
|
+
const predicate = async (request) => {
|
|
328
|
+
if ((0, import_rtti.isString)(urlOrPredicate) || (0, import_rtti.isRegExp)(urlOrPredicate))
|
|
329
|
+
return (0, import_urlMatch.urlMatches)(this._browserContext._options.baseURL, request.url(), urlOrPredicate);
|
|
374
330
|
return await urlOrPredicate(request);
|
|
375
331
|
};
|
|
376
332
|
const trimmedUrl = trimUrl(urlOrPredicate);
|
|
377
|
-
const logLine = trimmedUrl ? `waiting for request ${trimmedUrl}` :
|
|
378
|
-
return await this._waitForEvent(
|
|
379
|
-
predicate,
|
|
380
|
-
timeout: options.timeout
|
|
381
|
-
}, logLine);
|
|
333
|
+
const logLine = trimmedUrl ? `waiting for request ${trimmedUrl}` : void 0;
|
|
334
|
+
return await this._waitForEvent(import_events.Events.Page.Request, { predicate, timeout: options.timeout }, logLine);
|
|
382
335
|
}
|
|
383
336
|
async waitForResponse(urlOrPredicate, options = {}) {
|
|
384
|
-
const predicate = async response => {
|
|
385
|
-
if ((0,
|
|
337
|
+
const predicate = async (response) => {
|
|
338
|
+
if ((0, import_rtti.isString)(urlOrPredicate) || (0, import_rtti.isRegExp)(urlOrPredicate))
|
|
339
|
+
return (0, import_urlMatch.urlMatches)(this._browserContext._options.baseURL, response.url(), urlOrPredicate);
|
|
386
340
|
return await urlOrPredicate(response);
|
|
387
341
|
};
|
|
388
342
|
const trimmedUrl = trimUrl(urlOrPredicate);
|
|
389
|
-
const logLine = trimmedUrl ? `waiting for response ${trimmedUrl}` :
|
|
390
|
-
return await this._waitForEvent(
|
|
391
|
-
predicate,
|
|
392
|
-
timeout: options.timeout
|
|
393
|
-
}, logLine);
|
|
343
|
+
const logLine = trimmedUrl ? `waiting for response ${trimmedUrl}` : void 0;
|
|
344
|
+
return await this._waitForEvent(import_events.Events.Page.Response, { predicate, timeout: options.timeout }, logLine);
|
|
394
345
|
}
|
|
395
346
|
async waitForEvent(event, optionsOrPredicate = {}) {
|
|
396
347
|
return await this._waitForEvent(event, optionsOrPredicate, `waiting for event "${event}"`);
|
|
397
348
|
}
|
|
398
349
|
_closeErrorWithReason() {
|
|
399
|
-
return new
|
|
350
|
+
return new import_errors.TargetClosedError(this._closeReason || this._browserContext._effectiveCloseReason());
|
|
400
351
|
}
|
|
401
352
|
async _waitForEvent(event, optionsOrPredicate, logLine) {
|
|
402
353
|
return await this._wrapApiCall(async () => {
|
|
403
|
-
const timeout = this._timeoutSettings.timeout(typeof optionsOrPredicate ===
|
|
404
|
-
const predicate = typeof optionsOrPredicate ===
|
|
405
|
-
const waiter =
|
|
406
|
-
if (logLine)
|
|
354
|
+
const timeout = this._timeoutSettings.timeout(typeof optionsOrPredicate === "function" ? {} : optionsOrPredicate);
|
|
355
|
+
const predicate = typeof optionsOrPredicate === "function" ? optionsOrPredicate : optionsOrPredicate.predicate;
|
|
356
|
+
const waiter = import_waiter.Waiter.createForEvent(this, event);
|
|
357
|
+
if (logLine)
|
|
358
|
+
waiter.log(logLine);
|
|
407
359
|
waiter.rejectOnTimeout(timeout, `Timeout ${timeout}ms exceeded while waiting for event "${event}"`);
|
|
408
|
-
if (event !==
|
|
409
|
-
|
|
360
|
+
if (event !== import_events.Events.Page.Crash)
|
|
361
|
+
waiter.rejectOnEvent(this, import_events.Events.Page.Crash, new Error("Page crashed"));
|
|
362
|
+
if (event !== import_events.Events.Page.Close)
|
|
363
|
+
waiter.rejectOnEvent(this, import_events.Events.Page.Close, () => this._closeErrorWithReason());
|
|
410
364
|
const result = await waiter.waitForEvent(this, event, predicate);
|
|
411
365
|
waiter.dispose();
|
|
412
366
|
return result;
|
|
413
367
|
});
|
|
414
368
|
}
|
|
415
369
|
async goBack(options = {}) {
|
|
416
|
-
const waitUntil = (0,
|
|
417
|
-
return
|
|
418
|
-
...options,
|
|
419
|
-
waitUntil
|
|
420
|
-
})).response);
|
|
370
|
+
const waitUntil = (0, import_frame.verifyLoadState)("waitUntil", options.waitUntil === void 0 ? "load" : options.waitUntil);
|
|
371
|
+
return import_network.Response.fromNullable((await this._channel.goBack({ ...options, waitUntil, timeout: this._timeoutSettings.navigationTimeout(options) })).response);
|
|
421
372
|
}
|
|
422
373
|
async goForward(options = {}) {
|
|
423
|
-
const waitUntil = (0,
|
|
424
|
-
return
|
|
425
|
-
...options,
|
|
426
|
-
waitUntil
|
|
427
|
-
})).response);
|
|
374
|
+
const waitUntil = (0, import_frame.verifyLoadState)("waitUntil", options.waitUntil === void 0 ? "load" : options.waitUntil);
|
|
375
|
+
return import_network.Response.fromNullable((await this._channel.goForward({ ...options, waitUntil, timeout: this._timeoutSettings.navigationTimeout(options) })).response);
|
|
428
376
|
}
|
|
429
377
|
async requestGC() {
|
|
430
378
|
await this._channel.requestGC();
|
|
431
379
|
}
|
|
432
380
|
async emulateMedia(options = {}) {
|
|
433
381
|
await this._channel.emulateMedia({
|
|
434
|
-
media: options.media === null ?
|
|
435
|
-
colorScheme: options.colorScheme === null ?
|
|
436
|
-
reducedMotion: options.reducedMotion === null ?
|
|
437
|
-
forcedColors: options.forcedColors === null ?
|
|
438
|
-
contrast: options.contrast === null ?
|
|
382
|
+
media: options.media === null ? "no-override" : options.media,
|
|
383
|
+
colorScheme: options.colorScheme === null ? "no-override" : options.colorScheme,
|
|
384
|
+
reducedMotion: options.reducedMotion === null ? "no-override" : options.reducedMotion,
|
|
385
|
+
forcedColors: options.forcedColors === null ? "no-override" : options.forcedColors,
|
|
386
|
+
contrast: options.contrast === null ? "no-override" : options.contrast
|
|
439
387
|
});
|
|
440
388
|
}
|
|
441
389
|
async setViewportSize(viewportSize) {
|
|
442
390
|
this._viewportSize = viewportSize;
|
|
443
|
-
await this._channel.setViewportSize({
|
|
444
|
-
viewportSize
|
|
445
|
-
});
|
|
391
|
+
await this._channel.setViewportSize({ viewportSize });
|
|
446
392
|
}
|
|
447
393
|
viewportSize() {
|
|
448
|
-
return this._viewportSize;
|
|
394
|
+
return this._viewportSize || null;
|
|
449
395
|
}
|
|
450
396
|
async evaluate(pageFunction, arg) {
|
|
451
|
-
(0,
|
|
397
|
+
(0, import_jsHandle.assertMaxArguments)(arguments.length, 2);
|
|
452
398
|
return await this._mainFrame.evaluate(pageFunction, arg);
|
|
453
399
|
}
|
|
454
400
|
async addInitScript(script, arg) {
|
|
455
|
-
const source = await (0,
|
|
456
|
-
await this._channel.addInitScript({
|
|
457
|
-
source
|
|
458
|
-
});
|
|
401
|
+
const source = await (0, import_clientHelper.evaluationScript)(this._platform, script, arg);
|
|
402
|
+
await this._channel.addInitScript({ source });
|
|
459
403
|
}
|
|
460
404
|
async route(url, handler, options = {}) {
|
|
461
|
-
this._routes.unshift(new
|
|
405
|
+
this._routes.unshift(new import_network.RouteHandler(this._platform, this._browserContext._options.baseURL, url, handler, options.times));
|
|
462
406
|
await this._updateInterceptionPatterns();
|
|
463
407
|
}
|
|
464
408
|
async routeFromHAR(har, options = {}) {
|
|
465
409
|
const localUtils = this._connection.localUtils();
|
|
466
|
-
if (!localUtils)
|
|
410
|
+
if (!localUtils)
|
|
411
|
+
throw new Error("Route from har is not supported in thin clients");
|
|
467
412
|
if (options.update) {
|
|
468
413
|
await this._browserContext._recordIntoHAR(har, this, options);
|
|
469
414
|
return;
|
|
470
415
|
}
|
|
471
|
-
const harRouter = await
|
|
472
|
-
urlMatch: options.url
|
|
473
|
-
});
|
|
416
|
+
const harRouter = await import_harRouter.HarRouter.create(localUtils, har, options.notFound || "abort", { urlMatch: options.url });
|
|
474
417
|
this._harRouters.push(harRouter);
|
|
475
418
|
await harRouter.addPageRoute(this);
|
|
476
419
|
}
|
|
477
420
|
async routeWebSocket(url, handler) {
|
|
478
|
-
this._webSocketRoutes.unshift(new
|
|
421
|
+
this._webSocketRoutes.unshift(new import_network.WebSocketRouteHandler(this._browserContext._options.baseURL, url, handler));
|
|
479
422
|
await this._updateWebSocketInterceptionPatterns();
|
|
480
423
|
}
|
|
481
424
|
_disposeHarRouters() {
|
|
482
|
-
this._harRouters.forEach(router => router.dispose());
|
|
425
|
+
this._harRouters.forEach((router) => router.dispose());
|
|
483
426
|
this._harRouters = [];
|
|
484
427
|
}
|
|
485
428
|
async unrouteAll(options) {
|
|
486
|
-
await this._unrouteInternal(this._routes, [], options
|
|
429
|
+
await this._unrouteInternal(this._routes, [], options?.behavior);
|
|
487
430
|
this._disposeHarRouters();
|
|
488
431
|
}
|
|
489
432
|
async unroute(url, handler) {
|
|
490
433
|
const removed = [];
|
|
491
434
|
const remaining = [];
|
|
492
435
|
for (const route of this._routes) {
|
|
493
|
-
if ((0,
|
|
436
|
+
if ((0, import_urlMatch.urlMatchesEqual)(route.url, url) && (!handler || route.handler === handler))
|
|
437
|
+
removed.push(route);
|
|
438
|
+
else
|
|
439
|
+
remaining.push(route);
|
|
494
440
|
}
|
|
495
|
-
await this._unrouteInternal(removed, remaining,
|
|
441
|
+
await this._unrouteInternal(removed, remaining, "default");
|
|
496
442
|
}
|
|
497
443
|
async _unrouteInternal(removed, remaining, behavior) {
|
|
498
444
|
this._routes = remaining;
|
|
445
|
+
if (behavior && behavior !== "default") {
|
|
446
|
+
const promises = removed.map((routeHandler) => routeHandler.stop(behavior));
|
|
447
|
+
await Promise.all(promises);
|
|
448
|
+
}
|
|
499
449
|
await this._updateInterceptionPatterns();
|
|
500
|
-
if (!behavior || behavior === 'default') return;
|
|
501
|
-
const promises = removed.map(routeHandler => routeHandler.stop(behavior));
|
|
502
|
-
await Promise.all(promises);
|
|
503
450
|
}
|
|
504
451
|
async _updateInterceptionPatterns() {
|
|
505
|
-
const patterns =
|
|
506
|
-
await this._channel.setNetworkInterceptionPatterns({
|
|
507
|
-
patterns
|
|
508
|
-
});
|
|
452
|
+
const patterns = import_network.RouteHandler.prepareInterceptionPatterns(this._routes);
|
|
453
|
+
await this._channel.setNetworkInterceptionPatterns({ patterns });
|
|
509
454
|
}
|
|
510
455
|
async _updateWebSocketInterceptionPatterns() {
|
|
511
|
-
const patterns =
|
|
512
|
-
await this._channel.setWebSocketInterceptionPatterns({
|
|
513
|
-
patterns
|
|
514
|
-
});
|
|
456
|
+
const patterns = import_network.WebSocketRouteHandler.prepareInterceptionPatterns(this._webSocketRoutes);
|
|
457
|
+
await this._channel.setWebSocketInterceptionPatterns({ patterns });
|
|
515
458
|
}
|
|
516
459
|
async screenshot(options = {}) {
|
|
517
460
|
const mask = options.mask;
|
|
518
|
-
const copy = {
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
};
|
|
522
|
-
if (!copy.type) copy.type = (0, _elementHandle.determineScreenshotType)(options);
|
|
461
|
+
const copy = { ...options, mask: void 0, timeout: this._timeoutSettings.timeout(options) };
|
|
462
|
+
if (!copy.type)
|
|
463
|
+
copy.type = (0, import_elementHandle.determineScreenshotType)(options);
|
|
523
464
|
if (mask) {
|
|
524
|
-
copy.mask = mask.map(locator => ({
|
|
465
|
+
copy.mask = mask.map((locator) => ({
|
|
525
466
|
frame: locator._frame._channel,
|
|
526
467
|
selector: locator._selector
|
|
527
468
|
}));
|
|
528
469
|
}
|
|
529
470
|
const result = await this._channel.screenshot(copy);
|
|
530
471
|
if (options.path) {
|
|
531
|
-
await (0,
|
|
472
|
+
await (0, import_fileUtils.mkdirIfNeeded)(this._platform, options.path);
|
|
532
473
|
await this._platform.fs().promises.writeFile(options.path, result.binary);
|
|
533
474
|
}
|
|
534
475
|
return result.binary;
|
|
535
476
|
}
|
|
536
477
|
async _expectScreenshot(options) {
|
|
537
|
-
const mask = options
|
|
538
|
-
frame:
|
|
539
|
-
selector:
|
|
540
|
-
})) :
|
|
478
|
+
const mask = options?.mask ? options?.mask.map((locator2) => ({
|
|
479
|
+
frame: locator2._frame._channel,
|
|
480
|
+
selector: locator2._selector
|
|
481
|
+
})) : void 0;
|
|
541
482
|
const locator = options.locator ? {
|
|
542
483
|
frame: options.locator._frame._channel,
|
|
543
484
|
selector: options.locator._selector
|
|
544
|
-
} :
|
|
485
|
+
} : void 0;
|
|
545
486
|
return await this._channel.expectScreenshot({
|
|
546
487
|
...options,
|
|
547
488
|
isNot: !!options.isNot,
|
|
@@ -562,9 +503,13 @@ class Page extends _channelOwner.ChannelOwner {
|
|
|
562
503
|
this._closeReason = options.reason;
|
|
563
504
|
this._closeWasCalled = true;
|
|
564
505
|
try {
|
|
565
|
-
if (this._ownedContext)
|
|
506
|
+
if (this._ownedContext)
|
|
507
|
+
await this._ownedContext.close();
|
|
508
|
+
else
|
|
509
|
+
await this._channel.close(options);
|
|
566
510
|
} catch (e) {
|
|
567
|
-
if ((0,
|
|
511
|
+
if ((0, import_errors.isTargetClosedError)(e) && !options.runBeforeUnload)
|
|
512
|
+
return;
|
|
568
513
|
throw e;
|
|
569
514
|
}
|
|
570
515
|
}
|
|
@@ -578,7 +523,7 @@ class Page extends _channelOwner.ChannelOwner {
|
|
|
578
523
|
return await this._mainFrame.dragAndDrop(source, target, options);
|
|
579
524
|
}
|
|
580
525
|
async dblclick(selector, options) {
|
|
581
|
-
|
|
526
|
+
await this._mainFrame.dblclick(selector, options);
|
|
582
527
|
}
|
|
583
528
|
async tap(selector, options) {
|
|
584
529
|
return await this._mainFrame.tap(selector, options);
|
|
@@ -683,45 +628,44 @@ class Page extends _channelOwner.ChannelOwner {
|
|
|
683
628
|
return [...this._workers];
|
|
684
629
|
}
|
|
685
630
|
async pause(_options) {
|
|
686
|
-
|
|
687
|
-
|
|
631
|
+
if (this._platform.isJSDebuggerAttached())
|
|
632
|
+
return;
|
|
688
633
|
const defaultNavigationTimeout = this._browserContext._timeoutSettings.defaultNavigationTimeout();
|
|
689
634
|
const defaultTimeout = this._browserContext._timeoutSettings.defaultTimeout();
|
|
690
635
|
this._browserContext.setDefaultNavigationTimeout(0);
|
|
691
636
|
this._browserContext.setDefaultTimeout(0);
|
|
692
|
-
|
|
693
|
-
keepTestTimeout: !!(_options !== null && _options !== void 0 && _options.__testHookKeepTestTimeout)
|
|
694
|
-
});
|
|
637
|
+
this._instrumentation?.onWillPause({ keepTestTimeout: !!_options?.__testHookKeepTestTimeout });
|
|
695
638
|
await this._closedOrCrashedScope.safeRace(this.context()._channel.pause());
|
|
696
639
|
this._browserContext.setDefaultNavigationTimeout(defaultNavigationTimeout);
|
|
697
640
|
this._browserContext.setDefaultTimeout(defaultTimeout);
|
|
698
641
|
}
|
|
699
642
|
async pdf(options = {}) {
|
|
700
|
-
const transportOptions = {
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
if (
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
for (const margin of ['top', 'right', 'bottom', 'left']) {
|
|
643
|
+
const transportOptions = { ...options };
|
|
644
|
+
if (transportOptions.margin)
|
|
645
|
+
transportOptions.margin = { ...transportOptions.margin };
|
|
646
|
+
if (typeof options.width === "number")
|
|
647
|
+
transportOptions.width = options.width + "px";
|
|
648
|
+
if (typeof options.height === "number")
|
|
649
|
+
transportOptions.height = options.height + "px";
|
|
650
|
+
for (const margin of ["top", "right", "bottom", "left"]) {
|
|
709
651
|
const index = margin;
|
|
710
|
-
if (options.margin && typeof options.margin[index] ===
|
|
652
|
+
if (options.margin && typeof options.margin[index] === "number")
|
|
653
|
+
transportOptions.margin[index] = transportOptions.margin[index] + "px";
|
|
711
654
|
}
|
|
712
655
|
const result = await this._channel.pdf(transportOptions);
|
|
713
656
|
if (options.path) {
|
|
714
657
|
const platform = this._platform;
|
|
715
|
-
await platform.fs().promises.mkdir(platform.path().dirname(options.path), {
|
|
716
|
-
recursive: true
|
|
717
|
-
});
|
|
658
|
+
await platform.fs().promises.mkdir(platform.path().dirname(options.path), { recursive: true });
|
|
718
659
|
await platform.fs().promises.writeFile(options.path, result.pdf);
|
|
719
660
|
}
|
|
720
661
|
return result.pdf;
|
|
721
662
|
}
|
|
663
|
+
async _snapshotForAI() {
|
|
664
|
+
const result = await this._channel.snapshotForAI();
|
|
665
|
+
return result.snapshot;
|
|
666
|
+
}
|
|
722
667
|
}
|
|
723
|
-
|
|
724
|
-
class BindingCall extends _channelOwner.ChannelOwner {
|
|
668
|
+
class BindingCall extends import_channelOwner.ChannelOwner {
|
|
725
669
|
static from(channel) {
|
|
726
670
|
return channel._object;
|
|
727
671
|
}
|
|
@@ -730,26 +674,33 @@ class BindingCall extends _channelOwner.ChannelOwner {
|
|
|
730
674
|
}
|
|
731
675
|
async call(func) {
|
|
732
676
|
try {
|
|
733
|
-
const frame =
|
|
677
|
+
const frame = import_frame.Frame.from(this._initializer.frame);
|
|
734
678
|
const source = {
|
|
735
679
|
context: frame._page.context(),
|
|
736
680
|
page: frame._page,
|
|
737
681
|
frame
|
|
738
682
|
};
|
|
739
683
|
let result;
|
|
740
|
-
if (this._initializer.handle)
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
684
|
+
if (this._initializer.handle)
|
|
685
|
+
result = await func(source, import_jsHandle.JSHandle.from(this._initializer.handle));
|
|
686
|
+
else
|
|
687
|
+
result = await func(source, ...this._initializer.args.map(import_jsHandle.parseResult));
|
|
688
|
+
this._channel.resolve({ result: (0, import_jsHandle.serializeArgument)(result) }).catch(() => {
|
|
689
|
+
});
|
|
744
690
|
} catch (e) {
|
|
745
|
-
this._channel.reject({
|
|
746
|
-
|
|
747
|
-
}).catch(() => {});
|
|
691
|
+
this._channel.reject({ error: (0, import_errors.serializeError)(e) }).catch(() => {
|
|
692
|
+
});
|
|
748
693
|
}
|
|
749
694
|
}
|
|
750
695
|
}
|
|
751
|
-
exports.BindingCall = BindingCall;
|
|
752
696
|
function trimUrl(param) {
|
|
753
|
-
if ((0,
|
|
754
|
-
|
|
755
|
-
|
|
697
|
+
if ((0, import_rtti.isRegExp)(param))
|
|
698
|
+
return `/${(0, import_stringUtils.trimStringWithEllipsis)(param.source, 50)}/${param.flags}`;
|
|
699
|
+
if ((0, import_rtti.isString)(param))
|
|
700
|
+
return `"${(0, import_stringUtils.trimStringWithEllipsis)(param, 50)}"`;
|
|
701
|
+
}
|
|
702
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
703
|
+
0 && (module.exports = {
|
|
704
|
+
BindingCall,
|
|
705
|
+
Page
|
|
706
|
+
});
|