diff --git a/src/server/browserContext.ts b/src/server/browserContext.ts index 3bd692204c262..db666b040715c 100644 --- a/src/server/browserContext.ts +++ b/src/server/browserContext.ts @@ -195,9 +195,13 @@ export abstract class BrowserContext extends SdkObject { if (!this.pages().length) { const waitForEvent = helper.waitForEvent(progress, this, BrowserContext.Events.Page); progress.cleanupWhenAborted(() => waitForEvent.dispose); - await waitForEvent.promise; + const page = (await waitForEvent.promise) as Page; + if (page._pageIsError) + throw page._pageIsError; } const pages = this.pages(); + if (pages[0]._pageIsError) + throw pages[0]._pageIsError; await pages[0].mainFrame()._waitForLoadState(progress, 'load'); return pages; } diff --git a/src/server/page.ts b/src/server/page.ts index 7c4125ba6c92a..8c1bcbd4b3d68 100644 --- a/src/server/page.ts +++ b/src/server/page.ts @@ -148,6 +148,7 @@ export class Page extends SdkObject { readonly selectors: Selectors; _video: Video | null = null; readonly uniqueId: string; + _pageIsError: Error | undefined; constructor(delegate: PageDelegate, browserContext: BrowserContext) { super(browserContext); @@ -187,7 +188,7 @@ export class Page extends SdkObject { // context/browser closure. Just ignore the page. if (this._browserContext.isClosingOrClosed()) return; - this._setIsError(); + this._setIsError(pageOrError); } this._browserContext.emit(BrowserContext.Events.Page, this); const openerDelegate = this._delegate.openerDelegate(); @@ -444,7 +445,8 @@ export class Page extends SdkObject { await this._ownedContext.close(metadata); } - private _setIsError() { + private _setIsError(error: Error) { + this._pageIsError = error; if (!this._frameManager.mainFrame()) this._frameManager.frameAttached('', null); } diff --git a/test/page-event-popup.spec.ts b/test/page-event-popup.spec.ts index a4a375dce5055..ad391490e472d 100644 --- a/test/page-event-popup.spec.ts +++ b/test/page-event-popup.spec.ts @@ -164,4 +164,3 @@ it('should not treat navigations as new popups', async ({context, server}) => { await context.close(); expect(badSecondPopup).toBe(false); }); -