# Input #### Contents - [Text input](#text-input) - [Checkboxes](#checkboxes) - [Select options](#select-options) - [Mouse click](#mouse-click) - [Type characters](#type-characters) - [Keys and shortcuts](#keys-and-shortcuts) - [Upload files](#upload-files) - [Focus element](#focus-element)
## Text input ```js await page.fill('#name', 'Peter'); ``` This is the easiest way to fill out the form fields. It focuses the element and triggers an `input` event with the entered text. It works for ``, ` await page.type('#area', 'Hello World!'); ``` Note that most of the time, [`page.fill`](#text-input) will just work. You only need to type characters if there is special keyboard handling on the page. But sometimes it is important to type into the field character by character, as if it was a user with a real keyboard. This method will emit all the necessary keyboard events, with all the `keydown`, `keyup`, `keypress` events in place. You can even specify the optional `delay` between the key presses to simulate real user behavior. #### API reference - [page.type(selector, text[, options])](./api.md#pagetypeselector-text-options) — main frame - [frame.type(selector, text[, options])](./api.md#frametypeselector-text-options) — given frame - [elementHandle.type(text[, options])](./api.md#elementhandletypetext-options) — given element - [keyboard.type(text[, options])](./api.md#keyboardtypetext-options) — focused element
## Keys and shortcuts ```js // await page.press('#submit', 'Enter'); // await page.press('#name', 'Control+ArrowRight'); // await page.press('#value', '$'); ``` This method focuses the selected element and produces a single keystroke. It accepts the logical key names that are emitted in the [keyboardEvent.key](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key) property of the keyboard events: ``` Backquote, Minus, Equal, Backslash, Backspace, Tab, Delete, Escape, ArrowDown, End, Enter, Home, Insert, PageDown, PageUp, ArrayRight, ArrowUp, F1 - F12, Digit0 - Digit9, KeyA - KeyZ, etc. ``` - You can alternatively specify a single character you'd like to produce such as `"a"` or `"#"`. - Following modification shortcuts are also supported: `Shift, Control, Alt, Meta`. #### Variations ```js // await page.press('#name', '$'); ``` Simple version produces a single character. This character is case-sensitive, so `"a"` and `"A"` will produce different results. ```js // await page.press('#name', 'Shift+A'); // await page.press('#name', 'Shift+ArrowLeft'); ``` Shortcuts such as `"Control+o"` or `"Control+Shift+T"` are supported as well. When speficied with the modifier, modifier is pressed and being held while the subsequent key is being pressed. Note that you still need to specify the capital `A` in `Shift-A` to produce the capital character. `Shift-a` produces a lower-case one as if you had the `CapsLock` toggled. #### API reference - [page.press(selector, key[, options])](./api.md#pagepressselector-key-options) — main frame - [frame.press(selector, key[, options])](./api.md#framepressselector-key-options) — given frame - [elementHandle.press(key[, options])](./api.md#elementhandlepresskey-options) — given element - [keyboard.press(key[, options])](./api.md#keyboardpresskey-options) — focused element
## Upload files ```js // await page.setInputFiles('input#upload', 'myfile.pdf'); ``` You can select input files for upload using the `page.setInputFiles` method. It expects first argument to point to an [input element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input) with the type `"file"`. Multiple files can be passed in the array. If some of the file paths are relative, they are resolved relative to the [current working directory](https://nodejs.org/api/process.html#process_process_cwd). Empty array clears the selected files. #### Variations ```js // Select multiple files. await page.setInputFiles('input#upload', ['file1.txt', 'file2.txt']); // Upload buffer from memory, without reading from file. await page.setInputFiles('input#upload', { name: 'file.txt', mimeType: 'text/plain', buffer: Buffer.from('this is test') }); // Remove all the selected files await page.setInputFiles('input#upload', []); ``` #### API reference - [page.setInputFiles(selector, files[, options])](https://github.com/microsoft/playwright/blob/master/docs/api.md#pagesetinputfilesselector-value-options) - [frame.setInputFiles(selector, files[, options])](https://github.com/microsoft/playwright/blob/master/docs/api.md#framesetinputfilesselector-value-options) - [elementHandle.setInputFiles(files[, options])](https://github.com/microsoft/playwright/blob/master/docs/api.md#elementhandlesetinputfilesfiles-options)
## Focus element ```js // await page.focus('input#name'); ``` For the dynamic pages that handle focus events, you can focus the given element. #### API reference - [page.focus(selector, [options])](https://github.com/microsoft/playwright/blob/master/docs/api.md#pagefocusselector-options) - [frame.focus(selector, [options])](https://github.com/microsoft/playwright/blob/master/docs/api.md#framefocusselector-options) - [elementHandle.focus([options])](https://github.com/microsoft/playwright/blob/master/docs/api.md#elementhandlefocus-options)