@checkly/playwright-core 1.41.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/LICENSE +202 -0
- package/NOTICE +5 -0
- package/README.md +3 -0
- package/ThirdPartyNotices.txt +1513 -0
- package/bin/PrintDeps.exe +0 -0
- package/bin/README.md +2 -0
- package/bin/install_media_pack.ps1 +5 -0
- package/bin/reinstall_chrome_beta_linux.sh +40 -0
- package/bin/reinstall_chrome_beta_mac.sh +13 -0
- package/bin/reinstall_chrome_beta_win.ps1 +23 -0
- package/bin/reinstall_chrome_stable_linux.sh +40 -0
- package/bin/reinstall_chrome_stable_mac.sh +12 -0
- package/bin/reinstall_chrome_stable_win.ps1 +23 -0
- package/bin/reinstall_msedge_beta_linux.sh +40 -0
- package/bin/reinstall_msedge_beta_mac.sh +11 -0
- package/bin/reinstall_msedge_beta_win.ps1 +22 -0
- package/bin/reinstall_msedge_dev_linux.sh +40 -0
- package/bin/reinstall_msedge_dev_mac.sh +11 -0
- package/bin/reinstall_msedge_dev_win.ps1 +22 -0
- package/bin/reinstall_msedge_stable_linux.sh +40 -0
- package/bin/reinstall_msedge_stable_mac.sh +11 -0
- package/bin/reinstall_msedge_stable_win.ps1 +23 -0
- package/browsers.json +64 -0
- package/cli.js +17 -0
- package/index.d.ts +17 -0
- package/index.js +33 -0
- package/index.mjs +28 -0
- package/lib/androidServerImpl.js +69 -0
- package/lib/browserServerImpl.js +92 -0
- package/lib/cli/driver.js +97 -0
- package/lib/cli/program.js +582 -0
- package/lib/cli/programWithTestStub.js +67 -0
- package/lib/client/accessibility.js +50 -0
- package/lib/client/android.js +473 -0
- package/lib/client/api.js +272 -0
- package/lib/client/artifact.js +79 -0
- package/lib/client/browser.js +145 -0
- package/lib/client/browserContext.js +509 -0
- package/lib/client/browserType.js +233 -0
- package/lib/client/cdpSession.js +53 -0
- package/lib/client/channelOwner.js +229 -0
- package/lib/client/clientHelper.js +57 -0
- package/lib/client/clientInstrumentation.js +40 -0
- package/lib/client/connection.js +327 -0
- package/lib/client/consoleMessage.js +55 -0
- package/lib/client/coverage.js +41 -0
- package/lib/client/dialog.js +57 -0
- package/lib/client/download.js +62 -0
- package/lib/client/electron.js +130 -0
- package/lib/client/elementHandle.js +291 -0
- package/lib/client/errors.js +77 -0
- package/lib/client/events.js +93 -0
- package/lib/client/fetch.js +343 -0
- package/lib/client/fileChooser.js +45 -0
- package/lib/client/frame.js +506 -0
- package/lib/client/harRouter.js +93 -0
- package/lib/client/input.js +111 -0
- package/lib/client/jsHandle.js +123 -0
- package/lib/client/jsonPipe.js +35 -0
- package/lib/client/localUtils.js +35 -0
- package/lib/client/locator.js +432 -0
- package/lib/client/network.js +601 -0
- package/lib/client/page.js +707 -0
- package/lib/client/playwright.js +74 -0
- package/lib/client/selectors.js +67 -0
- package/lib/client/stream.js +54 -0
- package/lib/client/tracing.js +135 -0
- package/lib/client/types.js +24 -0
- package/lib/client/video.js +51 -0
- package/lib/client/waiter.js +158 -0
- package/lib/client/webError.js +37 -0
- package/lib/client/worker.js +71 -0
- package/lib/client/writableStream.js +54 -0
- package/lib/common/socksProxy.js +569 -0
- package/lib/common/timeoutSettings.js +73 -0
- package/lib/common/types.js +5 -0
- package/lib/generated/consoleApiSource.js +7 -0
- package/lib/generated/injectedScriptSource.js +7 -0
- package/lib/generated/recorderSource.js +7 -0
- package/lib/generated/utilityScriptSource.js +7 -0
- package/lib/image_tools/colorUtils.js +98 -0
- package/lib/image_tools/compare.js +108 -0
- package/lib/image_tools/imageChannel.js +70 -0
- package/lib/image_tools/stats.js +102 -0
- package/lib/inProcessFactory.js +54 -0
- package/lib/inprocess.js +20 -0
- package/lib/outofprocess.js +67 -0
- package/lib/protocol/debug.js +27 -0
- package/lib/protocol/serializers.js +172 -0
- package/lib/protocol/transport.js +82 -0
- package/lib/protocol/validator.js +2599 -0
- package/lib/protocol/validatorPrimitives.js +139 -0
- package/lib/remote/playwrightConnection.js +274 -0
- package/lib/remote/playwrightServer.js +110 -0
- package/lib/server/accessibility.js +62 -0
- package/lib/server/android/android.js +441 -0
- package/lib/server/android/backendAdb.js +172 -0
- package/lib/server/artifact.js +104 -0
- package/lib/server/browser.js +129 -0
- package/lib/server/browserContext.js +609 -0
- package/lib/server/browserType.js +300 -0
- package/lib/server/chromium/appIcon.png +0 -0
- package/lib/server/chromium/chromium.js +346 -0
- package/lib/server/chromium/chromiumSwitches.js +41 -0
- package/lib/server/chromium/crAccessibility.js +237 -0
- package/lib/server/chromium/crBrowser.js +521 -0
- package/lib/server/chromium/crConnection.js +228 -0
- package/lib/server/chromium/crCoverage.js +246 -0
- package/lib/server/chromium/crDevTools.js +104 -0
- package/lib/server/chromium/crDragDrop.js +144 -0
- package/lib/server/chromium/crExecutionContext.js +156 -0
- package/lib/server/chromium/crInput.js +171 -0
- package/lib/server/chromium/crNetworkManager.js +723 -0
- package/lib/server/chromium/crPage.js +1173 -0
- package/lib/server/chromium/crPdf.js +147 -0
- package/lib/server/chromium/crProtocolHelper.js +131 -0
- package/lib/server/chromium/crServiceWorker.js +115 -0
- package/lib/server/chromium/defaultFontFamilies.js +145 -0
- package/lib/server/chromium/videoRecorder.js +155 -0
- package/lib/server/console.js +59 -0
- package/lib/server/cookieStore.js +112 -0
- package/lib/server/debugController.js +236 -0
- package/lib/server/debugger.js +132 -0
- package/lib/server/deviceDescriptors.js +21 -0
- package/lib/server/deviceDescriptorsSource.json +1549 -0
- package/lib/server/dialog.js +70 -0
- package/lib/server/dispatchers/androidDispatcher.js +193 -0
- package/lib/server/dispatchers/artifactDispatcher.js +118 -0
- package/lib/server/dispatchers/browserContextDispatcher.js +306 -0
- package/lib/server/dispatchers/browserDispatcher.js +170 -0
- package/lib/server/dispatchers/browserTypeDispatcher.js +55 -0
- package/lib/server/dispatchers/cdpSessionDispatcher.js +48 -0
- package/lib/server/dispatchers/debugControllerDispatcher.js +103 -0
- package/lib/server/dispatchers/dialogDispatcher.js +44 -0
- package/lib/server/dispatchers/dispatcher.js +400 -0
- package/lib/server/dispatchers/electronDispatcher.js +80 -0
- package/lib/server/dispatchers/elementHandlerDispatcher.js +228 -0
- package/lib/server/dispatchers/frameDispatcher.js +287 -0
- package/lib/server/dispatchers/jsHandleDispatcher.js +102 -0
- package/lib/server/dispatchers/jsonPipeDispatcher.js +61 -0
- package/lib/server/dispatchers/localUtilsDispatcher.js +399 -0
- package/lib/server/dispatchers/networkDispatchers.js +221 -0
- package/lib/server/dispatchers/pageDispatcher.js +363 -0
- package/lib/server/dispatchers/playwrightDispatcher.js +105 -0
- package/lib/server/dispatchers/selectorsDispatcher.js +36 -0
- package/lib/server/dispatchers/streamDispatcher.js +62 -0
- package/lib/server/dispatchers/tracingDispatcher.js +54 -0
- package/lib/server/dispatchers/writableStreamDispatcher.js +55 -0
- package/lib/server/dom.js +808 -0
- package/lib/server/download.js +53 -0
- package/lib/server/electron/electron.js +254 -0
- package/lib/server/electron/loader.js +57 -0
- package/lib/server/errors.js +68 -0
- package/lib/server/fetch.js +611 -0
- package/lib/server/fileChooser.js +42 -0
- package/lib/server/fileUploadUtils.js +71 -0
- package/lib/server/firefox/ffAccessibility.js +215 -0
- package/lib/server/firefox/ffBrowser.js +447 -0
- package/lib/server/firefox/ffConnection.js +168 -0
- package/lib/server/firefox/ffExecutionContext.js +138 -0
- package/lib/server/firefox/ffInput.js +150 -0
- package/lib/server/firefox/ffNetworkManager.js +231 -0
- package/lib/server/firefox/ffPage.js +558 -0
- package/lib/server/firefox/firefox.js +91 -0
- package/lib/server/formData.js +75 -0
- package/lib/server/frameSelectors.js +171 -0
- package/lib/server/frames.js +1597 -0
- package/lib/server/har/harRecorder.js +139 -0
- package/lib/server/har/harTracer.js +539 -0
- package/lib/server/helper.js +103 -0
- package/lib/server/index.js +96 -0
- package/lib/server/input.js +301 -0
- package/lib/server/instrumentation.js +74 -0
- package/lib/server/isomorphic/utilityScriptSerializers.js +212 -0
- package/lib/server/javascript.js +305 -0
- package/lib/server/launchApp.js +90 -0
- package/lib/server/macEditingCommands.js +139 -0
- package/lib/server/network.js +607 -0
- package/lib/server/page.js +793 -0
- package/lib/server/pipeTransport.js +85 -0
- package/lib/server/playwright.js +82 -0
- package/lib/server/progress.js +102 -0
- package/lib/server/protocolError.js +49 -0
- package/lib/server/recorder/codeGenerator.js +153 -0
- package/lib/server/recorder/csharp.js +310 -0
- package/lib/server/recorder/java.js +216 -0
- package/lib/server/recorder/javascript.js +229 -0
- package/lib/server/recorder/jsonl.js +47 -0
- package/lib/server/recorder/language.js +44 -0
- package/lib/server/recorder/python.js +275 -0
- package/lib/server/recorder/recorderActions.js +5 -0
- package/lib/server/recorder/recorderApp.js +181 -0
- package/lib/server/recorder/recorderUtils.js +48 -0
- package/lib/server/recorder/utils.js +45 -0
- package/lib/server/recorder.js +700 -0
- package/lib/server/registry/browserFetcher.js +168 -0
- package/lib/server/registry/dependencies.js +322 -0
- package/lib/server/registry/index.js +925 -0
- package/lib/server/registry/nativeDeps.js +383 -0
- package/lib/server/registry/oopDownloadBrowserMain.js +138 -0
- package/lib/server/screenshotter.js +354 -0
- package/lib/server/selectors.js +73 -0
- package/lib/server/socksInterceptor.js +100 -0
- package/lib/server/trace/recorder/snapshotter.js +168 -0
- package/lib/server/trace/recorder/snapshotterInjected.js +493 -0
- package/lib/server/trace/recorder/tracing.js +552 -0
- package/lib/server/trace/test/inMemorySnapshotter.js +93 -0
- package/lib/server/trace/viewer/traceViewer.js +229 -0
- package/lib/server/transport.js +191 -0
- package/lib/server/types.js +24 -0
- package/lib/server/usKeyboardLayout.js +555 -0
- package/lib/server/webkit/webkit.js +87 -0
- package/lib/server/webkit/wkAccessibility.js +194 -0
- package/lib/server/webkit/wkBrowser.js +328 -0
- package/lib/server/webkit/wkConnection.js +173 -0
- package/lib/server/webkit/wkExecutionContext.js +146 -0
- package/lib/server/webkit/wkInput.js +169 -0
- package/lib/server/webkit/wkInterceptableRequest.js +158 -0
- package/lib/server/webkit/wkPage.js +1198 -0
- package/lib/server/webkit/wkProvisionalPage.js +59 -0
- package/lib/server/webkit/wkWorkers.js +104 -0
- package/lib/third_party/diff_match_patch.js +2222 -0
- package/lib/third_party/pixelmatch.js +255 -0
- package/lib/utils/ascii.js +31 -0
- package/lib/utils/comparators.js +171 -0
- package/lib/utils/crypto.js +33 -0
- package/lib/utils/debug.js +46 -0
- package/lib/utils/debugLogger.js +89 -0
- package/lib/utils/env.js +47 -0
- package/lib/utils/eventsHelper.js +38 -0
- package/lib/utils/fileUtils.js +66 -0
- package/lib/utils/glob.js +83 -0
- package/lib/utils/happy-eyeballs.js +154 -0
- package/lib/utils/headers.js +52 -0
- package/lib/utils/hostPlatform.js +124 -0
- package/lib/utils/httpServer.js +195 -0
- package/lib/utils/index.js +324 -0
- package/lib/utils/isomorphic/cssParser.js +250 -0
- package/lib/utils/isomorphic/cssTokenizer.js +979 -0
- package/lib/utils/isomorphic/locatorGenerators.js +651 -0
- package/lib/utils/isomorphic/locatorParser.js +179 -0
- package/lib/utils/isomorphic/locatorUtils.js +62 -0
- package/lib/utils/isomorphic/selectorParser.js +397 -0
- package/lib/utils/isomorphic/stringUtils.js +107 -0
- package/lib/utils/isomorphic/traceUtils.js +39 -0
- package/lib/utils/linuxUtils.js +78 -0
- package/lib/utils/manualPromise.js +109 -0
- package/lib/utils/mimeType.js +29 -0
- package/lib/utils/multimap.js +75 -0
- package/lib/utils/network.js +189 -0
- package/lib/utils/processLauncher.js +248 -0
- package/lib/utils/profiler.js +53 -0
- package/lib/utils/rtti.js +41 -0
- package/lib/utils/semaphore.js +51 -0
- package/lib/utils/spawnAsync.js +45 -0
- package/lib/utils/stackTrace.js +123 -0
- package/lib/utils/task.js +58 -0
- package/lib/utils/time.js +37 -0
- package/lib/utils/timeoutRunner.js +131 -0
- package/lib/utils/traceUtils.js +44 -0
- package/lib/utils/userAgent.js +105 -0
- package/lib/utils/wsServer.js +125 -0
- package/lib/utils/zipFile.js +75 -0
- package/lib/utils/zones.js +99 -0
- package/lib/utilsBundle.js +81 -0
- package/lib/utilsBundleImpl/index.js +51 -0
- package/lib/utilsBundleImpl/xdg-open +1066 -0
- package/lib/vite/htmlReport/index.html +66 -0
- package/lib/vite/recorder/assets/codeMirrorModule-Hs9-1ZG4.css +1 -0
- package/lib/vite/recorder/assets/codeMirrorModule-I9ks4y7D.js +24 -0
- package/lib/vite/recorder/assets/codicon-zGuYmc9o.ttf +0 -0
- package/lib/vite/recorder/assets/index-ljsTwXtJ.css +1 -0
- package/lib/vite/recorder/assets/index-yg8ypzl6.js +47 -0
- package/lib/vite/recorder/index.html +29 -0
- package/lib/vite/recorder/playwright-logo.svg +9 -0
- package/lib/vite/traceViewer/assets/codeMirrorModule-GluP1cQ1.js +24 -0
- package/lib/vite/traceViewer/assets/codeMirrorModule-fqJB1XDu.js +24 -0
- package/lib/vite/traceViewer/assets/codeMirrorModule-y3M3aAqy.js +24 -0
- package/lib/vite/traceViewer/assets/wsPort-Rvwd4WC-.js +69 -0
- package/lib/vite/traceViewer/assets/wsPort-dlD7vDkY.js +69 -0
- package/lib/vite/traceViewer/assets/wsPort-qOE2NWrO.js +69 -0
- package/lib/vite/traceViewer/assets/xtermModule-Yt6xwiJ_.js +9 -0
- package/lib/vite/traceViewer/codeMirrorModule.Hs9-1ZG4.css +1 -0
- package/lib/vite/traceViewer/codicon.zGuYmc9o.ttf +0 -0
- package/lib/vite/traceViewer/index.-g_5lMbJ.css +1 -0
- package/lib/vite/traceViewer/index.4X7zDysg.js +2 -0
- package/lib/vite/traceViewer/index.HkJgzlGy.js +2 -0
- package/lib/vite/traceViewer/index.html +26 -0
- package/lib/vite/traceViewer/index.kRjx5sAJ.js +2 -0
- package/lib/vite/traceViewer/playwright-logo.svg +9 -0
- package/lib/vite/traceViewer/snapshot.html +21 -0
- package/lib/vite/traceViewer/sw.bundle.js +4 -0
- package/lib/vite/traceViewer/uiMode.1Wcp_Kto.js +10 -0
- package/lib/vite/traceViewer/uiMode.GTNzARcV.js +10 -0
- package/lib/vite/traceViewer/uiMode.html +17 -0
- package/lib/vite/traceViewer/uiMode.pWy0Re7G.css +1 -0
- package/lib/vite/traceViewer/uiMode.zV-7Lf9v.js +10 -0
- package/lib/vite/traceViewer/wsPort.kSgQKQ0y.css +1 -0
- package/lib/vite/traceViewer/xtermModule.0lwXJFHT.css +32 -0
- package/lib/zipBundle.js +25 -0
- package/lib/zipBundleImpl.js +5 -0
- package/package.json +43 -0
- package/types/protocol.d.ts +20304 -0
- package/types/structs.d.ts +45 -0
- package/types/types.d.ts +20626 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.MultipartFormData = void 0;
|
|
7
|
+
var _utilsBundle = require("../utilsBundle");
|
|
8
|
+
/**
|
|
9
|
+
* Copyright (c) Microsoft Corporation.
|
|
10
|
+
*
|
|
11
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
12
|
+
* you may not use this file except in compliance with the License.
|
|
13
|
+
* You may obtain a copy of the License at
|
|
14
|
+
*
|
|
15
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
16
|
+
*
|
|
17
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
18
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
19
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
20
|
+
* See the License for the specific language governing permissions and
|
|
21
|
+
* limitations under the License.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
class MultipartFormData {
|
|
25
|
+
constructor() {
|
|
26
|
+
this._boundary = void 0;
|
|
27
|
+
this._chunks = [];
|
|
28
|
+
this._boundary = generateUniqueBoundaryString();
|
|
29
|
+
}
|
|
30
|
+
contentTypeHeader() {
|
|
31
|
+
return `multipart/form-data; boundary=${this._boundary}`;
|
|
32
|
+
}
|
|
33
|
+
addField(name, value) {
|
|
34
|
+
this._beginMultiPartHeader(name);
|
|
35
|
+
this._finishMultiPartHeader();
|
|
36
|
+
this._chunks.push(Buffer.from(value));
|
|
37
|
+
this._finishMultiPartField();
|
|
38
|
+
}
|
|
39
|
+
addFileField(name, value) {
|
|
40
|
+
this._beginMultiPartHeader(name);
|
|
41
|
+
this._chunks.push(Buffer.from(`; filename="${value.name}"`));
|
|
42
|
+
this._chunks.push(Buffer.from(`\r\ncontent-type: ${value.mimeType || _utilsBundle.mime.getType(value.name) || 'application/octet-stream'}`));
|
|
43
|
+
this._finishMultiPartHeader();
|
|
44
|
+
this._chunks.push(value.buffer);
|
|
45
|
+
this._finishMultiPartField();
|
|
46
|
+
}
|
|
47
|
+
finish() {
|
|
48
|
+
this._addBoundary(true);
|
|
49
|
+
return Buffer.concat(this._chunks);
|
|
50
|
+
}
|
|
51
|
+
_beginMultiPartHeader(name) {
|
|
52
|
+
this._addBoundary();
|
|
53
|
+
this._chunks.push(Buffer.from(`content-disposition: form-data; name="${name}"`));
|
|
54
|
+
}
|
|
55
|
+
_finishMultiPartHeader() {
|
|
56
|
+
this._chunks.push(Buffer.from(`\r\n\r\n`));
|
|
57
|
+
}
|
|
58
|
+
_finishMultiPartField() {
|
|
59
|
+
this._chunks.push(Buffer.from(`\r\n`));
|
|
60
|
+
}
|
|
61
|
+
_addBoundary(isLastBoundary) {
|
|
62
|
+
this._chunks.push(Buffer.from('--' + this._boundary));
|
|
63
|
+
if (isLastBoundary) this._chunks.push(Buffer.from('--'));
|
|
64
|
+
this._chunks.push(Buffer.from('\r\n'));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.MultipartFormData = MultipartFormData;
|
|
68
|
+
const alphaNumericEncodingMap = [0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42];
|
|
69
|
+
|
|
70
|
+
// See generateUniqueBoundaryString() in WebKit
|
|
71
|
+
function generateUniqueBoundaryString() {
|
|
72
|
+
const charCodes = [];
|
|
73
|
+
for (let i = 0; i < 16; i++) charCodes.push(alphaNumericEncodingMap[Math.floor(Math.random() * alphaNumericEncodingMap.length)]);
|
|
74
|
+
return '----WebKitFormBoundary' + String.fromCharCode(...charCodes);
|
|
75
|
+
}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.FrameSelectors = void 0;
|
|
7
|
+
var _selectorParser = require("../utils/isomorphic/selectorParser");
|
|
8
|
+
var _locatorGenerators = require("../utils/isomorphic/locatorGenerators");
|
|
9
|
+
/**
|
|
10
|
+
* Copyright (c) Microsoft Corporation.
|
|
11
|
+
*
|
|
12
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
13
|
+
* you may not use this file except in compliance with the License.
|
|
14
|
+
* You may obtain a copy of the License at
|
|
15
|
+
*
|
|
16
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
17
|
+
*
|
|
18
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
19
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
+
* See the License for the specific language governing permissions and
|
|
22
|
+
* limitations under the License.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
class FrameSelectors {
|
|
26
|
+
constructor(frame) {
|
|
27
|
+
this.frame = void 0;
|
|
28
|
+
this.frame = frame;
|
|
29
|
+
}
|
|
30
|
+
_parseSelector(selector, options) {
|
|
31
|
+
const strict = typeof (options === null || options === void 0 ? void 0 : options.strict) === 'boolean' ? options.strict : !!this.frame._page.context()._options.strictSelectors;
|
|
32
|
+
return this.frame._page.context().selectors().parseSelector(selector, strict);
|
|
33
|
+
}
|
|
34
|
+
async query(selector, options, scope) {
|
|
35
|
+
const resolved = await this.resolveInjectedForSelector(selector, options, scope);
|
|
36
|
+
// Be careful, |this.frame| can be different from |resolved.frame|.
|
|
37
|
+
if (!resolved) return null;
|
|
38
|
+
const handle = await resolved.injected.evaluateHandle((injected, {
|
|
39
|
+
info,
|
|
40
|
+
scope
|
|
41
|
+
}) => {
|
|
42
|
+
return injected.querySelector(info.parsed, scope || document, info.strict);
|
|
43
|
+
}, {
|
|
44
|
+
info: resolved.info,
|
|
45
|
+
scope: resolved.scope
|
|
46
|
+
});
|
|
47
|
+
const elementHandle = handle.asElement();
|
|
48
|
+
if (!elementHandle) {
|
|
49
|
+
handle.dispose();
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
return adoptIfNeeded(elementHandle, await resolved.frame._mainContext());
|
|
53
|
+
}
|
|
54
|
+
async queryArrayInMainWorld(selector, scope) {
|
|
55
|
+
const resolved = await this.resolveInjectedForSelector(selector, {
|
|
56
|
+
mainWorld: true
|
|
57
|
+
}, scope);
|
|
58
|
+
// Be careful, |this.frame| can be different from |resolved.frame|.
|
|
59
|
+
if (!resolved) throw new Error(`Failed to find frame for selector "${selector}"`);
|
|
60
|
+
return await resolved.injected.evaluateHandle((injected, {
|
|
61
|
+
info,
|
|
62
|
+
scope
|
|
63
|
+
}) => {
|
|
64
|
+
return injected.querySelectorAll(info.parsed, scope || document);
|
|
65
|
+
}, {
|
|
66
|
+
info: resolved.info,
|
|
67
|
+
scope: resolved.scope
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
async queryCount(selector) {
|
|
71
|
+
const resolved = await this.resolveInjectedForSelector(selector);
|
|
72
|
+
// Be careful, |this.frame| can be different from |resolved.frame|.
|
|
73
|
+
if (!resolved) throw new Error(`Failed to find frame for selector "${selector}"`);
|
|
74
|
+
return await resolved.injected.evaluate((injected, {
|
|
75
|
+
info
|
|
76
|
+
}) => {
|
|
77
|
+
return injected.querySelectorAll(info.parsed, document).length;
|
|
78
|
+
}, {
|
|
79
|
+
info: resolved.info
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
async queryAll(selector, scope) {
|
|
83
|
+
const resolved = await this.resolveInjectedForSelector(selector, {}, scope);
|
|
84
|
+
// Be careful, |this.frame| can be different from |resolved.frame|.
|
|
85
|
+
if (!resolved) return [];
|
|
86
|
+
const arrayHandle = await resolved.injected.evaluateHandle((injected, {
|
|
87
|
+
info,
|
|
88
|
+
scope
|
|
89
|
+
}) => {
|
|
90
|
+
return injected.querySelectorAll(info.parsed, scope || document);
|
|
91
|
+
}, {
|
|
92
|
+
info: resolved.info,
|
|
93
|
+
scope: resolved.scope
|
|
94
|
+
});
|
|
95
|
+
const properties = await arrayHandle.getProperties();
|
|
96
|
+
arrayHandle.dispose();
|
|
97
|
+
|
|
98
|
+
// Note: adopting elements one by one may be slow. If we encounter the issue here,
|
|
99
|
+
// we might introduce 'useMainContext' option or similar to speed things up.
|
|
100
|
+
const targetContext = await resolved.frame._mainContext();
|
|
101
|
+
const result = [];
|
|
102
|
+
for (const property of properties.values()) {
|
|
103
|
+
const elementHandle = property.asElement();
|
|
104
|
+
if (elementHandle) result.push(adoptIfNeeded(elementHandle, targetContext));else property.dispose();
|
|
105
|
+
}
|
|
106
|
+
return Promise.all(result);
|
|
107
|
+
}
|
|
108
|
+
async resolveFrameForSelector(selector, options = {}, scope) {
|
|
109
|
+
let frame = this.frame;
|
|
110
|
+
const frameChunks = (0, _selectorParser.splitSelectorByFrame)(selector);
|
|
111
|
+
for (const chunk of frameChunks) {
|
|
112
|
+
(0, _selectorParser.visitAllSelectorParts)(chunk, (part, nested) => {
|
|
113
|
+
if (nested && part.name === 'internal:control' && part.body === 'enter-frame') {
|
|
114
|
+
const locator = (0, _locatorGenerators.asLocator)(this.frame._page.attribution.playwright.options.sdkLanguage, selector);
|
|
115
|
+
throw new _selectorParser.InvalidSelectorError(`Frame locators are not allowed inside composite locators, while querying "${locator}"`);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
for (let i = 0; i < frameChunks.length - 1; ++i) {
|
|
120
|
+
const info = this._parseSelector(frameChunks[i], options);
|
|
121
|
+
const context = await frame._context(info.world);
|
|
122
|
+
const injectedScript = await context.injectedScript();
|
|
123
|
+
const handle = await injectedScript.evaluateHandle((injected, {
|
|
124
|
+
info,
|
|
125
|
+
scope,
|
|
126
|
+
selectorString
|
|
127
|
+
}) => {
|
|
128
|
+
const element = injected.querySelector(info.parsed, scope || document, info.strict);
|
|
129
|
+
if (element && element.nodeName !== 'IFRAME' && element.nodeName !== 'FRAME') throw injected.createStacklessError(`Selector "${selectorString}" resolved to ${injected.previewNode(element)}, <iframe> was expected`);
|
|
130
|
+
return element;
|
|
131
|
+
}, {
|
|
132
|
+
info,
|
|
133
|
+
scope: i === 0 ? scope : undefined,
|
|
134
|
+
selectorString: (0, _selectorParser.stringifySelector)(info.parsed)
|
|
135
|
+
});
|
|
136
|
+
const element = handle.asElement();
|
|
137
|
+
if (!element) return null;
|
|
138
|
+
const maybeFrame = await frame._page._delegate.getContentFrame(element);
|
|
139
|
+
element.dispose();
|
|
140
|
+
if (!maybeFrame) return null;
|
|
141
|
+
frame = maybeFrame;
|
|
142
|
+
}
|
|
143
|
+
// If we end up in the different frame, we should start from the frame root, so throw away the scope.
|
|
144
|
+
if (frame !== this.frame) scope = undefined;
|
|
145
|
+
return {
|
|
146
|
+
frame,
|
|
147
|
+
info: frame.selectors._parseSelector(frameChunks[frameChunks.length - 1], options),
|
|
148
|
+
scope
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
async resolveInjectedForSelector(selector, options, scope) {
|
|
152
|
+
const resolved = await this.resolveFrameForSelector(selector, options, scope);
|
|
153
|
+
// Be careful, |this.frame| can be different from |resolved.frame|.
|
|
154
|
+
if (!resolved) return;
|
|
155
|
+
const context = await resolved.frame._context(options !== null && options !== void 0 && options.mainWorld ? 'main' : resolved.info.world);
|
|
156
|
+
const injected = await context.injectedScript();
|
|
157
|
+
return {
|
|
158
|
+
injected,
|
|
159
|
+
info: resolved.info,
|
|
160
|
+
frame: resolved.frame,
|
|
161
|
+
scope: resolved.scope
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
exports.FrameSelectors = FrameSelectors;
|
|
166
|
+
async function adoptIfNeeded(handle, context) {
|
|
167
|
+
if (handle._context === context) return handle;
|
|
168
|
+
const adopted = handle._page._delegate.adoptElementHandle(handle, context);
|
|
169
|
+
handle.dispose();
|
|
170
|
+
return adopted;
|
|
171
|
+
}
|