mirror of
https://github.com/microsoft/playwright.git
synced 2025-06-26 21:40:17 +00:00
fix(keyboard): correctly press enter on firefox (#1023)
This commit is contained in:
parent
df8de2074e
commit
21acb369db
@ -64,6 +64,9 @@ export class RawKeyboardImpl implements input.RawKeyboard {
|
|||||||
code = 'OSLeft';
|
code = 'OSLeft';
|
||||||
if (code === 'MetaRight')
|
if (code === 'MetaRight')
|
||||||
code = 'OSRight';
|
code = 'OSRight';
|
||||||
|
// Firefox will figure out Enter by itself
|
||||||
|
if (text === '\r')
|
||||||
|
text = '';
|
||||||
await this._client.send('Page.dispatchKeyEvent', {
|
await this._client.send('Page.dispatchKeyEvent', {
|
||||||
type: 'keydown',
|
type: 'keydown',
|
||||||
keyCode: keyCodeWithoutLocation,
|
keyCode: keyCodeWithoutLocation,
|
||||||
|
|||||||
@ -207,15 +207,23 @@ module.exports.describe = function({testRunner, expect, FFOX, CHROMIUM, WEBKIT,
|
|||||||
await textarea.press('NumpadSubtract');
|
await textarea.press('NumpadSubtract');
|
||||||
expect(await page.evaluate('keyLocation')).toBe(3);
|
expect(await page.evaluate('keyLocation')).toBe(3);
|
||||||
});
|
});
|
||||||
it.skip(FFOX)('should press Enter', async({page, server}) => {
|
it('should press Enter', async({page, server}) => {
|
||||||
await page.setContent('<input></input>');
|
await page.setContent('<textarea></textarea>');
|
||||||
await page.$eval('input', body => body.addEventListener('keydown', event => {
|
await page.focus('textarea');
|
||||||
if (event.key === 'Enter')
|
await page.evaluate(() => window.addEventListener('keydown', e => window.lastEvent = {key: e.key, code:e.code}));
|
||||||
window.ENTER_DOWN = true;
|
await testEnterKey('Enter', 'Enter', 'Enter');
|
||||||
}, false));
|
await testEnterKey('NumpadEnter', 'Enter', 'NumpadEnter');
|
||||||
await page.focus('input');
|
await testEnterKey('\n', 'Enter', 'Enter');
|
||||||
await page.keyboard.press('Enter');
|
await testEnterKey('\r', 'Enter', 'Enter');
|
||||||
expect(await page.evaluate(() => window.ENTER_DOWN)).toBe(true);
|
|
||||||
|
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}) => {
|
it('should throw on unknown keys', async({page, server}) => {
|
||||||
let error = await page.keyboard.press('NotARealKey').catch(e => e);
|
let error = await page.keyboard.press('NotARealKey').catch(e => e);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user