fix(chromium): do not bring page to front before screenshot (#2614)

This commit is contained in:
Dmitry Gozman 2020-06-18 10:52:08 -07:00 committed by GitHub
parent c544bffee3
commit 971bd88922
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 4 additions and 13 deletions

View file

@ -216,7 +216,6 @@ export class CRPage implements PageDelegate {
}) })
}; };
} }
await this._mainFrameSession._client.send('Page.bringToFront', {});
// When taking screenshots with documentRect (based on the page content, not viewport), // When taking screenshots with documentRect (based on the page content, not viewport),
// ignore current page scale. // ignore current page scale.
const clip = { ...documentRect, scale: viewportRect ? visualViewport.scale : 1 }; const clip = { ...documentRect, scale: viewportRect ? visualViewport.scale : 1 };

View file

@ -30,13 +30,7 @@ export class Screenshotter {
constructor(page: Page) { constructor(page: Page) {
this._page = page; this._page = page;
this._queue = new TaskQueue();
const browserContext = page.context();
this._queue = (browserContext as any)[taskQueueSymbol];
if (!this._queue) {
this._queue = new TaskQueue();
(browserContext as any)[taskQueueSymbol] = this._queue;
}
} }
private async _originalViewportSize(): Promise<{ viewportSize: types.Size, originalViewportSize: types.Size | null }> { private async _originalViewportSize(): Promise<{ viewportSize: types.Size, originalViewportSize: types.Size | null }> {
@ -152,8 +146,6 @@ export class Screenshotter {
} }
} }
const taskQueueSymbol = Symbol('TaskQueue');
class TaskQueue { class TaskQueue {
private _chain: Promise<any>; private _chain: Promise<any>;

View file

@ -116,7 +116,7 @@ describe.skip(ffheadful)('Page.screenshot', function() {
expect(page.viewportSize().height).toBe(500); expect(page.viewportSize().height).toBe(500);
}); });
it('should run in parallel in multiple pages', async({page, server, context, golden}) => { it('should run in parallel in multiple pages', async({page, server, context, golden}) => {
const N = 2; const N = 5;
const pages = await Promise.all(Array(N).fill(0).map(async() => { const pages = await Promise.all(Array(N).fill(0).map(async() => {
const page = await context.newPage(); const page = await context.newPage();
await page.goto(server.PREFIX + '/grid.html'); await page.goto(server.PREFIX + '/grid.html');
@ -124,10 +124,10 @@ describe.skip(ffheadful)('Page.screenshot', function() {
})); }));
const promises = []; const promises = [];
for (let i = 0; i < N; ++i) for (let i = 0; i < N; ++i)
promises.push(pages[i].screenshot({ clip: { x: 50 * i, y: 0, width: 50, height: 50 } })); promises.push(pages[i].screenshot({ clip: { x: 50 * (i % 2), y: 0, width: 50, height: 50 } }));
const screenshots = await Promise.all(promises); const screenshots = await Promise.all(promises);
for (let i = 0; i < N; ++i) for (let i = 0; i < N; ++i)
expect(screenshots[i]).toBeGolden(golden(`grid-cell-${i}.png`)); expect(screenshots[i]).toBeGolden(golden(`grid-cell-${i % 2}.png`));
await Promise.all(pages.map(page => page.close())); await Promise.all(pages.map(page => page.close()));
}); });
it.fail(FFOX)('should allow transparency', async({page, golden}) => { it.fail(FFOX)('should allow transparency', async({page, golden}) => {