From 66296480ae6d867dc5bd4097d02cc60a82206d67 Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Tue, 4 Oct 2022 15:07:18 -0700 Subject: [PATCH 1/2] fix(trace): show waitForLoadState when event has already fired --- packages/playwright-core/src/client/frame.ts | 14 ++++++++------ tests/library/trace-viewer.spec.ts | 12 ++++++++++++ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/packages/playwright-core/src/client/frame.ts b/packages/playwright-core/src/client/frame.ts index 6dbc971a374d4..7661ced9b1168 100644 --- a/packages/playwright-core/src/client/frame.ts +++ b/packages/playwright-core/src/client/frame.ts @@ -148,14 +148,16 @@ export class Frame extends ChannelOwner implements api.Fr async waitForLoadState(state: LifecycleEvent = 'load', options: { timeout?: number } = {}): Promise { state = verifyLoadState('state', state); - if (this._loadStates.has(state)) - return; return this._page!._wrapApiCall(async () => { const waiter = this._setupNavigationWaiter(options); - await waiter.waitForEvent(this._eventEmitter, 'loadstate', s => { - waiter.log(` "${s}" event fired`); - return s === state; - }); + if (this._loadStates.has(state)) { + waiter.log(` not waiting, "${state}" event already fired`); + } else { + await waiter.waitForEvent(this._eventEmitter, 'loadstate', s => { + waiter.log(` "${s}" event fired`); + return s === state; + }); + } waiter.dispose(); }); } diff --git a/tests/library/trace-viewer.spec.ts b/tests/library/trace-viewer.spec.ts index 93946f75c0b79..c3814175ef0b0 100644 --- a/tests/library/trace-viewer.spec.ts +++ b/tests/library/trace-viewer.spec.ts @@ -717,3 +717,15 @@ test('should serve overridden request', async ({ page, runAndTrace, server }) => expect(color).toBe('rgb(255, 0, 0)'); }); +test('should display waitForLoadState even if did not wait for it', async ({ runAndTrace, server, page }) => { + const traceViewer = await runAndTrace(async () => { + await page.goto(server.EMPTY_PAGE); + await page.waitForLoadState('load'); + await page.waitForLoadState('load'); + }); + await expect(traceViewer.actionTitles).toHaveText([ + /page.goto/, + /page.waitForLoadState/, + /page.waitForLoadState/, + ]); +}); From 0addee18600e5e652ed2c93189d444f8596c8cd1 Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Tue, 4 Oct 2022 17:22:46 -0700 Subject: [PATCH 2/2] Return LifecycleEvent back --- packages/playwright-core/src/client/frame.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/playwright-core/src/client/frame.ts b/packages/playwright-core/src/client/frame.ts index 7661ced9b1168..de622a84e0e6d 100644 --- a/packages/playwright-core/src/client/frame.ts +++ b/packages/playwright-core/src/client/frame.ts @@ -153,7 +153,7 @@ export class Frame extends ChannelOwner implements api.Fr if (this._loadStates.has(state)) { waiter.log(` not waiting, "${state}" event already fired`); } else { - await waiter.waitForEvent(this._eventEmitter, 'loadstate', s => { + await waiter.waitForEvent(this._eventEmitter, 'loadstate', s => { waiter.log(` "${s}" event fired`); return s === state; });