From a52c6219a7b63e6bbafdca09c35940a855b56f48 Mon Sep 17 00:00:00 2001 From: Dmitry Gozman Date: Thu, 9 Dec 2021 17:15:38 -0800 Subject: [PATCH] fix(inspector): do not swallow keyup when not recording (#10842) --- .../server/supplements/injected/recorder.ts | 4 +- tests/inspector/pause.spec.ts | 40 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/packages/playwright-core/src/server/supplements/injected/recorder.ts b/packages/playwright-core/src/server/supplements/injected/recorder.ts index fc14a197fd..25891e3fd4 100644 --- a/packages/playwright-core/src/server/supplements/injected/recorder.ts +++ b/packages/playwright-core/src/server/supplements/injected/recorder.ts @@ -477,7 +477,7 @@ export class Recorder { return; } if (this._mode !== 'recording') - return true; + return; if (!this._shouldGenerateKeyPressFor(event)) return; if (this._actionInProgress(event)) { @@ -509,6 +509,8 @@ export class Recorder { } private _onKeyUp(event: KeyboardEvent) { + if (this._mode === 'none') + return; if (!this._shouldGenerateKeyPressFor(event)) return; diff --git a/tests/inspector/pause.spec.ts b/tests/inspector/pause.spec.ts index 6b682beec9..01b3ad1f1d 100644 --- a/tests/inspector/pause.spec.ts +++ b/tests/inspector/pause.spec.ts @@ -318,6 +318,46 @@ it.describe('pause', () => { await recorderPage.click('[title=Resume]'); await scriptPromise; }); + + it('should not prevent key events', async ({ page, recorderPageGetter }) => { + await page.setContent('
Hello
'); + await page.evaluate(() => { + (window as any).log = []; + for (const event of ['keydown', 'keyup', 'keypress']) + window.addEventListener(event, e => (window as any).log.push(e.type)); + }); + const scriptPromise = (async () => { + await page.pause(); + await page.keyboard.press('Enter'); + await page.keyboard.press('A'); + await page.keyboard.press('Shift+A'); + })(); + const recorderPage = await recorderPageGetter(); + await recorderPage.waitForSelector(`.source-line-paused:has-text("page.pause")`); + await recorderPage.click('[title="Step over"]'); + await recorderPage.waitForSelector(`.source-line-paused:has-text("press('Enter')")`); + await recorderPage.click('[title="Step over"]'); + await recorderPage.waitForSelector(`.source-line-paused:has-text("press('A')")`); + await recorderPage.click('[title="Step over"]'); + await recorderPage.waitForSelector(`.source-line-paused:has-text("press('Shift+A')")`); + await recorderPage.click('[title=Resume]'); + await scriptPromise; + + const log = await page.evaluate(() => (window as any).log); + expect(log).toEqual([ + 'keydown', + 'keypress', + 'keyup', + 'keydown', + 'keypress', + 'keyup', + 'keydown', + 'keydown', + 'keypress', + 'keyup', + 'keyup', + ]); + }); }); async function sanitizeLog(recorderPage: Page): Promise {