diff --git a/packages/playwright-core/src/server/frames.ts b/packages/playwright-core/src/server/frames.ts index fc2e258b00..1aacb13563 100644 --- a/packages/playwright-core/src/server/frames.ts +++ b/packages/playwright-core/src/server/frames.ts @@ -1058,7 +1058,7 @@ export class Frame extends SdkObject { }); } - async rafrafTimeoutScreenshotElementWithProgress(progress: Progress, selector: string, timeout: number, options: ScreenshotOptions): Promise { + async rafrafTimeoutScreenshotElementWithProgress(progress: Progress, selector: string, timeout: number, options: ScreenshotOptions): Promise { return await this._retryWithProgressIfNotConnected(progress, selector, true /* strict */, async handle => { await handle._frame.rafrafTimeout(timeout); return await this._page._screenshotter.screenshotElement(progress, handle, options); diff --git a/packages/playwright-core/src/server/page.ts b/packages/playwright-core/src/server/page.ts index 39542ac8d9..d9e7bf19f0 100644 --- a/packages/playwright-core/src/server/page.ts +++ b/packages/playwright-core/src/server/page.ts @@ -461,21 +461,21 @@ export class Page extends SdkObject { return controller.run(async progress => { let actual: Buffer | undefined; let previous: Buffer | undefined; - let screenshotTimeout = 0; + const pollIntervals = [0, 100, 250, 500]; while (true) { progress.throwIfAborted(); if (this.isClosed()) throw new Error('The page has closed'); let comparatorResult: ComparatorResult | undefined; + const screenshotTimeout = pollIntervals.shift() || 1000; if (isGeneratingNewScreenshot) { previous = actual; - actual = await rafrafScreenshot(progress, screenshotTimeout); + actual = await rafrafScreenshot(progress, screenshotTimeout).catch(e => undefined); comparatorResult = actual && previous ? comparator(actual, previous, options.comparatorOptions) : undefined; } else { - actual = await rafrafScreenshot(progress, screenshotTimeout); + actual = await rafrafScreenshot(progress, screenshotTimeout).catch(e => undefined); comparatorResult = actual ? comparator(actual, options.expected!, options.comparatorOptions) : undefined; } - screenshotTimeout = 150; if (comparatorResult !== undefined && !!comparatorResult === !!options.isNot) break; if (comparatorResult)