Skip to content

Commit 21acb36

Browse files
fix(keyboard): correctly press enter on firefox (#1023)
1 parent df8de20 commit 21acb36

File tree

2 files changed

+20
-9
lines changed

2 files changed

+20
-9
lines changed

src/firefox/ffInput.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ export class RawKeyboardImpl implements input.RawKeyboard {
6464
code = 'OSLeft';
6565
if (code === 'MetaRight')
6666
code = 'OSRight';
67+
// Firefox will figure out Enter by itself
68+
if (text === '\r')
69+
text = '';
6770
await this._client.send('Page.dispatchKeyEvent', {
6871
type: 'keydown',
6972
keyCode: keyCodeWithoutLocation,

test/keyboard.spec.js

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -207,15 +207,23 @@ module.exports.describe = function({testRunner, expect, FFOX, CHROMIUM, WEBKIT,
207207
await textarea.press('NumpadSubtract');
208208
expect(await page.evaluate('keyLocation')).toBe(3);
209209
});
210-
it.skip(FFOX)('should press Enter', async({page, server}) => {
211-
await page.setContent('<input></input>');
212-
await page.$eval('input', body => body.addEventListener('keydown', event => {
213-
if (event.key === 'Enter')
214-
window.ENTER_DOWN = true;
215-
}, false));
216-
await page.focus('input');
217-
await page.keyboard.press('Enter');
218-
expect(await page.evaluate(() => window.ENTER_DOWN)).toBe(true);
210+
it('should press Enter', async({page, server}) => {
211+
await page.setContent('<textarea></textarea>');
212+
await page.focus('textarea');
213+
await page.evaluate(() => window.addEventListener('keydown', e => window.lastEvent = {key: e.key, code:e.code}));
214+
await testEnterKey('Enter', 'Enter', 'Enter');
215+
await testEnterKey('NumpadEnter', 'Enter', 'NumpadEnter');
216+
await testEnterKey('\n', 'Enter', 'Enter');
217+
await testEnterKey('\r', 'Enter', 'Enter');
218+
219+
async function testEnterKey(key, expectedKey, expectedCode) {
220+
await page.keyboard.press(key);
221+
const lastEvent = await page.evaluate('lastEvent');
222+
expect(lastEvent.key).toBe(expectedKey, `${JSON.stringify(key)} had the wrong key: ${lastEvent.key}`);
223+
expect(lastEvent.code).toBe(expectedCode, `${JSON.stringify(key)} had the wrong code: ${lastEvent.code}`);
224+
expect(await page.$eval('textarea', t => t.value)).toBe('\n', `${JSON.stringify(key)} failed to create a newline`);
225+
await page.$eval('textarea', t => t.value = '');
226+
}
219227
});
220228
it('should throw on unknown keys', async({page, server}) => {
221229
let error = await page.keyboard.press('NotARealKey').catch(e => e);

0 commit comments

Comments
 (0)