patchright-core 1.51.2 → 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/browsers.json +15 -13
- package/lib/androidServerImpl.js +42 -48
- package/lib/browserServerImpl.js +54 -67
- package/lib/cli/driver.js +71 -69
- package/lib/cli/program.js +312 -328
- package/lib/cli/programWithTestStub.js +51 -45
- package/lib/client/accessibility.js +31 -32
- package/lib/client/android.js +141 -228
- package/lib/client/api.js +135 -283
- package/lib/client/artifact.js +39 -36
- package/lib/client/browser.js +57 -61
- package/lib/client/browserContext.js +297 -326
- package/lib/client/browserType.js +92 -106
- package/lib/client/cdpSession.js +29 -31
- package/lib/client/channelOwner.js +82 -95
- package/lib/client/clientHelper.js +46 -38
- 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 +190 -212
- 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 +73 -75
- package/lib/client/elementHandle.js +111 -147
- 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 +135 -158
- package/lib/client/fileChooser.js +25 -24
- package/lib/client/fileUtils.js +31 -28
- package/lib/client/frame.js +187 -306
- package/lib/client/harRouter.js +42 -52
- package/lib/client/input.js +40 -69
- package/lib/client/jsHandle.js +54 -69
- package/lib/client/jsonPipe.js +27 -23
- package/lib/client/localUtils.js +29 -28
- package/lib/client/locator.js +161 -245
- package/lib/client/network.js +277 -295
- package/lib/client/page.js +270 -318
- package/lib/client/platform.js +46 -43
- package/lib/client/playwright.js +51 -66
- package/lib/client/selectors.js +48 -46
- package/lib/client/stream.js +29 -25
- package/lib/client/timeoutSettings.js +49 -39
- package/lib/client/tracing.js +48 -84
- 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 +61 -56
- package/lib/client/worker.js +48 -58
- package/lib/client/writableStream.js +27 -23
- 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 -53
- package/lib/inprocess.js +2 -19
- package/lib/outofprocess.js +53 -46
- package/lib/protocol/debug.js +209 -25
- package/lib/protocol/serializers.js +153 -134
- package/lib/protocol/validator.js +2714 -2714
- package/lib/protocol/validatorPrimitives.js +114 -73
- package/lib/remote/playwrightConnection.js +140 -157
- package/lib/remote/playwrightServer.js +99 -84
- package/lib/server/accessibility.js +44 -37
- package/lib/server/android/android.js +216 -209
- package/lib/server/android/backendAdb.js +89 -82
- package/lib/server/artifact.js +78 -55
- package/lib/server/bidi/bidiBrowser.js +221 -155
- package/lib/server/bidi/bidiChromium.js +106 -79
- package/lib/server/bidi/bidiConnection.js +66 -83
- package/lib/server/bidi/bidiExecutionContext.js +128 -113
- package/lib/server/bidi/bidiFirefox.js +76 -69
- package/lib/server/bidi/bidiInput.js +86 -97
- package/lib/server/bidi/bidiNetworkManager.js +137 -154
- package/lib/server/bidi/bidiOverCdp.js +57 -58
- package/lib/server/bidi/bidiPage.js +247 -219
- 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 +144 -131
- 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 +76 -84
- package/lib/server/browserContext.js +321 -346
- package/lib/server/browserType.js +169 -182
- package/lib/server/callLog.js +47 -44
- package/lib/server/chromium/chromium.js +212 -190
- package/lib/server/chromium/chromiumSwitches.js +86 -64
- package/lib/server/chromium/crAccessibility.js +157 -131
- package/lib/server/chromium/crBrowser.js +253 -273
- package/lib/server/chromium/crConnection.js +91 -116
- package/lib/server/chromium/crCoverage.js +113 -127
- package/lib/server/chromium/crDevTools.js +59 -51
- package/lib/server/chromium/crDragDrop.js +62 -79
- package/lib/server/chromium/crExecutionContext.js +88 -83
- package/lib/server/chromium/crInput.js +97 -95
- package/lib/server/chromium/crNetworkManager.js +288 -403
- package/lib/server/chromium/crPage.js +522 -608
- package/lib/server/chromium/crPdf.js +54 -86
- package/lib/server/chromium/crProtocolHelper.js +92 -80
- package/lib/server/chromium/crServiceWorker.js +82 -67
- 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 +62 -50
- package/lib/server/codegen/csharp.js +185 -160
- package/lib/server/codegen/java.js +155 -128
- 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 +140 -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 +97 -124
- package/lib/server/debugger.js +82 -78
- package/lib/server/deviceDescriptors.js +37 -24
- package/lib/server/deviceDescriptorsSource.json +50 -50
- 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 +176 -205
- 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 -66
- package/lib/server/dispatchers/dialogDispatcher.js +30 -27
- package/lib/server/dispatchers/dispatcher.js +169 -220
- package/lib/server/dispatchers/electronDispatcher.js +54 -57
- package/lib/server/dispatchers/elementHandlerDispatcher.js +77 -119
- package/lib/server/dispatchers/frameDispatcher.js +99 -163
- package/lib/server/dispatchers/jsHandleDispatcher.js +49 -66
- package/lib/server/dispatchers/jsonPipeDispatcher.js +35 -36
- package/lib/server/dispatchers/localUtilsDispatcher.js +95 -80
- package/lib/server/dispatchers/networkDispatchers.js +90 -107
- package/lib/server/dispatchers/pageDispatcher.js +128 -169
- package/lib/server/dispatchers/playwrightDispatcher.js +69 -76
- package/lib/server/dispatchers/selectorsDispatcher.js +28 -24
- package/lib/server/dispatchers/streamDispatcher.js +42 -45
- package/lib/server/dispatchers/tracingDispatcher.js +36 -41
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +96 -131
- package/lib/server/dispatchers/writableStreamDispatcher.js +54 -38
- package/lib/server/dom.js +413 -443
- package/lib/server/download.js +45 -35
- package/lib/server/electron/electron.js +156 -176
- package/lib/server/electron/loader.js +8 -36
- package/lib/server/errors.js +47 -46
- package/lib/server/fetch.js +289 -323
- package/lib/server/fileChooser.js +25 -24
- package/lib/server/fileUploadUtils.js +65 -59
- package/lib/server/firefox/ffAccessibility.js +153 -131
- package/lib/server/firefox/ffBrowser.js +213 -277
- package/lib/server/firefox/ffConnection.js +63 -84
- package/lib/server/firefox/ffExecutionContext.js +91 -73
- package/lib/server/firefox/ffInput.js +67 -69
- package/lib/server/firefox/ffNetworkManager.js +131 -110
- package/lib/server/firefox/ffPage.js +236 -273
- package/lib/server/firefox/firefox.js +76 -67
- 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 +741 -891
- package/lib/server/har/harRecorder.js +85 -77
- package/lib/server/har/harTracer.js +287 -222
- package/lib/server/harBackend.js +80 -80
- package/lib/server/helper.js +56 -59
- package/lib/server/index.js +59 -99
- package/lib/server/input.js +134 -163
- package/lib/server/instrumentation.js +49 -44
- package/lib/server/javascript.js +143 -134
- package/lib/server/launchApp.js +92 -73
- package/lib/server/localUtils.js +130 -122
- package/lib/server/macEditingCommands.js +141 -137
- package/lib/server/network.js +262 -296
- package/lib/server/page.js +329 -426
- 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 +70 -86
- package/lib/server/recorder/contextRecorder.js +134 -138
- package/lib/server/recorder/recorderApp.js +127 -136
- package/lib/server/recorder/recorderCollection.js +56 -44
- package/lib/server/recorder/recorderFrontend.js +15 -4
- package/lib/server/recorder/recorderRunner.js +79 -103
- package/lib/server/recorder/recorderUtils.js +56 -45
- package/lib/server/recorder/throttledFile.js +42 -30
- package/lib/server/recorder.js +177 -186
- package/lib/server/registry/browserFetcher.js +106 -101
- package/lib/server/registry/dependencies.js +245 -196
- package/lib/server/registry/index.js +904 -792
- package/lib/server/registry/nativeDeps.js +1073 -464
- 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 -70
- package/lib/server/storageScript.js +94 -100
- package/lib/server/timeoutSettings.js +58 -43
- package/lib/server/trace/recorder/snapshotter.js +70 -89
- package/lib/server/trace/recorder/snapshotterInjected.js +238 -217
- package/lib/server/trace/recorder/tracing.js +321 -333
- package/lib/server/trace/test/inMemorySnapshotter.js +46 -52
- package/lib/server/trace/viewer/traceViewer.js +168 -146
- package/lib/server/transport.js +124 -133
- 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 +37 -28
- package/lib/server/utils/debugLogger.js +69 -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 +138 -123
- 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 +143 -86
- 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 +73 -69
- 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 +76 -63
- package/lib/server/webkit/wkAccessibility.js +161 -118
- package/lib/server/webkit/wkBrowser.js +159 -176
- package/lib/server/webkit/wkConnection.js +59 -83
- package/lib/server/webkit/wkExecutionContext.js +84 -70
- package/lib/server/webkit/wkInput.js +82 -80
- package/lib/server/webkit/wkInterceptableRequest.js +102 -95
- package/lib/server/webkit/wkPage.js +525 -619
- package/lib/server/webkit/wkProvisionalPage.js +45 -56
- package/lib/server/webkit/wkWorkers.js +77 -77
- package/lib/utils/isomorphic/ariaSnapshot.js +144 -152
- package/lib/utils/isomorphic/assert.js +28 -22
- package/lib/utils/isomorphic/builtins.js +90 -0
- package/lib/utils/isomorphic/colors.js +66 -59
- package/lib/utils/isomorphic/cssParser.js +121 -125
- package/lib/utils/isomorphic/cssTokenizer.js +436 -364
- package/lib/utils/isomorphic/headers.js +38 -37
- package/lib/utils/isomorphic/locatorGenerators.js +340 -357
- package/lib/utils/isomorphic/locatorParser.js +96 -105
- package/lib/utils/isomorphic/locatorUtils.js +63 -44
- package/lib/utils/isomorphic/manualPromise.js +47 -39
- package/lib/utils/isomorphic/mimeType.js +448 -25
- package/lib/utils/isomorphic/multimap.js +35 -27
- package/lib/utils/isomorphic/rtti.js +35 -33
- package/lib/utils/isomorphic/selectorParser.js +183 -193
- package/lib/utils/isomorphic/semaphore.js +27 -24
- package/lib/utils/isomorphic/stackTrace.js +87 -98
- package/lib/utils/isomorphic/stringUtils.js +113 -106
- package/lib/utils/isomorphic/time.js +41 -22
- package/lib/utils/isomorphic/timeoutRunner.js +55 -54
- package/lib/utils/isomorphic/traceUtils.js +38 -41
- package/lib/utils/isomorphic/types.js +15 -4
- package/lib/utils/isomorphic/urlMatch.js +112 -67
- package/lib/utils/isomorphic/utilityScriptSerializers.js +248 -0
- package/lib/utils.js +97 -443
- package/lib/utilsBundle.js +101 -52
- package/lib/vite/htmlReport/index.html +21 -15
- package/lib/vite/recorder/assets/{codeMirrorModule-B9YMkrwa.js → codeMirrorModule-DVQi6prl.js} +1 -1
- package/lib/vite/recorder/assets/index-97EUAAbk.js +184 -0
- package/lib/vite/recorder/index.html +1 -1
- package/lib/vite/traceViewer/assets/{codeMirrorModule-DpJ-EmBQ.js → codeMirrorModule-dvXVzLxY.js} +1 -1
- package/lib/vite/traceViewer/assets/defaultSettingsView-BjymbO6M.js +265 -0
- package/lib/vite/traceViewer/{defaultSettingsView.5fN5lw10.css → defaultSettingsView.QdHITyLI.css} +1 -1
- package/lib/vite/traceViewer/index.ChIUCJnj.js +2 -0
- package/lib/vite/traceViewer/index.html +3 -3
- package/lib/vite/traceViewer/sw.bundle.js +3 -3
- package/lib/vite/traceViewer/uiMode.html +3 -3
- package/lib/vite/traceViewer/uiMode.jUCiCtdp.js +5 -0
- package/lib/zipBundle.js +32 -23
- package/package.json +1 -1
- package/types/protocol.d.ts +436 -17
- package/types/types.d.ts +35 -16
- package/lib/server/isomorphic/utilityScriptSerializers.js +0 -229
- package/lib/vite/recorder/assets/index-ELPgmkwA.js +0 -184
- package/lib/vite/traceViewer/assets/defaultSettingsView-DTenqiGw.js +0 -259
- package/lib/vite/traceViewer/index.CUq7VgrV.js +0 -2
- package/lib/vite/traceViewer/uiMode.CHJSAD7F.js +0 -5
package/lib/client/android.js
CHANGED
|
@@ -1,92 +1,84 @@
|
|
|
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 android_exports = {};
|
|
20
|
+
__export(android_exports, {
|
|
21
|
+
Android: () => Android,
|
|
22
|
+
AndroidDevice: () => AndroidDevice,
|
|
23
|
+
AndroidInput: () => AndroidInput,
|
|
24
|
+
AndroidSocket: () => AndroidSocket,
|
|
25
|
+
AndroidWebView: () => AndroidWebView
|
|
5
26
|
});
|
|
6
|
-
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
var
|
|
17
|
-
var
|
|
18
|
-
|
|
19
|
-
* Copyright (c) Microsoft Corporation.
|
|
20
|
-
*
|
|
21
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
22
|
-
* you may not use this file except in compliance with the License.
|
|
23
|
-
* You may obtain a copy of the License at
|
|
24
|
-
*
|
|
25
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
26
|
-
*
|
|
27
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
28
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
29
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
30
|
-
* See the License for the specific language governing permissions and
|
|
31
|
-
* limitations under the License.
|
|
32
|
-
*/
|
|
33
|
-
|
|
34
|
-
class Android extends _channelOwner.ChannelOwner {
|
|
27
|
+
module.exports = __toCommonJS(android_exports);
|
|
28
|
+
var import_eventEmitter = require("./eventEmitter");
|
|
29
|
+
var import_browserContext = require("./browserContext");
|
|
30
|
+
var import_channelOwner = require("./channelOwner");
|
|
31
|
+
var import_errors = require("./errors");
|
|
32
|
+
var import_events = require("./events");
|
|
33
|
+
var import_waiter = require("./waiter");
|
|
34
|
+
var import_timeoutSettings = require("./timeoutSettings");
|
|
35
|
+
var import_rtti = require("../utils/isomorphic/rtti");
|
|
36
|
+
var import_time = require("../utils/isomorphic/time");
|
|
37
|
+
var import_timeoutRunner = require("../utils/isomorphic/timeoutRunner");
|
|
38
|
+
var import_webSocket = require("./webSocket");
|
|
39
|
+
class Android extends import_channelOwner.ChannelOwner {
|
|
35
40
|
static from(android) {
|
|
36
41
|
return android._object;
|
|
37
42
|
}
|
|
38
43
|
constructor(parent, type, guid, initializer) {
|
|
39
44
|
super(parent, type, guid, initializer);
|
|
40
|
-
this._timeoutSettings =
|
|
41
|
-
this._serverLauncher = void 0;
|
|
42
|
-
this._timeoutSettings = new _timeoutSettings.TimeoutSettings(this._platform);
|
|
45
|
+
this._timeoutSettings = new import_timeoutSettings.TimeoutSettings(this._platform);
|
|
43
46
|
}
|
|
44
47
|
setDefaultTimeout(timeout) {
|
|
45
48
|
this._timeoutSettings.setDefaultTimeout(timeout);
|
|
46
49
|
this._wrapApiCall(async () => {
|
|
47
|
-
await this._channel.setDefaultTimeoutNoReply({
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}, true).catch(() => {});
|
|
50
|
+
await this._channel.setDefaultTimeoutNoReply({ timeout });
|
|
51
|
+
}, true).catch(() => {
|
|
52
|
+
});
|
|
51
53
|
}
|
|
52
54
|
async devices(options = {}) {
|
|
53
|
-
const {
|
|
54
|
-
|
|
55
|
-
} = await this._channel.devices(options);
|
|
56
|
-
return devices.map(d => AndroidDevice.from(d));
|
|
55
|
+
const { devices } = await this._channel.devices(options);
|
|
56
|
+
return devices.map((d) => AndroidDevice.from(d));
|
|
57
57
|
}
|
|
58
58
|
async launchServer(options = {}) {
|
|
59
|
-
if (!this._serverLauncher)
|
|
59
|
+
if (!this._serverLauncher)
|
|
60
|
+
throw new Error("Launching server is not supported");
|
|
60
61
|
return await this._serverLauncher.launchServer(options);
|
|
61
62
|
}
|
|
62
63
|
async connect(wsEndpoint, options = {}) {
|
|
63
64
|
return await this._wrapApiCall(async () => {
|
|
64
|
-
const deadline = options.timeout ? (0,
|
|
65
|
-
const headers = {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
};
|
|
69
|
-
const connectParams = {
|
|
70
|
-
wsEndpoint,
|
|
71
|
-
headers,
|
|
72
|
-
slowMo: options.slowMo,
|
|
73
|
-
timeout: options.timeout
|
|
74
|
-
};
|
|
75
|
-
const connection = await (0, _webSocket.connectOverWebSocket)(this._connection, connectParams);
|
|
65
|
+
const deadline = options.timeout ? (0, import_time.monotonicTime)() + options.timeout : 0;
|
|
66
|
+
const headers = { "x-playwright-browser": "android", ...options.headers };
|
|
67
|
+
const connectParams = { wsEndpoint, headers, slowMo: options.slowMo, timeout: options.timeout };
|
|
68
|
+
const connection = await (0, import_webSocket.connectOverWebSocket)(this._connection, connectParams);
|
|
76
69
|
let device;
|
|
77
|
-
connection.on(
|
|
78
|
-
|
|
79
|
-
(_device = device) === null || _device === void 0 || _device._didClose();
|
|
70
|
+
connection.on("close", () => {
|
|
71
|
+
device?._didClose();
|
|
80
72
|
});
|
|
81
|
-
const result = await (0,
|
|
73
|
+
const result = await (0, import_timeoutRunner.raceAgainstDeadline)(async () => {
|
|
82
74
|
const playwright = await connection.initializePlaywright();
|
|
83
75
|
if (!playwright._initializer.preConnectedAndroidDevice) {
|
|
84
76
|
connection.close();
|
|
85
|
-
throw new Error(
|
|
77
|
+
throw new Error("Malformed endpoint. Did you use Android.launchServer method?");
|
|
86
78
|
}
|
|
87
79
|
device = AndroidDevice.from(playwright._initializer.preConnectedAndroidDevice);
|
|
88
80
|
device._shouldCloseConnectionOnClose = true;
|
|
89
|
-
device.on(
|
|
81
|
+
device.on(import_events.Events.AndroidDevice.Close, () => connection.close());
|
|
90
82
|
return device;
|
|
91
83
|
}, deadline);
|
|
92
84
|
if (!result.timedOut) {
|
|
@@ -98,44 +90,37 @@ class Android extends _channelOwner.ChannelOwner {
|
|
|
98
90
|
});
|
|
99
91
|
}
|
|
100
92
|
}
|
|
101
|
-
|
|
102
|
-
class AndroidDevice extends _channelOwner.ChannelOwner {
|
|
103
|
-
static from(androidDevice) {
|
|
104
|
-
return androidDevice._object;
|
|
105
|
-
}
|
|
93
|
+
class AndroidDevice extends import_channelOwner.ChannelOwner {
|
|
106
94
|
constructor(parent, type, guid, initializer) {
|
|
107
95
|
super(parent, type, guid, initializer);
|
|
108
|
-
this.
|
|
109
|
-
this._webViews = new Map();
|
|
96
|
+
this._webViews = /* @__PURE__ */ new Map();
|
|
110
97
|
this._shouldCloseConnectionOnClose = false;
|
|
111
|
-
this.input = void 0;
|
|
112
98
|
this.input = new AndroidInput(this);
|
|
113
|
-
this._timeoutSettings = new
|
|
114
|
-
this._channel.on(
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
this._channel.on('close', () => this._didClose());
|
|
99
|
+
this._timeoutSettings = new import_timeoutSettings.TimeoutSettings(this._platform, parent._timeoutSettings);
|
|
100
|
+
this._channel.on("webViewAdded", ({ webView }) => this._onWebViewAdded(webView));
|
|
101
|
+
this._channel.on("webViewRemoved", ({ socketName }) => this._onWebViewRemoved(socketName));
|
|
102
|
+
this._channel.on("close", () => this._didClose());
|
|
103
|
+
}
|
|
104
|
+
static from(androidDevice) {
|
|
105
|
+
return androidDevice._object;
|
|
121
106
|
}
|
|
122
107
|
_onWebViewAdded(webView) {
|
|
123
108
|
const view = new AndroidWebView(this, webView);
|
|
124
109
|
this._webViews.set(webView.socketName, view);
|
|
125
|
-
this.emit(
|
|
110
|
+
this.emit(import_events.Events.AndroidDevice.WebView, view);
|
|
126
111
|
}
|
|
127
112
|
_onWebViewRemoved(socketName) {
|
|
128
113
|
const view = this._webViews.get(socketName);
|
|
129
114
|
this._webViews.delete(socketName);
|
|
130
|
-
if (view)
|
|
115
|
+
if (view)
|
|
116
|
+
view.emit(import_events.Events.AndroidWebView.Close);
|
|
131
117
|
}
|
|
132
118
|
setDefaultTimeout(timeout) {
|
|
133
119
|
this._timeoutSettings.setDefaultTimeout(timeout);
|
|
134
120
|
this._wrapApiCall(async () => {
|
|
135
|
-
await this._channel.setDefaultTimeoutNoReply({
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
}, true).catch(() => {});
|
|
121
|
+
await this._channel.setDefaultTimeoutNoReply({ timeout });
|
|
122
|
+
}, true).catch(() => {
|
|
123
|
+
});
|
|
139
124
|
}
|
|
140
125
|
serial() {
|
|
141
126
|
return this._initializer.serial;
|
|
@@ -147,101 +132,59 @@ class AndroidDevice extends _channelOwner.ChannelOwner {
|
|
|
147
132
|
return [...this._webViews.values()];
|
|
148
133
|
}
|
|
149
134
|
async webView(selector, options) {
|
|
150
|
-
const predicate = v => {
|
|
151
|
-
if (selector.pkg)
|
|
152
|
-
|
|
135
|
+
const predicate = (v) => {
|
|
136
|
+
if (selector.pkg)
|
|
137
|
+
return v.pkg() === selector.pkg;
|
|
138
|
+
if (selector.socketName)
|
|
139
|
+
return v._socketName() === selector.socketName;
|
|
153
140
|
return false;
|
|
154
141
|
};
|
|
155
142
|
const webView = [...this._webViews.values()].find(predicate);
|
|
156
|
-
if (webView)
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
predicate
|
|
160
|
-
});
|
|
143
|
+
if (webView)
|
|
144
|
+
return webView;
|
|
145
|
+
return await this.waitForEvent("webview", { ...options, predicate });
|
|
161
146
|
}
|
|
162
147
|
async wait(selector, options) {
|
|
163
|
-
await this._channel.wait({
|
|
164
|
-
selector: toSelectorChannel(selector),
|
|
165
|
-
...options
|
|
166
|
-
});
|
|
148
|
+
await this._channel.wait({ selector: toSelectorChannel(selector), ...options });
|
|
167
149
|
}
|
|
168
150
|
async fill(selector, text, options) {
|
|
169
|
-
await this._channel.fill({
|
|
170
|
-
selector: toSelectorChannel(selector),
|
|
171
|
-
text,
|
|
172
|
-
...options
|
|
173
|
-
});
|
|
151
|
+
await this._channel.fill({ selector: toSelectorChannel(selector), text, ...options });
|
|
174
152
|
}
|
|
175
153
|
async press(selector, key, options) {
|
|
176
154
|
await this.tap(selector, options);
|
|
177
155
|
await this.input.press(key);
|
|
178
156
|
}
|
|
179
157
|
async tap(selector, options) {
|
|
180
|
-
await this._channel.tap({
|
|
181
|
-
selector: toSelectorChannel(selector),
|
|
182
|
-
...options
|
|
183
|
-
});
|
|
158
|
+
await this._channel.tap({ selector: toSelectorChannel(selector), ...options });
|
|
184
159
|
}
|
|
185
160
|
async drag(selector, dest, options) {
|
|
186
|
-
await this._channel.drag({
|
|
187
|
-
selector: toSelectorChannel(selector),
|
|
188
|
-
dest,
|
|
189
|
-
...options
|
|
190
|
-
});
|
|
161
|
+
await this._channel.drag({ selector: toSelectorChannel(selector), dest, ...options });
|
|
191
162
|
}
|
|
192
163
|
async fling(selector, direction, options) {
|
|
193
|
-
await this._channel.fling({
|
|
194
|
-
selector: toSelectorChannel(selector),
|
|
195
|
-
direction,
|
|
196
|
-
...options
|
|
197
|
-
});
|
|
164
|
+
await this._channel.fling({ selector: toSelectorChannel(selector), direction, ...options });
|
|
198
165
|
}
|
|
199
166
|
async longTap(selector, options) {
|
|
200
|
-
await this._channel.longTap({
|
|
201
|
-
selector: toSelectorChannel(selector),
|
|
202
|
-
...options
|
|
203
|
-
});
|
|
167
|
+
await this._channel.longTap({ selector: toSelectorChannel(selector), ...options });
|
|
204
168
|
}
|
|
205
169
|
async pinchClose(selector, percent, options) {
|
|
206
|
-
await this._channel.pinchClose({
|
|
207
|
-
selector: toSelectorChannel(selector),
|
|
208
|
-
percent,
|
|
209
|
-
...options
|
|
210
|
-
});
|
|
170
|
+
await this._channel.pinchClose({ selector: toSelectorChannel(selector), percent, ...options });
|
|
211
171
|
}
|
|
212
172
|
async pinchOpen(selector, percent, options) {
|
|
213
|
-
await this._channel.pinchOpen({
|
|
214
|
-
selector: toSelectorChannel(selector),
|
|
215
|
-
percent,
|
|
216
|
-
...options
|
|
217
|
-
});
|
|
173
|
+
await this._channel.pinchOpen({ selector: toSelectorChannel(selector), percent, ...options });
|
|
218
174
|
}
|
|
219
175
|
async scroll(selector, direction, percent, options) {
|
|
220
|
-
await this._channel.scroll({
|
|
221
|
-
selector: toSelectorChannel(selector),
|
|
222
|
-
direction,
|
|
223
|
-
percent,
|
|
224
|
-
...options
|
|
225
|
-
});
|
|
176
|
+
await this._channel.scroll({ selector: toSelectorChannel(selector), direction, percent, ...options });
|
|
226
177
|
}
|
|
227
178
|
async swipe(selector, direction, percent, options) {
|
|
228
|
-
await this._channel.swipe({
|
|
229
|
-
selector: toSelectorChannel(selector),
|
|
230
|
-
direction,
|
|
231
|
-
percent,
|
|
232
|
-
...options
|
|
233
|
-
});
|
|
179
|
+
await this._channel.swipe({ selector: toSelectorChannel(selector), direction, percent, ...options });
|
|
234
180
|
}
|
|
235
181
|
async info(selector) {
|
|
236
|
-
return (await this._channel.info({
|
|
237
|
-
selector: toSelectorChannel(selector)
|
|
238
|
-
})).info;
|
|
182
|
+
return (await this._channel.info({ selector: toSelectorChannel(selector) })).info;
|
|
239
183
|
}
|
|
240
184
|
async screenshot(options = {}) {
|
|
241
|
-
const {
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
if (options.path) await this._platform.fs().promises.writeFile(options.path, binary);
|
|
185
|
+
const { binary } = await this._channel.screenshot();
|
|
186
|
+
if (options.path)
|
|
187
|
+
await this._platform.fs().promises.writeFile(options.path, binary);
|
|
245
188
|
return binary;
|
|
246
189
|
}
|
|
247
190
|
async [Symbol.asyncDispose]() {
|
|
@@ -249,77 +192,64 @@ class AndroidDevice extends _channelOwner.ChannelOwner {
|
|
|
249
192
|
}
|
|
250
193
|
async close() {
|
|
251
194
|
try {
|
|
252
|
-
if (this._shouldCloseConnectionOnClose)
|
|
195
|
+
if (this._shouldCloseConnectionOnClose)
|
|
196
|
+
this._connection.close();
|
|
197
|
+
else
|
|
198
|
+
await this._channel.close();
|
|
253
199
|
} catch (e) {
|
|
254
|
-
if ((0,
|
|
200
|
+
if ((0, import_errors.isTargetClosedError)(e))
|
|
201
|
+
return;
|
|
255
202
|
throw e;
|
|
256
203
|
}
|
|
257
204
|
}
|
|
258
205
|
_didClose() {
|
|
259
|
-
this.emit(
|
|
206
|
+
this.emit(import_events.Events.AndroidDevice.Close, this);
|
|
260
207
|
}
|
|
261
208
|
async shell(command) {
|
|
262
|
-
const {
|
|
263
|
-
result
|
|
264
|
-
} = await this._channel.shell({
|
|
265
|
-
command
|
|
266
|
-
});
|
|
209
|
+
const { result } = await this._channel.shell({ command });
|
|
267
210
|
return result;
|
|
268
211
|
}
|
|
269
212
|
async open(command) {
|
|
270
|
-
return AndroidSocket.from((await this._channel.open({
|
|
271
|
-
command
|
|
272
|
-
})).socket);
|
|
213
|
+
return AndroidSocket.from((await this._channel.open({ command })).socket);
|
|
273
214
|
}
|
|
274
215
|
async installApk(file, options) {
|
|
275
|
-
await this._channel.installApk({
|
|
276
|
-
file: await loadFile(this._platform, file),
|
|
277
|
-
args: options && options.args
|
|
278
|
-
});
|
|
216
|
+
await this._channel.installApk({ file: await loadFile(this._platform, file), args: options && options.args });
|
|
279
217
|
}
|
|
280
218
|
async push(file, path, options) {
|
|
281
|
-
await this._channel.push({
|
|
282
|
-
file: await loadFile(this._platform, file),
|
|
283
|
-
path,
|
|
284
|
-
mode: options ? options.mode : undefined
|
|
285
|
-
});
|
|
219
|
+
await this._channel.push({ file: await loadFile(this._platform, file), path, mode: options ? options.mode : void 0 });
|
|
286
220
|
}
|
|
287
221
|
async launchBrowser(options = {}) {
|
|
288
|
-
const contextOptions = await (0,
|
|
222
|
+
const contextOptions = await (0, import_browserContext.prepareBrowserContextParams)(this._platform, options);
|
|
289
223
|
const result = await this._channel.launchBrowser(contextOptions);
|
|
290
|
-
const context =
|
|
224
|
+
const context = import_browserContext.BrowserContext.from(result.context);
|
|
291
225
|
context._setOptions(contextOptions, {});
|
|
292
226
|
return context;
|
|
293
227
|
}
|
|
294
228
|
async waitForEvent(event, optionsOrPredicate = {}) {
|
|
295
229
|
return await this._wrapApiCall(async () => {
|
|
296
|
-
const timeout = this._timeoutSettings.timeout(typeof optionsOrPredicate ===
|
|
297
|
-
const predicate = typeof optionsOrPredicate ===
|
|
298
|
-
const waiter =
|
|
230
|
+
const timeout = this._timeoutSettings.timeout(typeof optionsOrPredicate === "function" ? {} : optionsOrPredicate);
|
|
231
|
+
const predicate = typeof optionsOrPredicate === "function" ? optionsOrPredicate : optionsOrPredicate.predicate;
|
|
232
|
+
const waiter = import_waiter.Waiter.createForEvent(this, event);
|
|
299
233
|
waiter.rejectOnTimeout(timeout, `Timeout ${timeout}ms exceeded while waiting for event "${event}"`);
|
|
300
|
-
if (event !==
|
|
234
|
+
if (event !== import_events.Events.AndroidDevice.Close)
|
|
235
|
+
waiter.rejectOnEvent(this, import_events.Events.AndroidDevice.Close, () => new import_errors.TargetClosedError());
|
|
301
236
|
const result = await waiter.waitForEvent(this, event, predicate);
|
|
302
237
|
waiter.dispose();
|
|
303
238
|
return result;
|
|
304
239
|
});
|
|
305
240
|
}
|
|
306
241
|
}
|
|
307
|
-
|
|
308
|
-
class AndroidSocket extends _channelOwner.ChannelOwner {
|
|
242
|
+
class AndroidSocket extends import_channelOwner.ChannelOwner {
|
|
309
243
|
static from(androidDevice) {
|
|
310
244
|
return androidDevice._object;
|
|
311
245
|
}
|
|
312
246
|
constructor(parent, type, guid, initializer) {
|
|
313
247
|
super(parent, type, guid, initializer);
|
|
314
|
-
this._channel.on(
|
|
315
|
-
|
|
316
|
-
}) => this.emit(_events.Events.AndroidSocket.Data, data));
|
|
317
|
-
this._channel.on('close', () => this.emit(_events.Events.AndroidSocket.Close));
|
|
248
|
+
this._channel.on("data", ({ data }) => this.emit(import_events.Events.AndroidSocket.Data, data));
|
|
249
|
+
this._channel.on("close", () => this.emit(import_events.Events.AndroidSocket.Close));
|
|
318
250
|
}
|
|
319
251
|
async write(data) {
|
|
320
|
-
await this._channel.write({
|
|
321
|
-
data
|
|
322
|
-
});
|
|
252
|
+
await this._channel.write({ data });
|
|
323
253
|
}
|
|
324
254
|
async close() {
|
|
325
255
|
await this._channel.close();
|
|
@@ -328,46 +258,31 @@ class AndroidSocket extends _channelOwner.ChannelOwner {
|
|
|
328
258
|
await this.close();
|
|
329
259
|
}
|
|
330
260
|
}
|
|
331
|
-
exports.AndroidSocket = AndroidSocket;
|
|
332
261
|
async function loadFile(platform, file) {
|
|
333
|
-
if ((0,
|
|
262
|
+
if ((0, import_rtti.isString)(file))
|
|
263
|
+
return await platform.fs().promises.readFile(file);
|
|
334
264
|
return file;
|
|
335
265
|
}
|
|
336
266
|
class AndroidInput {
|
|
337
267
|
constructor(device) {
|
|
338
|
-
this._device = void 0;
|
|
339
268
|
this._device = device;
|
|
340
269
|
}
|
|
341
270
|
async type(text) {
|
|
342
|
-
await this._device._channel.inputType({
|
|
343
|
-
text
|
|
344
|
-
});
|
|
271
|
+
await this._device._channel.inputType({ text });
|
|
345
272
|
}
|
|
346
273
|
async press(key) {
|
|
347
|
-
await this._device._channel.inputPress({
|
|
348
|
-
key
|
|
349
|
-
});
|
|
274
|
+
await this._device._channel.inputPress({ key });
|
|
350
275
|
}
|
|
351
276
|
async tap(point) {
|
|
352
|
-
await this._device._channel.inputTap({
|
|
353
|
-
point
|
|
354
|
-
});
|
|
277
|
+
await this._device._channel.inputTap({ point });
|
|
355
278
|
}
|
|
356
279
|
async swipe(from, segments, steps) {
|
|
357
|
-
await this._device._channel.inputSwipe({
|
|
358
|
-
segments,
|
|
359
|
-
steps
|
|
360
|
-
});
|
|
280
|
+
await this._device._channel.inputSwipe({ segments, steps });
|
|
361
281
|
}
|
|
362
282
|
async drag(from, to, steps) {
|
|
363
|
-
await this._device._channel.inputDrag({
|
|
364
|
-
from,
|
|
365
|
-
to,
|
|
366
|
-
steps
|
|
367
|
-
});
|
|
283
|
+
await this._device._channel.inputDrag({ from, to, steps });
|
|
368
284
|
}
|
|
369
285
|
}
|
|
370
|
-
exports.AndroidInput = AndroidInput;
|
|
371
286
|
function toSelectorChannel(selector) {
|
|
372
287
|
const {
|
|
373
288
|
checkable,
|
|
@@ -388,10 +303,12 @@ function toSelectorChannel(selector) {
|
|
|
388
303
|
selected,
|
|
389
304
|
text
|
|
390
305
|
} = selector;
|
|
391
|
-
const toRegex = value => {
|
|
392
|
-
if (value ===
|
|
393
|
-
|
|
394
|
-
|
|
306
|
+
const toRegex = (value) => {
|
|
307
|
+
if (value === void 0)
|
|
308
|
+
return void 0;
|
|
309
|
+
if ((0, import_rtti.isRegExp)(value))
|
|
310
|
+
return value.source;
|
|
311
|
+
return "^" + value.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d") + "$";
|
|
395
312
|
};
|
|
396
313
|
return {
|
|
397
314
|
checkable,
|
|
@@ -406,24 +323,16 @@ function toSelectorChannel(selector) {
|
|
|
406
323
|
enabled,
|
|
407
324
|
focusable,
|
|
408
325
|
focused,
|
|
409
|
-
hasChild: hasChild ? {
|
|
410
|
-
|
|
411
|
-
} : undefined,
|
|
412
|
-
hasDescendant: hasDescendant ? {
|
|
413
|
-
selector: toSelectorChannel(hasDescendant.selector),
|
|
414
|
-
maxDepth: hasDescendant.maxDepth
|
|
415
|
-
} : undefined,
|
|
326
|
+
hasChild: hasChild ? { selector: toSelectorChannel(hasChild.selector) } : void 0,
|
|
327
|
+
hasDescendant: hasDescendant ? { selector: toSelectorChannel(hasDescendant.selector), maxDepth: hasDescendant.maxDepth } : void 0,
|
|
416
328
|
longClickable,
|
|
417
329
|
scrollable,
|
|
418
330
|
selected
|
|
419
331
|
};
|
|
420
332
|
}
|
|
421
|
-
class AndroidWebView extends
|
|
333
|
+
class AndroidWebView extends import_eventEmitter.EventEmitter {
|
|
422
334
|
constructor(device, data) {
|
|
423
335
|
super(device._platform);
|
|
424
|
-
this._device = void 0;
|
|
425
|
-
this._data = void 0;
|
|
426
|
-
this._pagePromise = void 0;
|
|
427
336
|
this._device = device;
|
|
428
337
|
this._data = data;
|
|
429
338
|
}
|
|
@@ -437,16 +346,20 @@ class AndroidWebView extends _eventEmitter.EventEmitter {
|
|
|
437
346
|
return this._data.socketName;
|
|
438
347
|
}
|
|
439
348
|
async page() {
|
|
440
|
-
if (!this._pagePromise)
|
|
349
|
+
if (!this._pagePromise)
|
|
350
|
+
this._pagePromise = this._fetchPage();
|
|
441
351
|
return await this._pagePromise;
|
|
442
352
|
}
|
|
443
353
|
async _fetchPage() {
|
|
444
|
-
const {
|
|
445
|
-
|
|
446
|
-
} = await this._device._channel.connectToWebView({
|
|
447
|
-
socketName: this._data.socketName
|
|
448
|
-
});
|
|
449
|
-
return _browserContext.BrowserContext.from(context).pages()[0];
|
|
354
|
+
const { context } = await this._device._channel.connectToWebView({ socketName: this._data.socketName });
|
|
355
|
+
return import_browserContext.BrowserContext.from(context).pages()[0];
|
|
450
356
|
}
|
|
451
357
|
}
|
|
452
|
-
|
|
358
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
359
|
+
0 && (module.exports = {
|
|
360
|
+
Android,
|
|
361
|
+
AndroidDevice,
|
|
362
|
+
AndroidInput,
|
|
363
|
+
AndroidSocket,
|
|
364
|
+
AndroidWebView
|
|
365
|
+
});
|