patchright-core 1.52.5 → 1.55.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/bin/reinstall_chrome_beta_mac.sh +1 -1
- package/bin/reinstall_chrome_stable_mac.sh +1 -1
- package/bin/reinstall_msedge_beta_mac.sh +1 -1
- package/bin/reinstall_msedge_dev_mac.sh +1 -1
- package/bin/reinstall_msedge_stable_mac.sh +1 -1
- package/browsers.json +14 -14
- package/index.js +1 -1
- package/lib/androidServerImpl.js +4 -2
- package/lib/browserServerImpl.js +47 -12
- package/lib/cli/program.js +116 -50
- package/lib/cli/programWithTestStub.js +1 -1
- package/lib/client/android.js +30 -34
- package/lib/client/browser.js +54 -17
- package/lib/client/browserContext.js +67 -71
- package/lib/client/browserType.js +25 -34
- package/lib/client/channelOwner.js +20 -24
- package/lib/client/connection.js +6 -10
- package/lib/client/electron.js +8 -3
- package/lib/client/elementHandle.js +18 -21
- package/lib/client/fetch.js +5 -3
- package/lib/client/frame.js +54 -32
- package/lib/client/input.js +3 -1
- package/lib/client/jsHandle.js +4 -0
- package/lib/client/localUtils.js +0 -1
- package/lib/client/locator.js +30 -26
- package/lib/client/network.js +5 -12
- package/lib/client/page.js +32 -32
- package/lib/client/playwright.js +6 -16
- package/lib/client/selectors.js +18 -38
- package/lib/client/timeoutSettings.js +12 -8
- package/lib/client/tracing.js +24 -20
- package/lib/client/waiter.js +2 -2
- package/lib/client/webSocket.js +4 -22
- package/lib/generated/bindingsControllerSource.js +28 -0
- package/lib/generated/clockSource.js +1 -1
- package/lib/generated/injectedScriptSource.js +1 -1
- package/lib/generated/pollingRecorderSource.js +1 -1
- package/lib/generated/storageScriptSource.js +28 -0
- package/lib/generated/utilityScriptSource.js +1 -1
- package/lib/generated/webSocketMockSource.js +12 -50
- package/lib/inProcessFactory.js +9 -6
- package/lib/outofprocess.js +0 -2
- package/lib/protocol/validator.js +421 -345
- package/lib/protocol/validatorPrimitives.js +18 -4
- package/lib/remote/playwrightConnection.js +29 -166
- package/lib/remote/playwrightServer.js +233 -35
- package/lib/server/android/android.js +97 -83
- package/lib/server/android/backendAdb.js +0 -2
- package/lib/server/bidi/bidiBrowser.js +139 -73
- package/lib/server/bidi/bidiChromium.js +23 -22
- package/lib/server/bidi/bidiExecutionContext.js +2 -1
- package/lib/server/bidi/bidiFirefox.js +17 -14
- package/lib/server/bidi/bidiInput.js +22 -22
- package/lib/server/bidi/bidiNetworkManager.js +8 -11
- package/lib/server/bidi/bidiPage.js +42 -86
- package/lib/server/bidi/third_party/bidiProtocol.js +5 -133
- package/lib/server/bidi/third_party/bidiProtocolCore.js +179 -0
- package/lib/server/{dispatchers/selectorsDispatcher.js → bidi/third_party/bidiProtocolPermissions.js} +20 -18
- package/lib/server/browser.js +30 -21
- package/lib/server/browserContext.js +203 -165
- package/lib/server/browserType.js +109 -107
- package/lib/server/chromium/chromium.js +84 -69
- package/lib/server/chromium/chromiumSwitches.js +13 -20
- package/lib/server/chromium/crBrowser.js +74 -40
- package/lib/server/chromium/crConnection.js +8 -9
- package/lib/server/chromium/crCoverage.js +11 -8
- package/lib/server/chromium/crDragDrop.js +25 -20
- package/lib/server/chromium/crExecutionContext.js +2 -1
- package/lib/server/chromium/crInput.js +32 -29
- package/lib/server/chromium/crNetworkManager.js +43 -31
- package/lib/server/chromium/crPage.js +98 -72
- package/lib/server/chromium/crServiceWorker.js +13 -18
- package/lib/server/chromium/videoRecorder.js +10 -18
- package/lib/server/clock.js +51 -39
- package/lib/server/codegen/csharp.js +10 -5
- package/lib/server/codegen/java.js +1 -1
- package/lib/server/codegen/javascript.js +1 -1
- package/lib/server/codegen/jsonl.js +2 -1
- package/lib/server/codegen/language.js +22 -1
- package/lib/server/codegen/languages.js +4 -4
- package/lib/server/codegen/python.js +1 -1
- package/lib/server/cookieStore.js +3 -1
- package/lib/server/debugController.js +105 -71
- package/lib/server/debugger.js +6 -23
- package/lib/server/deviceDescriptorsSource.json +237 -127
- package/lib/server/dialog.js +50 -6
- package/lib/server/dispatchers/androidDispatcher.js +77 -62
- package/lib/server/dispatchers/artifactDispatcher.js +18 -18
- package/lib/server/dispatchers/browserContextDispatcher.js +141 -91
- package/lib/server/dispatchers/browserDispatcher.js +55 -88
- package/lib/server/dispatchers/browserTypeDispatcher.js +18 -9
- package/lib/server/dispatchers/cdpSessionDispatcher.js +4 -4
- package/lib/server/dispatchers/debugControllerDispatcher.js +12 -21
- package/lib/server/dispatchers/dialogDispatcher.js +4 -4
- package/lib/server/dispatchers/dispatcher.js +78 -53
- package/lib/server/dispatchers/electronDispatcher.js +19 -20
- package/lib/server/dispatchers/elementHandlerDispatcher.js +83 -93
- package/lib/server/dispatchers/frameDispatcher.js +98 -101
- package/lib/server/dispatchers/jsHandleDispatcher.js +21 -16
- package/lib/server/dispatchers/jsonPipeDispatcher.js +4 -4
- package/lib/server/dispatchers/localUtilsDispatcher.js +53 -59
- package/lib/server/dispatchers/networkDispatchers.js +41 -35
- package/lib/server/dispatchers/pageDispatcher.js +156 -107
- package/lib/server/dispatchers/playwrightDispatcher.js +37 -25
- package/lib/server/dispatchers/streamDispatcher.js +15 -8
- package/lib/server/dispatchers/tracingDispatcher.js +22 -13
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +46 -35
- package/lib/server/dispatchers/writableStreamDispatcher.js +16 -10
- package/lib/server/dom.js +198 -266
- package/lib/server/download.js +3 -3
- package/lib/server/electron/electron.js +96 -103
- package/lib/server/electron/loader.js +1 -1
- package/lib/server/fetch.js +22 -41
- package/lib/server/fileUploadUtils.js +1 -1
- package/lib/server/firefox/ffBrowser.js +79 -55
- package/lib/server/firefox/ffExecutionContext.js +2 -1
- package/lib/server/firefox/ffInput.js +23 -23
- package/lib/server/firefox/ffNetworkManager.js +8 -6
- package/lib/server/firefox/ffPage.js +39 -36
- package/lib/server/firefox/firefox.js +9 -10
- package/lib/server/frameSelectors.js +63 -20
- package/lib/server/frames.js +495 -555
- package/lib/server/har/harRecorder.js +1 -1
- package/lib/server/har/harTracer.js +4 -2
- package/lib/server/helper.js +3 -7
- package/lib/server/index.js +0 -3
- package/lib/server/input.js +47 -54
- package/lib/server/instrumentation.js +8 -14
- package/lib/server/javascript.js +8 -16
- package/lib/server/launchApp.js +48 -30
- package/lib/server/localUtils.js +45 -38
- package/lib/server/network.js +44 -10
- package/lib/server/page.js +232 -177
- package/lib/server/pageBinding.js +6 -7
- package/lib/server/playwright.js +4 -14
- package/lib/server/progress.js +57 -49
- package/lib/server/recorder/recorderApp.js +298 -95
- package/lib/server/recorder/recorderRunner.js +23 -24
- package/lib/server/recorder/recorderSignalProcessor.js +83 -0
- package/lib/server/recorder/recorderUtils.js +67 -10
- package/lib/server/recorder.js +284 -146
- package/lib/server/registry/index.js +83 -48
- package/lib/server/registry/nativeDeps.js +175 -0
- package/lib/server/registry/oopDownloadBrowserMain.js +1 -1
- package/lib/server/screenshotter.js +84 -83
- package/lib/server/selectors.js +12 -12
- package/lib/server/socksClientCertificatesInterceptor.js +198 -136
- package/lib/server/trace/recorder/snapshotter.js +12 -19
- package/lib/server/trace/recorder/tracing.js +36 -27
- package/lib/server/trace/viewer/traceViewer.js +11 -20
- package/lib/server/transport.js +20 -22
- package/lib/server/utils/comparators.js +2 -2
- package/lib/server/utils/debug.js +3 -8
- package/lib/server/utils/debugLogger.js +8 -0
- package/lib/server/utils/hostPlatform.js +3 -1
- package/lib/server/utils/network.js +35 -25
- package/lib/server/utils/nodePlatform.js +1 -1
- package/lib/server/utils/processLauncher.js +4 -1
- package/lib/server/utils/wsServer.js +11 -17
- package/lib/server/webkit/webkit.js +5 -2
- package/lib/server/webkit/wkBrowser.js +51 -28
- package/lib/server/webkit/wkExecutionContext.js +2 -1
- package/lib/server/webkit/wkInput.js +25 -25
- package/lib/server/webkit/wkInterceptableRequest.js +1 -1
- package/lib/server/webkit/wkPage.js +80 -59
- package/lib/server/webkit/wkProvisionalPage.js +1 -1
- package/lib/server/webkit/wkWorkers.js +7 -7
- package/lib/utils/isomorphic/ariaSnapshot.js +13 -7
- package/lib/utils/isomorphic/cssParser.js +1 -2
- package/lib/utils/isomorphic/locatorGenerators.js +18 -0
- package/lib/utils/isomorphic/manualPromise.js +1 -2
- package/lib/utils/isomorphic/mimeType.js +1 -2
- package/lib/utils/isomorphic/multimap.js +1 -2
- package/lib/utils/isomorphic/oldUtilityScriptSerializers.js +248 -0
- package/lib/utils/isomorphic/protocolFormatter.js +78 -0
- package/lib/utils/isomorphic/protocolMetainfo.js +318 -0
- package/lib/utils/isomorphic/selectorParser.js +3 -4
- package/lib/utils/isomorphic/stringUtils.js +3 -24
- package/lib/utils/isomorphic/time.js +9 -4
- package/lib/utils/isomorphic/timeoutRunner.js +3 -4
- package/lib/utils/isomorphic/traceUtils.js +2 -3
- package/lib/utils/isomorphic/urlMatch.js +21 -7
- package/lib/utils/isomorphic/utilityScriptSerializers.js +208 -205
- package/lib/utils.js +8 -2
- package/lib/utilsBundleImpl/index.js +160 -150
- package/lib/vite/htmlReport/index.html +17 -17
- package/lib/vite/recorder/assets/{codeMirrorModule-CXVeovup.js → codeMirrorModule-DzQ0k89p.js} +1 -1
- package/lib/vite/recorder/assets/{index-eHBmevrY.css → index-CI4HQ-Zb.css} +1 -1
- package/lib/vite/recorder/assets/index-D7C7daHH.js +184 -0
- package/lib/vite/recorder/index.html +3 -3
- package/lib/vite/traceViewer/assets/{codeMirrorModule-_GLjJL-7.js → codeMirrorModule-Di48jgWx.js} +1 -1
- package/lib/vite/traceViewer/assets/defaultSettingsView-szBn8781.js +256 -0
- package/lib/vite/traceViewer/defaultSettingsView.DVJHpiGt.css +1 -0
- package/lib/vite/traceViewer/index.BFsek2M6.css +1 -0
- package/lib/vite/traceViewer/index.DQvXoPLL.js +2 -0
- package/lib/vite/traceViewer/index.html +6 -6
- package/lib/vite/traceViewer/sw.bundle.js +3 -3
- package/lib/vite/traceViewer/uiMode.dBV3oN9h.js +5 -0
- package/lib/vite/traceViewer/uiMode.html +4 -4
- package/lib/zipBundleImpl.js +4 -4
- package/package.json +1 -1
- package/types/protocol.d.ts +712 -107
- package/types/types.d.ts +128 -17
- package/lib/generated/consoleApiSource.js +0 -28
- package/lib/protocol/debug.js +0 -211
- package/lib/server/recorder/contextRecorder.js +0 -286
- package/lib/server/recorder/recorderCollection.js +0 -116
- package/lib/server/recorder/recorderFrontend.js +0 -16
- package/lib/server/storageScript.js +0 -154
- package/lib/server/timeoutSettings.js +0 -89
- package/lib/utils/isomorphic/builtins.js +0 -86
- package/lib/vite/recorder/assets/index-BsWQsSGl.js +0 -184
- package/lib/vite/traceViewer/assets/defaultSettingsView-DtCQiGHe.js +0 -265
- package/lib/vite/traceViewer/defaultSettingsView.QdHITyLI.css +0 -1
- package/lib/vite/traceViewer/index.CFOW-Ezb.css +0 -1
- package/lib/vite/traceViewer/index.cFZzK9RN.js +0 -2
- package/lib/vite/traceViewer/uiMode.XVPIqBeS.js +0 -5
|
@@ -130,11 +130,10 @@ class Screenshotter {
|
|
|
130
130
|
this._queue = new TaskQueue();
|
|
131
131
|
}
|
|
132
132
|
async _originalViewportSize(progress) {
|
|
133
|
-
|
|
134
|
-
let viewportSize = originalViewportSize;
|
|
133
|
+
let viewportSize = this._page.emulatedSize()?.viewport;
|
|
135
134
|
if (!viewportSize)
|
|
136
135
|
viewportSize = await this._page.mainFrame().waitForFunctionValueInUtility(progress, () => ({ width: window.innerWidth, height: window.innerHeight }));
|
|
137
|
-
return
|
|
136
|
+
return viewportSize;
|
|
138
137
|
}
|
|
139
138
|
async _fullPageSize(progress) {
|
|
140
139
|
const fullPageSize = await this._page.mainFrame().waitForFunctionValueInUtility(progress, () => {
|
|
@@ -165,116 +164,118 @@ class Screenshotter {
|
|
|
165
164
|
const format = validateScreenshotOptions(options);
|
|
166
165
|
return this._queue.postTask(async () => {
|
|
167
166
|
progress.log("taking page screenshot");
|
|
168
|
-
const
|
|
167
|
+
const viewportSize = await this._originalViewportSize(progress);
|
|
169
168
|
await this._preparePageForScreenshot(progress, this._page.mainFrame(), options.style, options.caret !== "initial", options.animations === "disabled");
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
169
|
+
try {
|
|
170
|
+
if (options.fullPage) {
|
|
171
|
+
const fullPageSize = await this._fullPageSize(progress);
|
|
172
|
+
let documentRect = { x: 0, y: 0, width: fullPageSize.width, height: fullPageSize.height };
|
|
173
|
+
const fitsViewport = fullPageSize.width <= viewportSize.width && fullPageSize.height <= viewportSize.height;
|
|
174
|
+
if (options.clip)
|
|
175
|
+
documentRect = trimClipToSize(options.clip, documentRect);
|
|
176
|
+
return await this._screenshot(progress, format, documentRect, void 0, fitsViewport, options);
|
|
177
|
+
}
|
|
178
|
+
const viewportRect = options.clip ? trimClipToSize(options.clip, viewportSize) : { x: 0, y: 0, ...viewportSize };
|
|
179
|
+
return await this._screenshot(progress, format, void 0, viewportRect, true, options);
|
|
180
|
+
} finally {
|
|
179
181
|
await this._restorePageAfterScreenshot();
|
|
180
|
-
return buffer2;
|
|
181
182
|
}
|
|
182
|
-
const viewportRect = options.clip ? trimClipToSize(options.clip, viewportSize) : { x: 0, y: 0, ...viewportSize };
|
|
183
|
-
const buffer = await this._screenshot(progress, format, void 0, viewportRect, true, options);
|
|
184
|
-
progress.throwIfAborted();
|
|
185
|
-
await this._restorePageAfterScreenshot();
|
|
186
|
-
return buffer;
|
|
187
183
|
});
|
|
188
184
|
}
|
|
189
185
|
async screenshotElement(progress, handle, options) {
|
|
190
186
|
const format = validateScreenshotOptions(options);
|
|
191
187
|
return this._queue.postTask(async () => {
|
|
192
188
|
progress.log("taking element screenshot");
|
|
193
|
-
const
|
|
189
|
+
const viewportSize = await this._originalViewportSize(progress);
|
|
194
190
|
await this._preparePageForScreenshot(progress, handle._frame, options.style, options.caret !== "initial", options.animations === "disabled");
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
await this._restorePageAfterScreenshot();
|
|
215
|
-
return buffer;
|
|
191
|
+
try {
|
|
192
|
+
await handle._waitAndScrollIntoViewIfNeeded(
|
|
193
|
+
progress,
|
|
194
|
+
true
|
|
195
|
+
/* waitForVisible */
|
|
196
|
+
);
|
|
197
|
+
const boundingBox = await progress.race(handle.boundingBox());
|
|
198
|
+
(0, import_utils.assert)(boundingBox, "Node is either not visible or not an HTMLElement");
|
|
199
|
+
(0, import_utils.assert)(boundingBox.width !== 0, "Node has 0 width.");
|
|
200
|
+
(0, import_utils.assert)(boundingBox.height !== 0, "Node has 0 height.");
|
|
201
|
+
const fitsViewport = boundingBox.width <= viewportSize.width && boundingBox.height <= viewportSize.height;
|
|
202
|
+
const scrollOffset = await this._page.mainFrame().waitForFunctionValueInUtility(progress, () => ({ x: window.scrollX, y: window.scrollY }));
|
|
203
|
+
const documentRect = { ...boundingBox };
|
|
204
|
+
documentRect.x += scrollOffset.x;
|
|
205
|
+
documentRect.y += scrollOffset.y;
|
|
206
|
+
return await this._screenshot(progress, format, import_helper.helper.enclosingIntRect(documentRect), void 0, fitsViewport, options);
|
|
207
|
+
} finally {
|
|
208
|
+
await this._restorePageAfterScreenshot();
|
|
209
|
+
}
|
|
216
210
|
});
|
|
217
211
|
}
|
|
218
212
|
async _preparePageForScreenshot(progress, frame, screenshotStyle, hideCaret, disableAnimations) {
|
|
219
213
|
if (disableAnimations)
|
|
220
214
|
progress.log(" disabled all CSS animations");
|
|
221
|
-
const syncAnimations = this._page.
|
|
222
|
-
await this._page.safeNonStallingEvaluateInAllFrames("(" + inPagePrepareForScreenshots.toString() + `)(${JSON.stringify(screenshotStyle)}, ${hideCaret}, ${disableAnimations}, ${syncAnimations})`, "utility");
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
215
|
+
const syncAnimations = this._page.delegate.shouldToggleStyleSheetToSyncAnimations();
|
|
216
|
+
await progress.race(this._page.safeNonStallingEvaluateInAllFrames("(" + inPagePrepareForScreenshots.toString() + `)(${JSON.stringify(screenshotStyle)}, ${hideCaret}, ${disableAnimations}, ${syncAnimations})`, "utility"));
|
|
217
|
+
try {
|
|
218
|
+
if (!process.env.PW_TEST_SCREENSHOT_NO_FONTS_READY) {
|
|
219
|
+
progress.log("waiting for fonts to load...");
|
|
220
|
+
await progress.race(frame.nonStallingEvaluateInExistingContext("document.fonts.ready", "utility").catch(() => {
|
|
221
|
+
}));
|
|
222
|
+
progress.log("fonts loaded");
|
|
223
|
+
}
|
|
224
|
+
} catch (error) {
|
|
225
|
+
await this._restorePageAfterScreenshot();
|
|
226
|
+
throw error;
|
|
228
227
|
}
|
|
229
|
-
progress.cleanupWhenAborted(() => this._restorePageAfterScreenshot());
|
|
230
228
|
}
|
|
231
229
|
async _restorePageAfterScreenshot() {
|
|
232
230
|
await this._page.safeNonStallingEvaluateInAllFrames("window.__pwCleanupScreenshot && window.__pwCleanupScreenshot()", "utility");
|
|
233
231
|
}
|
|
234
232
|
async _maskElements(progress, options) {
|
|
235
|
-
const framesToParsedSelectors = new import_multimap.MultiMap();
|
|
236
|
-
const cleanup = async () => {
|
|
237
|
-
await Promise.all([...framesToParsedSelectors.keys()].map(async (frame) => {
|
|
238
|
-
await frame.hideHighlight();
|
|
239
|
-
}));
|
|
240
|
-
};
|
|
241
233
|
if (!options.mask || !options.mask.length)
|
|
242
|
-
return
|
|
243
|
-
|
|
234
|
+
return () => Promise.resolve();
|
|
235
|
+
const framesToParsedSelectors = new import_multimap.MultiMap();
|
|
236
|
+
await progress.race(Promise.all((options.mask || []).map(async ({ frame, selector }) => {
|
|
244
237
|
const pair = await frame.selectors.resolveFrameForSelector(selector);
|
|
245
238
|
if (pair)
|
|
246
239
|
framesToParsedSelectors.set(pair.frame, pair.info.parsed);
|
|
247
|
-
}));
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
await
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
|
|
240
|
+
})));
|
|
241
|
+
const frames = [...framesToParsedSelectors.keys()];
|
|
242
|
+
const cleanup = async () => {
|
|
243
|
+
await Promise.all(frames.map((frame) => frame.hideHighlight()));
|
|
244
|
+
};
|
|
245
|
+
try {
|
|
246
|
+
const promises = frames.map((frame) => frame.maskSelectors(framesToParsedSelectors.get(frame), options.maskColor || "#F0F"));
|
|
247
|
+
await progress.race(Promise.all(promises));
|
|
248
|
+
return cleanup;
|
|
249
|
+
} catch (error) {
|
|
250
|
+
cleanup().catch(() => {
|
|
251
|
+
});
|
|
252
|
+
throw error;
|
|
253
|
+
}
|
|
254
254
|
}
|
|
255
255
|
async _screenshot(progress, format, documentRect, viewportRect, fitsViewport, options) {
|
|
256
256
|
if (options.__testHookBeforeScreenshot)
|
|
257
|
-
await options.__testHookBeforeScreenshot();
|
|
258
|
-
progress.throwIfAborted();
|
|
257
|
+
await progress.race(options.__testHookBeforeScreenshot());
|
|
259
258
|
const shouldSetDefaultBackground = options.omitBackground && format === "png";
|
|
260
|
-
if (shouldSetDefaultBackground) {
|
|
261
|
-
await this._page._delegate.setBackgroundColor({ r: 0, g: 0, b: 0, a: 0 });
|
|
262
|
-
progress.cleanupWhenAborted(() => this._page._delegate.setBackgroundColor());
|
|
263
|
-
}
|
|
264
|
-
progress.throwIfAborted();
|
|
265
|
-
const cleanupHighlight = await this._maskElements(progress, options);
|
|
266
|
-
progress.throwIfAborted();
|
|
267
|
-
const quality = format === "jpeg" ? options.quality ?? 80 : void 0;
|
|
268
|
-
const buffer = await this._page._delegate.takeScreenshot(progress, format, documentRect, viewportRect, quality, fitsViewport, options.scale || "device");
|
|
269
|
-
progress.throwIfAborted();
|
|
270
|
-
await cleanupHighlight();
|
|
271
|
-
progress.throwIfAborted();
|
|
272
259
|
if (shouldSetDefaultBackground)
|
|
273
|
-
await this._page.
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
260
|
+
await progress.race(this._page.delegate.setBackgroundColor({ r: 0, g: 0, b: 0, a: 0 }));
|
|
261
|
+
const cleanupHighlight = await this._maskElements(progress, options);
|
|
262
|
+
try {
|
|
263
|
+
const quality = format === "jpeg" ? options.quality ?? 80 : void 0;
|
|
264
|
+
const buffer = await this._page.delegate.takeScreenshot(progress, format, documentRect, viewportRect, quality, fitsViewport, options.scale || "device");
|
|
265
|
+
await cleanupHighlight();
|
|
266
|
+
if (shouldSetDefaultBackground)
|
|
267
|
+
await this._page.delegate.setBackgroundColor();
|
|
268
|
+
if (options.__testHookAfterScreenshot)
|
|
269
|
+
await progress.race(options.__testHookAfterScreenshot());
|
|
270
|
+
return buffer;
|
|
271
|
+
} catch (error) {
|
|
272
|
+
cleanupHighlight().catch(() => {
|
|
273
|
+
});
|
|
274
|
+
if (shouldSetDefaultBackground)
|
|
275
|
+
this._page.delegate.setBackgroundColor().catch(() => {
|
|
276
|
+
});
|
|
277
|
+
throw error;
|
|
278
|
+
}
|
|
278
279
|
}
|
|
279
280
|
}
|
|
280
281
|
class TaskQueue {
|
package/lib/server/selectors.js
CHANGED
|
@@ -24,9 +24,8 @@ module.exports = __toCommonJS(selectors_exports);
|
|
|
24
24
|
var import_crypto = require("./utils/crypto");
|
|
25
25
|
var import_selectorParser = require("../utils/isomorphic/selectorParser");
|
|
26
26
|
class Selectors {
|
|
27
|
-
constructor() {
|
|
27
|
+
constructor(engines, testIdAttributeName) {
|
|
28
28
|
this.guid = `selectors@${(0, import_crypto.createGuid)()}`;
|
|
29
|
-
this._testIdAttributeName = "data-testid";
|
|
30
29
|
this._builtinEngines = /* @__PURE__ */ new Set([
|
|
31
30
|
"css",
|
|
32
31
|
"css:light",
|
|
@@ -60,6 +59,7 @@ class Selectors {
|
|
|
60
59
|
"internal:text",
|
|
61
60
|
"internal:role",
|
|
62
61
|
"internal:testid",
|
|
62
|
+
"internal:describe",
|
|
63
63
|
"aria-ref"
|
|
64
64
|
]);
|
|
65
65
|
this._builtinEnginesInMainWorld = /* @__PURE__ */ new Set([
|
|
@@ -67,15 +67,18 @@ class Selectors {
|
|
|
67
67
|
"_vue"
|
|
68
68
|
]);
|
|
69
69
|
this._engines = /* @__PURE__ */ new Map();
|
|
70
|
+
this._testIdAttributeName = testIdAttributeName ?? "data-testid";
|
|
71
|
+
for (const engine of engines)
|
|
72
|
+
this.register(engine);
|
|
70
73
|
}
|
|
71
|
-
|
|
72
|
-
if (!name.match(/^[a-zA-Z_0-9-]+$/))
|
|
74
|
+
register(engine) {
|
|
75
|
+
if (!engine.name.match(/^[a-zA-Z_0-9-]+$/))
|
|
73
76
|
throw new Error("Selector engine name may only contain [a-zA-Z0-9_] characters");
|
|
74
|
-
if (this._builtinEngines.has(name) || name === "zs" || name === "zs:light")
|
|
75
|
-
throw new Error(`"${name}" is a predefined selector engine`);
|
|
76
|
-
if (this._engines.has(name))
|
|
77
|
-
throw new Error(`"${name}" selector engine has been already registered`);
|
|
78
|
-
this._engines.set(name,
|
|
77
|
+
if (this._builtinEngines.has(engine.name) || engine.name === "zs" || engine.name === "zs:light")
|
|
78
|
+
throw new Error(`"${engine.name}" is a predefined selector engine`);
|
|
79
|
+
if (this._engines.has(engine.name))
|
|
80
|
+
throw new Error(`"${engine.name}" selector engine has been already registered`);
|
|
81
|
+
this._engines.set(engine.name, engine);
|
|
79
82
|
}
|
|
80
83
|
testIdAttributeName() {
|
|
81
84
|
return this._testIdAttributeName;
|
|
@@ -83,9 +86,6 @@ class Selectors {
|
|
|
83
86
|
setTestIdAttributeName(testIdAttributeName) {
|
|
84
87
|
this._testIdAttributeName = testIdAttributeName;
|
|
85
88
|
}
|
|
86
|
-
unregisterAll() {
|
|
87
|
-
this._engines.clear();
|
|
88
|
-
}
|
|
89
89
|
parseSelector(selector, strict) {
|
|
90
90
|
const parsed = typeof selector === "string" ? (0, import_selectorParser.parseSelector)(selector) : selector;
|
|
91
91
|
let needsMainWorld = false;
|