diff --git a/docs/api/commands/press.mdx b/docs/api/commands/press.mdx index f0bef379fe..03e2db8901 100644 --- a/docs/api/commands/press.mdx +++ b/docs/api/commands/press.mdx @@ -14,18 +14,7 @@ Trigger native key events in your application to simulate keyboard interactions. A `keydown`, `press`, and `keyup` event will be dispatched directly to the browser window. -Unlike `cy.type()`, which is best for typing character keys, `cy.press()` will dispatch real keyboard events rather than simulated ones. This command is especially useful when testing focus management and keyboard navigation patterns which are critical for [accessibility testing](/app/guides/accessibility-testing) and great keyboard UX. - -Currently, the only key supported is `Tab`. - -:::caution - -Supported Browsers: -This command is supported in chromium browsers and Firefox versions >= v135. WebKit -is not supported. This command will fail if executed in a browser that does not support -it. - -::: +Unlike `cy.type()`, which is best for typing multiple character keys, `cy.press()` will dispatch real keyboard events rather than simulated ones. This command is especially useful when testing focus management and keyboard navigation patterns which are critical for [accessibility testing](/app/guides/accessibility-testing) and great keyboard UX. ## Syntax @@ -68,13 +57,35 @@ cy.press(Cypress.Keyboard.Keys.TAB) **key _(String)_** -The key to press. The supported values are available on [`Cypress.Keyboard.Keys`](/api/cypress-api/keyboard-api), and may change from time to time. It's recomended that you reference these values from `Cypress.Keyboard.Keys` rather than passing in a string. - -### Supported Keys +The key to press. Values for non single character keys are available on [`Cypress.Keyboard.Keys`](/api/cypress-api/keyboard-api), and may change from time to time. It's recommended that you reference these values from `Cypress.Keyboard.Keys` rather than passing in a string when available. + +#### Supported Keys + +| Reference | Value | +| --------------------------------- | -------------------------------------------------------------------- | +| Letters | `"a"` through `"z"`, `"A"` through `"Z"` | +| Numbers | `"0"`, `"1"`, `"2"`, `"3"`, `"4"`, `"5"`, `"6"`, `"7"`, `"8"`, `"9"` | +| Special Characters | `"!"`, `"@"`, `"#"`, `'+'`, `"€"`, `"é"`, etc. | +| `Cypress.Keyboard.Keys.DOWN` | `"ArrowDown"` | +| `Cypress.Keyboard.Keys.LEFT` | `"ArrowLeft"` | +| `Cypress.Keyboard.Keys.RIGHT` | `"ArrowRight"` | +| `Cypress.Keyboard.Keys.UP` | `"ArrowUp"` | +| `Cypress.Keyboard.Keys.END` | `"End"` | +| `Cypress.Keyboard.Keys.HOME` | `"Home"` | +| `Cypress.Keyboard.Keys.PAGEDOWN` | `"PageDown"` | +| `Cypress.Keyboard.Keys.PAGEUP` | `"PageUp"` | +| `Cypress.Keyboard.Keys.ENTER` | `"Enter"` | +| `Cypress.Keyboard.Keys.TAB` | `"Tab"` | +| `Cypress.Keyboard.Keys.BACKSPACE` | `"Backspace"` | +| `Cypress.Keyboard.Keys.DELETE` | `"Delete"` | +| `Cypress.Keyboard.Keys.INSERT` | `"Insert"` | +| `Cypress.Keyboard.Keys.SPACE` | `"Space"` | + +:::info + +F1-F12 keys are not supported. These keys are used for browser shortcuts, and can prevent the test suite from executing properly after they are pressed. -| Reference | Value | -| --------------------------- | ------- | -| `Cypress.Keyboard.Keys.TAB` | `"Tab"` | +::: **options _(Object)_** @@ -112,8 +123,41 @@ it('autocompletes search input when pressing Tab', () => { }) ``` +### Type a single character + +Single character keys are supported, like `a`, `b`, `c`, etc. There is no need to reference `Cypress.Keyboard.Keys` record for these keys, just type them normally as a string: + +```javascript +cy.get('input').focus() +cy.press('a') +``` + +### Type a multi-codepoint UTF-8 character + +Multi-codepoint UTF-8 characters are also supported and do not need to be entered as individual codepoints. For example, `é` can be either one single codepoint or two separate codepoints when the accent is pressed as a subsequent modifier key. You do not need to press each codepoint separately; just type the entire character as a string. + +```javascript +// works +cy.get('input').focus() +cy.press('é') // \u00e9 (composed é) +cy.press('é') // \u0065\u0301 (e + combining acute accent) + +// also fine, but not necessary +cy.get('input').focus() +cy.press('e') // \u0065 +cy.press('́') // \u0301 (combining acute accent) +``` + ## Notes +### Strings with multiple characters + +Strings with multiple characters are not supported. If you need to input longer strings into a text input or similar, use [`cy.type()`](/api/commands/type). + +```js +cy.get('input').type('Hello, World') // Type 'Hello, World' into the 'input' +``` + ### Transient activation By dispatching native keyboard events to the browser, this command will cause the browser to enter [Transient activation](https://developer.mozilla.org/en-US/docs/Glossary/Transient_activation) state. @@ -122,9 +166,10 @@ If your application prevents the default behavior of the `beforeunload` event, t ## History -| Version | Changes | -| ----------------------------------- | ---------------------------- | -| [14.3.0](/app/references/changelog) | Added the `.press()` command | +| Version | Changes | +| ----------------------------------- | ----------------------------------------------------------------------------------- | +| [14.3.0](/app/references/changelog) | Added the `.press()` command | +| [15.1.0](/app/references/changelog) | Expanded support to include named keys and single+multi-codepoint UTF-8 characters. | ## See also diff --git a/docs/app/references/changelog.mdx b/docs/app/references/changelog.mdx index cc6ec1a545..5a6ab74b2a 100644 --- a/docs/app/references/changelog.mdx +++ b/docs/app/references/changelog.mdx @@ -8,6 +8,33 @@ sidebar_label: Changelog # Changelog +## 15.1.0 + +_Released 09/02/2025_ + +**Features:** + +- Expanded `cy.press()` to support more key types. Addresses [#31051](https://github.com/cypress-io/cypress/issues/31051) and [#31488](https://github.com/cypress-io/cypress/issues/31488). Addressed in [#31496](https://github.com/cypress-io/cypress/pull/31496). + +**Bugfixes:** + +- Fixed an issue where OS distributions and releases were sometimes not properly populated for Module API results and Cloud recordings. Fixes [#30533](https://github.com/cypress-io/cypress/issues/30533). Addressed in [#32283](https://github.com/cypress-io/cypress/pull/32283). +- Fixed an issue where Cypress would fail to run on GNOME if GTK 4 and GTK 2/3 were detected in the Electron process. Addresses [#32361](https://github.com/cypress-io/cypress/issues/32361). +- Fixed an issue where the open Studio button would incorrectly show for component tests. Addressed in [#32315](https://github.com/cypress-io/cypress/pull/32315). +- Fixed an issue where the TypeScript compiler wasn't being resolved correctly when `@cypress/webpack-batteries-included-preprocessor` was used as a standalone package. Fixes [#32338](https://github.com/cypress-io/cypress/issues/32338). +- Fixed an issue where `tsx` was not being loaded correctly into the Cypress configuration process due to spaces being present in the path. Fixes [#32398](https://github.com/cypress-io/cypress/issues/32398). + +**Misc:** + +- Updated the Cypress Studio panel to have a darker gray background. Addressed in [#32333](https://github.com/cypress-io/cypress/pull/32333). + +**Dependency Updates:** + +- Upgraded `esbuild` from `0.15.3` to `0.25.2`. Addressed in [#32231](https://github.com/cypress-io/cypress/pull/32231). +- Upgraded `image-size` from `1.1.1` to `1.2.1`. Addressed in [#32232](https://github.com/cypress-io/cypress/pull/32232). +- Upgraded `tar` from `6.1.5` to `6.2.1`. Addressed in [#32229](https://github.com/cypress-io/cypress/pull/32229). +- Upgraded `axios` from `1.8.3` to `1.11.0`. Addresses [#32347](https://github.com/cypress-io/cypress/issues/32347). + ## 15.0.0 _Released 08/20/2025_