diff --git a/src/firefox/ffInput.ts b/src/firefox/ffInput.ts index 8627add2ec..66e55b8fa4 100644 --- a/src/firefox/ffInput.ts +++ b/src/firefox/ffInput.ts @@ -64,6 +64,9 @@ export class RawKeyboardImpl implements input.RawKeyboard { code = 'OSLeft'; if (code === 'MetaRight') code = 'OSRight'; + // Firefox will figure out Enter by itself + if (text === '\r') + text = ''; await this._client.send('Page.dispatchKeyEvent', { type: 'keydown', keyCode: keyCodeWithoutLocation, diff --git a/test/keyboard.spec.js b/test/keyboard.spec.js index a6ebcc715a..d4621f6155 100644 --- a/test/keyboard.spec.js +++ b/test/keyboard.spec.js @@ -207,15 +207,23 @@ module.exports.describe = function({testRunner, expect, FFOX, CHROMIUM, WEBKIT, await textarea.press('NumpadSubtract'); expect(await page.evaluate('keyLocation')).toBe(3); }); - it.skip(FFOX)('should press Enter', async({page, server}) => { - await page.setContent(''); - await page.$eval('input', body => body.addEventListener('keydown', event => { - if (event.key === 'Enter') - window.ENTER_DOWN = true; - }, false)); - await page.focus('input'); - await page.keyboard.press('Enter'); - expect(await page.evaluate(() => window.ENTER_DOWN)).toBe(true); + it('should press Enter', async({page, server}) => { + await page.setContent(''); + await page.focus('textarea'); + await page.evaluate(() => window.addEventListener('keydown', e => window.lastEvent = {key: e.key, code:e.code})); + await testEnterKey('Enter', 'Enter', 'Enter'); + await testEnterKey('NumpadEnter', 'Enter', 'NumpadEnter'); + await testEnterKey('\n', 'Enter', 'Enter'); + await testEnterKey('\r', 'Enter', 'Enter'); + + async function testEnterKey(key, expectedKey, expectedCode) { + await page.keyboard.press(key); + const lastEvent = await page.evaluate('lastEvent'); + expect(lastEvent.key).toBe(expectedKey, `${JSON.stringify(key)} had the wrong key: ${lastEvent.key}`); + expect(lastEvent.code).toBe(expectedCode, `${JSON.stringify(key)} had the wrong code: ${lastEvent.code}`); + expect(await page.$eval('textarea', t => t.value)).toBe('\n', `${JSON.stringify(key)} failed to create a newline`); + await page.$eval('textarea', t => t.value = ''); + } }); it('should throw on unknown keys', async({page, server}) => { let error = await page.keyboard.press('NotARealKey').catch(e => e);