From 56d7d47d436230efc47326a0844abbdb6f315710 Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Thu, 10 Nov 2022 15:06:53 -0800 Subject: [PATCH] fix(codegen): make select work with size attribute (#18712) Fixes https://github.com/microsoft/playwright/issues/18711 --- .../src/server/injected/recorder.ts | 2 +- tests/library/inspector/cli-codegen-1.spec.ts | 41 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/packages/playwright-core/src/server/injected/recorder.ts b/packages/playwright-core/src/server/injected/recorder.ts index 639d004834..924fbf73ff 100644 --- a/packages/playwright-core/src/server/injected/recorder.ts +++ b/packages/playwright-core/src/server/injected/recorder.ts @@ -196,7 +196,7 @@ class Recorder { return true; } const nodeName = target.nodeName; - if (nodeName === 'SELECT') + if (nodeName === 'SELECT' || nodeName === 'OPTION') return true; if (nodeName === 'INPUT' && ['date'].includes((target as HTMLInputElement).type)) return true; diff --git a/tests/library/inspector/cli-codegen-1.spec.ts b/tests/library/inspector/cli-codegen-1.spec.ts index cc5b77cf89..340306949a 100644 --- a/tests/library/inspector/cli-codegen-1.spec.ts +++ b/tests/library/inspector/cli-codegen-1.spec.ts @@ -532,6 +532,47 @@ test.describe('cli codegen', () => { expect(message.text()).toBe('2'); }); + test('should select with size attribute', async ({ page, openRecorder }) => { + const recorder = await openRecorder(); + + await recorder.setContentAndWait(` + + + `); + + const locator = await recorder.hoverOverElement('select'); + expect(locator).toBe(`locator('#age')`); + const [message, sources] = await Promise.all([ + page.waitForEvent('console', msg => msg.type() !== 'error'), + recorder.waitForOutput('JavaScript', 'select'), + page.mouse.click(10, 25) + ]); + + expect(sources.get('JavaScript').text).toContain(` + await page.locator('#age').selectOption('2');`); + + expect(sources.get('Java').text).toContain(` + page.locator("#age").selectOption("2");`); + + expect(sources.get('Python').text).toContain(` + page.locator(\"#age\").select_option(\"2\")`); + + expect(sources.get('Python Async').text).toContain(` + await page.locator(\"#age\").select_option(\"2\")`); + + expect(sources.get('C#').text).toContain(` + await page.Locator(\"#age\").SelectOptionAsync(new[] { \"2\" });`); + + expect(message.text()).toBe('2'); + }); + test('should await popup', async ({ page, openRecorder, browserName, headless }) => { test.fixme(browserName === 'webkit' && !headless, 'Middle click does not open a popup in our webkit embedder');