diff --git a/packages/playwright-core/src/server/firefox/ffPage.ts b/packages/playwright-core/src/server/firefox/ffPage.ts index d3db91f9e1..1e1db5b908 100644 --- a/packages/playwright-core/src/server/firefox/ffPage.ts +++ b/packages/playwright-core/src/server/firefox/ffPage.ts @@ -440,6 +440,7 @@ export class FFPage implements PageDelegate { const { data } = await this._session.send('Page.screenshot', { mimeType: ('image/' + format) as ('image/png' | 'image/jpeg'), clip: documentRect, + quality, omitDeviceScaleFactor: scale === 'css', }); return Buffer.from(data, 'base64'); diff --git a/packages/playwright-core/src/server/screenshotter.ts b/packages/playwright-core/src/server/screenshotter.ts index 05f6a160e0..12791e0a49 100644 --- a/packages/playwright-core/src/server/screenshotter.ts +++ b/packages/playwright-core/src/server/screenshotter.ts @@ -288,7 +288,8 @@ export class Screenshotter { const cleanupHighlight = await this._maskElements(progress, options); progress.throwIfAborted(); // Avoid extra work. - const buffer = await this._page._delegate.takeScreenshot(progress, format, documentRect, viewportRect, options.quality, fitsViewport, options.scale || 'device'); + const quality = format === 'jpeg' ? options.quality ?? 80 : undefined; + const buffer = await this._page._delegate.takeScreenshot(progress, format, documentRect, viewportRect, quality, fitsViewport, options.scale || 'device'); progress.throwIfAborted(); // Avoid restoring after failure - should be done by cleanup. await cleanupHighlight();