From 1d34d6ffa4d7cc77a02d85ddc49687cd454b7a1c Mon Sep 17 00:00:00 2001 From: Yuriy Mikityuk Date: Thu, 24 Sep 2026 23:16:49 +0500 Subject: [PATCH] fix(chromium): report numpad location on keyup keyUp was dispatched without isKeypad, so Chromium reported numpad keys with location LEFT on keyup, while keydown had NUMPAD. Firefox and WebKit already report NUMPAD for both. --- packages/playwright-core/src/server/chromium/crInput.ts | 3 ++- tests/page/page-keyboard.spec.ts | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/playwright-core/src/server/chromium/crInput.ts b/packages/playwright-core/src/server/chromium/crInput.ts index 5e8843244e73a..e8598f34329b9 100644 --- a/packages/playwright-core/src/server/chromium/crInput.ts +++ b/packages/playwright-core/src/server/chromium/crInput.ts @@ -81,7 +81,8 @@ export class RawKeyboardImpl implements input.RawKeyboard { key, windowsVirtualKeyCode: description.keyCodeWithoutLocation, code, - location + location, + isKeypad: location === input.keypadLocation })); } diff --git a/tests/page/page-keyboard.spec.ts b/tests/page/page-keyboard.spec.ts index 5c18214b26e40..98e7e32a939ef 100644 --- a/tests/page/page-keyboard.spec.ts +++ b/tests/page/page-keyboard.spec.ts @@ -306,6 +306,15 @@ it('should specify location', async ({ page, server }) => { expect.soft(await lastEvent.evaluate(e => e.code)).toBe('NumpadSubtract'); }); +it('should specify numpad location on keyup', async ({ page, server }) => { + await page.goto(server.PREFIX + '/input/keyboard.html'); + await page.keyboard.press('NumpadSubtract'); + expect(await page.evaluate('getResult()')).toBe( + ['Keydown: - NumpadSubtract NUMPAD []', + 'Keypress: - NumpadSubtract NUMPAD 45 []', + 'Keyup: - NumpadSubtract NUMPAD []'].join('\n')); +}); + it('should press Enter', async ({ page, server }) => { await page.setContent(''); await page.focus('textarea');