From 7fcec1a06b01ad939396c7a63ba75813bbbbe883 Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Mon, 23 Jan 2023 17:56:02 -0800 Subject: [PATCH] test: file input triggers input event only once (#20306) #20079 --- tests/page/page-set-input-files.spec.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/tests/page/page-set-input-files.spec.ts b/tests/page/page-set-input-files.spec.ts index 14ea76fff4..01f28c748a 100644 --- a/tests/page/page-set-input-files.spec.ts +++ b/tests/page/page-set-input-files.spec.ts @@ -548,3 +548,26 @@ it('should trigger listener added before navigation', async ({ page, server, bro expect(chooser).toBeTruthy(); }); +it('input should trigger events when files changed second time', async ({ page, asset, browserName }) => { + it.fixme(browserName === 'webkit'); + it.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/20079' }); + await page.setContent(``); + + const input = page.locator('input'); + const events = await input.evaluateHandle(e => { + const events = []; + e.addEventListener('input', () => events.push('input')); + e.addEventListener('change', () => events.push('change')); + return events; + }); + + await input.setInputFiles(asset('file-to-upload.txt')); + expect(await input.evaluate(e => (e as HTMLInputElement).files[0].name)).toBe('file-to-upload.txt'); + expect(await events.evaluate(e => e)).toEqual(['input', 'change']); + + await events.evaluate(e => e.length = 0); + + await input.setInputFiles(asset('pptr.png')); + expect(await input.evaluate(e => (e as HTMLInputElement).files[0].name)).toBe('pptr.png'); + expect(await events.evaluate(e => e)).toEqual(['input', 'change']); +}); \ No newline at end of file