From ee14c9cca60db30c714d59e0e40fc00bbd7f5ac4 Mon Sep 17 00:00:00 2001 From: Pavel Feldman Date: Thu, 12 Mar 2020 21:35:01 -0700 Subject: [PATCH] api(press): remove text option --- docs/api.md | 12 +++--------- src/dom.ts | 2 +- src/frames.ts | 2 +- src/input.ts | 11 +++++------ src/page.ts | 2 +- test/keyboard.spec.js | 6 ------ 6 files changed, 11 insertions(+), 24 deletions(-) diff --git a/docs/api.md b/docs/api.md index e9723225e1fbf..26dc8cb438ea6 100644 --- a/docs/api.md +++ b/docs/api.md @@ -1399,7 +1399,6 @@ The `format` options are: - `selector` <[string]> A selector of an element to type into. If there are multiple elements satisfying the selector, the first will be used. - `key` <[string]> Name of key to press, such as `ArrowLeft`. See [USKeyboardLayout] for a list of all key names. - `options` <[Object]> - - `text` <[string]> If specified, generates an input event with this text. - `delay` <[number]> Time to wait between `keydown` and `keyup` in milliseconds. Defaults to 0. - `waitUntil` <"load"|"domcontentloaded"|"networkidle0"|"networkidle2"|"nowait"> Actions that cause navigations are waiting for those navigations to fire `domcontentloaded` by default. This behavior can be changed to either wait for another load phase or to omit the waiting altogether using `nowait`: - `'domcontentloaded'` - consider navigation to be finished when the `DOMContentLoaded` event is fired. @@ -2236,7 +2235,6 @@ If the name is empty, returns the id attribute instead. - `selector` <[string]> A selector of an element to type into. If there are multiple elements satisfying the selector, the first will be used. - `key` <[string]> Name of key to press, such as `ArrowLeft`. See [USKeyboardLayout] for a list of all key names. - `options` <[Object]> - - `text` <[string]> If specified, generates an input event with this text. - `delay` <[number]> Time to wait between `keydown` and `keyup` in milliseconds. Defaults to 0. - `waitUntil` <"load"|"domcontentloaded"|"networkidle0"|"networkidle2"|"nowait"> Actions that cause navigations are waiting for those navigations to fire `domcontentloaded` by default. This behavior can be changed to either wait for another load phase or to omit the waiting altogether using `nowait`: - `'domcontentloaded'` - consider navigation to be finished when the `DOMContentLoaded` event is fired. @@ -2727,7 +2725,6 @@ If the element is detached from DOM, the method throws an error. #### elementHandle.press(key[, options]) - `key` <[string]> Name of key to press, such as `ArrowLeft`. See [USKeyboardLayout] for a list of all key names. - `options` <[Object]> - - `text` <[string]> If specified, generates an input event with this text. - `delay` <[number]> Time to wait between `keydown` and `keyup` in milliseconds. Defaults to 0. - `waitUntil` <"load"|"domcontentloaded"|"networkidle0"|"networkidle2"|"nowait"> Actions that cause navigations are waiting for those navigations to fire `domcontentloaded` by default. This behavior can be changed to either wait for another load phase or to omit the waiting altogether using `nowait`: - `'domcontentloaded'` - consider navigation to be finished when the `DOMContentLoaded` event is fired. @@ -3077,22 +3074,20 @@ await page.keyboard.up('Shift'); > **NOTE** On MacOS, keyboard shortcuts like `⌘ A` -> Select All do not work. See [#1313](https://github.com/GoogleChrome/puppeteer/issues/1313) -- [keyboard.down(key[, options])](#keyboarddownkey-options) +- [keyboard.down(key)](#keyboarddownkey) - [keyboard.insertText(text)](#keyboardinserttexttext) - [keyboard.press(key[, options])](#keyboardpresskey-options) - [keyboard.type(text[, options])](#keyboardtypetext-options) - [keyboard.up(key)](#keyboardupkey) -#### keyboard.down(key[, options]) +#### keyboard.down(key) - `key` <[string]> Name of key to press, such as `ArrowLeft`. See [USKeyboardLayout] for a list of all key names. -- `options` <[Object]> - - `text` <[string]> If specified, generates an input event with this text. - returns: <[Promise]> Dispatches a `keydown` event. -If `key` is a single character and no modifier keys besides `Shift` are being held down, a `keypress`/`input` event will also generated. The `text` option can be specified to force an input event to be generated. +If `key` is a single character and no modifier keys besides `Shift` are being held down, a `keypress`/`input` event will also generated. If `key` is a modifier key, `Shift`, `Meta`, `Control`, or `Alt`, subsequent key presses will be sent with that modifier active. To release the modifier key, use [`keyboard.up`](#keyboardupkey). @@ -3115,7 +3110,6 @@ page.keyboard.insertText('嗨'); #### keyboard.press(key[, options]) - `key` <[string]> Name of key to press, such as `ArrowLeft`. See [USKeyboardLayout] for a list of all key names. - `options` <[Object]> - - `text` <[string]> If specified, generates an input event with this text. - `delay` <[number]> Time to wait between `keydown` and `keyup` in milliseconds. Defaults to 0. - returns: <[Promise]> diff --git a/src/dom.ts b/src/dom.ts index 713885a3d472d..de09d3916bc2a 100644 --- a/src/dom.ts +++ b/src/dom.ts @@ -361,7 +361,7 @@ export class ElementHandle extends js.JSHandle { }, options, true); } - async press(key: string, options?: { delay?: number, text?: string } & types.NavigatingActionWaitOptions) { + async press(key: string, options?: { delay?: number } & types.NavigatingActionWaitOptions) { await this._page._frameManager.waitForNavigationsCreatedBy(async () => { await this.focus(); await this._page.keyboard.press(key, options); diff --git a/src/frames.ts b/src/frames.ts index 73d230d3464f2..c82d3b90b8ce9 100644 --- a/src/frames.ts +++ b/src/frames.ts @@ -854,7 +854,7 @@ export class Frame { handle.dispose(); } - async press(selector: string, key: string, options?: { delay?: number, text?: string } & types.NavigatingActionWaitOptions) { + async press(selector: string, key: string, options?: { delay?: number } & types.NavigatingActionWaitOptions) { const handle = await this._waitForSelectorInUtilityContext(selector, options); await handle.press(key, options); handle.dispose(); diff --git a/src/input.ts b/src/input.ts index 2d4a363922b58..99cbf09834aaf 100644 --- a/src/input.ts +++ b/src/input.ts @@ -59,13 +59,13 @@ export class Keyboard { this._raw = raw; } - async down(key: string, options: { text?: string; } = { text: undefined }) { + async down(key: string) { const description = this._keyDescriptionForString(key); const autoRepeat = this._pressedKeys.has(description.code); this._pressedKeys.add(description.code); if (kModifiers.includes(description.key as Modifier)) this._pressedModifiers.add(description.key as Modifier); - const text = options.text === undefined ? description.text : options.text; + const text = description.text; await this._raw.keydown(this._pressedModifiers, description.code, description.keyCode, description.keyCodeWithoutLocation, description.key, description.location, autoRepeat, text); } @@ -143,10 +143,9 @@ export class Keyboard { } } - async press(key: string, options: { delay?: number; text?: string; } = {}) { - const {delay = null} = options; - await this.down(key, options); - if (delay) + async press(key: string, options: { delay?: number } = {}) { + await this.down(key); + if (options.delay) await new Promise(f => setTimeout(f, options.delay)); await this.up(key); } diff --git a/src/page.ts b/src/page.ts index 4ffdcd3b93d49..fb72d4ba35c33 100644 --- a/src/page.ts +++ b/src/page.ts @@ -492,7 +492,7 @@ export class Page extends platform.EventEmitter { return this.mainFrame().type(selector, text, options); } - async press(selector: string, key: string, options?: { delay?: number, text?: string } & types.NavigatingActionWaitOptions) { + async press(selector: string, key: string, options?: { delay?: number } & types.NavigatingActionWaitOptions) { return this.mainFrame().press(selector, key, options); } diff --git a/test/keyboard.spec.js b/test/keyboard.spec.js index 2812b47c6c4d7..ca45d3fe228c4 100644 --- a/test/keyboard.spec.js +++ b/test/keyboard.spec.js @@ -63,12 +63,6 @@ module.exports.describe = function({testRunner, expect, FFOX, CHROMIUM, WEBKIT, await textarea.press('b'); expect(await page.evaluate(() => document.querySelector('textarea').value)).toBe('a'); }); - it('ElementHandle.press should support |text| option', async({page, server}) => { - await page.goto(server.PREFIX + '/input/textarea.html'); - const textarea = await page.$('textarea'); - await textarea.press('a', {text: 'ё'}); - expect(await page.evaluate(() => document.querySelector('textarea').value)).toBe('ё'); - }); it('should send a character with sendCharacter', async({page, server}) => { await page.goto(server.PREFIX + '/input/textarea.html'); await page.focus('textarea');