`, even though Testing Library will treat each as the same if located using the `ByRole` locator. This is because, much like test IDs, the `ByRole` approach is intended to _avoid_ testing the implementation directly, to keep tests resilient when code is refactored.
+
+Developers who are unfamiliar with accessibility may assume that if a Testing Library `ByRole` locator can be made to pass before and after a code change, there has been no functional or accessibility-related change in the underlying element. As we've seen, this is not actually the case, because of the extra behavior browsers only implement for native HTML elements. For more about this difference and why semantic HTML elements are preferred, see the [first rule of Accessible Rich Internet Applications (ARIA)](https://www.w3.org/TR/using-aria/#rule1).
+
+## Where to test accessibility
+
+So what should you do in your test automation to help confirm the UI is accessible? First of all, for known critical areas like forms or checkout flows, ensure that the accessibility behavior is tested explicitly in at least one place. The means verifying that form fields and buttons have the correct labels and use the expected HTML elements, and other aspects of the DOM that communicate necessary information.
+
+Component tests are a fantastic place to do this centralized accessibility spec work, whether using [Cypress Component testing](/app/component-testing/get-started) or something else. Component tests are run locally during development, written by developers as they build the UI, and can easily specify the specific HTML that is intended to be rendered, without being a distraction in an end-to-end test of a specific user flow.
+
+Accessibility should be tested at least once for a given component, area of the application, or workflow. Once that is achieved, there is no additional accessibility benefit to repeatedly asserting subsets of the same things in other tests, unless those tests introduce new combinations of components that have not been tested for accessibility anywhere else.
+
+### Choosing a locator approach
+
+Test IDs are the most resilient locator option and are a good choice for maximizing the stability of your pipeline, especially if end-to-end tests are written by people who are not familiar with accessibility, and don't already know the correct roles, elements, and behavior that should be expected. You do not lose any accessibility "coverage", as long as accessibility is explicitly tested with assertions, and a library like Axe Core® is in place to catch mistakes.
+
+Testing Library locators are convenient and familiar to many React developers (due to its origins as "React Testing Library"), and they don't require any code changes, but may cause _many_ tests to fail when a label is missing, instead of just your explicit accessibility assertions, because they are a step closer to the implementation details.
+
+Additionally, Testing Library locators can provide a false sense of confidence that something is accessible simply because it can be located by its role. Still, when understood correctly, teams can write effective tests using this approach, and some locators like [`findByLabelText`](https://testing-library.com/docs/queries/bylabeltext) stand out as being particularly useful.
+
+What is most important in all accessibility automation discussions is an this: how can your testing strategy best support your users with disabilities to independently understand and use your application? Cypress enables you to place the user at the center of your testing process. With a mix of automated scans and some specific intentional assertions, you can reach high levels of confidence that your application is free of known accessibility errors and let your test pipeline warn you if things are going off track.
+
+## See also
+
+- [Cypress Accessibility](/accessibility/get-started/introduction)
+- [Plugins](/app/plugins/plugins-list)
diff --git a/docs/app/guides/authentication-testing/_category_.json b/docs/app/guides/authentication-testing/_category_.json
new file mode 100644
index 0000000000..fb05571409
--- /dev/null
+++ b/docs/app/guides/authentication-testing/_category_.json
@@ -0,0 +1,5 @@
+{
+ "label": "Authentication Testing",
+ "collapsible": true,
+ "collapsed": true
+}
diff --git a/docs/guides/end-to-end-testing/testing-strategies/amazon-cognito-authentication.mdx b/docs/app/guides/authentication-testing/amazon-cognito-authentication.mdx
similarity index 76%
rename from docs/guides/end-to-end-testing/testing-strategies/amazon-cognito-authentication.mdx
rename to docs/app/guides/authentication-testing/amazon-cognito-authentication.mdx
index 14f5bc9c40..d4d4711a4d 100644
--- a/docs/guides/end-to-end-testing/testing-strategies/amazon-cognito-authentication.mdx
+++ b/docs/app/guides/authentication-testing/amazon-cognito-authentication.mdx
@@ -1,74 +1,42 @@
---
-title: 'Amazon Cognito Authentication in Cypress'
+title: 'Amazon Cognito Authentication: Cypress Guide'
sidebar_label: 'Amazon Cognito Authentication'
description: 'Implement Amazon Cognito authentication in Cypress. Securely manage authentication processes for Cypress end-to-end testing scenarios'
-e2eSpecific: true
-slug: /guides/end-to-end-testing/amazon-cognito-authentication
---
+
+
# Amazon Cognito Authentication
:::info
-##
What you'll learn
-
-- Log in to [Amazon Cognito](https://aws.amazon.com/cognito) through the UI with
- [`cy.origin()`](/api/commands/origin)
-- Programmatically authenticate with
- [Amazon Cognito](https://aws.amazon.com/cognito) via a custom Cypress command
-- Adapting your [Amazon Cognito](https://aws.amazon.com/cognito) application for
- programmatic authentication during testing
-
-:::
-
-:::tip
-
-**Authenticate by visiting a different domain with
-[`cy.origin()`](/api/commands/origin)**
+#####
What you'll learn
-Typically, logging in a user within your app by authenticating via a third-party
-provider requires visiting a login page hosted on a different domain. Before
-Cypress [v12.0.0](https://on.cypress.io/changelog#12-0-0), Cypress tests were
-limited to visiting domains of the same origin, making programmatic login the
-only option for authenticating users with a third-party API. As of Cypress
-[v12.0.0](https://on.cypress.io/changelog#12-0-0), Cypress tests are no longer
-limited to visiting domains of a single origin, meaning you can easily
-authenticate to federated AWS Cognito via the UI!
+- How to implement Amazon Cognito authentication in Cypress
+- How to securely manage authentication processes for Cypress end-to-end testing scenarios
:::
-## What is Amazon Cognito?
-
Amazon [Cognito](https://aws.amazon.com/cognito) is an authentication provider
apart of [Amazon Web Services (AWS)](https://aws.amazon.com).
-It "lets you add user sign-up, sign-in, and access control to your web and
-mobile apps quickly and easily" and "scales to millions of users and supports
-sign-in with social identity providers, such as Facebook, Google, and Amazon,
-and enterprise identity providers via SAML 2.0."
-
-## Authentication with Amazon Cognito
-
The documentation for [Amazon Cognito](https://aws.amazon.com/cognito)
recommends using the
[AWS Amplify Framework Authentication Library](https://aws-amplify.github.io/amplify-js/api/classes/authclass.html)
from the [AWS Amplify Framework](https://aws.amazon.com/amplify/framework/) to
interact with a deployed [Amazon Cognito](https://aws.amazon.com/cognito)
-instance.
-
-Using the
+instance. Using the
[AWS Amplify Framework Authentication Library](https://aws-amplify.github.io/amplify-js/api/classes/authclass.html),
we are able to programmatically drive the creation and authentication of users
against a fully deployed back end.
-This illustrates the limited code from the
+This guide illustrates the limited code from the
[AWS Amplify Framework](https://aws.amazon.com/amplify/framework/) needed to
programmatically log an existing a user into an application.
-
+
-
```jsx
// Add 'aws-amplify' library into your application
@@ -88,10 +56,9 @@ Auth.signIn(username, password)
.catch((err) => console.log(err))
```
-
+
-
```tsx
import { Amplify } from "aws-amplify";
@@ -114,10 +81,9 @@ signIn({ username, password, { authFlowType: "USER_PASSWORD_AUTH" } })
.catch((err) => console.log(err));
```
-
+
-
## Amazon Cognito Setup
@@ -127,31 +93,28 @@ with [Amazon Web Services (AWS)](https://aws.amazon.com).
An [Amazon Cognito](https://aws.amazon.com/cognito) integration is available in
the
-[Cypress Real World App](https://github.com/cypress-io/cypress-realworld-app).
-Clone the
-[Cypress Real World App](https://github.com/cypress-io/cypress-realworld-app)
-and install the [AWS Amazon Amplify CLI](https://docs.amplify.aws/cli) as
-follows:
+
. Clone the Cypress Real
+World App and install the [AWS Amazon Amplify CLI](https://docs.amplify.aws/cli)
+as follows:
```jsx
npm install @aws-amplify/cli --global
```
The
-[Cypress Real World App](https://github.com/cypress-io/cypress-realworld-app) is
-configured with an optional [Amazon Cognito](https://aws.amazon.com/cognito)
-instance via the
-[AWS Amplify Framework Authentication Library](https://aws-amplify.github.io/amplify-js/api/classes/authclass.html).
-The [AWS Amazon Amplify CLI](https://docs.amplify.aws/cli) is used to provision
-the [Amazon Web Services (AWS)](https://aws.amazon.com) infrastructure needed to
-configure your environment and cloud resources.
+
is configured with an optional
+[Amazon Cognito](https://aws.amazon.com/cognito) instance via the [AWS Amplify Framework
+Authentication Library](https://aws-amplify.github.io/amplify-js/api/classes/authclass.html).
+The [AWS Amazon Amplify CLI](https://docs.amplify.aws/cli) is used to provision the
+[Amazon Web Services (AWS)](https://aws.amazon.com) infrastructure needed to configure
+your environment and cloud resources.
First, run the
[amplify init](https://docs.amplify.aws/cli/start/workflows#initialize-new-project)
command to initialize the
-[Cypress Real World App](https://github.com/cypress-io/cypress-realworld-app).
+Real World App.
This will provision the project with your [AWS](https://aws.amazon.com)
credentials.
@@ -173,7 +136,7 @@ amplify push
Note
Use the `yarn dev:cognito` command when starting the
-[Cypress Real World App](https://github.com/cypress-io/cypress-realworld-app).
+Real World App.
:::
@@ -196,10 +159,21 @@ const awsConfig = require('./aws-exports-es5.js')
```js
{
env: {
- cognito_username: process.env.AWS_COGNITO_USERNAME,
- cognito_password: process.env.AWS_COGNITO_PASSWORD,
awsConfig: awsConfig.default
- }
+ },
+ setupNodeEvents(on, config) {
+ on('task', {
+ getCognitoCredentials() {
+ const username = process.env.AWS_COGNITO_USERNAME
+ const password = process.env.AWS_COGNITO_PASSWORD
+ if (!username || !password) {
+ throw new Error('AWS_COGNITO_USERNAME and AWS_COGNITO_PASSWORD must be set')
+ }
+ return { username, password }
+ },
+ })
+ return config
+ },
}
```
@@ -209,23 +183,22 @@ const awsConfig = require('./aws-exports-es5.js')
There are two ways you can authenticate to AWS Cognito:
-- [Login with `cy.origin()`](/guides/end-to-end-testing/amazon-cognito-authentication#Login-with-cyorigin)
-- [Programmatic Access](/guides/end-to-end-testing/amazon-cognito-authentication#Programmatic-Login)
+- [Login with `cy.origin()`](/app/guides/authentication-testing/amazon-cognito-authentication#Login-with-cyorigin)
+- [Programmatic Access](/app/guides/authentication-testing/amazon-cognito-authentication#Programmatic-Login)
### Login with [`cy.origin()`](/api/commands/origin)
-Next, we'll write a custom command called `loginByCognito` to perform a login to
+We'll write a custom command called `loginByCognito` to perform a login to
[Amazon Cognito](https://aws.amazon.com/cognito). This command will use
[`cy.origin()`](/api/commands/origin) to
-1. navigate to the Cognito origin
-2. input user credentials
-3. sign in and redirect back to the
- [Cypress Real World App](https://github.com/cypress-io/cypress-realworld-app)
-4. cache the results with [`cy.session()`](/api/commands/session)
+1. Navigate to the Cognito origin
+2. Input user credentials
+3. Sign in and redirect back to the
+
+4. Cache the results with [`cy.session()`](/api/commands/session)
-```jsx
-// cypress/support/auth-provider-commands/cognito.ts
+```jsx title="cypress/support/auth-provider-commands/cognito.ts"
// Amazon Cognito
const loginToCognito = (username: string, password: string) => {
Cypress.log({
@@ -274,26 +247,26 @@ Now, we can use our `loginByCognito` command in the test. Below is our test to
login as a user via [Amazon Cognito](https://aws.amazon.com/cognito), complete
the onboarding process and logout.
-:::tip
+:::info
The
[runnable version of this test](https://github.com/cypress-io/cypress-realworld-app/blob/develop/cypress/tests/ui-auth-providers/cognito.spec.ts)
is in the
-[Cypress Real World App](https://github.com/cypress-io/cypress-realworld-app).
+
+
.
:::
-```jsx
+```jsx title="auth.spec.js"
describe('Cognito, cy.origin() login', function () {
beforeEach(function () {
// Seed database with test data
cy.task('db:seed')
// login via Amazon Cognito via cy.origin()
- cy.loginByCognito(
- Cypress.env('cognito_username'),
- Cypress.env('cognito_password')
- )
+ cy.task('getCognitoCredentials').then(({ username, password }) => {
+ cy.loginByCognito(username, password)
+ })
})
it('shows onboarding', function () {
@@ -302,14 +275,16 @@ describe('Cognito, cy.origin() login', function () {
})
```
-
+
-Lastly, we can refactor our login command to take advantage of
+Now, we can refactor our login command to take advantage of
[`cy.session()`](/api/commands/session) to store our logged in user so we don't
have to reauthenticate with every test.
-```jsx
-// cypress/support/auth-provider-commands/cognito.ts
+```jsx title="cypress/support/auth-provider-commands/cognito.ts"
// Amazon Cognito
Cypress.Commands.add(
'loginByCognito, cy.origin() login',
@@ -331,7 +306,10 @@ Cypress.Commands.add(
)
```
-
+
### Programmatic Login
@@ -344,14 +322,11 @@ In this `loginByCognitoApi` command, we call `Auth.signIn`, then use that
response to set the items inside of localStorage for the UI to know that our
user is logged into the application.
-
-
-
-```jsx
-// cypress/support/auth-provider-commands/cognito.ts
+
+```jsx title="cypress/support/auth-provider-commands/cognito.ts"
import Amplify, { Auth } from 'aws-amplify'
Amplify.configure(Cypress.env('awsConfig'))
@@ -406,14 +381,11 @@ Cypress.Commands.add('loginByCognitoApi', (username, password) => {
})
```
-
-
-
-```tsx
-// cypress/support/auth-provider-commands/cognito.ts
+
+```tsx title="cypress/support/auth-provider-commands/cognito.ts"
import { Amplify } from 'aws-amplify'
import { fetchAuthSession, signIn } from 'aws-amplify/auth'
@@ -469,21 +441,19 @@ Cypress.Commands.add(
)
```
-
+
-
Finally, we can use our `loginByCognitoApi` command in at test. Below is our
test to login as a user via [Amazon Cognito](https://aws.amazon.com/cognito),
complete the onboarding process and logout.
-:::tip
+:::info
The
[runnable version of this test](https://github.com/cypress-io/cypress-realworld-app/blob/develop/cypress/tests/ui-auth-providers/cognito.spec.ts)
-is in the
-[Cypress Real World App](https://github.com/cypress-io/cypress-realworld-app).
+is in the
.
:::
@@ -494,10 +464,9 @@ describe('Cognito, programmatic login', function () {
cy.task('db:seed')
// Programmatically login via Amazon Cognito API
- cy.loginByCognitoApi(
- Cypress.env('cognito_username'),
- Cypress.env('cognito_password')
- )
+ cy.task('getCognitoCredentials').then(({ username, password }) => {
+ cy.loginByCognitoApi(username, password)
+ })
})
it('shows onboarding', function () {
@@ -523,9 +492,9 @@ the Cognito JWTs to authorize the frontend's requests.
:::
The
-[Cypress Real World App](https://github.com/cypress-io/cypress-realworld-app) is
-used and provides configuration and runnable code for both the React SPA and the
-Express back end.
+
+
is used and provides configuration
+and runnable code for both the React SPA and the Express back end.
The front end uses the
[AWS Amplify Framework Authentication Library](https://aws-amplify.github.io/amplify-js/api/classes/authclass.html).
@@ -539,13 +508,11 @@ In order to validate API requests from the frontend, we install
[jwks-rsa](https://github.com/auth0/node-jwks-rsa) and configure validation for
JWT's from [Amazon Cognito](https://aws.amazon.com/cognito).
-
+
-
-```jsx
-// backend/helpers.ts
+```jsx title="backend/helpers.ts"
// ... initial imports
import jwt from 'express-jwt'
import jwksRsa from 'jwks-rsa'
@@ -566,13 +533,11 @@ export const checkCognitoJwt = jwt(awsCognitoJwtConfig).unless({
})
```
-
+
-
-```jsx
-// backend/helpers.ts
+```jsx title="backend/helpers.ts"
// ... initial imports
import jwt from 'express-jwt'
import jwksRsa from 'jwks-rsa'
@@ -594,15 +559,13 @@ export const checkCognitoJwt = jwt(awsCognitoJwtConfig).unless({
})
```
-
+
-
Once this helper is defined, we can use globally to apply to all routes:
-```jsx
-// backend/app.ts
+```jsx title="backend/app.ts"
// initial imports ...
import { checkCognitoJwt } from './helpers'
@@ -630,8 +593,11 @@ layer (`authMachine.ts`). If no access token is yet available, we redirect the
browser to the [Amazon Cognito](https://aws.amazon.com/cognito) User Pool Hosted UI
to provide the login form.
-```jsx
-// src/containers/AppCognito.tsx, amplify v6
+
+
+
+```jsx title="src/containers/AppCognito.tsx"
+// amplify v6
// initial imports ...
import { Amplify, ResourcesConfig } from "aws-amplify";
import { fetchAuthSession, signInWithRedirect, signOut } from "aws-amplify/auth";
@@ -673,22 +639,24 @@ const AppCognito: React.FC = () => {
export default AppCognito;
```
+
+
+
+
:::tip
Try it out
The complete
[AppCognito.tsx component](https://github.com/cypress-io/cypress-realworld-app/blob/develop/src/containers/AppCognito.tsx)
-is in the
-[Cypress Real World App](https://github.com/cypress-io/cypress-realworld-app).
+is in the
.
:::
Next, we update our entry point (`index.tsx`) to use our `AppCognito.tsx`
component.
-```jsx
-// src/index.tsx
+```jsx title="src/index.tsx"
// ... initial imports
import AppCognito from './containers/AppCognito'
diff --git a/docs/guides/end-to-end-testing/testing-strategies/auth0-authentication.mdx b/docs/app/guides/authentication-testing/auth0-authentication.mdx
similarity index 81%
rename from docs/guides/end-to-end-testing/testing-strategies/auth0-authentication.mdx
rename to docs/app/guides/authentication-testing/auth0-authentication.mdx
index ba67a015e8..2b029be42c 100644
--- a/docs/guides/end-to-end-testing/testing-strategies/auth0-authentication.mdx
+++ b/docs/app/guides/authentication-testing/auth0-authentication.mdx
@@ -1,51 +1,29 @@
---
-title: 'Auth0 Integration: Cypress Auth'
-sidebar_label: 'Auth0 Integration'
+title: 'Auth0 Integration: Cypress Guide'
+sidebar_label: 'Auth0 Authentication'
description: 'Seamlessly implement Auth0 authentication with Cypress. Integrate Auth0 authentication for secure testing'
-slug: /guides/end-to-end-testing/auth0-authentication
---
+
+
# Auth0 Authentication
:::info
-##
What you'll learn
+#####
What you'll learn
-- Log in to [Auth0](https://auth0.com) through the UI with
- [`cy.origin()`](/api/commands/origin)
-- Programmatically authenticate with [Auth0](https://auth0.com) via a custom
- Cypress command
-- Adapt your [Auth0](https://auth0.com) application for programmatic
- authentication during testing
+- How to authenticate with Auth0 in Cypress tests
+- How to adapt an Auth0 app for testing
+- Caveats and considerations for Auth0 rate limiting
:::
-:::caution
-
This guide is setup for testing against an [Auth0](https://auth0.com) Single
Page Application using the
[Classic Universal Login Experience](https://auth0.com/docs/universal-login/classic).
This configuration is recommended for a "Test Tenant" and/or "Test API" setup
for automated end-to-end testing.
-:::
-
-:::tip
-
-**Authenticate by visiting a different domain with
-[`cy.origin()`](/api/commands/origin)**
-
-Typically, logging in a user within your app by authenticating via a third-party
-provider requires visiting a login page hosted on a different domain. Before
-Cypress [v12.0.0](https://on.cypress.io/changelog#12-0-0), Cypress tests were
-limited to visiting domains of the same origin, making programmatic login the
-only option for authenticating users with a third-party API. As of Cypress
-[v12.0.0](https://on.cypress.io/changelog#12-0-0), Cypress tests are no longer
-limited to visiting domains of a single origin, meaning you can easily
-authenticate with [Auth0](https://auth0.com) via the UI!
-
-:::
-
## Auth0 Application Setup
To get started with Auth0, an application needs to be setup within the
@@ -112,13 +90,30 @@ require('dotenv').config()
```js
{
env: {
- auth0_username: process.env.AUTH0_USERNAME,
- auth0_password: process.env.AUTH0_PASSWORD,
auth0_domain: process.env.REACT_APP_AUTH0_DOMAIN,
auth0_audience: process.env.REACT_APP_AUTH0_AUDIENCE,
auth0_scope: process.env.REACT_APP_AUTH0_SCOPE,
auth0_client_id: process.env.REACT_APP_AUTH0_CLIENTID,
- auth0_client_secret: process.env.AUTH0_CLIENT_SECRET,
+ },
+ setupNodeEvents(on, config) {
+ on('task', {
+ getAuth0Credentials() {
+ const username = process.env.AUTH0_USERNAME
+ const password = process.env.AUTH0_PASSWORD
+ if (!username || !password) {
+ throw new Error('AUTH0_USERNAME and AUTH0_PASSWORD must be set')
+ }
+ return { username, password }
+ },
+ getSecret(secretName) {
+ const secret = process.env[secretName]
+ if (!secret) {
+ throw new Error(`Secret ${secretName} is not set`)
+ }
+ return secret
+ },
+ })
+ return config
},
}
```
@@ -147,9 +142,7 @@ Next, we'll write a custom command called `loginToAuth0` to perform a login to
[Cypress Real World App](https://github.com/cypress-io/cypress-realworld-app)
4. Cache the results with [`cy.session()`](/api/commands/session)
-```js
-// cypress/support/auth-provider-commands/auth0.ts
-
+```js title="cypress/support/auth-provider-commands/auth0.ts"
function loginViaAuth0Ui(username: string, password: string) {
// App landing page redirects to Auth0.
cy.visit('/')
@@ -188,24 +181,23 @@ Cypress.Commands.add('loginToAuth0', (username: string, password: string) => {
Now, we can use our `loginToAuth0` command in the test. Below is our test to
login as a user via Auth0 and run a basic sanity check.
-:::tip
+:::info
The
[runnable version of this test](https://github.com/cypress-io/cypress-realworld-app/blob/develop/cypress/tests/ui-auth-providers/auth0.spec.ts)
-is in the
-[Cypress Real World App](https://github.com/cypress-io/cypress-realworld-app).
+is in the
.
:::
-```js
+```js title='auth.cy.js'
describe('Auth0', function () {
beforeEach(function () {
cy.task('db:seed')
cy.intercept('POST', '/graphql').as('createBankAccount')
- cy.loginToAuth0(
- Cypress.env('auth0_username'),
- Cypress.env('auth0_password')
- )
+
+ cy.task('getAuth0Credentials').then(({ username, password }) => {
+ cy.loginToAuth0(username, password)
+ })
cy.visit('/')
})
@@ -215,13 +207,16 @@ describe('Auth0', function () {
})
```
-
+
Lastly, we can refactor our login command to take advantage of
[`cy.session()`](/api/commands/session) to store our logged in user so we don't
have to reauthenticate before every test.
-```js
+```js title="cypress/support/commands.js"
Cypress.Commands.add('loginToAuth0', (username: string, password: string) => {
const log = Cypress.log({
displayName: 'AUTH0 LOGIN',
@@ -251,7 +246,10 @@ Cypress.Commands.add('loginToAuth0', (username: string, password: string) => {
})
```
-
+
### Programmatic Login
@@ -269,30 +267,29 @@ The `loginByAuth0Api` command will execute the following steps:
2. Finally the `auth0Cypress` `localStorage` item is set with the
`access token`, `id_token` and user profile.
-```jsx
-// cypress/support/commands.js
+```jsx title="cypress/support/commands.js"
Cypress.Commands.add(
'loginByAuth0Api',
(username: string, password: string) => {
cy.log(`Logging in as ${username}`)
const client_id = Cypress.env('auth0_client_id')
- const client_secret = Cypress.env('auth0_client_secret')
const audience = Cypress.env('auth0_audience')
const scope = Cypress.env('auth0_scope')
- cy.request({
- method: 'POST',
- url: `https://${Cypress.env('auth0_domain')}/oauth/token`,
- body: {
- grant_type: 'password',
- username,
- password,
- audience,
- scope,
- client_id,
- client_secret,
- },
- }).then(({ body }) => {
+ cy.task('getSecret', 'AUTH0_CLIENT_SECRET').then((client_secret) => {
+ cy.request({
+ method: 'POST',
+ url: `https://${Cypress.env('auth0_domain')}/oauth/token`,
+ body: {
+ grant_type: 'password',
+ username,
+ password,
+ audience,
+ scope,
+ client_id,
+ client_secret,
+ },
+ }).then(({ body }) => {
const claims = jwt.decode(body.id_token)
const {
nickname,
@@ -329,6 +326,7 @@ Cypress.Commands.add(
window.localStorage.setItem('auth0Cypress', JSON.stringify(item))
cy.visit('/')
+ })
})
}
)
@@ -340,14 +338,13 @@ we will be able to authenticate with Auth0 while our app is under test. Below is
a test to login as a user via [Auth0](https://auth0.com), complete the
onboarding process and logout.
-```jsx
+```jsx title="auth.cy.js"
describe('Auth0', function () {
beforeEach(function () {
cy.task('db:seed')
- cy.loginByAuth0Api(
- Cypress.env('auth0_username'),
- Cypress.env('auth0_password')
- )
+ cy.task('getAuth0Credentials').then(({ username, password }) => {
+ cy.loginByAuth0Api(username, password)
+ })
})
it('shows onboarding', function () {
@@ -366,19 +363,19 @@ The previous sections focused on the recommended Auth0 authentication practice
within Cypress tests. To use this practice it is assumed you are testing an app
appropriately built or adapted to use Auth0.
-The following sections provides guidance on building or adapting an app to use
+The following sections provide guidance on building or adapting an app to use
Auth0 authentication. Please note that if you are
[logging in with `cy.origin()`](#Login-with-cyorigin) and your app is already
-successfully integrated with Auth0, you do not need to make any further changes
+successfully integrated with Auth0, you don't need to make any further changes
to your app and the remainder of this guide should be regarded as purely
informational.
:::
The
-[Cypress Real World App](https://github.com/cypress-io/cypress-realworld-app) is
-used and provides configuration and runnable code for both the React SPA and the
-Express back end.
+
+
is used and provides configuration
+and runnable code for both the React SPA and the Express back end.
The front end uses the [auth0-react SDK](https://github.com/auth0/auth0-react)
for React Single Page Applications (SPA), which uses the
@@ -402,8 +399,7 @@ In order to validate API requests from the frontend, we install
[jwks-rsa](https://github.com/auth0/node-jwks-rsa) and configure validation for
JWT's from [Auth0](https://auth0.com).
-```jsx
-// backend/helpers.ts
+```jsx title='backend/helpers.ts'
import jwt from 'express-jwt'
import jwksRsa from 'jwks-rsa'
@@ -428,9 +424,7 @@ Next, we'll define an Express middleware function to be use in our routes to
verify the [Auth0](https://auth0.com) JWT sent by the front end API requests as
the `Bearer` token.
-```jsx
-// backend/helpers.ts
-
+```jsx title='backend/helpers.ts'
// ...
export const checkJwt = jwt(auth0JwtConfig).unless({ path: ['/testData/*'] })
@@ -438,8 +432,7 @@ export const checkJwt = jwt(auth0JwtConfig).unless({ path: ['/testData/*'] })
Once this helper is defined, we can use globally to apply to all routes:
-```jsx
-// backend/app.ts
+```jsx title='backend/app.ts'
// initial imports ...
import { checkJwt } from './helpers'
@@ -469,9 +462,7 @@ A `useEffect` hook is added to get the access token for the authenticated user
and send an `AUTH0` event with the `user` and `token` objects to work with the
existing authentication layer (`authMachine.ts`).
-```jsx
-// src/containers/AppAuth0.tsx
-
+```jsx title='containers/AppAuth0.tsx'
// initial imports ...
import { withAuthenticationRequired, useAuth0 } from '@auth0/auth0-react'
@@ -507,7 +498,8 @@ export default withAuthenticationRequired(AppAuth0)
Note: The full
[AppAuth0.tsx component](https://github.com/cypress-io/cypress-realworld-app/blob/develop/src/containers/AppAuth0.tsx)
is in the
-[Cypress Real World App](https://github.com/cypress-io/cypress-realworld-app).
+
+
.
Next, we update our entry point (`index.tsx`) to wrap our application with the
`
` from the
@@ -515,9 +507,7 @@ Next, we update our entry point (`index.tsx`) to wrap our application with the
`onRedirectCallback`. We pass props for the Auth0 environment variables set in
`.env` above, and render our `` component as the application.
-```jsx
-// src/index.tsx
-
+```jsx title='index.tsx'
// initial imports ...
import AppAuth0 from "./containers/AppAuth0";
@@ -563,9 +553,7 @@ In addition, we will update the export to be wrapped with
our application to work with the [Auth0](https://auth0.com) redirect login flow
in development/production but not when under test in Cypress.
-```jsx
-// src/containers/AppAuth0.tsx
-
+```jsx title='containers/AppAuth0.tsx'
// initial imports ...
import { withAuthenticationRequired, useAuth0 } from "@auth0/auth0-react";
@@ -584,7 +572,8 @@ const AppAuth0 = () => {
})();
}, [user, getAccessTokenSilently]);
- // If under test in Cypress, get credentials from "auth0Cypress" localstorage item and send event to our state management to log the user into the SPA
+ // If under test in Cypress, get credentials from "auth0Cypress"
+ // localstorage and send event to our state management to log the user into the SPA
if (window.Cypress) {
useEffect(() => {
const auth0 = JSON.parse(localStorage.getItem("auth0Cypress")!);
@@ -617,39 +606,35 @@ const AppAuth0 = () => {
);
};
-// Conditional export wrapped with `withAuthenticationRequired` if we are not under test in Cypress.
+// Conditional export wrapped with `withAuthenticationRequired`
+// if we aren't under test in Cypress.
let appAuth0 = window.Cypress ? AppAuth0 : withAuthenticationRequired(AppAuth0);
export default appAuth0
```
## Auth0 Rate Limiting Logins
-Be aware of the rate limit statement in the Auth0 documentation:
-
-[Auth0 Rate Limit](https://auth0.com/docs/connections/database/rate-limits) -
-"If a user attempts to login 20 times per minute as the same user from the same
-location, regardless of having the correct credentials, the rate limit will come
-into effect. When this happens, the user can make 10 attempts per minute."
+Be aware of the rate limit in [Auth0's documentation](https://auth0.com/docs/connections/database/rate-limits) -
This limit can be reached as the size of a test suite grows along with enabling
-[parallelized runs](https://on.cypress.io/parallelization) to speed up test run
+[parallelized runs](/cloud/features/smart-orchestration/parallelization) to speed up test run
duration.
If you run into this rate limit, a programmatic approach can be added to the
`loginByAuth0` command to clear a blocked IP prior to the test run.
-Next you'll need to obtain a
+You'll need to obtain an
[API token](https://auth0.com/docs/api/management/v2/tokens) to interact with
the [Auth0 Management API](https://auth0.com/docs/api/management/v2). This token
is a JSON Web Token (JWT) and it contains specific granted permissions for the
API.
Add this token as environment variable `AUTH0_MGMT_API_TOKEN` to our
-[Cypress Real World App](https://github.com/cypress-io/cypress-realworld-app)
-`.env` with your API token.
-```jsx
-// .env
+ `.env` file with your API
+token.
+
+```jsx title='.env'
// ... additional keys
AUTH0_MGMT_API_TOKEN = 'YOUR-MANAGEMENT-API-TOKEN'
```
@@ -662,27 +647,27 @@ endpoint to unblock an IP that may become blocked during the test run.
:::info
-Tip
-
[icanhazip.com](http://icanhazip.com/) is a free, hosted service to find a
system's current external IP address.
:::
-```jsx
+```jsx title='cypress/support/commands.js'
Cypress.Commands.add('loginByAuth0Api', (username, password) => {
// Useful when rate limited by Auth0
cy.exec('curl -4 icanhazip.com')
.its('stdout')
.then((ip) => {
- cy.request({
- method: 'DELETE',
- url: `https://${Cypress.env(
- 'auth0_domain'
- )}/api/v2/anomaly/blocks/ips/${ip}`,
- auth: {
- bearer: Cypress.env('auth0_mgmt_api_token'),
- },
+ cy.task('getSecret', 'AUTH0_MGMT_API_TOKEN').then((token) => {
+ cy.request({
+ method: 'DELETE',
+ url: `https://${Cypress.env(
+ 'auth0_domain'
+ )}/api/v2/anomaly/blocks/ips/${ip}`,
+ auth: {
+ bearer: token,
+ },
+ })
})
})
diff --git a/docs/app/guides/authentication-testing/azure-active-directory-authentication.mdx b/docs/app/guides/authentication-testing/azure-active-directory-authentication.mdx
new file mode 100644
index 0000000000..1670a4b259
--- /dev/null
+++ b/docs/app/guides/authentication-testing/azure-active-directory-authentication.mdx
@@ -0,0 +1,280 @@
+---
+title: 'Azure Active Directory Authentication: Cypress Guide'
+sidebar_label: Azure Active Directory Authentication
+description: Learn how to set up Cypress to test against an Azure Active Directory web app and authenticate with Azure Active Directory using `cy.origin()`.
+---
+
+
+
+# Azure Active Directory Authentication
+
+:::info
+
+##### What you'll learn
+
+- How to set up Cypress to test against an Azure Active Directory web app
+- How to authenticate with Azure Active Directory using `cy.origin()`
+
+:::
+
+This guide is designed for testing against a Single Page Application (SPA) that
+uses
+[Azure Active Directory](https://learn.microsoft.com/en-us/azure/active-directory/fundamentals/active-directory-whatis)
+(AAD) to authenticate users. For this guide, the Microsoft Authentication
+Library
+[`@azure/msal-browser`](https://www.npmjs.com/package/@azure/msal-browser)
+package is used by the web app to broker this authentication.
+
+This guide can also serve as a foundation for testing other web apps with
+Cypress that use Azure Active Directory services with other frameworks, such as
+React, Angular, or Vue.
+
+## Microsoft AAD Application Setup
+
+For this guide, we are mainly going to focus on setting up Cypress to test
+against an Azure Active Directory web app. Please clone the
+[Microsoft Identity JavaScript Tutorial](https://github.com/Azure-Samples/ms-identity-javascript-tutorial/tree/c1956b658efa331bb5df11a0038ad32d12dad3ce/1-Authentication/1-sign-in)
+and follow the steps to set up your application.
+
+Once set up, you'll need to modify a few things in the `App/index.html` file:
+
+- Remove any
+ [`integrity`](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity)
+ attributes inside `
+
+```
+
+You can test this with `cy.origin`, which may look like the following test case:
+
+```javascript title="test.cy.js"
+cy.visit('http://localhost:8080/')
+cy.get('#nav').submit() // trigger a javascript redirect!
+cy.origin('https://example.cypress.io/', () => {
+ cy.url().should('contain', 'cypress.io')
+})
+```
+
+### Cross-Origin Errors with `cy.origin`
+
+Sometimes, when using `cy.origin` and especially with websites that are not
+under your immediate test control, cross-origin errors may still tend to creep
+up. We don't recommend visiting or interacting with sites you
+[do not control](/app/core-concepts/best-practices#Visiting-External-Sites).
+However, if this is necessary, most of these issues can usually be remedied by
+applying` the
+[modify obstructive third-party code](/app/references/experiments#Configuration)
+experimental flag or by
+[disabling web security](/app/guides/cross-origin-testing#Disabling-Web-Security).
+
+## Disabling Web Security
+
+So if you cannot work around any of the issues using the suggested workarounds
+above, including
+[modifying obstructive third-party code](/app/guides/cross-origin-testing#Modifying-Obstructive-Third-Party-Code)
+with `cy.origin`, you may want to disable web security.
+
+One last thing to consider here is that every once in a while we discover bugs
+in Cypress that lead to cross-origin errors that can otherwise be fixed. If you
+think you're experiencing a bug,
+[open an issue](https://github.com/cypress-io/cypress/issues/new/choose).
+
+:::caution
+
+Chrome only
+
+Disabling web security is only supported in Chrome-based browsers. Settings in
+`chromeWebSecurity` will have no effect in other browsers. We will log a warning
+in this case.
+
+
+
+If you rely on disabling web security, you will not be able to run tests on
+browsers that do not support this feature.
+
+:::
+
+### Set `chromeWebSecurity` to `false`
+
+Setting `chromeWebSecurity` to `false` in Chrome-based browsers allows you to do
+the following:
+
+- Display insecure content
+- Navigate to any origin without cross-origin errors with or without
+ `cy.origin`
+- Access cross-origin iframes that are embedded in your application
+
+Still here? That's cool, let's disable web security!
+
+#### Set `chromeWebSecurity` to `false` in the [Cypress configuration](/app/references/configuration)
+
+:::cypress-config-example
+
+```ts
+{
+ chromeWebSecurity: false,
+}
+```
+
+:::
+
+## Modifying Obstructive Third Party Code
+
+Cypress today has the concept of
+[modifying obstructive code](/app/references/configuration#modifyObstructiveCode),
+which is code that may interfere with Cypress being able to run your web
+application. The `experimentalModifyObstructiveThirdPartyCode` flag provides the
+same benefits of the
+[modifyObstructiveCode](/app/references/configuration#modifyObstructiveCode)
+flag, but additionally applies it to third-party `.js` and `.html` that is being
+either loaded or navigated to inside your application. In addition to this, this
+flag also does the following:
+
+- Adjusts the User Agent in Electron to appear more chrome-like. This option can
+ be overridden with the [userAgent](/app/references/configuration#Browser)
+ config option.
+- Removes
+ [Subresource Integrity (SRI)](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity)
+ from modified scripts as they will not execute otherwise.
+- Updates the `Sec-Fetch-Dest` Metadata header from `iframe` to `document` in
+ cases where requests come from the application under test.
+
+Want to enable `experimentalModifyObstructiveThirdPartyCode`? Let's do it!
+
+:::cypress-config-example
+
+```js
+{
+ experimentalModifyObstructiveThirdPartyCode: true
+}
+```
+
+:::
+
+## Other workarounds
+
+There are other ways of testing the interaction between two origins. The
+browser has a natural security barrier called `origin policy` this means that
+state like `localStorage`, `cookies`, `service workers` and many other APIs are
+not shared between them anyways. Cypress does offer APIs around `localStorage`,
+`sessionStorage`, and `cookies` that are not limited to this restriction.
+
+As a best practice, you should not visit or interact with any website not under
+your control.
+
+If your organization uses Single Sign On (SSO) or OAuth then you might choose to
+test a 3rd party service other than your origin, which can be tested with
+[`cy.origin()`](/api/commands/origin).
+
+We've written several other guides specifically about handling this situation.
+
+- [Best Practices: Visiting external sites](/app/core-concepts/best-practices#Visiting-External-Sites)
+- [Recipes: Logging In - Single Sign On](/app/references/recipes#Logging-In)
+- [Guides: Amazon Cognito Authentication](/app/guides/authentication-testing/amazon-cognito-authentication)
+- [Guides: Auth0 Authentication](/app/guides/authentication-testing/auth0-authentication)
+- [Guides: Okta Authentication](/app/guides/authentication-testing/okta-authentication)
diff --git a/docs/app/guides/cypress-studio.mdx b/docs/app/guides/cypress-studio.mdx
new file mode 100644
index 0000000000..05cb51f877
--- /dev/null
+++ b/docs/app/guides/cypress-studio.mdx
@@ -0,0 +1,179 @@
+---
+title: 'Cypress Studio: Build Tests by Interacting with Your App'
+description: 'Create, extend, and refine Cypress tests without writing commands by hand.'
+sidebar_label: 'Cypress Studio'
+e2eSpecific: true
+---
+
+
+
+# Cypress Studio
+
+:::info
+
+##### What you'll learn
+
+- How to generate Cypress tests by interacting with your app
+- How to add assertions by right-clicking elements
+- How to quickly extend or edit tests without leaving Cypress
+
+:::
+
+## Why Use Cypress Studio
+
+Cypress Studio turns test creation into a natural part of exploring your app.
+Instead of manually typing every `.get()`, `.click()`, or `.type()` command, you can **record interactions in real time**, automatically generate Cypress code, and fine-tune your test inline.
+
+- **Save time**: Skip manually typing `.get().click().type()` sequences
+- **Stay in the flow**: Build and extend tests without leaving the Cypress App
+- **Boost coverage**: Add new checks to existing tests in seconds
+
+
+
+## 🚀 Quickstart: Try Studio in 60 Seconds
+
+:::success
+
+1. **Run a Spec:**
+ Open Cypress and run a spec file
+2. **Open Studio:**
+ Click Edit in Studio on a test in the Command Log or click Studio Beta in the Studio panel.
+
+3. **Interact & Save:**
+ Click, type, and right-click to add assertions. Click Save to save your test.
+
+:::
+
+## How Cypress Studio works
+
+When Studio is enabled, you can:
+
+- **Record:** Interact with your app in the Cypress browser to capture test commands
+- **Assert:** Right-click any element to add built-in assertions
+- **Edit:** Adjust tests inline without switching tools
+
+Supported action commands include: [`.click()`](/api/commands/click), [`.type()`](/api/commands/type), [`.check()`](/api/commands/check), [`.uncheck()`](/api/commands/uncheck), [`.select()`](/api/commands/select)
+
+### Start Studio
+
+You can start Studio in several ways:
+
+- Click **Edit in Studio** on a test in the Command Log.
+- Click **New Test** on the running spec or suite.
+- Click **Studio Beta** in the Studio panel.
+
+
+
+### Record a new test
+
+1. Click **New Test** on the file or suite you want to work in
+2. Give your test a clear, descriptive name
+
+Studio will automatically create a new test definition for you.
+
+
+
+### Extend an existing test
+
+:::warning
+
+**Sourcemaps required:** Sourcemaps must be enabled for Studio to load your existing test. See [how to enable sourcemaps](/api/node-events/preprocessors-api#Source-maps) for more information.
+
+:::
+
+You can extend and update existing tests using Cypress Studio.
+
+1. Run the spec in Cypress
+2. Hover over the test in the Command Log
+3. Click **Edit in Studio**
+
+Studio runs your test up to the last command and lets you keep building from there.
+
+
+
+### Set a URL
+
+Studio needs a `cy.visit()` before it can record. If your test doesn't have one yet, Studio will prompt you to enter a URL so it can start recording.
+
+
+
+### Record actions
+
+Record actions by interacting with the application under test.
+
+- **Clicks:** Click buttons, links, or interactive elements
+- **Typing:** Enter text into inputs and text areas
+- **Selections:** Use dropdowns, checkboxes, and radio buttons
+
+Studio translates your actions into Cypress commands in real time.
+
+
+
+### Add assertions
+
+Right-click any element in your app to instantly add an assertion.
+
+For example, confirm text is visible, a checkbox is checked, or an element has a specific CSS class. Assertions are added directly in your test code, ready to save and run.
+
+Assertions available are dynamically generated based on the element you right-click.
+
+
+
+## How selectors are chosen
+
+Cypress automatically generates a **unique selector** for each element you interact with, using a priority strategy to ensure accuracy.
+
+
+
+Want more control? Use the [`Cypress.ElementSelector`](/api/cypress-api/element-selector-api) API to customize selector priority for your project.
+
+## Limitations
+
+- Works only in E2E tests (Component Testing not yet supported)
+- Cucumber tests are not yet supported
+- Cannot record across [multiple
+ origins](/app/guides/cross-origin-testing).
+- Recording in iframe is not yet supported
+- See issues labeled with [`topic: studio`](https://github.com/cypress-io/cypress/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22topic%3A%20studio%22) for other known issues.
+
+## Coming Soon: AI in Studio
+
+Imagine Studio suggesting the most relevant assertions for every step you take. Cypress AI is a feature that's **coming soon** that will recommend relevant assertions in real time based on your interactions.
+
+
+
+
+
+## See also
+
+- [Element Selector API](/api/cypress-api/element-selector-api)
diff --git a/docs/guides/guides/debugging.mdx b/docs/app/guides/debugging.mdx
similarity index 80%
rename from docs/guides/guides/debugging.mdx
rename to docs/app/guides/debugging.mdx
index 4947b2bc4d..43c1233236 100644
--- a/docs/guides/guides/debugging.mdx
+++ b/docs/app/guides/debugging.mdx
@@ -1,20 +1,26 @@
---
-title: Debugging
+title: 'Debugging in Cypress'
+description: 'Learn how to use debugger, .debug(), .pause(), and the Developer Tools to debug Cypress tests.'
+sidebar_label: 'Debugging'
---
+
+
+# Debugging
+
:::info
-## What you'll learn
+##### What you'll learn
-- How Cypress runs in the same event loop with your code, keeping debugging less
- demanding and more understandable
-- How Cypress embraces the standard Developer Tools
-- How and when to use `debugger` and the shorthand
- [`.debug()`](/api/commands/debug) command
+- How to use `debugger` and `.debug()` within Cypress tests
+- How to step through test commands with `.pause()`
+- How to use the Developer Tools to get console logs for command information
+- How errors are displayed and structured within Cypress
+- How to debug flaky tests
:::
-## Using `debugger`
+## Using debugger
Your Cypress test code runs in the same run loop as your application. This means
you have access to the code running on the page, as well as the things the
@@ -40,7 +46,7 @@ it('let me debug like a fiend', () => {
:::
This may not work exactly as you are expecting. As you may remember from the
-[Introduction to Cypress](/guides/core-concepts/introduction-to-cypress), `cy`
+[Introduction to Cypress](/app/core-concepts/introduction-to-cypress), `cy`
commands enqueue an action to be taken later. Can you see what the test above
will do given that perspective?
@@ -109,7 +115,7 @@ exposed as the variable `subject` within your Developer Tools so that you can
interact with it in the console.
@@ -136,7 +142,7 @@ storage after each command to make sure everything happens as expected.
## Using the Developer Tools
Though Cypress has built out
-[an excellent application](/guides/core-concepts/cypress-app) to help you
+[an excellent application](/app/core-concepts/open-mode) to help you
understand what is happening in your application and your tests, there's no
replacing all the amazing work browser teams have done on their built-in
development tools. Once again, we see that Cypress goes _with_ the flow of the
@@ -154,7 +160,7 @@ You can see a walk-through of debugging some application code from Cypress
### Get console logs for commands
All of Cypress's commands, when clicked on within the
-[Command Log](/guides/core-concepts/cypress-app#Command-Log), print extra
+[Command Log](/app/core-concepts/open-mode#Command-Log), print extra
information about the command, its subject, and its yielded result. Try clicking
around the Command Log with your Developer Tools open! You may find some useful
information here.
@@ -192,25 +198,20 @@ application under test, so the test above will fail.
### Source maps
-Cypress utilizes source maps to enhance the error experience. Stack traces are
-translated so that your source files are shown instead of the generated file
-that is loaded by the browser. This also enables displaying code frames. Without
-inline source maps, you will not see code frames.
-
-By default, Cypress will include an inline source map in your spec file, so you
-will get the most out of the error experience. If you
-[modify the preprocessor](/api/plugins/preprocessors-api), ensure that inline
-source maps are enabled to get the same experience. With webpack and the
-[webpack preprocessor](https://github.com/cypress-io/cypress/tree/develop/npm/webpack-preprocessor),
-for example, set
-[the `devtool` option](https://webpack.js.org/configuration/devtool/) to
-`inline-source-map`.
+
## Debugging flake
While Cypress is
-[flake-resistant](/guides/overview/key-differences#Flake-resistant), some users
-do experience flake, particularly when running in CI versus locally. Most often
+[flake-resistant](/app/get-started/why-cypress#Flake-resistant), some users
+do experience flake, particularly when running in CI versus locally.
+
+:::tip
+To debug flake in your recorded tests in CI, try out [Test Replay](/cloud/features/test-replay) in Cypress Cloud.
+It allows you to replay the test exactly as it ran in CI.
+:::
+
+Most often
in cases of flaky tests, we see that there are not enough assertions surrounding
test actions or network requests before moving on to the next assertion.
@@ -230,18 +231,17 @@ locally but fail in CI.
- Remove time-sensitive variability in your tests. For example, ensure a network
request has finished before looking for the DOM element that relies on the
data from that network request. You can leverage
- [aliasing](/guides/core-concepts/variables-and-aliases#Aliases) for this.
+ [aliasing](/app/core-concepts/variables-and-aliases#Aliases) for this.
-Cypress Cloud also offers [Analytics](/guides/cloud/analytics/overview) that illustrate
-trends in your tests and can help identify the tests that fail most often. This
+Cypress Cloud also offers [Analytics](/cloud/features/analytics/overview) that illustrate
+trends in your tests and can help identify the tests that flake or fail most often. This
could help narrow down what is causing the flake -- for example, seeing
increased failures after a change to the test environment could indicate issues
with the new environment.
For more advice on dealing with flake read a
[series of our blog posts](https://cypress.io/blog/tag/flake/) and
-[Identifying Code Smells in Cypress](https://codingitwrong.com/2020/10/09/identifying-code-smells-in-cypress.html)
-by [Cypress Ambassador](https://www.cypress.io/ambassadors/) Josh Justice.
+[Identifying Code Smells in Cypress](https://codingitwrong.com/2020/10/09/identifying-code-smells-in-cypress.html).
## Log Cypress events
@@ -255,9 +255,9 @@ Cypress emits multiple events you can listen to as shown below.
## Troubleshooting Cypress
-There are times when you will encounter errors or unexpected behavior with
+There are times when you'll encounter errors or unexpected behavior with
Cypress itself. In this situation, we recommend checking out our
-[Troubleshooting Guide](/guides/references/troubleshooting).
+[Troubleshooting Guide](/app/references/troubleshooting).
## More info
diff --git a/docs/app/guides/migration/_category_.json b/docs/app/guides/migration/_category_.json
new file mode 100644
index 0000000000..d891457ef6
--- /dev/null
+++ b/docs/app/guides/migration/_category_.json
@@ -0,0 +1,5 @@
+{
+ "label": "Migrating to Cypress",
+ "collapsible": true,
+ "collapsed": true
+}
diff --git a/docs/guides/end-to-end-testing/migration/protractor-to-cypress.mdx b/docs/app/guides/migration/protractor-to-cypress.mdx
similarity index 87%
rename from docs/guides/end-to-end-testing/migration/protractor-to-cypress.mdx
rename to docs/app/guides/migration/protractor-to-cypress.mdx
index 43558762eb..60933ac4aa 100644
--- a/docs/guides/end-to-end-testing/migration/protractor-to-cypress.mdx
+++ b/docs/app/guides/migration/protractor-to-cypress.mdx
@@ -1,38 +1,43 @@
---
-title: Migrating from Protractor to Cypress
-slug: /guides/end-to-end-testing/protractor-to-cypress
+title: 'Migrating from Protractor to Cypress: A Guide'
+description: 'Migrate from Protractor to Cypress with this guide. Learn how to work with the DOM, write assertions, and use the Angular schematic to configure Cypress.'
+sidebar_label: Migrating from Protractor
---
+
+
+# Migrating from Protractor to Cypress
+
:::info
-## What you'll learn
+##### What you'll learn
-- Benefits of using Cypress in Angular apps
-- How Cypress can create reliable e2e tests for Angular apps
-- How to migrate Protractor tests to Cypress
+- How to migrate from Protractor to Cypress
+- The benefits of using Cypress for end-to-end testing
+- How to work with the DOM and write assertions in Cypress
+- Using the Angular schematic to configure Cypress
:::
-## Introduction
-
-Protractor has been a popular end-to-end testing tool for Angular and AngularJS
-apps. However, Protractor is
+Protractor was a popular end-to-end testing tool for Angular and AngularJS
+apps, but is
[no longer included](https://blog.angular.io/angular-v12-is-now-available-32ed51fbfd49)
in new Angular projects as of Angular 12. We've got you covered here with this
migration guide to help you and your team transition from Protractor to Cypress.
-:::caution
-
-If you see any inaccuracies with this guide or feel like something has been
-misrepresented, please
-[start a discussion here](https://github.com/cypress-io/cypress/discussions/new?category=general).
-
-:::
-
To start, let's look at a quick code sample to see how approachable Cypress is
coming from Protractor. In this scenario, we have a test to validate that a user
can sign up for a new account.
+:::tip
+
+To see how this conversion would work with some of your own test code, you can
+paste it into the interactive
+[Cypress Migrator tool](https://migrator.cypress.io/), which will generate the
+equivalent Cypress code.
+
+:::
+
Before: Protractor
```js
@@ -65,23 +70,15 @@ describe('Authorization Tests', () => {
})
```
-:::info
-
-To see how this conversion would work with some of your own test code, you can
-paste it into the interactive
-[Cypress Migrator tool](https://migrator.cypress.io/), which will generate the
-equivalent Cypress code.
-
-:::
-
## Benefits of Using Cypress
-As many developers can attest to, end-to-end testing is one of those things that
-they know they _should_ do, but often do not. Or if they do run tests, the tests
-are often flaky and often very expensive due to how long it can take to run. And
+As many developers can attest, end-to-end testing is one of those things that
+they know they _should_ do, but often don't. Or if they do run tests, the tests
+are often flaky and often very expensive due to how long it takes to run. And
while there are often ideals of complete code coverage, the realities of
business and deadlines often take precedence and the tests are left unwritten,
-or worse, ignored when errors are being reported because they are not reliable.
+or worse, ignored when errors are being reported because they aren't reliable.
+
Not only does Cypress make sure that your tests will be reliable, but it
provides developers with tools that make e2e testing an asset to development
rather than a hindrance.
@@ -93,11 +90,11 @@ and often runs through tests too fast for the human eye. Without additional
configuration, this often leads to a reliance on lengthy terminal messages that
can be expensive from a context-switching perspective.
-With [Cypress](/guides/core-concepts/cypress-app), your tests run in an
+With [Cypress](/app/core-concepts/open-mode), your tests run in an
interactive browser environment in real time. Cypress's
-[Command Log](/guides/core-concepts/cypress-app#Command-Log) displays the tests
+[Command Log](/app/core-concepts/open-mode#Command-Log) displays the tests
from your test suite and their assertions. When you
-[click on a command or assertion](https://docs.cypress.io/guides/core-concepts/cypress-app#Clicking-on-Commands)
+[click on a command or assertion](/app/core-concepts/open-mode#Command-Log)
in the command log, a DOM snapshot displays so you can see what the application
under test looked like at the time of the test's execution. This allows you to
see the **real rendered UI** and the behavior of the app under **real user
@@ -106,20 +103,19 @@ manually explore its behavior while it is under the state of a desired test
scenario.
Cypress also helps you to write your tests by making it as easy as possible to
-find the right CSS selectors for the DOM elements in your application with its
-[Selector Playground](https://docs.cypress.io/guides/core-concepts/cypress-app#Selector-Playground).
-The Selector Playground helps you cut down on time spent finding the right
+find the right CSS selectors for the DOM elements in your application with [Cypress Studio](/app/guides/cypress-studio).
+These tools help you cut down on time spent finding the right
selectors so you can focus on what's important: writing tests that verify your
app's logic.
### Faster feedback loops
-When it comes to your end-to-end tests, being able to see your tests as they run
+When it comes to your end-to-end or component tests, being able to see your tests as they run
is critical to allowing you to confidently iterate faster. With Cypress, your
tests are automatically re-run upon file save as you are iterating on them.
@@ -129,7 +125,7 @@ provides an instant feedback loop that allows you to iterate faster with
confidence.
@@ -140,12 +136,12 @@ behaving at any point during test execution. Cypress takes DOM snapshots of your
application under test as the commands and assertions in your tests are
executed. This enables you to view the **real UI** of your application at any
point during your tests' execution. By clicking from one command to another in
-the [command log](/guides/core-concepts/cypress-app#Command-Log), you can see
+the [command log](/app/core-concepts/open-mode#Command-Log), you can see
which elements Cypress acted upon and how your application responded to the
simulated **real user behavior**.
@@ -161,10 +157,10 @@ the failure.
Cypress assists with debugging in headless mode, in numerous ways:
-- Replay the test as it executed during the recorded run with full debug capability using [Test Replay](/guides/cloud/test-replay) in Cypress Cloud.
+- Replay the test as it executed during the recorded run with full debug capability using [Test Replay](/cloud/features/test-replay) in Cypress Cloud.
- By automatically taking a
screenshot of the app UI and command log at the exact point of test failure.
-- To see everything that happened prior to test failure, enable the [`video`](/guides/references/configuration#Videos).
+- To see everything that happened prior to test failure, enable the [`video`](/app/references/configuration#Videos).
configuration option to record (as an MP4 file) the full test spec run.
### Test Retries
@@ -172,13 +168,13 @@ Cypress assists with debugging in headless mode, in numerous ways:
End-to-end tests can be complicated because modern web applications are also
complex. You may find that some features of your web application are challenging
to test or the tests sporadically fail. We call these tests "flaky." Cypress
-allows you to [retry failed tests](/guides/guides/test-retries). Sometimes tests
+allows you to [retry failed tests](/app/guides/test-retries). Sometimes tests
will fail in a CI environment when they otherwise would pass on a developer's
machine. Enabling test retries in the Cypress configuration can help you to get
unblocked when unpredictable, flaky tests are occasionally failing.
Cypress Cloud goes a step further and helps you and your team to
-[detect flaky tests](/guides/cloud/flaky-test-management) that run in your CI/CD
+[detect flaky tests](/cloud/features/flaky-test-management) that run in your CI/CD
pipeline.
## Getting Started
@@ -225,7 +221,7 @@ Check out the
documentation for more details like how to
[configure your tests to run in a specific browser](#Running-the-builder-with-a-specific-browser)
or [record test results](#Recording-test-results-to-Cypress-Cloud) to
-[Cypress Cloud](https://docs.cypress.io/guides/cloud/introduction).
+[Cypress Cloud](/cloud/get-started/introduction).
:::
@@ -248,22 +244,7 @@ community.
While we recommend using our official Angular schematic, you can still install
Cypress manually.
-
-
-
-```bash
-npm install cypress --save-dev
-```
-
-
-
-
-```bash
-yarn add cypress --dev
-```
-
-
-
+
Then, since Cypress can run in parallel with your application, let's install
[concurrently](https://www.npmjs.com/package/concurrently) to simplify our npm
@@ -289,8 +270,7 @@ yarn add concurrently --dev
Then we will update our `package.json` with the following scripts:
-```json
-// Example package.json
+```json title="package.json"
{
"scripts": {
"cy:open": "concurrently \"ng serve\" \"cypress open\"",
@@ -336,7 +316,7 @@ When it comes to e2e tests, one of the most common things you'll need to do is
get one or more HTML elements on a page. Rather than split element fetching into
multiple methods that you need to memorize, everything can be accomplished with
[`cy.get`](/api/commands/get) while using CSS selectors or the preferred
-[**data attribute**](https://on.cypress.io/selecting-elements).
+[**data attribute**](/app/core-concepts/best-practices#Selecting-Elements).
Before: Protractor
@@ -453,26 +433,6 @@ You can learn more about
:::
-#### Selector Playground
-
-For those who are big fans of
-[Protractor's Element Explorer functionality](https://www.protractortest.org/#/debugging#enabled-control-flow),
-Cypress also provides you with a
-[Selector Playground](/guides/core-concepts/cypress-app#Selector-Playground)
-that allows you to:
-
-- Determine a unique selector for an element
-- See what elements match a given selector
-- See what element matches a string of text
-
-The Selector Playground can be useful when you need to find a specific selector
-to use in your Cypress tests.
-
-
-
### How to Interact with DOM Elements
Before: Protractor
@@ -537,7 +497,7 @@ cy.get('#my-id').scrollIntoView()
:::info
You can learn more about
-[interacting with DOM elements in our official documentation](/guides/core-concepts/interacting-with-elements).
+[interacting with DOM elements in our official documentation](/app/core-concepts/interacting-with-elements).
:::
@@ -732,7 +692,7 @@ cy.get('#example-input')
Cypress has one additional feature that can make a critical difference in the
reliability of your tests' assertions:
-[retry-ability](https://docs.cypress.io/guides/core-concepts/retry-ability).
+[retry-ability](/app/core-concepts/retry-ability).
When your test fails an assertion or command, Cypress will mimic a real user
with build-in wait times and multiple attempts at asserting your tests in order
to minimize the amount of false negatives / positives.
@@ -793,7 +753,7 @@ cy.get('#loading').should('not.be.visible')
:::info
Learn more about how Cypress handles
-[assertions](/guides/references/assertions).
+[assertions](/app/references/assertions).
:::
@@ -920,12 +880,12 @@ API to wait for Angular to finish rendering before attempting to interact with
an element.
With Cypress, commands that query the DOM are
-[automatically retried](/guides/core-concepts/retry-ability). Cypress will
+[automatically retried](/app/core-concepts/retry-ability). Cypress will
automatically wait and retry most commands until an element appears in the DOM.
If an element is not
-[actionable](/guides/core-concepts/interacting-with-elements#Actionability)
+[actionable](/app/core-concepts/interacting-with-elements#Actionability)
within the
-[`defaultCommandTimeout`](/guides/core-concepts/retry-ability#Timeouts) setting,
+[`defaultCommandTimeout`](/app/core-concepts/retry-ability#Timeouts) setting,
the command will fail. This enables you to write tests without the need for
arbitrary timeouts, enabling you to write more predictable tests.
@@ -953,10 +913,10 @@ cy.get('.list-item').contains('my text')
Cypress commands are similar to Protractor code at first glance. Cypress
commands are
-[not invoked immediately](/guides/core-concepts/introduction-to-cypress#Commands-Are-Asynchronous)
+[not invoked immediately](/app/core-concepts/introduction-to-cypress#Commands-Are-Asynchronous)
and are enqueued to run serially at a later time. Cypress commands might look
like promises, but the
-[Cypress API is not an exact implementation of Promises](/guides/core-concepts/introduction-to-cypress#The-Cypress-Command-Queue).
+[Cypress API is not an exact implementation of Promises](/app/core-concepts/introduction-to-cypress#The-Cypress-Command-Queue).
The modern web is asynchronous, therefore you need to interact with modern web
apps in an asynchronous fashion. This is why the Cypress API is asynchronous.
This allows you to write deterministic tests since all of your commands are
@@ -1074,7 +1034,9 @@ You can use your own custom commands in any of your tests:
```js
it('should display the username of a logged in user', () => {
- cy.login('Matt', Cypress.env('password'))
+ cy.task('getSecret', 'PASSWORD').then((password) => {
+ cy.login('Matt', password)
+ })
cy.get('.username').contains('Matt')
})
```
@@ -1082,31 +1044,31 @@ it('should display the username of a logged in user', () => {
## Continuous Integration
Cypress makes it easy to
-[run your tests in all Continuous Integration environments](/guides/continuous-integration/introduction).
+[run your tests in all Continuous Integration environments](/app/continuous-integration/overview).
Check out our in-depth guides to run your Cypress tests in
-[GitHub Actions](/guides/continuous-integration/github-actions),
-[CircleCI](/guides/continuous-integration/circleci),
-[GitLab CI](/guides/continuous-integration/gitlab-ci),
-[Bitbucket Pipeline](/guides/continuous-integration/bitbucket-pipelines), or
-[AWS CodeBuild](/guides/continuous-integration/aws-codebuild).
+[GitHub Actions](/app/continuous-integration/github-actions),
+[CircleCI](/app/continuous-integration/circleci),
+[GitLab CI](/app/continuous-integration/gitlab-ci),
+[Bitbucket Pipeline](/app/continuous-integration/bitbucket-pipelines), or
+[AWS CodeBuild](/app/continuous-integration/aws-codebuild).
We also have code samples to get Cypress up and running in
-[many of the other popular CI environments](/guides/continuous-integration/ci-provider-examples).
+[many of the other popular CI environments](/app/continuous-integration/overview#CI-Examples).
Even if your CI provider isn't listed, you can still run Cypress in your CI
environment.
## Parallelization
-[Cypress Cloud](/guides/cloud/introduction) allows you to run your test files in
+[Cypress Cloud](/cloud/get-started/introduction) allows you to run your test files in
parallel across multiple CI machines.
With Cypress, your tests can be
-[parallelized on a per spec file basis](https://docs.cypress.io/guides/cloud/smart-orchestration/parallelization).
+[parallelized on a per spec file basis](/cloud/features/smart-orchestration/parallelization).
This is an important distinction between Protractor and Cypress parallelization.
One of the reasons why Cypress parallelizes tests per file is because some users
may write tests that build up state that subsequent tests, although we
-[do not recommend relying on the state of previous tests](/guides/references/best-practices#Having-Tests-Rely-On-The-State-Of-Previous-Tests).
+[do not recommend relying on the state of previous tests](/app/core-concepts/best-practices#Having-Tests-Rely-On-The-State-Of-Previous-Tests).
With Cypress, all you need to do is pass the `--parallel` and `--record` flag to
`cypress run`, and it will take care of the rest for you:
@@ -1118,7 +1080,7 @@ cypress run --record --parallel
:::info
For more information, check out our
-[docs on parallelization](/guides/cloud/smart-orchestration/parallelization#Overview)!
+[docs on parallelization](/cloud/features/smart-orchestration/parallelization)!
:::
@@ -1161,7 +1123,7 @@ to learn more.
### Recording test results to Cypress Cloud
We recommend setting your
-[Cypress Cloud](https://docs.cypress.io/guides/cloud/introduction) recording key
+[Cypress Cloud](/cloud/get-started/introduction) recording key
as an environment variable and _NOT_ as a builder option when running it in CI.
```json
@@ -1182,7 +1144,7 @@ as an environment variable and _NOT_ as a builder option when running it in CI.
Read the docs on
[recording test results](http://on.cypress.io/recording-project-runs) to
-[Cypress Cloud](/guides/cloud/introduction) to learn more.
+[Cypress Cloud](/cloud/get-started/introduction) to learn more.
### Specifying a custom Cypress configuration file
@@ -1242,7 +1204,7 @@ Read our docs to learn more about speeding up test execution in CI via
As you write more and more end-to-end tests, you will find yourself wondering -
do I need to write more tests? Are there parts of the application still
untested? Are there parts of the application that perhaps are tested too much?
-This [code coverage guide](https://on.cypress.io/code-coverage) is an excellent
+This [code coverage guide](/app/tooling/code-coverage) is an excellent
resource to learn how to add code coverage.
### Questions or Issues?
@@ -1254,7 +1216,7 @@ to ask questions or report issues related to our Cypress Angular Schematic.
## Next Steps
For more information on how to create end-to-end tests with Cypress, be sure to
-check out [our official documentation here](/guides/overview/why-cypress).
+check out [our official documentation here](/app/get-started/why-cypress).
:::caution
diff --git a/docs/guides/end-to-end-testing/migration/selenium-to-cypress.mdx b/docs/app/guides/migration/selenium-to-cypress.mdx
similarity index 81%
rename from docs/guides/end-to-end-testing/migration/selenium-to-cypress.mdx
rename to docs/app/guides/migration/selenium-to-cypress.mdx
index a5524506ae..f97ab2aa0b 100644
--- a/docs/guides/end-to-end-testing/migration/selenium-to-cypress.mdx
+++ b/docs/app/guides/migration/selenium-to-cypress.mdx
@@ -1,32 +1,29 @@
---
-title: Migrating from Selenium to Cypress
-slug: /guides/end-to-end-testing/selenium-to-cypress
+title: 'Migrating from Selenium to Cypress: A Guide'
+description: Learn the advantages and limitations of Selenium and Cypress, strategies for migration, and how to integrate Cypress with your CI/CD pipeline.
+sidebar_label: Migrating from Selenium
---
+
+
+# Migrating from Selenium to Cypress
+
:::info
-## What you'll learn
+##### What you'll learn
-- Why migrate from Selenium to Cypress
-- How to migrate Selenium tests to Cypress
+- The advantages and limitations of Selenium and Cypress
+- Strategies and considerations for migration
+- How to migrate test cases to Cypress
+- How to integrate Cypress with your CI/CD pipeline
:::
-## Introduction
-
While both Selenium and Cypress are popular tools for web automation,
each framework possesses distinct strengths and weaknesses. For instance,
Cypress stands out as one of the easiest automation frameworks to begin with,
while Selenium boasts the status of being one of the oldest and most widely used frameworks.
-:::caution
-
-If you see any inaccuracies with this guide or feel like something has been
-misrepresented, please
-[start a discussion here](https://github.com/cypress-io/cypress/discussions/new?category=general).
-
-:::
-
Taking a closer look at Selenium WebDriver reveals its longevity and extensive library of
documentation and troubleshooting guides. Supported by an active community, Selenium benefits
from robust documentation across multiple languages including Java, JavaScript, Python, C#, and
@@ -34,14 +31,14 @@ Ruby. Its widespread adoption is further evidenced by its integration into vario
tools, underscoring its versatility in browser interaction.
A key differentiator of Cypress, not only from Selenium but also from other test automation frameworks,
-is its [unique approach](/guides/overview/key-differences#Architecture) of running tests
-inside an interactive browser rather than against one. This approach [minimizes flakiness](/guides/overview/key-differences#Flake-resistant)
+is its [unique approach](/app/get-started/why-cypress#Architecture) of running tests
+inside an interactive browser rather than against one. This approach [minimizes flakiness](/app/get-started/why-cypress#Flake-resistant)
and grants users greater control over both the framework and the application under test. Cypress's ability to wait for page loading without explicit
-declaration allows for patient execution until the application is fully ready. Additionally, Cypress simplifies test recording
+declaration allows for a pause in execution until application is fully ready. Additionally, Cypress simplifies test recording
without requiring complex configurations or setups, facilitating easy troubleshooting and bug
reporting with access to screenshots, videos, and time travel debugging.
-Furthermore, the addition of [Component Testing](/guides/component-testing/overview) to Cypress has fostered
+Furthermore, the addition of [Component Testing](/app/component-testing/get-started) to Cypress has fostered
[collaboration](https://www.cypress.io/blog/2023/01/26/what-cypress-component-testing-means-for-qa-teams) between testing and development teams,
enabling them to work with the same tools and language. This alignment streamlines the testing process and promotes
consistency and efficiency across teams.
@@ -61,40 +58,39 @@ minimizing flakiness and enhancing test reliability.
### 2. Ease of Setup
Unlike traditional test automation frameworks that require cumbersome setup processes, Cypress
-streamlines the setup with just two Node.js commands: ['npm install'](/guides/getting-started/installing-cypress#npm-install)
-and ['npx cypress open'](/guides/getting-started/opening-the-app#cypress-open).
-Within seconds, users can have a fully functional framework up and running. Since Cypress utilizes
+streamlines the setup with just two Node.js commands: ['npm install'](/app/get-started/install-cypress)
+and ['npx cypress open'](/app/get-started/open-the-app#cypress-open).
+Within seconds, users can have their first test up and running. Since Cypress utilizes
locally installed browsers, there's no need for complex configurations or additional installations.
### 3. Infinitely Expandable
Recognizing the diverse needs of web applications, Cypress offers extensibility through various
-[plugins](/plugins). These plugins, many of which are contributed by the
+[plugins](/app/plugins/plugins-list). These plugins, many of which are contributed by the
community, allow users to tailor their testing framework to specific project requirements, ensuring flexibility and scalability.
### 4. Strong Community Support
Cypress boasts a vibrant community that contributes plugins and prioritizes documentation.
With extensive documentation, support initiatives like the [Ambassador program](https://www.cypress.io/ambassadors), and a [Discord
-community](https://discord.com/invite/cypress) of over 10,000 testers and developers, Cypress users benefit from wealth of resources and
+community](https://discord.com/invite/cypress) of over 10,000 testers and developers, Cypress users benefit from a wealth of resources and
assistance, making it a highly supported testing framework.
### 5. Ease of Use
-Compared to Selenium, Cypress offers a more intuitive and user-friendly experience. Features like the [selector
-playground](/guides/core-concepts/cypress-app#Selector-Playground) and
-[built-in screenshots](/guides/guides/screenshots-and-videos) simplify test writing and
+Compared to Selenium, Cypress offers a more intuitive and user-friendly experience. Features like
+[Cypress Studio](/app/guides/cypress-studio) simplify test writing and
debugging, allowing users to focus on creating effective tests without the need for constant navigation between the test server and browser. This
-streamlined approach enhances productivity and accelerates the testing process. Cypress [Test Replay](/guides/cloud/test-replay), which provides
-the ability to time travel and interactively debug tests in your CI/CD pipeline, is not a capability that Selenium provides. While debugging is never the most enjoyable
-task in development, Cypress is here to assist us. With its clear and concise error messages and multitude of plugins for feedback,
-debugging has never been easier.
+streamlined approach enhances productivity and accelerates the testing process.
+
+Cypress [Test Replay](/cloud/features/test-replay), which provides
+the ability to time travel and interactively debug tests that ran in your CI/CD pipeline, is not a capability that Selenium provides.
With Cypress, testing becomes not only more reliable and efficient but also more enjoyable for developers and QA professionals alike.
## Evaluating Suitability for Migration
-In order for a migration to proceed smoothly, it is important to conduct a thorough analysis of the existing test cases
+In order for a migration to proceed smoothly, it's important to conduct a thorough analysis of the existing test cases
and framework functionality. This analysis serves as a cornerstone for determining the priority of test case migration since
not all test cases need to be migrated at once. Depending on the organization's needs, emphasis may be placed on high-priority cases rather
than quick wins. Additionally, it is essential to evaluate whether any business or organization-specific logic embedded within the framework
@@ -102,25 +98,19 @@ can be rebuilt or migrated to JavaScript or TypeScript.
If the current test automation framework employs the [Page Object Model](https://www.selenium.dev/documentation/test_practices/encouraged/page_object_models/),
it may be advantageous to start with simpler tasks before tackling more complex test cases. Beginning with low-hanging fruit allows for the migration
-of selectors and basic interactions, providing the test automation engineer or developer with a gradual introduction to the framework.
-This incremental approach facilitates faster migration of additional tests and reduces the complexity of larger, more intricate tests. Alternatively, if the
-current framework does not utilize the Page Object Model, selector migration will occur naturally as part of
-migrating the actual codebase.
+of selectors and basic interactions, providing you with a gradual introduction to the framework.
It's important to note that if the Selenium framework relies on XPath, migration will necessitate changing those selectors.
While the 'cypress-xpath' plugin remains functional, it is deprecated and may not be the optimal solution in the long term.
-Alternatively, this could present an opportune moment to adopt the Page Object Model methodology,
-streamlining test maintenance and enhancing readability.
-
## Getting started with Cypress
Installing and configuring Cypress is very easy and we have provided step-by-step guides to help you get started.
-You will first [install Cypress](/guides/getting-started/installing-cypress).
-You will then [open the Cypress application](/guides/getting-started/opening-the-app).
+- First [install Cypress](/app/get-started/install-cypress).
+- Then [open the Cypress app](/app/get-started/open-the-app).
-Check out our in-depth [E2E getting started guide](/guides/end-to-end-testing/writing-your-first-end-to-end-test).
+Check out our in-depth [E2E getting started guide](/app/end-to-end-testing/writing-your-first-end-to-end-test).
And now you're all set to start the migration.
@@ -146,13 +136,13 @@ both selectors and all possible page actions. It's crucial to engage in team dis
thereby avoiding surprises during the initial pull request.
Another critical consideration is whether the team intends to leverage
-[Cypress intercept functionality](/api/commands/intercept) to stub API calls.
+[`cy.intercept()`](/api/commands/intercept) to stub API calls.
While this approach reduces the need for end-to-end tests, it significantly increases the number of smaller tests.
For some teams, the heightened maintenance overhead may outweigh the benefits. However, stubbing API requests can diminish
backend dependencies and enhance framework stability.
In larger applications, locating specific tests within the framework can prove challenging. Therefore, establishing
-guidelines for [test organization](/guides/core-concepts/writing-and-organizing-tests) is essential for creating a maintainable framework. Some teams prefer organizing tests
+guidelines for [test organization](/app/core-concepts/writing-and-organizing-tests) is essential for creating a maintainable framework. Some teams prefer organizing tests
based on application functionality, while others opt for organization by webpage. While performance and functionality
remain unaffected, clear guidelines on test placement are imperative for framework maintainability.
@@ -168,7 +158,7 @@ developers are using, this could be a quick find and replace. For instance, in V
`vl-checkbox` while in Cypress this would be `.vl-checkbox`. This will allow you to quickly have Cypress tests that can
be used to test your application. This may also be an opportunity to review your tests to see how subject to change the
selectors are today. Cypress documents many best practices about how to write robust tests and the section on
-[selecting elements](/guides/references/best-practices#Selecting-Elements) is a great resource to review.
+[selecting elements](/app/core-concepts/best-practices#Selecting-Elements) is a great resource to review.
One of the most significant changes between Selenium and Cypress is the actual testing syntax.
While Selenium will run a class or different scenarios, Cypress will run every `it` in a `*.cy.js` file.
@@ -223,9 +213,9 @@ cy.get('#myButton').click()
Any wait until functionality that you have been using in Selenium is no longer required
-in Cypress. This functionality is [built in](/guides/core-concepts/retry-ability).
+in Cypress. This functionality is [built in](/app/core-concepts/retry-ability).
-The next vital part to migrate would be the [assertions](/guides/references/assertions). We can all agree assertions
+The next vital part to migrate would be the [assertions](/app/references/assertions). We can all agree assertions
are moderately vital to a test automation framework. The next piece of code is a
python Selenium assertion to validate if a button is visible. While it is possible
to add third-party libraries, the built-in assertions of Cypress can tackle a wide
@@ -245,20 +235,20 @@ Considering the easy and clear syntax of Cypress, transferring all the selectors
might take the longest. And while copying and pasting the selectors is definitely
an option, rewriting the selectors might be required to conform to the best practices.
-##### Multiple tabs
+### Multiple tabs
When you have the need to interact with multiple browser tabs in Cypress, an official plugin has been provided to accomplish this
goal. The [Puppeteer plugin](https://github.com/cypress-io/cypress/tree/develop/npm/puppeteer) utilizes Puppeteer's browser API
with one command within Cypress.
-##### File upload
+### File upload
Because Selenium cannot interact with the file upload dialog, it provides a way to upload files without opening the dialog. Cypress
provides support uploading files through the built-in [`.selectFile()`](/api/commands/selectfile) command. There are
[many options](https://www.cypress.io/blog/2022/01/19/uploading-files-with-selectfile) available to allow you to upload a single
file, multiple files, and even drag and drop in Cypress.
-##### GraphQL
+### GraphQL
Given the increasing prominence of GraphQL, the community has responded accordingly. Validating the contents of GraphQL
requests or responses is entirely feasible using Cypress's native intercept functionality. This plugin enhances both
@@ -320,18 +310,16 @@ table is generated, detailing the number of tests for each 'cy.js' file, in addi
tests with the run time of each specific 'cy.js' file. At the bottom of the table, a comprehensive summary displays the
total number of tests run, the duration of the run, and the counts of failed, passed, and skipped tests.
-```bash
-npx cypress run
-```
+
This would completely replace the Selenium step in your current CI/CD workflow.
-Learn more about [running Cypress tests in Continuous Integration](/guides/continuous-integration/introduction).
+Learn more about [running Cypress tests in Continuous Integration](/app/continuous-integration/overview).
### Cypress Cloud
The notable distinction in integration between Cypress and Selenium emerges when discussing
-[Cypress Cloud](/guides/cloud/introduction), a service built on the rich result data coming from tests run in the
+[Cypress Cloud](/cloud/get-started/introduction), a service built on the rich result data coming from tests run in the
open source application.
Cypress.io offers its tailored pipeline structure, meticulously designed to execute tests efficiently.
@@ -341,7 +329,7 @@ it would be remiss not to explore the potential benefits afforded by its feature
Some of the core features include:
-##### [Test Replay](/guides/cloud/test-replay)
+#### [Test Replay](/cloud/features/test-replay)
One of the major difficulties in troubleshooting headless testing is having to reproduce the failure in your local
environment in order to debug failures in CI. Cypress Cloud resolves this issue with Test Replay. Test Replay's
@@ -351,16 +339,16 @@ locally so you can swiftly get back to shipping valuable software for your users
leading up to crashes or failures by inspecting the DOM, network events, and console logs of your application under
test exactly as they ran in CI.
-##### [Parallelization](/guides/cloud/smart-orchestration/parallelization)
+#### [Parallelization](/cloud/features/smart-orchestration/parallelization)
To enhance testing efficiency further, Cypress Cloud offers a built-in solution for test parallelization. With a simple
toggle, tests can run in parallel, eliminating the need for complex configurations to run tests concurrently.
Cypress will assign each spec file to an available machine based on our
-[balance strategy](/guides/cloud/smart-orchestration/load-balancing#Balance-strategy).
+[balance strategy](/cloud/features/smart-orchestration/load-balancing#Balance-strategy).
Due to this balance strategy, the run order of the spec files is not guaranteed when parallelized.
-##### [Analytics and Reporting](/guides/cloud/analytics/overview)
+##### [Analytics and Reporting](/cloud/features/analytics/overview)
The last step in pipeline integration is reporting the results. While most pipelines can report if there is a failure,
precise numbers require a bit more configuration. One of the most popular plugins to show reports is
@@ -370,7 +358,7 @@ plugin can easily be integrated into most pipeline infrastructure, with the corr
But even without the mochawesome package, any pipeline infrastructure can register the error code (error code 1) if
there are test failures. And as soon as this error code is found, webhooks can trigger a notification in your medium of choice.
-Cypress Cloud can also serve as an automated pipeline integration, furnishing [built-in analytics and reporting capabilities](/guides/cloud/analytics/overview). This feature grants you visibility into metrics such as run duration,
+Cypress Cloud can also serve as an automated pipeline integration, furnishing [built-in analytics and reporting capabilities](/cloud/features/analytics/overview). This feature grants you visibility into metrics such as run duration,
flaky tests, and the slowest-performing tests, enabling comprehensive monitoring of test health at scale. Moreover, this
negates the necessity of adding another package or dependency, as Cypress Cloud seamlessly interacts with the tests.
diff --git a/docs/guides/guides/network-requests.mdx b/docs/app/guides/network-requests.mdx
similarity index 78%
rename from docs/guides/guides/network-requests.mdx
rename to docs/app/guides/network-requests.mdx
index f17d7d0852..db969299bb 100644
--- a/docs/guides/guides/network-requests.mdx
+++ b/docs/app/guides/network-requests.mdx
@@ -1,21 +1,24 @@
---
-title: Network Requests
+title: 'Network Requests: Cypress Guide'
+description: 'Strategies for testing network requests in Cypress, stubbing and waiting for network responses, and best practices for testing GraphQL queries and mutations.'
+sidebar_label: Network Requests
---
+
+
+# Network Requests
+
:::info
-## What you'll learn
+##### What you'll learn
-- How Cypress enables you to stub out the back end with
- [`cy.intercept()`](/api/commands/intercept)
-- What tradeoffs we make when we stub our network requests
-- How Cypress visualizes network management in the Command Log
-- How to use Aliases to refer back to requests and wait on them
-- How to write declarative tests that resist flake
+- Strategies for testing network requests in Cypress
+- How to stub and wait for network responses
+- Best practices for testing GraphQL queries and mutations
:::
-:::info
+:::tip
**Note:** If you're looking for a resource to make an HTTP request take a look
at [cy.request()](/api/commands/request)
@@ -165,7 +168,7 @@ tests predominately rely on server responses, and only stub network responses
to conveniently **create edge-case** or **hard-to-create application states**.
This practice allows the project to achieve full
-[code-coverage](/guides/tooling/code-coverage) for the front end _and back end_
+[code-coverage](/app/tooling/code-coverage) for the front end _and back end_
of the app, but this has also required creating intricate database seeding or
test data factory scripts that can generate appropriate data in compliance with
the business-logic of the app.
@@ -208,7 +211,7 @@ When you use [`cy.intercept()`](/api/commands/intercept) to define a route,
Cypress displays this under "Routes" in the Command Log.
@@ -271,7 +274,7 @@ responses.
:::info
This following section utilizes a concept known as
-[Aliasing](/guides/core-concepts/variables-and-aliases). If you're new to
+[Aliasing](/app/core-concepts/variables-and-aliases). If you're new to
Cypress you might want to check that out first.
:::
@@ -430,7 +433,7 @@ it('test', () => {
-->
@@ -523,6 +526,157 @@ console
cy.wait('@new-user').then(console.log)
```
+## Working with GraphQL
+
+The strategies below follow best known practices for waiting and asserting
+against GraphQL queries or mutations.
+
+Waiting and asserting on GraphQL API requests rely on matching a query or
+mutation name in the POST body.
+
+Using [cy.intercept()](/api/commands/intercept) we can override the response to
+a GraphQL query or mutation by declaring an intercept at the beginning of the
+test or closer to the expectation.
+
+### Alias multiple queries or mutations
+
+In the `beforeEach`, we will use [cy.intercept()](/api/commands/intercept) to
+capture all requests for a GraphQL endpoint (e.g. `/graphql`), use conditionals
+to match the query or mutation and set an alias for using `req.alias`.
+
+First, we'll create a set of utility functions to help match and alias our
+queries and mutations.
+
+```js
+// utils/graphql-test-utils.js
+
+// Utility to match GraphQL mutation based on the operation name
+export const hasOperationName = (req, operationName) => {
+ const { body } = req
+ return (
+ Object.prototype.hasOwnProperty.call(body, 'operationName') &&
+ body.operationName === operationName
+ )
+}
+
+// Alias query if operationName matches
+export const aliasQuery = (req, operationName) => {
+ if (hasOperationName(req, operationName)) {
+ req.alias = `gql${operationName}Query`
+ }
+}
+
+// Alias mutation if operationName matches
+export const aliasMutation = (req, operationName) => {
+ if (hasOperationName(req, operationName)) {
+ req.alias = `gql${operationName}Mutation`
+ }
+}
+```
+
+In our test file, we can import these utilities and use them to alias the
+queries and mutations for our tests in a `beforeEach`.
+
+```js
+// app.cy.js
+import { aliasQuery, aliasMutation } from '../utils/graphql-test-utils'
+
+context('Tests', () => {
+ beforeEach(() => {
+ cy.intercept('POST', 'http://localhost:3000/graphql', (req) => {
+ // Queries
+ aliasQuery(req, 'GetLaunchList')
+ aliasQuery(req, 'LaunchDetails')
+ aliasQuery(req, 'GetMyTrips')
+
+ // Mutations
+ aliasMutation(req, 'Login')
+ aliasMutation(req, 'BookTrips')
+ })
+ })
+ // ...
+})
+```
+
+### Expectations for Query or Mutation Results
+
+Expectations can be made against the response of an intercepted GraphQL query or
+mutation using [cy.wait()](/api/commands/wait).
+
+```js
+// app.cy.js
+import { aliasQuery } from '../utils/graphql-test-utils'
+
+context('Tests', () => {
+ beforeEach(() => {
+ cy.intercept('POST', 'http://localhost:3000/graphql', (req) => {
+ // Queries
+ aliasQuery(req, 'Login')
+
+ // ...
+ })
+ })
+
+ it('should verify login data', () => {
+ cy.wait('@gqlLoginQuery')
+ .its('response.body.data.login')
+ .should('have.property', 'id')
+ .and('have.property', 'token')
+ })
+})
+```
+
+### Modifying a Query or Mutation Response
+
+In the test below, the response is modified to test the UI for a single page of
+results.
+
+```js
+// app.cy.js
+import { hasOperationName, aliasQuery } from '../utils/graphql-test-utils'
+
+context('Tests', () => {
+ beforeEach(() => {
+ cy.intercept('POST', 'http://localhost:3000/graphql', (req) => {
+ // Queries
+ aliasQuery(req, 'GetLaunchList')
+
+ // ...
+ })
+ })
+
+ it('should not display the load more button on the launches page', () => {
+ cy.intercept('POST', 'http://localhost:3000/graphql', (req) => {
+ if (hasOperationName(req, 'GetLaunchList')) {
+ // Declare the alias from the initial intercept in the beforeEach
+ req.alias = 'gqlGetLaunchListQuery'
+
+ // Set req.fixture or use req.reply to modify portions of the response
+ req.reply((res) => {
+ // Modify the response body directly
+ res.body.data.launches.hasMore = false
+ res.body.data.launches.launches =
+ res.body.data.launches.launches.slice(5)
+ })
+ }
+ })
+
+ // Must visit after cy.intercept
+ cy.visit('/')
+
+ cy.wait('@gqlGetLaunchListQuery')
+ .its('response.body.data.launches')
+ .should((launches) => {
+ expect(launches.hasMore).to.be.false
+ expect(launches.length).to.be.lte(20)
+ })
+
+ cy.get('#launch-list').its('length').should('be.gte', 1).and('be.lt', 20)
+ cy.contains('button', 'Load More').should('not.exist')
+ })
+})
+```
+
## Command Log
By default, Cypress logs all `XMLHttpRequest`s and `fetch`es made by the
@@ -538,7 +692,7 @@ like:
-->
@@ -582,7 +736,7 @@ The Command Log will look like this:
-->
@@ -592,7 +746,7 @@ the right-hand side of the Command Log. If you mouse over the alias, you can see
more information about how the request was handled:
@@ -620,7 +774,7 @@ but the request was still fulfilled from the destination (filled indicator):
-->
@@ -635,7 +789,7 @@ request for `/users?limit=100` and opening Developer Tools, we can see the
following:
diff --git a/docs/app/guides/screenshots-and-videos.mdx b/docs/app/guides/screenshots-and-videos.mdx
new file mode 100644
index 0000000000..3d4545e01b
--- /dev/null
+++ b/docs/app/guides/screenshots-and-videos.mdx
@@ -0,0 +1,225 @@
+---
+title: 'Capture Screenshots and Videos: Cypress Guide'
+description: Capture screenshots and videos of your tests with Cypress and configure settings for them.
+sidebar_label: Screenshots & Videos
+---
+
+
+
+# Screenshots and Videos
+
+:::info
+
+##### What you'll learn
+
+- How to capture screenshots and videos
+- How to configure screenshot and video settings
+- How to delete videos for specs without failing or retried tests
+
+:::
+
+
+
+## Screenshots
+
+Cypress comes with the ability to take screenshots, whether you are running via
+`cypress open` or `cypress run`, even in CI.
+
+To take a manual screenshot you can use the
+[`cy.screenshot()`](/api/commands/screenshot) command.
+
+Additionally, Cypress will automatically capture screenshots when a failure
+happens during `cypress run`. Screenshots on failure are _not_ automatically
+taken during `cypress open`.
+
+Capturing of screenshots when a test fails can be turned off entirely by setting
+[`screenshotOnRunFailure`](/app/references/configuration#Screenshots) to
+`false` from within the
+[Cypress configuration](/app/references/configuration) or by setting
+`screenshotOnRunFailure` to `false` in the
+[Cypress.Screenshot.defaults()](/api/cypress-api/screenshot-api).
+
+Screenshots are stored in the
+[`screenshotsFolder`](/app/references/configuration#Screenshots) which is set
+to `cypress/screenshots` by default.
+
+Cypress clears any existing screenshots before `cypress run`. If you do not want
+to clear your screenshots folder before a run, you can set
+[`trashAssetsBeforeRuns`](/app/references/configuration#Screenshots) to
+`false`.
+
+## Videos
+
+
+
+Video recording is disabled by default, but can be turned on by setting
+[`video`](/app/references/configuration#Videos) to `true` from within your
+configuration.
+
+If enabled, Cypress records a video for each spec file when running tests during
+`cypress run`. Videos are _not_ recorded during `cypress open`.
+
+:::cypress-config-example
+
+```ts
+{
+ video: true
+}
+```
+
+:::
+
+Videos are stored in the
+[`videosFolder`](/app/references/configuration#Videos) which is set to
+`cypress/videos` by default.
+
+When using the `--record` flag while running your tests, videos are processed,
+compressed, and uploaded to [Cypress Cloud](/cloud/get-started/introduction) after
+every spec file runs, successful or not. To change this behavior to only process
+videos in the case that tests fail, see how to
+[delete videos for specs without failing or retried tests](/app/guides/screenshots-and-videos#Delete-videos-for-specs-without-failing-or-retried-tests).
+Deleting the video will cause the video to not be uploaded to Cypress Cloud.
+
+Cypress clears any existing videos before a `cypress run`. If you do not want to
+clear your videos folder before a run, you can set
+[`trashAssetsBeforeRuns`](/app/references/configuration#Videos) to `false`.
+
+### Video encoding
+
+After a video is recorded, Cypress encodes the video to a commonly digestable
+format. Part of this encoding process includes video compression.
+
+Compression is disabled by default, meaning this step will be skipped
+completely, so the file size of the video will be larger, but the encoding
+process is faster. Setting
+[`videoCompression`](/app/references/configuration#Videos) to `true` will
+coerce the video compression value to 32 Constant Rate Factor (CRF), which takes
+longer to process, but results in a smaller video.
+
+**Enabling compression**
+
+:::cypress-config-example
+
+```ts
+{
+ videoCompression: true
+}
+```
+
+:::
+
+If your spec files have a long run duration and
+[`videoCompression`](/app/references/configuration#Videos) is enabled, you
+might notice a time gap between a finished spec and a new spec starting during
+`cypress run`. During this time, Cypress is encoding the captured video and
+possibly uploading it to Cypress Cloud.
+
+**Change compression value from 32**
+
+:::cypress-config-example
+
+```ts
+{
+ videoCompression: 15
+}
+```
+
+:::
+
+In addition to enabling or disabling video compress, you can specify the CRF
+value used to compress the video. Here are some common scenarios:
+
+- If the machine is encoding the video slowly (which is often the case for
+ virtual machines that use less CPU cores), try increasing the CRF value.
+
+- If your videos are extremely low quality, try decreasing the CRF value.
+
+A lower `videoCompression` value will spend less time compressing and result in
+a bigger video file size and higher quality video.
+
+:::info
+
+If you are an FFmpeg pro and want to see all the settings and debug messages
+during the encoding, run Cypress with the following system environment variable:
+
+```shell
+DEBUG=cypress:server:video
+```
+
+:::
+
+### Control which videos to keep and upload to Cypress Cloud
+
+You may want to have more control over which videos you want to keep and upload
+to Cypress Cloud. Deleting videos after the run can save resource space on the
+machine as well as skip the time used to process, compress, and upload the video
+to [Cypress Cloud](/cloud/get-started/introduction).
+
+To only process videos in the case that a test fails, you can
+[delete videos for specs without failing or retried tests](/app/guides/screenshots-and-videos#Delete-videos-for-specs-without-failing-or-retried-tests),
+which will not upload the video of passed runs to Cypress Cloud.
+
+For more fine grained control, you can use Cypress's
+[`after:spec`](/api/node-events/after-spec-api) event listener that fires after each
+spec file is run and delete the video when certain conditions are met.
+
+### Delete videos for specs without failing or retried tests
+
+The example below shows how to delete the recorded video for specs that had no
+retry attempts or failures when using Cypress
+[test retries](/app/guides/test-retries).
+
+:::cypress-config-plugin-example
+
+```ts
+import fs from 'fs'
+```
+
+```ts
+on(
+ 'after:spec',
+ (spec: Cypress.Spec, results: CypressCommandLine.RunResult) => {
+ if (results && results.video) {
+ // Do we have failures for any retry attempts?
+ const failures = results.tests.some((test) =>
+ test.attempts.some((attempt) => attempt.state === 'failed')
+ )
+ if (!failures) {
+ // delete the video if the spec passed and no tests retried
+ fs.unlinkSync(results.video)
+ }
+ }
+ }
+)
+```
+
+:::
+
+## Now What?
+
+So you are capturing screenshots and recording videos of your test runs, now
+what?
+
+### Share Them With Your Team
+
+{/* Line breaks removed to prevent random br elements */}
+
+Something you can take advantage of today is
+[Cypress Cloud](/cloud/get-started/introduction): our companion enterprise service
+that stores your artifacts for you and lets you view them from any web browser,
+as well as share them with your team.
+
+### Visual Regression Test / Screenshot Diffing
+
+Another possibility is visual regression testing: comparing screenshots of past
+runs with the current run to ensure that nothing changed.
+[Read about how to implement visual testing.](/app/tooling/visual-testing)
+
+## See also
+
+- [After Screenshot API](/api/node-events/after-screenshot-api)
+- [Cypress.Screenshot](/api/cypress-api/screenshot-api)
+- [`cy.screenshot()`](/api/commands/screenshot)
+- [Cypress Cloud](/cloud/get-started/introduction)
+- [Test Replay](/cloud/features/test-replay)
+- [Visual Testing](/app/tooling/visual-testing)
diff --git a/docs/guides/guides/stubs-spies-and-clocks.mdx b/docs/app/guides/stubs-spies-and-clocks.mdx
similarity index 91%
rename from docs/guides/guides/stubs-spies-and-clocks.mdx
rename to docs/app/guides/stubs-spies-and-clocks.mdx
index 15ac867995..17b02ec27f 100644
--- a/docs/guides/guides/stubs-spies-and-clocks.mdx
+++ b/docs/app/guides/stubs-spies-and-clocks.mdx
@@ -1,23 +1,23 @@
---
-title: Stubs, Spies, and Clocks
+title: 'Stubs, Spies, and Clocks: Cypress Guide'
+description: Learn how to use `cy.stub()`, `cy.spy()`, and `cy.clock()` in Cypress to manipulate your application's behavior and time.
+sidebar_label: Stubs, Spies, and Clocks
---
+
+
+# Stubs, Spies, and Clocks
+
:::info
-## What you'll learn
+##### What you'll learn
-- Which libraries Cypress includes to provide typical testing functionality
-- How to use stubs for asserting that code was called but preventing it from
- executing
-- How to use spies for asserting that code was called without interfering with
- its execution
-- How to control time for deterministically testing code that is time-dependent
-- How Cypress improves and extends the included libraries
+- How to use `cy.stub()`, `cy.spy()`, and `cy.clock()`
+- Common scenarios for using stubs, spies, and clocks
+- How to use assertions with stubs and spies
:::
-## Capabilities
-
Cypress comes built in with the ability to stub and spy with
[`cy.stub()`](/api/commands/stub), [`cy.spy()`](/api/commands/spy) or modify
your application's time with [`cy.clock()`](/api/commands/clock) - which lets
@@ -46,7 +46,7 @@ explanations.
Example test!
-[Check out our example recipe testing spying, stubbing, and time](/examples/recipes#Stubbing-and-spying)
+[Check out our example recipe testing spying, stubbing, and time](/app/references/recipes#Stubbing-and-spying)
:::
@@ -289,6 +289,4 @@ For instance we automatically display:
- [Spies, stubs, and clocks](https://example.cypress.io/commands/spies-stubs-clocks)
examples
-- [Stub navigator API in end-to-end tests](https://glebbahmutov.com/blog/stub-navigator-api/)
-- [Shrink the Untestable Code With App Actions And Effects](https://www.cypress.io/blog/2019/02/28/shrink-the-untestable-code-with-app-actions-and-effects/)
- [Testing periodic network requests with cy.intercept and cy.clock combination](https://www.cypress.io/blog/2021/02/23/cy-intercept-and-cy-clock/)
diff --git a/docs/app/guides/test-retries.mdx b/docs/app/guides/test-retries.mdx
new file mode 100644
index 0000000000..234ee31273
--- /dev/null
+++ b/docs/app/guides/test-retries.mdx
@@ -0,0 +1,386 @@
+---
+title: 'Test Retries: Cypress Guide'
+description: Learn how to configure test retries in Cypress to help detect test flakiness and continuous integration (CI) build failures.
+sidebar_label: Test Retries
+---
+
+
+
+# Test Retries
+
+:::info
+
+##### What you'll learn
+
+- How test retries work
+- How to configure test retries
+- How to use test retries with screenshots and videos
+- How to use test retries with Cypress Cloud
+
+:::
+
+Cypress excels at testing complex systems. However, there are
+still behaviors that are hard to verify and make tests flaky (i.e., unreliable)
+and fail due to unpredictable conditions. Some common race
+conditions that could result in unreliable tests include:
+
+- Animations
+- API calls
+- Test server / database availability
+- Resource dependencies availability
+- Network issues
+
+With test retries, Cypress is able to retry failed tests to help [detect test
+flakiness](/cloud/features/flaky-test-management#Flake-Detection) and continuous integration (CI) build failures. By doing so, this will
+save your team valuable time and resources so you can focus on what matters most
+to you.
+
+## How It Works
+
+:::info
+
+The [experimental test retries](/app/references/experiments#Experimental-Test-Retries) feature introduced in Cypress 13.4.0 offers more options for [detecting flaky tests](/cloud/features/flaky-test-management#Flake-Detection). Experimental retries give you control over the conditions of when a test should have a status of pass or fail.
+
+:::
+
+By default, tests will not retry when they fail. You'll need to
+[enable test retries in your configuration](#Configure-Test-Retries) to use this
+feature.
+
+:::cypress-config-example
+
+```ts
+{
+ retries: 2
+}
+```
+
+:::
+
+Once test retries are enabled, tests can be configured to have X number of retry
+attempts. For example, if test retries have been configured with `2` retry
+attempts, Cypress will retry tests up to 2 additional times (for a total of 3
+attempts) before potentially being marked as a failed test.
+
+When each test is run again, the following
+[hooks](/app/core-concepts/writing-and-organizing-tests#Hooks) will be re-run
+also:
+
+- `beforeEach`
+- `afterEach`
+
+However, failures in `before` and `after` hooks will not trigger a retry.
+
+### The following is a detailed step-by-step example of how test retries works:
+
+Assuming we have configured test retries with **2** retry attempts (for a total of
+3 attempts), here is how the tests might run:
+
+1. A test runs for the first time. If the test passes, Cypress will move forward
+ with any remaining tests as usual.
+
+2. If the test fails, Cypress will tell you
+ that the first attempt failed and will attempt to run the test a second time.
+
+3. If the test passes after the
+ second attempt, Cypress will continue with any remaining tests.
+
+4. If the test fails a second time, Cypress
+ will make the final third attempt to re-run the test.
+
+5. If the test fails a third time, Cypress
+ will mark the test as failed and then move on to run any remaining tests.
+
+
+
+The following is a screen capture of what test retries looks like on the same
+failed test when run via [cypress run](/app/references/command-line#cypress-run).
+
+
+
+During [cypress open](/app/references/command-line#cypress-open) you'll be able
+to see the number of attempts made in the
+[Command Log](/app/core-concepts/open-mode#Command-Log) and expand each
+attempt for review and debugging if desired.
+
+## Configure Test Retries
+
+### Global Configuration
+
+Typically you will want to define different retry attempts for `cypress run`
+versus `cypress open`. You can configure this in the
+[Cypress configuration](/app/references/configuration#Global)
+by passing the `retries` option an object with the following options:
+
+- `runMode` allows you to define the number of test retries when running
+ `cypress run`
+- `openMode` allows you to define the number of test retries when running
+ `cypress open`
+
+:::cypress-config-example
+
+```js
+{
+ retries: {
+ // Configure retry attempts for `cypress run`
+ // Default is 0
+ runMode: 2,
+ // Configure retry attempts for `cypress open`
+ // Default is 0
+ openMode: 0
+ }
+}
+```
+
+:::
+
+#### Configure retry attempts for all modes
+
+If you want to configure the retry attempts for all tests run in both
+`cypress run` and `cypress open`, you can configure this in the
+[Cypress configuration](/app/references/configuration#Global)
+by defining the `retries` property and setting the desired number of retries.
+
+:::cypress-config-example
+
+```jsx
+{
+ retries: 1
+}
+```
+
+:::
+
+### Custom Configurations
+
+#### Individual Test(s)
+
+If you want to configure retry attempts on a specific test, you can set this by
+using the
+[test's configuration](/app/core-concepts/writing-and-organizing-tests#Test-Configuration).
+
+```jsx
+// Customize retry attempts for an individual test
+describe('User sign-up and login', () => {
+ // `it` test block with no custom configuration
+ it('should redirect unauthenticated user to sign-in page', () => {
+ // ...
+ })
+
+ // `it` test block with custom configuration
+ it(
+ 'allows user to login',
+ {
+ retries: {
+ runMode: 2,
+ openMode: 1,
+ },
+ },
+ () => {
+ // ...
+ }
+ )
+})
+```
+
+#### Test Suite(s)
+
+If you want to configure try attempts for a suite of tests, you can do this by
+setting the suite's configuration.
+
+```jsx
+// Customizing retry attempts for a suite of tests
+describe(
+ 'User bank accounts',
+ {
+ retries: {
+ runMode: 2,
+ openMode: 1,
+ },
+ },
+ () => {
+ // The per-suite configuration is applied to each test
+ // If a test fails, it will be retried
+ it('allows a user to view their transactions', () => {
+ // ...
+ })
+
+ it('allows a user to edit their transactions', () => {
+ // ...
+ })
+ }
+)
+```
+
+You can find more information about custom configurations here:
+[Test Configuration](/app/references/configuration#Test-Configuration)
+
+## Screenshots
+
+When a test retries, Cypress will continue to take screenshots for each failed
+attempt or [cy.screenshot()](/api/commands/screenshot) and suffix each new
+screenshot with `(attempt n)`, corresponding to the current retry attempt
+number.
+
+With the following test code, you would see the below screenshot filenames when
+all 3 attempts fail:
+
+:::visit-mount-example
+
+```js
+describe('User Login', () => {
+ it('displays login errors', () => {
+ -{cy.visit('/')::cy.mount( )}-
+ cy.screenshot('user-login-errors')
+ // ...
+ })
+})
+```
+
+:::
+
+```js
+// screenshot filename from cy.screenshot() on 1st attempt
+'user-login-errors.png'
+// screenshot filename on 1st failed attempt
+'user-login-errors (failed).png'
+// screenshot filename from cy.screenshot() on 2nd attempt
+'user-login-errors (attempt 2).png'
+// screenshot filename on 2nd failed attempt
+'user-login-errors (failed) (attempt 2).png'
+// screenshot filename from cy.screenshot() on 3rd attempt
+'user-login-errors (attempt 3).png'
+// screenshot filename on 3rd failed attempt
+'user-login-errors (failed) (attempt 3).png'
+```
+
+## Videos
+
+You can use Cypress's [`after:spec`](/api/node-events/after-spec-api) event listener
+that fires after each spec file is run to delete the recorded video for specs
+that had no retry attempts or failures. Deleting passing and non-retried videos
+after the run can save resource space on the machine as well as skip the time
+used to process, compress, and upload the video to
+[Cypress Cloud](/cloud/get-started/introduction).
+
+### Only upload videos for specs with failing or retried tests
+
+The example below shows how to delete the recorded video for specs that had no
+retry attempts or failures when using Cypress test retries.
+
+:::cypress-config-plugin-example
+
+```ts
+// need to install these dependencies
+// npm install lodash del --save-dev
+import _ from 'lodash'
+import del from 'del'
+```
+
+```ts
+on('after:spec', (spec, results) => {
+ if (results && results.video) {
+ // Do we have failures for any retry attempts?
+ const failures = _.some(results.tests, (test) => {
+ return _.some(test.attempts, { state: 'failed' })
+ })
+ if (!failures) {
+ // delete the video if the spec passed and no tests retried
+ return del(results.video)
+ }
+ }
+})
+```
+
+:::
+
+## Cypress Cloud
+
+If you are using [Cypress Cloud](/cloud/get-started/introduction), information
+related to test retries is displayed on the Test Results tab for a run.
+Selecting the Flaky filter will show tests that retried and then passed during
+the run.
+
+These tests are also indicated with a "Flaky" badge on the Latest Runs page and
+Test Results tab on the Run Details page.
+
+
+
+Clicking on a Test Result will open the Test Case History screen. This
+demonstrates the number of failed attempts, the screenshots and/or videos of
+failed attempts, and the error for failed attempts.
+
+
+
+You can also see the Flaky Rate for a given test.
+
+
+
+For a comprehensive view of how flake is affecting your overall test suite, you
+can review the
+[Flake Detection](/cloud/features/flaky-test-management#Flake-Detection) and
+[Flake Alerting](/cloud/features/flaky-test-management#Flake-Alerting) features
+highlighted in the Test Flake Management Guide.
+
+
+
+## Frequently Asked Questions (FAQs)
+
+### Will retried tests be counted as more than one test result in my billing?
+
+No. Tests recorded during `cypress run` with the `--record` flag will be counted
+the same with or without test retries.
+
+We consider each time the `it()` function is called to be a single test for
+billing purposes. The test retrying will not count as extra test results in your
+billing.
+
+You can always see how many tests you've recorded from your organization's
+Billing & Usage page within [Cypress Cloud](https://on.cypress.io/cloud).
+
+### Can I access the current attempt counter from the test?
+
+Yes, although ordinarily you would not have to, since this is a low-level
+detail. But if you want to use the current attempt number, you can use
+[`Cypress.currentRetry`](/api/cypress-api/currentretry). If you want to
+determine the total allowed attempts you can do the following:
+
+```javascript
+it('does something differently on retry', { retries: 3 }, () => {
+ // Cypress.currentRetry returns the current test retry count
+ const attempt = Cypress.currentRetry
+ // cy.state('runnable') returns the current test object
+ // we can grab the total allowed attempts from its properties
+ const retries = cy.state('runnable')._retries
+ // use the "attempt" and "retries" values somehow
+})
+```
+
+The above `attempt` variable will have values 0 through 3 (the first default
+test execution plus three allowed retries). The `retries` constant in this case
+is always 3.
+
+**Tip:** Cypress [bundles Lodash](/api/utilities/_) library. Use its helper
+methods to safely access a property of an object. Let's make sure the function
+supports different Cypress versions by falling back to the default values.
+
+```javascript
+it('does something differently on retry', { retries: 3 }, () => {
+ // _.get: if the object or property is missing use the provided default value
+ const attempt = Cypress.currentRetry
+ const retries = Cypress._.get(cy.state('runnable'), '_retries', 0)
+ // use the "attempt" and "retries" values somehow
+})
+```
diff --git a/docs/app/plugins/_category_.json b/docs/app/plugins/_category_.json
new file mode 100644
index 0000000000..6239bf813f
--- /dev/null
+++ b/docs/app/plugins/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Plugins",
+ "position": 95
+}
diff --git a/docs/app/plugins/plugins-guide.mdx b/docs/app/plugins/plugins-guide.mdx
new file mode 100644
index 0000000000..87603e970e
--- /dev/null
+++ b/docs/app/plugins/plugins-guide.mdx
@@ -0,0 +1,72 @@
+---
+title: 'How to use Cypress Plugins'
+description: 'Learn how to install and use Cypress plugins.'
+sidebar_label: 'How to use Plugins'
+sidebar_position: 10
+---
+
+
+
+# How to use Cypress Plugins
+
+:::info
+
+##### What you'll learn
+
+- How to install a plugin
+- How to use a plugin
+
+:::
+
+Cypress maintains a curated list of plugins created by us and the community.
+Plugins from our [official list](/app/plugins/plugins-list) are npm modules. This enables them to
+be versioned and updated separately without needing to update Cypress itself.
+
+You can install any published plugin using npm:
+
+
+
+
+```shell
+npm install --save-dev
+```
+
+
+
+
+
+```shell
+yarn add --dev
+```
+
+
+
+
+
+```shell
+pnpm add --save-dev
+```
+
+
+
+
+## Using a plugin
+
+Add your plugin to the
+[`setupNodeEvents`](/app/references/configuration#setupNodeEvents)
+function in the [Cypress configuration](/app/references/configuration). Please follow any additional instructions provided by the plugin's documentation.
+Here's an example of what this might look like:
+
+:::cypress-config-plugin-example
+
+```ts
+// bind to the event we care about
+on('', (arg1, arg2) => {
+ // plugin stuff here
+})
+```
+
+:::
+
+For information on writing plugins, please check out our
+[Node Events Overview](/api/node-events/overview).
diff --git a/docs/app/plugins/plugins-list.mdx b/docs/app/plugins/plugins-list.mdx
new file mode 100644
index 0000000000..24f2ea5051
--- /dev/null
+++ b/docs/app/plugins/plugins-list.mdx
@@ -0,0 +1,28 @@
+---
+title: 'List of Cypress Plugins'
+sidebar_label: List of Plugins
+description: A list of Cypress plugins created by Cypress and the community to extend the behavior of Cypress.
+sidebar_position: 20
+hide_table_of_contents: true
+---
+
+
+
+# Cypress Plugins
+
+import PluginsList from '@site/src/components/plugins-list'
+
+Plugins provide a way to support and extend the behavior of Cypress. Follow
+these instructions to
+[submit your own plugin](https://github.com/cypress-io/cypress-documentation/blob/master/CONTRIBUTING.md#adding-plugins).
+
+:::info
+
+Looking for the API docs?
+
+Check out our [How to use Plugins](/app/plugins/plugins-guide) or our
+[Node Events Overview](/api/node-events/overview) for writing a plugin.
+
+:::
+
+
diff --git a/docs/guides/references/_category_.json b/docs/app/references/_category_.json
similarity index 100%
rename from docs/guides/references/_category_.json
rename to docs/app/references/_category_.json
diff --git a/docs/app/references/advanced-installation.mdx b/docs/app/references/advanced-installation.mdx
new file mode 100644
index 0000000000..a26348dbad
--- /dev/null
+++ b/docs/app/references/advanced-installation.mdx
@@ -0,0 +1,500 @@
+---
+title: 'Advanced Installation Instructions for Cypress'
+description: 'Learn how to install Cypress with a custom binary, skip the installation of the Cypress binary, change the Cypress binary cache location or download URL and more'
+sidebar_label: 'Advanced Installation'
+---
+
+
+
+# Advanced Installation
+
+:::info
+
+##### What you'll learn
+
+- How to install Cypress with a custom binary
+- How to skip the installation of the Cypress binary
+- How to change the Cypress binary cache location or download URL
+- How to use a custom certificate authority (CA)
+- How to opt out of sending exception data to Cypress
+
+:::
+
+## Environment variables
+
+| Name | Description |
+| --------------------------------- | ---------------------------------------------------------------------------------------------- |
+| `CYPRESS_INSTALL_BINARY` | [Destination of Cypress binary that's downloaded and installed](#Install-binary) |
+| `CYPRESS_CONNECT_RETRY_THRESHOLD` | Overrides the maximum number of retries when connecting to a browser. The default value is 62. |
+| `CYPRESS_DOWNLOAD_MIRROR` | [Downloads the Cypress binary through a mirror server](#Mirroring) |
+| `CYPRESS_DOWNLOAD_PATH_TEMPLATE` | [Allows generating a custom URL to download the Cypress binary from](#Download-path-template) |
+| `CYPRESS_CACHE_FOLDER` | [Changes the Cypress binary cache location](#Binary-cache) |
+| `CYPRESS_RUN_BINARY` | [Location of Cypress binary at run-time](#Run-binary) |
+| `CYPRESS_VERIFY_TIMEOUT` | Overrides the timeout duration for the `verify` command. The default value is 30000. |
+| `CYPRESS_SKIP_VERIFY` | Skips the [`verify` command](command-line#cypress-verify) when `true` |
+| ~~CYPRESS_SKIP_BINARY_INSTALL~~ | removed use `CYPRESS_INSTALL_BINARY=0` instead |
+| ~~CYPRESS_BINARY_VERSION~~ | removed use `CYPRESS_INSTALL_BINARY` instead |
+
+## Proxy configuration
+
+System [proxy properties](/app/references/proxy-configuration) `http_proxy`, `https_proxy` and `no_proxy` are respected
+for the download of the Cypress binary.
+You can also use the npm properties
+`npm_config_proxy` and `npm_config_https_proxy`.
+Those have lower priority, so
+they will only be used if the system properties are being resolved to not use a proxy.
+
+## Install binary
+
+Using the `CYPRESS_INSTALL_BINARY` environment variable, you can control how
+Cypress is installed. To override what is installed, you set
+`CYPRESS_INSTALL_BINARY` alongside the `npm install` command.
+
+**This is helpful if you want to:**
+
+- Install a version different than the default npm package.
+ ```shell
+ CYPRESS_INSTALL_BINARY=13.7.0 npm install cypress@13.7.1
+ ```
+- Specify an external URL (to bypass a corporate firewall).
+ ```shell
+ CYPRESS_INSTALL_BINARY=https://company.domain.com/cypress.zip npm install cypress
+ ```
+- Specify a file to install locally instead of using the internet.
+ ```shell
+ CYPRESS_INSTALL_BINARY=/local/path/to/cypress.zip npm install cypress
+ ```
+
+In all cases, the fact that the binary was installed from a custom location _is
+not saved in your `package.json` file_. Every repeated installation needs to use
+the same environment variable to install the same binary.
+
+### Skipping installation
+
+You can also force Cypress to skip the installation of the binary application by
+setting `CYPRESS_INSTALL_BINARY=0`. This could be useful if you want to prevent
+Cypress from downloading the Cypress binary at the time of `npm install`.
+
+```shell
+CYPRESS_INSTALL_BINARY=0 npm install
+```
+
+Now Cypress will skip its install phase once the npm module is installed.
+
+### Troubleshoot installation
+
+The Cypress [Life Cycle script](https://docs.npmjs.com/cli/using-npm/scripts) `postinstall` installs the Cypress binary after the [Cypress npm module](https://www.npmjs.com/package/cypress) has been installed. Package managers however execute the `postinstall` step in the background by default which hides the debug output. Execute `cypress install` separately with [debug logging](./troubleshooting#Log-sources) enabled to view the debug logs.
+
+
+
+
+```shell
+CYPRESS_INSTALL_BINARY=0 npm install cypress --save-dev
+DEBUG=cypress:cli* npx cypress install
+```
+
+
+
+
+```shell
+CYPRESS_INSTALL_BINARY=0 yarn add cypress --dev
+DEBUG=cypress:cli* yarn cypress install
+```
+
+
+
+
+```shell
+CYPRESS_INSTALL_BINARY=0 pnpm add --save-dev cypress
+DEBUG=cypress:cli* pnpm cypress install
+```
+
+
+
+
+To set environment variables `CYPRESS_INSTALL_BINARY` and `DEBUG` in Windows CMD or PowerShell terminals, refer to examples in [Print DEBUG Logs](./troubleshooting#Print-DEBUG-logs).
+
+In Continuous Integration (CI) use the following commands to display debug logs from the Cypress binary installation:
+
+
+
+
+```shell
+DEBUG=cypress:cli* npm ci --foreground-scripts
+```
+
+
+
+
+```shell
+yarn install --frozen-lockfile --ignore-scripts # Yarn v1 Classic only
+DEBUG=cypress:cli* yarn cypress install
+```
+
+
+
+
+```shell
+pnpm install --frozen-lockfile --ignore-scripts
+DEBUG=cypress:cli* pnpm cypress install
+```
+
+
+
+
+## Binary cache
+
+Cypress downloads the matching Cypress binary to the global
+system cache, so that the binary can be shared between projects. By default,
+global cache folders are:
+
+- **MacOS**: `~/Library/Caches/Cypress`
+- **Linux**: `~/.cache/Cypress`
+- **Windows**: `/AppData/Local/Cypress/Cache`
+
+To override the default cache folder, set the environment variable
+`CYPRESS_CACHE_FOLDER`.
+
+```shell
+CYPRESS_CACHE_FOLDER=~/Desktop/cypress_cache npm install
+```
+
+```shell
+CYPRESS_CACHE_FOLDER=~/Desktop/cypress_cache npm run test
+```
+
+Cypress will automatically replace the `~` with the user's home directory. So
+you can pass `CYPRESS_CACHE_FOLDER` as a string from CI configuration files, for
+example:
+
+```yml
+environment:
+ CYPRESS_CACHE_FOLDER: '~/.cache/Cypress'
+```
+
+See also
+[Continuous Integration - Caching](/app/continuous-integration/overview#Caching)
+section in the documentation.
+
+:::caution
+
+`CYPRESS_CACHE_FOLDER` will need to exist every time cypress is launched. To
+ensure this, consider exporting this environment variable. For example, in a
+`.bash_profile` (MacOS, Linux), or using `RegEdit` (Windows).
+
+:::
+
+## Run binary
+
+Setting the environment variable `CYPRESS_RUN_BINARY` overrides where the npm
+module finds the Cypress binary.
+
+`CYPRESS_RUN_BINARY` should be a path to an already unzipped Cypress binary executable.
+The Cypress commands [open](./command-line#cypress-open), [run](./command-line#cypress-run) and [verify](command-line#cypress-verify)
+will then launch the provided binary.
+
+The following example [cypress run](./command-line#cypress-run) commands assume that you have first
+downloaded the Cypress binary to the default `Downloads` directory of your operating system.
+
+Depending on how you then unzip the downloaded Cypress binary `cypress.zip` file,
+using a CLI command or alternatively a GUI interface,
+the directory structure may include one additional top-level directory named `cypress`,
+which you may need to add to the path defined by `CYPRESS_RUN_BINARY`.
+
+If available, use the following to avoid the additional top-level directory level:
+
+```shell
+unzip -q cypress
+```
+
+:::note
+
+The examples below are for npm.
+If you are using Yarn or pnpm as package manager, replace `npx` with `yarn` or `pnpm` as appropriate.
+See [How to run commands](./command-line.mdx#How-to-run-commands).
+
+:::
+
+### Mac
+
+```shell
+CYPRESS_RUN_BINARY=~/Downloads/Cypress.app/Contents/MacOS/Cypress npx cypress run
+```
+
+### Linux
+
+```shell
+CYPRESS_RUN_BINARY=~/Downloads/Cypress/Cypress npx cypress run
+```
+
+### Windows
+
+```shell
+CYPRESS_RUN_BINARY=~/Downloads/Cypress/Cypress.exe npx cypress run
+```
+
+:::tip
+
+Cypress assumes that `CYPRESS_RUN_BINARY` points to a writeable directory structure so that it can save and re-use
+the results of verifying the Cypress binary.
+If you encounter a `permission denied` failure message from [cypress verify](./command-line.mdx#cypress-verify),
+you may be able to work around the failure by setting the environment variable `CYPRESS_SKIP_VERIFY` to `true`.
+
+:::
+
+## Download URLs
+
+If you want to download a specific Cypress version for a given platform
+(Operating System), you can get it from our CDN.
+
+The download server URL is `https://download.cypress.io`.
+
+We currently have the following downloads available:
+
+- Windows 64-bit (`?platform=win32&arch=x64`)
+- Linux 64-bit (`?platform=linux`)
+- macOS 64-bit (`?platform=darwin`)
+
+Here are the available download URLs:
+
+See
+[https://download.cypress.io/desktop.json](https://download.cypress.io/desktop.json)
+for all available platforms.
+
+| Method | URL | Description |
+| ------ | ------------------------------------- | -------------------------------------------------------------------------- |
+| `GET` | `/desktop` | Download Cypress at latest version (platform auto-detected) |
+| `GET` | `/desktop.json` | Returns JSON containing latest available CDN destinations |
+| `GET` | `/desktop?platform=p&arch=a` | Download Cypress for a specific platform and/or architecture |
+| `GET` | `/desktop/:version` | Download Cypress with a specified version |
+| `GET` | `/desktop/:version?platform=p&arch=a` | Download Cypress with a specified version and platform and/or architecture |
+
+**Example of downloading Cypress `12.17.4` for Windows 64-bit:**
+
+```text
+https://download.cypress.io/desktop/12.17.4?platform=win32&arch=x64
+```
+
+## Mirroring
+
+If you choose to mirror the entire Cypress download site, you can specify
+`CYPRESS_DOWNLOAD_MIRROR` to set the download server URL from
+`https://download.cypress.io` to your own mirror.
+
+For example:
+
+```shell
+CYPRESS_DOWNLOAD_MIRROR="https://www.example.com/" cypress install
+```
+
+Cypress will then attempt to download a binary with this format:
+`https://www.example.com/desktop/:version?platform=p`
+
+## Download path template
+
+You can use the `CYPRESS_DOWNLOAD_PATH_TEMPLATE`
+environment variable to download the Cypress binary from a custom URL that's
+generated based on endpoint, version, platform and architecture.
+
+**The following replacements are supported:**
+
+- `${endpoint}` is replaced with `https://download.cypress.io/desktop/:version`.
+ If `CYPRESS_DOWNLOAD_MIRROR` is set, its value is used instead of
+ `https://download.cypress.io` (note that the `/desktop` remains!)
+- `${platform}` is replaced with the platform the installation is running on
+ (e.g. `win32`, `linux`, `darwin`)
+- `${arch}` is replaced with the architecture the installation is running on
+ (e.g. `x64`, `arm64`)
+- Starting with Cypress 10.6.0, `${version}` is replaced with the version number
+ that's being installed (e.g. `10.11.0`)
+
+**Examples:**
+
+To install the binary from a download mirror that matches the exact file
+structure of `https://cdn.cypress.io` (works for Cypress 9.3.0 or newer):
+
+```shell
+export CYPRESS_DOWNLOAD_MIRROR=https://cypress-download.local
+export CYPRESS_DOWNLOAD_PATH_TEMPLATE='${endpoint}/${platform}-${arch}/cypress.zip'
+# Example of a resulting URL: https://cypress-download.local/desktop/10.11.0/linux-x64/cypress.zip
+```
+
+To install the binary from a download server with a custom file structure (works
+for Cypress 10.6.0 or newer):
+
+```shell
+export CYPRESS_DOWNLOAD_PATH_TEMPLATE='https://software.local/cypress/$%7Bplatform%7D/$%7Barch%7D/$%7Bversion%7D/cypress.zip'
+# Example of a resulting URL: https://software.local/cypress/linux/x64/10.11.0/cypress.zip
+```
+
+To define `CYPRESS_DOWNLOAD_PATH_TEMPLATE` in `.npmrc`, put a backslash before
+every `$` (works for Cypress 9.5.3 or newer):
+
+```ini
+CYPRESS_DOWNLOAD_PATH_TEMPLATE=\${endpoint}/\${platform}-\${arch}/cypress.zip
+```
+
+## Using a custom certificate authority (CA)
+
+Cypress can be configured to use the `ca` and `cafile` options from your npm
+config file to download the Cypress binary.
+
+For example, to use the CA at `/home/person/certs/ca.crt` when downloading
+Cypress, add the following to your `.npmrc`:
+
+```shell
+cafile=/home/person/certs/ca.crt
+```
+
+If neither `cafile` nor `ca` are set, Cypress looks at the system environment
+variable `NODE_EXTRA_CA_CERTS` and uses the corresponding certificate(s) as an
+extension for the trusted certificate authority when downloading the Cypress
+binary.
+
+Note that the npm config is used as a replacement, and the node environment
+variable is used as an extension.
+
+## Opt out of sending exception data to Cypress
+
+When an exception is thrown regarding Cypress, we send along the exception data
+to `https://api.cypress.io`. We solely use this information to help develop a
+better product.
+
+If you would like to opt out of sending any exception data to Cypress, you can
+do so by setting `CYPRESS_CRASH_REPORTS=0` in your system environment variables.
+
+### Opt out on Linux or macOS
+
+To opt out of sending exception data on Linux or macOS, run the following
+command in a terminal before installing Cypress:
+
+```shell
+export CYPRESS_CRASH_REPORTS=0
+```
+
+To make these changes permanent, you can add this command to your shell's
+`~/.profile` (`~/.zsh_profile`, `~/.bash_profile`, etc.) to run them on every
+login.
+
+### Opt out on Windows
+
+To opt out of sending exception data on Windows, run the following command in
+the Command Prompt before installing Cypress:
+
+```shell
+set CYPRESS_CRASH_REPORTS=0
+```
+
+To accomplish the same thing in PowerShell:
+
+```shell
+$env:CYPRESS_CRASH_REPORTS = "0"
+```
+
+To save the `CYPRESS_CRASH_REPORTS` variable for use in all new shells, use
+`setx`:
+
+```shell
+setx CYPRESS_CRASH_REPORTS 0
+```
+
+## Opt out of Cypress commercial messaging
+
+Cypress may occasionally display messages in your CI logs related to our
+commercial offerings and how they could benefit you during your workflows.
+
+If you would like to opt out of all commercial messaging, you can do so by
+setting `CYPRESS_COMMERCIAL_RECOMMENDATIONS=0` in your system environment
+variables.
+
+## Install pre-release version
+
+If you would like to install a pre-release version of Cypress to test out
+functionality that has not yet been released, here is how:
+
+1. Open up the list of commits to `develop` on the Cypress repo:
+ [https://github.com/cypress-io/cypress/commits/develop](https://github.com/cypress-io/cypress/commits/develop)
+2. Find the commit that you would like to install the pre-release version of.
+ Click the comment icon (highlighted in red below):
+
+3. You should see several comments from the `cypress-bot` user with instructions
+ for installing Cypress pre-releases. Pick the one that corresponds to your
+ operating system and CPU architecture, and follow the instructions there to
+ install the pre-release.
+
+Cypress pre-releases are only available for 60 days after they are built. Do not
+rely on these being available past 60 days.
+
+## Windows Subsystem for Linux
+
+Cypress requires an [X-server](https://en.wikipedia.org/wiki/X.Org_Server) (X11) to display the Cypress UI from a Windows Subsystem for Linux installation. This requirement is met by current versions of Windows Subsystem for Linux (WSL2) with X11 support being included through Windows Subsystem for Linux GUI (WSLg).
+
+Refer to [GitHub: Windows Subsystem for Linux GUI (WSLg)](https://github.com/microsoft/wslg) for installation instructions on Ubuntu and install the [prerequisite Linux packages](/app/get-started/install-cypress#Linux-Prerequisites) before running Cypress.
+
+Refer to Microsoft Learn [Windows Subsystem for Linux Documentation](https://learn.microsoft.com/en-us/windows/wsl/) for additional information.
+
+:::info
+
+Cypress.io does not specifically support the use of Cypress under Windows Subsystem for Linux (WSL). If you want to report an issue, please ensure that you can reproduce it without using WSL on one of the Cypress [supported operating systems](/app/get-started/install-cypress#Operating-System).
+
+:::
+
+## Uninstall Cypress
+
+To uninstall Cypress from a project, use the same package manager you used to [install Cypress](/app/get-started/install-cypress):
+
+
+
+
+```shell
+npm uninstall cypress
+```
+
+
+
+
+```shell
+yarn remove cypress
+```
+
+
+
+
+```shell
+pnpm remove cypress
+```
+
+
+
+
+To uninstall all cached Cypress binary versions, use the [cypress cache clear](./command-line#cypress-cache-clear) command with the appropriate package manager prefix described in [How to run commands](./command-line#How-to-run-commands).
+Alternatively, delete the [Cypress binary cache](#Binary-cache) (see above) manually.
+
+To delete cached [Cypress App Data](./troubleshooting#Clear-App-Data), manually delete the following directories / folders:
+
+- macOS: `~/Library/Application Support/Cypress`
+- Linux: `~/.config/Cypress`
+- Windows: `$APPDATA/Cypress` (POSIX-syntax) or `%APPDATA%\Cypress` (Windows-syntax)
+
+Refer to your package manager documentation for details of package manager `cache clean` commands to remove other packages cached by npm, Yarn or pnpm.
diff --git a/docs/guides/references/assertions.mdx b/docs/app/references/assertions.mdx
similarity index 94%
rename from docs/guides/references/assertions.mdx
rename to docs/app/references/assertions.mdx
index a9ef95ee11..13db1808b4 100644
--- a/docs/guides/references/assertions.mdx
+++ b/docs/app/references/assertions.mdx
@@ -1,22 +1,34 @@
---
-title: Assertions
+title: 'Assertions in Cypress: A Guide'
+description: 'Assertions available in Cypress with Chai, Chai-jQuery, and Sinon-Chai assertions'
+sidebar_label: 'Assertions'
---
-Cypress bundles the popular [Chai](/guides/references/assertions#Chai) assertion
-library, as well as helpful extensions for
-[Sinon](/guides/references/assertions#Sinon-Chai) and
-[jQuery](/guides/references/assertions#Chai-jQuery), bringing you dozens of
-powerful assertions for free.
+
+
+# Assertions
:::info
-New to Cypress?
+##### What you'll learn
+
+- Assertions available in Cypress with Chai, Chai-jQuery, and Sinon-Chai assertions
+- How to write assertions for common use cases
+- How to chain assertions together
+
+:::
-This document is only a reference to every assertion Cypress supports.
+Cypress bundles the popular [Chai](/app/references/assertions#Chai) assertion
+library, as well as helpful extensions for
+[Sinon](/app/references/assertions#Sinon-Chai) and
+[jQuery](/app/references/assertions#Chai-jQuery), bringing you dozens of
+powerful assertions for free.
+
+:::tip
If you're looking to understand **how** to use these assertions please read
about assertions in our
-[Introduction to Cypress](/guides/core-concepts/introduction-to-cypress#Assertions)
+[Introduction to Cypress](/app/core-concepts/introduction-to-cypress#Assertions)
guide.
:::
@@ -76,7 +88,7 @@ entire list of available BDD Chai assertions [here](http://chaijs.com/api/bdd/).
| decrease(_function_) **Aliases:** decreases | `.should('decrease', obj, 'val')` `expect(fn).to.decrease(obj, 'val')` |
These getters are also available for BDD assertions. They don't actually do
-anything, but they enable you to write clear, english sentences.
+anything, but they enable you to write clear, English sentences.
| Chainable getters |
| ------------------------------------------------------------------------------------------- |
@@ -158,13 +170,13 @@ Because we are using `chai`, that means you can extend it however you'd like.
Cypress will "just work" with new assertions added to `chai`. You can:
- Write your own `chai` assertions as
- [documented here](http://chaijs.com/api/plugins/).
+ [documented here](https://chaijs.com/guide/helpers/).
- npm install any existing `chai` library and import into your test file or
- [support file](/guides/core-concepts/writing-and-organizing-tests#Support-file).
+ [support file](/app/core-concepts/writing-and-organizing-tests#Support-file).
:::info
-[Check out our example recipe extending chai with new assertions.](/examples/recipes#Fundamentals)
+[Check out our example recipe extending chai with new assertions.](/app/references/recipes#Fundamentals)
:::
@@ -172,7 +184,7 @@ Cypress will "just work" with new assertions added to `chai`. You can:
Here is a list of common element assertions. Notice how we use these assertions
(listed above) with [`.should()`](/api/commands/should). You may also want to
-read about how Cypress [retries](/guides/core-concepts/retry-ability)
+read about how Cypress [retries](/app/core-concepts/retry-ability)
assertions.
### Length
@@ -217,7 +229,7 @@ cy.contains('[data-testid="greeting"]', /^Hello/)
:::info
**Tip:** read about assertions against text with non-breaking space entities in
-[How do I get an element's text contents?](/faq/questions/using-cypress-faq#How-do-I-get-an-elements-text-contents)
+[How do I get an element's text contents?](/app/faq#How-do-I-get-an-elements-text-contents)
:::
@@ -246,6 +258,14 @@ Watch the short video
["Multiple elements and should('be.visible') assertion"](https://www.youtube.com/watch?v=LxkrhUEE2Qk)
that shows how to correctly check the visibility of elements.
+:::info
+
+**Visibility Semantics**
+
+For detailed information about how Cypress determines element visibility, including the default behavior and the experimental fast visibility algorithm, see [Visibility](/app/core-concepts/interacting-with-elements#Visibility).
+
+:::
+
### Existence
```javascript
@@ -314,7 +334,7 @@ cy.contains('first todo').should('not.have.class', 'completed')
cy.get('[data-testid="loading"]').should('not.be.visible')
```
-#### False passing tests
+### False passing tests
Negative assertions may pass for reasons you weren't expecting. Let's say we
want to test that a Todo list app adds a new Todo item after typing the Todo and
@@ -357,18 +377,11 @@ cy.get('[data-testid="new-todo"]').type('Write tests{enter}')
cy.get('[data-testid="todos"]').should('not.have.length', 2)
```
-:::info
-
-For more examples, please read the blog post
-[Be Careful With Negative Assertions](https://glebbahmutov.com/blog/negative-assertions/).
-
-:::
-
## Should callback
If built-in assertions are not enough, you can write your own assertion function
and pass it as a callback to the `.should()` command. Cypress will automatically
-[retry](/guides/core-concepts/retry-ability) the callback function until it
+[retry](/app/core-concepts/retry-ability) the callback function until it
passes or the command times out. See the
[`.should()`](/api/commands/should#Function) documentation.
@@ -429,7 +442,5 @@ cy.get('[data-testid="loading"]').should('not.be.visible')
## See also
-- [Guide: Introduction to Cypress](/guides/core-concepts/introduction-to-cypress#Assertions)
+- [Guide: Introduction to Cypress](/app/core-concepts/introduction-to-cypress#Assertions)
- [cypress-example-kitchensink Assertions](https://example.cypress.io/commands/assertions)
-- [Cypress should callback](https://glebbahmutov.com/blog/cypress-should-callback/)
- blog post
diff --git a/docs/guides/references/bundled-libraries.mdx b/docs/app/references/bundled-libraries.mdx
similarity index 84%
rename from docs/guides/references/bundled-libraries.mdx
rename to docs/app/references/bundled-libraries.mdx
index 9dd450c036..85242c37c8 100644
--- a/docs/guides/references/bundled-libraries.mdx
+++ b/docs/app/references/bundled-libraries.mdx
@@ -1,13 +1,18 @@
---
-title: Bundled Libraries
+title: 'Bundled Libraries in Cypress'
+description: 'Open source testing libraries bundled with Cypress'
+sidebar_label: 'Bundled Libraries'
---
+
+
+# Bundled Libraries
+
:::info
-Cypress relies on many best-of-breed open source testing libraries to lend
+Cypress relies on many open source testing libraries to lend
stability and familiarity to the platform from the get-go. If you've been
testing in JavaScript, you'll recognize many old friends in this list.
-Understand how we exploit them and hit the ground running with Cypress!
:::
@@ -36,7 +41,7 @@ These fixes are all completely transparent.
:::info
-[Check out our guide to writing and organizing tests.](/guides/core-concepts/writing-and-organizing-tests)
+[Check out our guide to writing and organizing tests.](/app/core-concepts/writing-and-organizing-tests)
:::
@@ -48,14 +53,14 @@ While Mocha provides us a framework to structure our tests, Chai gives us the
ability to easily write assertions. Chai gives us readable assertions with
excellent error messages. Cypress extends this, fixes several common pitfalls,
and wraps Chai's DSL using
-[subjects](/guides/core-concepts/introduction-to-cypress#Assertions) and the
+[subjects](/app/core-concepts/introduction-to-cypress#Assertions) and the
[`.should()`](/api/commands/should) command.
:::note
@@ -73,7 +78,7 @@ chainer methods.
@@ -93,7 +98,7 @@ your tests using [`Cypress.sinon`](/api/utilities/sinon).
:::info
-[Check out our guide for working with spies, stubs, and clocks.](/guides/guides/stubs-spies-and-clocks)
+[Check out our guide for working with spies, stubs, and clocks.](/app/guides/stubs-spies-and-clocks)
:::
@@ -110,7 +115,7 @@ about `stubs` and `spies`.
diff --git a/docs/app/references/changelog.mdx b/docs/app/references/changelog.mdx
new file mode 100644
index 0000000000..db9b38d401
--- /dev/null
+++ b/docs/app/references/changelog.mdx
@@ -0,0 +1,16912 @@
+---
+title: 'Changelog: Cypress App'
+description: 'Release notes for the Cypress App.'
+sidebar_label: Changelog
+---
+
+
+
+# Changelog
+
+## 15.8.1
+
+_Released 12/18/2025_
+
+**Dependency Updates:**
+
+- Upgraded `systeminformation` to `5.27.14`. This removes the [CVE-2025-68154](https://github.com/advisories/GHSA-wphj-fx3q-84ch) vulnerability being reported in security scans. Fixes [#33146](https://github.com/cypress-io/cypress/issues/33146). Addressed in [#33150](https://github.com/cypress-io/cypress/pull/33150).
+
+## 15.8.0
+
+_Released 12/16/2025_
+
+**Performance:**
+
+- Introduced a new `experimentalFastVisibility` experiment. Enabling this experiment changes how Cypress performs visibility checks and assertions. Read more about [experimental fast visibility](/app/references/experiments#Experimental-Fast-Visibility). Addresses [#33044](https://github.com/cypress-io/cypress/issues/33044). Addressed in [#32801](https://github.com/cypress-io/cypress/pull/32801).
+
+**Features:**
+
+- `Angular` version 21 is now supported within component testing. Addressed in [#33004](https://github.com/cypress-io/cypress/pull/33004).
+- Adds zoneless support for `Angular` Component Testing through the `angular-zoneless` mount function. Addresses [#31504](https://github.com/cypress-io/cypress/issues/31504) and [#30070](https://github.com/cypress-io/cypress/issues/30070).
+- After receiving feedback on its usefulness outside of Studio, the Selector Playground is now available for all users in open mode. When opened, the playground automatically enables interactive mode to help you build and test selectors directly in your application. Addresses [#32672](https://github.com/cypress-io/cypress/issues/32672). Addressed in [#33073](https://github.com/cypress-io/cypress/pull/33073).
+
+**Bugfixes:**
+
+- Fixed an issue where a EPIPE error shows up after CTRL+C is done in terminal. Fixes [#30659](https://github.com/cypress-io/cypress/issues/30659). Addressed in [#32873](https://github.com/cypress-io/cypress/pull/32873).
+- Fixed an issue where the browser would freeze when Cypress intercepts a synchronous XHR request and a `routeHandler` is used. Fixes [#32874](https://github.com/cypress-io/cypress/issues/32874). Addressed in [#32925](https://github.com/cypress-io/cypress/pull/32925).
+- Fixed an issue where `Next.js` Component Testing would not load correctly without a TypeScript-based Next config in versions 16.0.3 and up. Fixes [#32968](https://github.com/cypress-io/cypress/issues/32968).
+- Fixed an issue where the error message for `not.have.length` was not correctly displaying the expected length in the Command Log. Addressed in [#18927](https://github.com/cypress-io/cypress/issues/18927).
+- Fixed an issue where `removeAttribute()` would not work for attributes other than `target` on anchor or form elements after clicking links with `target="_top"` or `target="_parent"`. Fixes [#26206](https://github.com/cypress-io/cypress/issues/26206). Addressed in [#33051](https://github.com/cypress-io/cypress/pull/33051).
+
+**Dependency Updates:**
+
+- Removed extraneous dependencies that are no longer used. Addressed in [#33098](https://github.com/cypress-io/cypress/pull/33098).
+- Upgraded `brace-expansion`. This removes the [CVE-2025-5889](https://security.snyk.io/vuln/SNYK-JS-BRACEEXPANSION-9789073) vulnerability being reported in security scans. Addressed in [#33112](https://github.com/cypress-io/cypress/pull/33112).
+- Upgraded `form-data`. This removes the [CVE-2025-7783](https://security.snyk.io/vuln/SNYK-JS-FORMDATA-10841150) vulnerability being reported in security scans. Addressed in [#33113](https://github.com/cypress-io/cypress/pull/33113).
+
+## 15.7.1
+
+_Released 12/02/2025_
+
+**Performance:**
+
+- Improved performance when viewing command snapshots in the Command Log. Element highlighting is now significantly faster, especially when highlighting multiple elements or complex pages. This is achieved by reducing redundant style calculations and batching DOM operations to minimize browser reflows. Addressed in [#32951](https://github.com/cypress-io/cypress/pull/32951).
+
+**Bugfixes:**
+
+- Updated the error message shown when the [`cy.prompt()`](/api/commands/prompt) bundle is deleted while in use. Ensured that the Cloud bundles are written atomically to avoid concurrent downloads causing issues. Addressed in [#33034](https://github.com/cypress-io/cypress/pull/33034).
+
+**Dependency Updates:**
+
+- Upgraded `yargs-unparser` from `1.6.0` to `1.6.4` (which upgraded `flat` from `4.1.1` to `5.0.2`) to resolve [CVE-2020-36632](https://github.com/advisories/GHSA-52f5-9888-hmc6). Addressed [#27763](https://github.com/cypress-io/cypress/issues/27763).
+
+## 15.7.0
+
+_Released 11/19/2025_
+
+**Performance:**
+
+- Limits the number of matched elements that are tested for visibility when added to a command log entry. Fixes a crash scenario related to rapid successive DOM additions in conjunction with a large number of elements returned from a query. Addressed in [#32937](https://github.com/cypress-io/cypress/pull/32937).
+
+**Features:**
+
+- `Next.js` version 16 is now supported within component testing. Currently, `webpack` is used to bundle Next.js components. Turbopack, the [new default](https://nextjs.org/docs/app/guides/upgrading/version-16#turbopack-by-default) inside Next.js 16, is not yet supported within Cypress. Addresses [#32857](https://github.com/cypress-io/cypress/issues/32857).
+
+**Bugfixes:**
+
+- Fixed an issue where [`cy.wrap()`](/api/commands/wrap) would cause infinite recursion and freeze the Cypress App when called with objects containing circular references. Fixes [#24715](https://github.com/cypress-io/cypress/issues/24715). Addressed in [#32917](https://github.com/cypress-io/cypress/pull/32917).
+- Fixed an issue where top changes on test retries could cause attempt numbers to show up more than one time in the reporter and cause attempts to be lost in Test Replay. Addressed in [#32888](https://github.com/cypress-io/cypress/pull/32888).
+- Fixed an issue where stack traces that are used to determine a test's invocation details are sometimes incorrect. Addressed in [#32699](https://github.com/cypress-io/cypress/pull/32699).
+- Fixed an issue where larger than expected config values were causing issues in certain cases when recording to the Cypress Cloud. Addressed in [#32957](https://github.com/cypress-io/cypress/pull/32957).
+
+**Misc:**
+
+- The keyboard shortcuts modal now displays the keyboard shortcut for saving Studio changes - `⌘` + `s` for Mac or `Ctrl` + `s` for Windows/Linux. Addressed [#32862](https://github.com/cypress-io/cypress/issues/32862). Addressed in [#32864](https://github.com/cypress-io/cypress/pull/32864).
+- The Cursor logo now correctly displays in the External editor dropdown. Addresses [#32062](https://github.com/cypress-io/cypress/issues/32062). Addressed in [#32911](https://github.com/cypress-io/cypress/pull/32911).
+
+## 15.6.0
+
+_Released 11/04/2025_
+
+**Features:**
+
+- Added a 'Self-healed' badge to the Command Log when [`cy.prompt()`](/api/commands/prompt) steps automatically recover after the element they need is not found in the cache. Addressed in [#32802](https://github.com/cypress-io/cypress/pull/32802).
+- [`cy.prompt()`](/api/commands/prompt) will now show a warning in the `Get code` modal when there are unsaved changes in `Studio` that will be lost if the user saves the generated code. Addressed in [#32741](https://github.com/cypress-io/cypress/pull/32741).
+
+**Bugfixes:**
+
+- Fixed an issue where command snapshots were not correctly displayed in Studio. Addressed in [#32808](https://github.com/cypress-io/cypress/pull/32808).
+- Chrome's autofill popup is now disabled when filling address and credit card forms during test execution. We also added some other Chrome flags and preferences that are common when automating browsers. Fixes [#25608](https://github.com/cypress-io/cypress/issues/25608). Addressed in [#32811](https://github.com/cypress-io/cypress/pull/32811).
+- Fixed an issue where grouped command text jumps up and down when expanding and collapsing in the command log. Addressed in [#32757](https://github.com/cypress-io/cypress/pull/32757).
+- Fixed an issue with grouped console prop items having a hard to read blue color in the console log and duplicate `:` characters being displayed. Addressed in [#32776](https://github.com/cypress-io/cypress/pull/32776).
+- Added more context to the error message shown when [`cy.prompt()`](/api/commands/prompt) fails to download. Addressed in [#32822](https://github.com/cypress-io/cypress/pull/32822).
+- Fixed an issue where absolute file paths were not correctly determined from the source map when the source map root was updated. Fixes [#32809](https://github.com/cypress-io/cypress/issues/32809).
+
+**Misc:**
+
+- Add top padding for command log labels. Addressed in [#32774](https://github.com/cypress-io/cypress/pull/32774).
+- The hitbox for expanding a grouped command has been widened. Addresses [#32778](https://github.com/cypress-io/cypress/issues/32778). Addressed in [#32783](https://github.com/cypress-io/cypress/pull/32783).
+- Have cursor on hover of the AUT URL to show as pointer. Addresses [#32777](https://github.com/cypress-io/cypress/issues/32777). Addressed in [#32782](https://github.com/cypress-io/cypress/pull/32782).
+- WebKit now prefers a cookie's fully qualified `domain` when requesting a cookie value via [`cy.getCookie()`](/api/commands/getcookie). If none are found, the cookie's apex domain will be used as a fallback. Addresses [#29954](https://github.com/cypress-io/cypress/issues/29954), [#29973](https://github.com/cypress-io/cypress/issues/29973) and [#30392](https://github.com/cypress-io/cypress/issues/30392). Addressed in [#32852](https://github.com/cypress-io/cypress/pull/32852).
+- The 'Next' tooltip style was updated. Addressed in [#32866](https://github.com/cypress-io/cypress/pull/32866).
+- Make test name header sticky in studio mode and in the tests list. Addresses [#32591](https://github.com/cypress-io/cypress/issues/32591). Addressed in [#32840](https://github.com/cypress-io/cypress/pull/32840)
+- The [`cy.exec()`](/api/commands/exec) type now reflects the correct yielded response type of `exitCode`. Addresses [#32875](https://github.com/cypress-io/cypress/issues/32875). Addressed in [#32885](https://github.com/cypress-io/cypress/pull/32885).
+
+**Dependency Updates:**
+
+- Upgraded `better-sqlite3` from `11.10.0` to `12.4.1`. Addressed in [#32755](https://github.com/cypress-io/cypress/pull/32755).
+- Upgraded `recast` from `0.20.4` to `0.23.11`. Addressed in [#32742](https://github.com/cypress-io/cypress/pull/32742).
+
+## 15.5.0
+
+_Released 10/17/2025_
+
+**Features:**
+
+- When `cypress run` is used with both `--record` and `--posix-exit-codes` enabled, Cypress will now exit with code `112` when it cannot determine which spec to run next due to network conditions. Addresses [#32485](https://github.com/cypress-io/cypress/issues/32485). Addressed in [#32635](https://github.com/cypress-io/cypress/pull/32635).
+
+**Bugfixes:**
+
+- An error is no longer thrown during command execution when the application under test overwrites the `window.$` property with a non-function. Fixes [#1502](https://github.com/cypress-io/cypress/issues/1502). Fixed in [#32682](https://github.com/cypress-io/cypress/pull/32682).
+- When running `cypress` in Cypress development environments, or when `ELECTRON_ENABLE_LOGGING` is otherwise set to 1, certain messages written to `stderr` will no longer be bracketed with verbose tags. Addresses [#32569](https://github.com/cypress-io/cypress/issues/32569). Addressed in [#32674](https://github.com/cypress-io/cypress/pull/32674).
+- Improve performance of time between specs by not resetting the `file_systems` `StorageType` state when executing the CDP command `Storage.clearDataForOrigin`. Fixed in [#32703](https://github.com/cypress-io/cypress/pull/32703).
+
+**Misc:**
+
+- Browser detection in Cypress now always prefers 64-bit browser installs to 32-bit browser installs. Addressed in [#32656](https://github.com/cypress-io/cypress/pull/32656).
+- Update code button styles and rename Get Code for Code on [`cy.prompt()`](/api/commands/prompt). Addressed in [#32745](https://github.com/cypress-io/cypress/pull/32745).
+
+**Dependency Updates:**
+
+- Upgraded `tsx` from `4.20.5` to `4.20.6`. Addressed in [#32730](https://github.com/cypress-io/cypress/pull/32730).
+
+## 15.4.0
+
+_Released 10/07/2025_
+
+**Features:**
+
+- Cypress Studio is now available by default. You no longer have to set the `experimentalStudio` flag. Addresses [#30997](https://github.com/cypress-io/cypress/issues/30997). Addressed in [#32571](https://github.com/cypress-io/cypress/pull/32571).
+- An option is now available to 'Hide HTTP Requests' in the Cypress Command Log. This can be found in the new dropdown menu at the top of the Command Log. Addresses [#7362](https://github.com/cypress-io/cypress/issues/7362). Addressed in [#32658](https://github.com/cypress-io/cypress/pull/32658).
+- Added the `--posix-exit-codes` flag for the `run` command. When this flag is passed, Cypress will exit with 1 if any tests fail, rather than the number of failed tests. Addresses [#32605](https://github.com/cypress-io/cypress/issues/32605) and [#24695](https://github.com/cypress-io/cypress/issues/24695). Addressed in [#32609](https://github.com/cypress-io/cypress/pull/32609).
+- [`cy.prompt()`](/api/commands/prompt) is now a reserved Cypress command, currently gated behind a feature flag that requires an invite from Cypress. This means any custom commands named 'prompt' will no longer work. Stay tuned for updates on when this feature will become more widely available. Addresses [#31826](https://github.com/cypress-io/cypress/issues/31826).
+
+**Bugfixes:**
+
+- Fixed a regression introduced in [15.0.0](#15-0-0) where `dbus` connection error messages appear in Docker containers when launching Cypress. Fixes [#32290](https://github.com/cypress-io/cypress/issues/32290).
+- Fixed code frames in [`cy.origin()`](/api/commands/origin) so that failed commands will show the correct line/column within the corresponding spec file. Addressed in [#32597](https://github.com/cypress-io/cypress/pull/32597).
+- Fixed Cypress Cloud requests so that they properly verify SSL certificates. Addressed in [#32629](https://github.com/cypress-io/cypress/pull/32629).
+
+**Misc:**
+
+- Added a dropdown menu in the Command Log that includes actions like Open in IDE and Add New Test in Studio, along with test preferences such as Auto-Scroll and Hide HTTP Requests. Addresses [#32556](https://github.com/cypress-io/cypress/issues/32556) and [#32558](https://github.com/cypress-io/cypress/issues/32558). Addressed in [#32611](https://github.com/cypress-io/cypress/pull/32611).
+- Updated the Studio test editing header to include a Back button. This change ensures the Specs button remains functional for expanding or collapsing the specs panel. Addresses [#32556](https://github.com/cypress-io/cypress/issues/32556) and [#32558](https://github.com/cypress-io/cypress/issues/32558). Addressed in [#32611](https://github.com/cypress-io/cypress/pull/32611).
+- Fixed the Studio panel resizing when dragging. Addressed in [#32584](https://github.com/cypress-io/cypress/pull/32584).
+- The Next button now maintains consistent visibility during stepping sessions when using `cy.pause`, staying visible but disabled when no immediate next command is available, providing clear visual feedback to users about stepping state. Addresses [#32476](https://github.com/cypress-io/cypress/issues/32476). Addressed in [#32536](https://github.com/cypress-io/cypress/pull/32536).
+
+**Dependency Updates:**
+
+- Upgraded `electron` from `36.8.1` to `37.6.0`. Addressed in [#32607](https://github.com/cypress-io/cypress/pull/32607).
+- Upgraded bundled Node.js version from `22.18.0` to `22.19.0`. Addressed in [#32607](https://github.com/cypress-io/cypress/pull/32607).
+- Upgraded bundled Chromium version from `136.0.7103.177` to `138.0.7204.251`. Addressed in [#32607](https://github.com/cypress-io/cypress/pull/32607).
+
+## 15.3.0
+
+_Released 09/23/2025_
+
+**Features:**
+
+- Added Escape key support to [`cy.press()`](http://on.cypress.io/api/press). Addresses [#32429](https://github.com/cypress-io/cypress/issues/32429). Addressed in [#32545](https://github.com/cypress-io/cypress/pull/32545).
+
+**Bugfixes:**
+
+- In development mode, Electron `stderr` is piped directly to Cypress' `stderr` to make it clear why Electron failed to start, if it fails to start. Fixes [#32358](https://github.com/cypress-io/cypress/issues/32358). Addressed in [#32468](https://github.com/cypress-io/cypress/pull/32468).
+- Fixed an issue where ESM Cypress configurations were not being interpreted correctly. Fixes [#32493](https://github.com/cypress-io/cypress/issues/32493). Fixed in [#32515](https://github.com/cypress-io/cypress/pull/32515).
+
+**Misc:**
+
+- Update the styles for command grouping 'line' so on expansion it is displayed correctly. Addressed in [#32521](https://github.com/cypress-io/cypress/pull/32521).
+- Test hook names now correctly display with a semi-bold font weight. Addresses [#32477](https://github.com/cypress-io/cypress/issues/32477). Addressed in [#32491](https://github.com/cypress-io/cypress/pull/32491).
+- Updated the Cypress Studio panel to not show bottom border. Addresses [#32478](https://github.com/cypress-io/cypress/issues/32478).
+
+**Dependency Updates:**
+
+- Upgraded `electron` from `36.4.0` to `36.8.1`. Addressed in [#32371](https://github.com/cypress-io/cypress/pull/32371).
+- Upgraded bundled Node.js version from `22.15.1` to `22.18.0`. Addressed in [#32371](https://github.com/cypress-io/cypress/pull/32371).
+- Upgraded bundled Chromium version from `136.0.7103.149` to `136.0.7103.177`. Addressed in [#32371](https://github.com/cypress-io/cypress/pull/32371).
+
+## 15.2.0
+
+_Released 09/09/2025_
+
+**Features:**
+
+- Added support for using [@cypress/grep](https://www.npmjs.com/package/@cypress/grep) with Cypress Studio. Addresses [#32292](https://github.com/cypress-io/cypress/issues/32292).
+
+**Bugfixes:**
+
+- We now properly partition the `host` with `port` when caching family DNS lookups. This resolves issues where some `localhost` URLs were not resolving in `cy.visit()` in Cypress when they should have. Fixes [#25397](https://github.com/cypress-io/cypress/issues/25397). Addressed in [#32403](https://github.com/cypress-io/cypress/pull/32403).
+
+**Dependency Updates:**
+
+- Updated [`better-sqlite3`](https://www.npmjs.com/package/better-sqlite3) from `11.9.1` to `11.10.0`. Addressed in [#32404](https://github.com/cypress-io/cypress/pull/32404).
+
+## 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_
+
+**Summary**
+
+This release prepares Cypress Studio for the next era of AI-assisted test creation. You can record interactions, add assertions by right-clicking, and now edit tests inline without leaving Cypress. Turn on `experimentalStudio` in your config to try it out and [share your feedback](https://github.com/cypress-io/cypress/discussions/14339). Read more about the foundation for what's next in our [blog post](https://www.cypress.io/blog/cypress-15-the-foundation-for-whats-next).
+
+
+
+**Breaking Changes:**
+
+:::info
+
+Refer to the [v15 Migration Guide](/app/references/migration-guide#Migrating-to-Cypress-150) for help migrating your code.
+
+:::
+
+- Removed support for Node.js 18 and Node.js 23. Addresses [#31302](https://github.com/cypress-io/cypress/issues/31302).
+- Removed support for Linux distributions with `glibc` older than `2.31`. This support is in-line with Node.js' support for Linux in Node v20+. Addressed in [#31912](https://github.com/cypress-io/cypress/pull/31912).
+- Removed support for [Chrome DevTools Protocol](https://chromedevtools.github.io/devtools-protocol) with the [Firefox](https://www.mozilla.org/firefox/) browser. Addresses [#31189](https://github.com/cypress-io/cypress/issues/31189).
+- Removed support of the deprecated 3 argument signature of `cy.stub`. Use `cy.stub(object, name).callsFake(fn)` instead. Addresses [#31346](https://github.com/cypress-io/cypress/issues/31346).
+- `@cypress/webpack-preprocessor` no longer supports `webpack` version 4. Addresses [#31344](https://github.com/cypress-io/cypress/issues/31344). If you still need to use `webpack` version 4, please see our [migration guide](/app/references/migration-guide#Migrating-to-Cypress-150).
+- In order to better align with best practices, `@cypress/webpack-batteries-included-preprocessor` no longer includes certain browser built-ins that were automatically provided by Webpack 4. The removed built-ins are `assert`, `constants`, `crypto`, `domain`, `events`, `http`, `https`, `punycode`, `querystring`, `string_decoder`, `sys`, `timers`, `tty`, `url`, `util`, `vm`, and `zlib`. However, we know that certain built-ins are popular, given that many users have files that are shared between their Cypress tests and node context. Because of this, `@cypress/webpack-batteries-included-preprocessor` will ship with built-in support for `buffer`, `path`, `process`, `os`, and `stream`. If there is a built-in that isn't supported by default and you need to add support, please refer to the Webpack [resolve.fallback](https://webpack.js.org/configuration/resolve/#resolvefallback) documentation and the [`@cypress/webpack-batteries-included-preprocessor` README](https://github.com/cypress-io/cypress/blob/develop/npm/webpack-batteries-included-preprocessor/README.md). Addresses [#31039](https://github.com/cypress-io/cypress/issues/31039).
+- The application under test's `pagehide` event in Chromium browsers will no longer trigger Cypress's `window:unload` event. Addressed in [#31853](https://github.com/cypress-io/cypress/pull/31853).
+- The `Cypress.SelectorPlayground` API has been renamed to `Cypress.ElementSelector`. This API was renamed to accommodate its use for defining `selectorPriority` in Cypress Studio and our future [`cy.prompt` release](/api/commands/prompt). Additionally, the `getSelector` method and the `onElement` option of `defaults` were removed from this API. Addresses [#31801](https://github.com/cypress-io/cypress/issues/31801). Addressed in [#31889](https://github.com/cypress-io/cypress/pull/31889) and [#32098](https://github.com/cypress-io/cypress/pull/32098).
+- The direct download option for installing Cypress is no longer supported. Users should install via a package manager. Addressed in [#32249](https://github.com/cypress-io/cypress/pull/32249).
+- Updated `execa` from `1.0.0` to `4.1.0`. This changes the `code` property returned by [`cy.exec()`](/api/commands/exec) to `exitCode`. Addressed in [#32238](https://github.com/cypress-io/cypress/pull/32238).
+- **Component Testing breaking changes:**
+ - Removed support for Angular 17. The minimum supported version is now `18.0.0`. Addresses [#31303](https://github.com/cypress-io/cypress/issues/31303).
+ - `@cypress/angular` now requires a minimum of `zone.js` `0.14.0`. Addresses [#31582](https://github.com/cypress-io/cypress/issues/31582).
+ - The Cypress configuration wizard for Component Testing supports TypeScript 5.0 or greater. Addresses [#31187](https://github.com/cypress-io/cypress/issues/31187).
+ - `@cypress/vite-dev-server` is now an ESM only package. You will no longer be able to use this package from a CommonJS context. Addresses [#28373](https://github.com/cypress-io/cypress/issues/28373), [#29557](https://github.com/cypress-io/cypress/issues/29557) and [#31882](https://github.com/cypress-io/cypress/issues/31882).
+ - Removed support for Vite 4 inside `@cypress/vite-dev-server`. The minimum Vite version is `5`. Addresses [#32038](https://github.com/cypress-io/cypress/issues/32038).
+ - `@cypress/webpack-dev-server` no longer supports `webpack-dev-server` version 4. Addresses [#31605](https://github.com/cypress-io/cypress/issues/31605). If you still need to use `webpack-dev-server` version 4, please see our [migration guide](/app/references/migration-guide#Migrating-to-Cypress-150).
+
+**Features:**
+
+- [`cy.url()`](/api/commands/url), [`cy.hash()`](/api/commands/hash), [`cy.go()`](/api/commands/go), [`cy.reload()`](/api/commands/reload), [`cy.title()`](/api/commands/title), and [`cy.location()`](/api/commands/location) now use the automation client (CDP for Chromium browsers and WebDriver BiDi for Firefox) to return the appropriate values from the commands to the user instead of the window object. This is to avoid cross origin issues with [`cy.origin()`](/api/commands/origin) so these commands can be invoked anywhere inside a Cypress test without having to worry about origin access issues. Experimental WebKit still will use the window object to retrieve these values. Also, [`cy.window()`](/api/commands/window) will always return the current window object, regardless of origin restrictions. Not every property from the window object will be accessible depending on the origin context. Addresses [#31196](https://github.com/cypress-io/cypress/issues/31196).
+- Selectors accepted in the `selectorPriority` of the `SelectorPlayground` (renamed to `ElementSelector`) API have been expanded to accept `name` and `attributes:*`. Additionally, the default selector priority used by Cypress now includes `name`. Addresses [#31801](https://github.com/cypress-io/cypress/issues/30309) and [#6876](https://github.com/cypress-io/cypress/issues/6876). Addressed in [#31889](https://github.com/cypress-io/cypress/pull/31889).
+- [`tsx`](https://tsx.is/) is now used in all cases to run the Cypress config, replacing [ts-node](https://github.com/TypeStrong/ts-node) for TypeScript and Node.js for CommonJS/ESM. This should allow for more interoperability for users who are using any variant of ES Modules. Addresses [#8090](https://github.com/cypress-io/cypress/issues/8090), [#15724](https://github.com/cypress-io/cypress/issues/15724), [#21805](https://github.com/cypress-io/cypress/issues/21805), [#22273](https://github.com/cypress-io/cypress/issues/22273), [#22747](https://github.com/cypress-io/cypress/issues/22747), [#23141](https://github.com/cypress-io/cypress/issues/23141), [#25958](https://github.com/cypress-io/cypress/issues/25958), [#25959](https://github.com/cypress-io/cypress/issues/25959), [#26606](https://github.com/cypress-io/cypress/issues/26606), [#27359](https://github.com/cypress-io/cypress/issues/27359), [#27450](https://github.com/cypress-io/cypress/issues/27450), [#28442](https://github.com/cypress-io/cypress/issues/28442), [#28696](https://github.com/cypress-io/cypress/issues/28696), [#29186](https://github.com/cypress-io/cypress/issues/29186), [#30318](https://github.com/cypress-io/cypress/issues/30318), [#30718](https://github.com/cypress-io/cypress/issues/30718), [#30907](https://github.com/cypress-io/cypress/issues/30907), [#30915](https://github.com/cypress-io/cypress/issues/30915), [#30925](https://github.com/cypress-io/cypress/issues/30925), [#30954](https://github.com/cypress-io/cypress/issues/30954), and [#31185](https://github.com/cypress-io/cypress/issues/31185).
+- **Component Testing features:**
+ - `@cypress/vite-dev-server` now supports [vite](https://vite.dev/) version 7. Addresses [#31882](https://github.com/cypress-io/cypress/issues/31882).
+ - `Angular` version 20 is now supported within component testing. As of now, `cypress/angular` still requires `zone.js` and `@angular-devkit/build-angular`. Addresses [#31304](https://github.com/cypress-io/cypress/issues/31304).
+
+**Bugfixes:**
+
+- Fixed an issue where Create from Component feature might not be able to parse React components from project files. Fixed in [#31457](https://github.com/cypress-io/cypress/pull/31457).
+- Fixed an issue where `isSecureContext` would be `false` on localhost when testing with Cypress. Addresses [#18217](https://github.com/cypress-io/cypress/issues/18217).
+- Fixed an issue where Angular legacy `Output()` decorators were broken when making component instance field references safe. Fixes [#32137](https://github.com/cypress-io/cypress/issues/32137).
+- Fixed an issue where `.fixture()` would not return updated content after the underlying file was modified via `.writeFile()`. The fixture cache is now properly invalidated when the backing file is written to, ensuring updated content is returned in subsequent `.fixture()` calls. Fixes [#4716](https://github.com/cypress-io/cypress/issues/4716).
+- Fixed an issue where `.fixture()` calls with a specified encoding would sometimes still attempt to parse the file based on its extension. Files with an explicit encoding are now always treated as raw content. Fixes [#32139](https://github.com/cypress-io/cypress/issues/32139).
+- Fixed an issue where `.fixture()` calls with different encoding options would return inconsistent content based on execution order. Fixes [#32138](https://github.com/cypress-io/cypress/issues/32138).
+- Filters content written to stderr to prevent Electron from spamming with inconsequential errors/warnings. This stderr content can be viewed by enabling the `cypress:internal-stderr` debug namespace. Fixes [#32070](https://github.com/cypress-io/cypress/issues/32070)
+- Fixed an issue where Angular Component Testing was printing extraneous warnings to the console by default. By default, errors only will now print to the console. This can still be overridden by passing in a custom webpack config or setting the `verbose` option inside your `angular.json`. Addresses [#26456](https://github.com/cypress-io/cypress/issues/26456).
+- Fixed an issue where `ts-loader` was improperly being detected inside `@cypress/webpack-preprocessor`. Fixes [#32265](https://github.com/cypress-io/cypress/issues/32265).
+- Fixed an issue where `.fixture()` calls with `null` and `undefined` encoding options would incorrectly share cache entries, causing unexpected content to be returned. Cache keys now properly distinguish between these encoding values. Fixes [#32274](https://github.com/cypress-io/cypress/issues/32274).
+
+**Misc:**
+
+- The Cypress Command log has a new design when viewing a list of tests. Addresses [#31677](https://github.com/cypress-io/cypress/issues/31677). Addressed in [#31914](https://github.com/cypress-io/cypress/pull/31914).
+- Migration helpers and related errors are no longer shown when upgrading from Cypress versions earlier than 10.0.0. To migrate from a pre-10.0.0 version, upgrade one major version at a time to receive the appropriate guidance. Addresses [#31345](https://github.com/cypress-io/cypress/issues/31345). Addressed in [https://github.com/cypress-io/cypress/pull/31629/](https://github.com/cypress-io/cypress/pull/31629/).
+
+**Dependency Updates:**
+
+- Upgraded `electron` from `33.2.1` to `36.4.0`. Addresses [#31257](https://github.com/cypress-io/cypress/issues/31257). Addressed in [#31912](https://github.com/cypress-io/cypress/pull/31912).
+- Upgraded bundled Node.js version from `20.18.1` to `22.15.1`. Addresses [#31257](https://github.com/cypress-io/cypress/issues/31257). Addressed in [#31912](https://github.com/cypress-io/cypress/pull/31912).
+- Upgraded bundled Chromium version from `130.0.6723.137` to `136.0.7103.149`. Addresses [#31257](https://github.com/cypress-io/cypress/issues/31257). Addressed in [#31912](https://github.com/cypress-io/cypress/pull/31912).
+- Upgraded `body-parser` from `1.20.2` to `1.20.3`. This removes the [SNYK-JS-BODYPARSER-7926860](https://security.snyk.io/vuln/SNYK-JS-BODYPARSER-7926860) vulnerability being reported in security scans. Addressed in [#32225](https://github.com/cypress-io/cypress/pull/32225).
+- Upgraded `systeminformation` from `5.22.8` to `5.27.7`. Addressed in [#32234](https://github.com/cypress-io/cypress/pull/32234).
+- Upgraded `tmp` from `~0.2.3` to `~0.2.4`. This removes the [CVE-2025-54798](https://github.com/advisories/GHSA-52f5-9888-hmc6) vulnerability being reported in security scans. Addresses [#32176](https://github.com/cypress-io/cypress/issues/32176).
+
+## 14.5.4
+
+_Released 08/07/2025_
+
+**Dependency Updates:**
+
+- Upgraded `tar-fs` to `2.1.3` and `3.1.0` in places we can control, to resolve [CVE-2024-12905](https://github.com/advisories/GHSA-pq67-2wwv-3xjx). `@puppeteer/browsers` still references `3.0.4`, but it is only used to download browsers which is not a feature of `puppeteer` that we utilize. Addressed in [#32160](https://github.com/cypress-io/cypress/pull/32160).
+
+## 14.5.3
+
+_Released 07/25/2025_
+
+**Bugfixes:**
+
+- Fixed missing support for setting an absolute path for `component.indexHtmlFile` in `@cypress/webpack-dev-server`. Fixes [#31819](https://github.com/cypress-io/cypress/issues/31819).
+- Fixed an issue where TypeScript ESM projects using `.js` and `.mjs` extensions were not resolving correctly within `@cypress/webpack-batteries-included-preprocessor`. Addressed in [#31994](https://github.com/cypress-io/cypress/pull/31994). Fixes [#26827](https://github.com/cypress-io/cypress/issues/26827) and [#28805](https://github.com/cypress-io/cypress/issues/28805).
+- Fixed an issue in `@cypress/angular` where component instance fields were not reference safe and were being overwritten. Fixes [#31238](https://github.com/cypress-io/cypress/issues/31238) and [#31983](https://github.com/cypress-io/cypress/issues/31983). Fixed in [#31993](https://github.com/cypress-io/cypress/pull/31993).
+
+**Dependency Updates:**
+
+- Upgraded `@cypress/request` to `3.0.9`, to resolve [CVE-2025-7783](https://github.com/advisories/GHSA-fjxv-7rqg-78g4) in `form-data`. Addresses [#32091](https://github.com/cypress-io/cypress/issues/32091).
+
+## 14.5.2
+
+_Released 07/15/2025_
+
+**Bugfixes:**
+
+- Fixed a regression introduced in [14.5.0](#14-5-0) where the Stop button would not immediately stop the spec timer. Addresses [#31920](https://github.com/cypress-io/cypress/issues/31920).
+- Fixed an issue with the `CloudRequest` where it used the wrong port for `https` requests. Addressed in [#31992](https://github.com/cypress-io/cypress/pull/31992).
+
+## 14.5.1
+
+_Released 07/01/2025_
+
+**Bugfixes:**
+
+- Fixed an issue where prerequests with Firefox BiDi were prematurely being removed or matched incorrectly. Addresses [#31482](https://github.com/cypress-io/cypress/issues/31482).
+
+**Dependency Updates:**
+
+- Updated `pbkdf2` from `3.1.2` to `3.1.3`. This removes the [SNYK-JS-PBKDF2-10495498](https://security.snyk.io/vuln/SNYK-JS-PBKDF2-10495498) vulnerability being reported in security scans. Addressed in [#31941](https://github.com/cypress-io/cypress/pull/31941).
+
+## 14.5.0
+
+_Released 06/17/2025_
+
+**Features:**
+
+- Install Cypress `win32-x64` binary on Windows `win32-arm64` systems. Cypress runs in emulation. Addresses [#30252](https://github.com/cypress-io/cypress/issues/30252).
+
+**Bugfixes:**
+
+- Fixed an issue when using `Cypress.stop()` where a run may be aborted prior to receiving the required runner events causing Test Replay to not be available. Addresses [#31781](https://github.com/cypress-io/cypress/issues/31781).
+
+## 14.4.1
+
+_Released 06/03/2025_
+
+**Bugfixes:**
+
+- Fixed an issue where `cy.session()` may fail internally if navigating to `about:blank` takes longer than the `defaultCommandTimeout`. Addresses [#29496](https://github.com/cypress-io/cypress/issues/29496).
+
+**Misc:**
+
+- The design of commands that display as grouped (such as `.within()` and `cy.session()`) has been updated to provide better clarity when collapsing groups. Addressed in [#31739](https://github.com/cypress-io/cypress/pull/31739).
+
+**Dependency Updates:**
+
+- Updated `@sinonjs/fake-timers` from `10.3.0` to `11.3.1`. Addressed in [#31746](https://github.com/cypress-io/cypress/pull/31746).
+
+## 14.4.0
+
+_Released 05/20/2025_
+
+**Features:**
+
+- `@cypress/webpack-dev-server` and `@cypress/webpack-batteries-included-preprocessor` now ship with [webpack-bundle-analyzer](https://www.npmjs.com/package/webpack-bundle-analyzer) as a diagnostic tool to determine bundle statistics, which can be enabled via `DEBUG=cypress-verbose:webpack-dev-server:bundle-analyzer` (component tests using webpack) or `DEBUG=cypress-verbose:webpack-batteries-included-preprocessor:bundle-analyzer` (e2e tests using webpack, which is the default preprocessor), respectively. Addresses [#30461](https://github.com/cypress-io/cypress/issues/30461).
+
+**Bugfixes:**
+
+- Fixed an issue where framebusting was occurring when `top.window.location` was being set explicitly. This fix does not require the `experimentalModifyObstructiveThirdPartyCode` configuration option. Addresses [#31687](https://github.com/cypress-io/cypress/issues/31687).
+- `cy.press()` now has a return type of `Chainable` instead of `void` to match the convention of other commands that yield `null`. Addressed in [#31698](https://github.com/cypress-io/cypress/pull/31698).
+- Fixed an issue with the experimental usage of WebKit where Cypress incorrectly displayed `0` as the WebKit version. Addresses [#31684](https://github.com/cypress-io/cypress/issues/31684).
+
+**Misc:**
+
+- Chrome 137+ no longer supports `--load-extension` in branded Chrome, breaking the `@cypress/puppeteer` plugin in `open` mode and headed `run` mode and [`launchOptions.extensions`](/api/node-events/browser-launch-api#Add-browser-extensions). We recommend using Electron, Chrome for Testing or Chromium to continue using these features. See Cypress Docker image examples for [Chrome for Testing](https://github.com/cypress-io/cypress-docker-images/tree/master/examples/chrome-for-testing) and [Chromium](https://github.com/cypress-io/cypress-docker-images/tree/master/examples/chromium). Addresses [#31702](https://github.com/cypress-io/cypress/issues/31702) and [#31703](https://github.com/cypress-io/cypress/issues/31703).
+- Cursor is now available as an IDE option for opening files in Cypress, if it is installed on your system. Addressed in [#31691](https://github.com/cypress-io/cypress/pull/31691).
+- The error shown when the `--record` flag is missing has been updated to be shorter. Addressed in [#31676](https://github.com/cypress-io/cypress/pull/31676).
+
+**Dependency Updates:**
+
+- Upgraded `@sinonjs/fake-timers` from `8.1.0` to `10.3.0`. Addressed in [#31725](https://github.com/cypress-io/cypress/pull/31725) and [#31737](https://github.com/cypress-io/cypress/pull/31737).
+- Upgraded `trash` from `5.2.0` to `7.2.0`. Addressed in [#31667](https://github.com/cypress-io/cypress/pull/31667).
+- Upgraded `webdriver` from `9.11.0` to `9.14.0`. Addressed in [#31689](https://github.com/cypress-io/cypress/pull/31689).
+
+## 14.3.3
+
+_Released 05/06/2025_
+
+**Performance:**
+
+- Ensure the previous pausing event handlers are removed before new ones are added. Addressed in [#31596](https://github.com/cypress-io/cypress/pull/31596).
+
+**Bugfixes:**
+
+- Fixed an issue where the configuration setting `trashAssetsBeforeRuns=false` was ignored for assets in the `videosFolder`. These assets were incorrectly deleted before running tests with `cypress run`. Addresses [#8280](https://github.com/cypress-io/cypress/issues/8280).
+- Fixed a potential hang condition when `@cypress/grep` would match many files and `stdout`/`stderr` was piped to a file. Fixes [#31625](https://github.com/cypress-io/cypress/issues/31625). Addressed in [#31631](https://github.com/cypress-io/cypress/pull/31631).
+- Fixed a potential hang condition when navigating to `about:blank`. Addressed in [#31634](https://github.com/cypress-io/cypress/pull/31634).
+
+**Misc:**
+
+- The Assertions menu when you right click in `experimentalStudio` tests now displays in dark mode. Addresses [#10621](https://github.com/cypress-io/cypress-services/issues/10621). Addressed in [#31598](https://github.com/cypress-io/cypress/pull/31598).
+- The URL in the Cypress App no longer displays a white background when the URL is loading. Fixes [#31556](https://github.com/cypress-io/cypress/issues/31556).
+
+**Dependency Updates:**
+
+- Downgraded `cli-table3` to `0.6.1`. Addressed in [#31631](https://github.com/cypress-io/cypress/pull/31631).
+
+## 14.3.2
+
+_Released 04/22/2025_
+
+**Bugfixes:**
+
+- Fixed an issue where auto scroll in the Cypress Command Log was not scrolling correctly. Fixes [#31530](https://github.com/cypress-io/cypress/issues/31530).
+- Fixed an issue where a message pointing users to the Cypress Cloud was not displaying on runs with failures in CI. Fixes [#31550](https://github.com/cypress-io/cypress/issues/31550).
+
+## 14.3.1
+
+_Released 04/17/2025_
+
+**Performance:**
+
+- Reduced the initial timeout for the preflight API request to determine proxy conditions from sixty seconds to five, and made this timeout duration configurable with the `CYPRESS_INITIAL_PREFLIGHT_TIMEOUT` environment variable. Addresses [#28423](https://github.com/cypress-io/cypress/issues/28423). Addressed in [#31283](https://github.com/cypress-io/cypress/pull/31283).
+
+**Bugfixes:**
+
+- The [`cy.press()`](/api/commands/press) command no longer errors when used in specs subsequent to the first spec in run mode. Fixes [#31466](https://github.com/cypress-io/cypress/issues/31466).
+- Fixed an issue where certain proxy conditions prevented test runs from being recorded. Fixes [#31485](https://github.com/cypress-io/cypress/issues/31485).
+
+**Misc:**
+
+- Suppress benign warnings that reference OOM score of renderer. Addresses [#29563](https://github.com/cypress-io/cypress/issues/29563). Addressed in [#31521](https://github.com/cypress-io/cypress/pull/31521).
+- The UI of the reporter and URL were updated to a darker gray background for better color contrast. Addressed in [#31475](https://github.com/cypress-io/cypress/pull/31475).
+- Fixed an issue where the error message output when attempting to install Cypress on an unsupported architecture included an outdated documentation link to Cypress system requirements. Fixes [#31512](https://github.com/cypress-io/cypress/issues/31512).
+
+## 14.3.0
+
+_Released 04/08/2025_
+
+**Features:**
+
+- The [`cy.press()`](/api/commands/press) command is now available. It supports dispatching native Tab keyboard events to the browser. Addresses [#31050](https://github.com/cypress-io/cypress/issues/31050). Addresses [#299](https://github.com/cypress-io/cypress/issues/299). Addressed in [#31398](https://github.com/cypress-io/cypress/pull/31398).
+
+**Bugfixes:**
+
+- Allows for `babel-loader` version 10 to be a peer dependency of `@cypress/webpack-preprocessor`. Fixed in [#31218](https://github.com/cypress-io/cypress/pull/31218).
+- Fixed an issue where Firefox BiDi was prematurely removing prerequests on pending requests. Fixes [#31376](https://github.com/cypress-io/cypress/issues/31376).
+- Fixed an [issue](https://github.com/electron/electron/issues/45398) with Electron causing slow animations and increased test times by starting a CDP screencast with a noop configuration. Fixes [#30980](https://github.com/cypress-io/cypress/issues/30980).
+
+**Misc:**
+
+- Added an automation command for dispatching key press events to CDP and BiDi automated browsers. Addressed in [#31366](https://github.com/cypress-io/cypress/pull/31366).
+- Updated error message around `injectDocumentDomain` removal to mention a future version of Cypress instead of Cypress 15. Addresses [#31373](https://github.com/cypress-io/cypress/issues/31373). Addressed in [#31375](https://github.com/cypress-io/cypress/pull/31375).
+
+**Dependency Updates:**
+
+- Upgraded `mocha` from `7.0.1` to `7.2.0`. Addressed in [#31423](https://github.com/cypress-io/cypress/pull/31423) and [#31432](https://github.com/cypress-io/cypress/pull/31432).
+- Upgraded `webdriver` from `9.7.3` to `9.11.0`. Addressed in [#31315](https://github.com/cypress-io/cypress/pull/31315).
+- Upgraded `win-version-info` from `5.0.1` to `6.0.1`. Addressed in [#31358](https://github.com/cypress-io/cypress/pull/31358).
+
+## 14.2.1
+
+_Released 03/26/2025_
+
+**Bugfixes:**
+
+- Applies a fix from [#30730](https://github.com/cypress-io/cypress/pull/30730) and [#30099](https://github.com/cypress-io/cypress/pull/30099) related to Node.js turning on ESM flags by default in Node.js version `20.19.0`. Fixed in [#31308](https://github.com/cypress-io/cypress/pull/31308).
+- Fixed an issue where Firefox BiDi was not correctly removing prerequests on expected network request failures. Fixes [#31325](https://github.com/cypress-io/cypress/issues/31325).
+- Fixed an issue in `@cypress/webpack-batteries-included-preprocessor` and `@cypress/webpack-preprocessor` where sourceMaps were not being set correctly in TypeScript 5. This should now make error code frames accurate for TypeScript 5 users. Fixes [#29614](https://github.com/cypress-io/cypress/issues/29614).
+
+**Misc:**
+
+- The UI above the application under test now displays in dark mode. Addresses [#31106](https://github.com/cypress-io/cypress/issues/31106). Addressed in [#31360](https://github.com/cypress-io/cypress/pull/31360).
+
+**Dependency Updates:**
+
+- Upgraded `@cypress/request` from `3.0.7` to `3.0.8`. Addressed in [#31311](https://github.com/cypress-io/cypress/pull/31311).
+- Upgraded `cross-fetch` from `3.1.8` to `4.1.0`. Addressed in [#31327](https://github.com/cypress-io/cypress/pull/31327).
+- Upgraded `micromatch` from `4.0.6` to `4.0.8`. Addressed in [#31330](https://github.com/cypress-io/cypress/pull/31330).
+- Upgraded `resolve` from `1.17.0` to `1.22.10`. Addressed in [#31333](https://github.com/cypress-io/cypress/pull/31333).
+- Upgraded `semver` from `7.5.3` to `7.7.1`. Addressed in [#31341](https://github.com/cypress-io/cypress/pull/31341).
+- Upgraded `systeminformation` from `5.21.7` to `5.22.8`. Addressed in [#31281](https://github.com/cypress-io/cypress/pull/31281).
+
+## 14.2.0
+
+_Released 03/12/2025_
+
+**Features:**
+
+- [`Cypress.stop()`](https://on.cypress.io/cypress-stop) is now available to stop the Cypress App on the current machine while tests are running. This can be useful for stopping test execution upon failures or other predefined conditions. Addresses [#518](https://github.com/cypress-io/cypress/issues/518). Addressed in [#31225](https://github.com/cypress-io/cypress/pull/31225).
+
+**Misc:**
+
+- The browser dropdown now has a more minimal design - showing only the icon of the browser selected to the left of the URL. The currently selected browser also now shows at the top of the browser dropdown. Browsers with longer names will now have their names correctly left aligned in the browser dropdown. Addresses [#21755](https://github.com/cypress-io/cypress/issues/21755) and [#30998](https://github.com/cypress-io/cypress/issues/30998). Addressed in [#31216](https://github.com/cypress-io/cypress/pull/31216).
+- Additional CLI options will be displayed in the terminal for some Cloud error messages. Addressed in [#31211](https://github.com/cypress-io/cypress/pull/31211).
+- Updated Cypress Studio with url routing to support maintaining state when reloading. Addresses [#31000](https://github.com/cypress-io/cypress/issues/31000) and [#30996](https://github.com/cypress-io/cypress/issues/30996).
+
+**Dependency Updates:**
+
+- Upgraded `cli-table3` from `0.5.1` to `0.6.5`. Addressed in [#31166](https://github.com/cypress-io/cypress/pull/31166).
+- Upgraded `simple-git` from `3.25.0` to `3.27.0`. Addressed in [#31198](https://github.com/cypress-io/cypress/pull/31198).
+
+## 14.1.0
+
+_Released 02/25/2025_
+
+**Features:**
+
+- Firefox versions 135 and above are now automated with [WebDriver BiDi](https://www.w3.org/TR/webdriver-bidi/) instead of [Chrome Devtools Protocol](https://chromedevtools.github.io/devtools-protocol/). Addresses [#30220](https://github.com/cypress-io/cypress/issues/30220).
+
+**Bugfixes:**
+
+- Fixed the calculation of upload throughput units when displaying the 'stream stalled' error message during Test Replay archive uploads. Fixes [#31075](https://github.com/cypress-io/cypress/issues/31075). Addressed in [#31160](https://github.com/cypress-io/cypress/pull/31160).
+
+**Misc:**
+
+- Viewport width, height, and scale now display in a badge above the application under test. The dropdown describing how to set viewport height and width has been removed from the UI. Additionally, component tests now show a notice about URL navigation being disabled in component tests. Addresses [#30999](https://github.com/cypress-io/cypress/issues/30999). Addressed in [#31119](https://github.com/cypress-io/cypress/pull/31119).
+- Updated types around `.readFile()` and `.scrollTo()` arguments and `Cypress.dom` methods. Addressed in [#31055](https://github.com/cypress-io/cypress/pull/31055).
+- Updated types around `.shadow()` and `.root()` options. Addressed in [#31154](https://github.com/cypress-io/cypress/pull/31154).
+
+**Dependency Updates:**
+
+- Upgraded `chrome-remote-interface` from `0.33.2` to `0.33.3`. Addressed in [#31128](https://github.com/cypress-io/cypress/pull/31128).
+- Upgraded `ci-info` from `4.0.0` to `4.1.0`. Addressed in [#31132](https://github.com/cypress-io/cypress/pull/31132).
+- Upgraded `compression` from `1.7.5` to `1.8.0`. Addressed in [#31151](https://github.com/cypress-io/cypress/pull/31151).
+
+## 14.0.3
+
+_Released 02/11/2025_
+
+**Bugfixes:**
+
+- Fixed an issue in Cypress [14.0.2](#14-0-2) where privileged commands did not run correctly when a spec file or support file contained certain encoded characters. Fixes [#31034](https://github.com/cypress-io/cypress/issues/31034) and [#31060](https://github.com/cypress-io/cypress/issues/31060).
+
+**Dependency Updates:**
+
+- Upgraded `@cypress/request` from `3.0.6` to `3.0.7`. Addressed in [#31063](https://github.com/cypress-io/cypress/pull/31063).
+- Upgraded `compression` from `1.7.4` to `1.7.5`. Addressed in [#31004](https://github.com/cypress-io/cypress/pull/31004).
+
+## 14.0.2
+
+_Released 02/05/2025_
+
+**Bugfixes:**
+
+- Fixed a regression introduced in [14.0.0](#14-0-0) where error codeframes in the runner UI were not populated with the correct data in failed retry attempts. Fixes [#30927](https://github.com/cypress-io/cypress/issues/30927).
+- All commands performed in `after` and `afterEach` hooks will now correctly retry when a test fails. Commands that are actions like `.click()` and `.type()` will now perform the action in this situation also. Fixes [#2831](https://github.com/cypress-io/cypress/issues/2831).
+- Fixed an issue in Cypress [14.0.0](#14-0-0) where privileged commands did not run correctly when a spec file or support file contained characters that required encoding. Fixes [#30933](https://github.com/cypress-io/cypress/issues/30933).
+- Re-enabled retrying Cloud instance creation for runs that are parallel or recorded. Fixes [#31002](https://github.com/cypress-io/cypress/issues/31002).
+
+**Misc:**
+
+- Updated the mismatched dependencies warning message to be neutral, avoiding assumptions about upgrading or downgrading. Fixes [#30990](https://github.com/cypress-io/cypress/issues/30990).
+
+**Dependency Updates:**
+
+- Upgraded `mime` from `2.6.0` to `3.0.0`. Addressed in [#30966](https://github.com/cypress-io/cypress/pull/30966).
+
+## 14.0.1
+
+_Released 01/28/2025_
+
+**Bugfixes:**
+
+- Fixed an issue where Cypress would incorrectly navigate to `about:blank` when test isolation was disabled and the last test would fail and then retry. Fixes [#28527](https://github.com/cypress-io/cypress/issues/28527).
+- Fixed a regression introduced in [14.0.0](#14-0-0) where an element would not return the correct visibility if its offset parent was within the clipping element. Fixes [#30922](https://github.com/cypress-io/cypress/issues/30922).
+- Fixed a regression introduced in [14.0.0](#14-0-0) where the incorrect visibility would be returned when either `overflow-x` or `overflow-y` was visible but the other one was clipping. Fixed in [#30934](https://github.com/cypress-io/cypress/pull/30934).
+- Fixed an issue where an `option` element would not return the correct visibility if its parent element has a clipping overflow. Fixed in [#30934](https://github.com/cypress-io/cypress/pull/30934).
+- Fixed an issue where non-HTMLElement(s) may fail during assertions. Fixes [#30944](https://github.com/cypress-io/cypress/issues/30944).
+
+**Misc:**
+
+- Corrected the broken documentation links displayed in Cypress [14.0.0](#14-0-0). Addresses [#30951](https://github.com/cypress-io/cypress/issues/30951). Addressed in [#30953](https://github.com/cypress-io/cypress/pull/30953).
+- Benign Mesa/GLX related warnings are now hidden in the terminal output when running Cypress in certain Linux environments or containers. Addresses [#29521](https://github.com/cypress-io/cypress/issues/29521) and [#29554](https://github.com/cypress-io/cypress/issues/29554).
+
+## 14.0.0
+
+_Released 01/16/2025_
+
+**Summary:**
+
+Cypress `14.0.0` improves performance of component testing and adds support for new framework and dev server versions.
+`14.0.0` also includes breaking changes to `cy.origin` that are necessary to handle
+[Chrome's deprecation of `document.domain` injection](https://developer.chrome.com/blog/document-domain-setter-deprecation), which should fix issues for some users in recent Chrome versions. Support for older versions of Node.js, Linux distributions, browsers and component testing frameworks and dev servers is removed.
+
+Overall, we don't anticipate this release to be too disruptive for most users. We recommend bumping your version to see if your
+tests still run as expected. As always, open any issues you find [here](https://github.com/cypress-io/cypress/issues/new?assignees=&labels=&projects=&template=1-bug-report.yml).
+
+**Breaking Changes:**
+
+:::info
+
+Refer to the [v14 Migration Guide](/app/references/migration-guide#Migrating-to-Cypress-140) for help migrating your code.
+
+:::
+
+- Removed support for Node.js 16 and Node.js 21. Addresses [#29930](https://github.com/cypress-io/cypress/issues/29930).
+- Upgraded bundled Node.js version from `18.17.0` to `20.18.1`. Addresses [#29547](https://github.com/cypress-io/cypress/issues/29547).
+- Prebuilt binaries for Linux are no longer compatible with Linux distributions based on glibc `<2.28`, for example: Ubuntu 14-18, RHEL 7, CentOS 7, Amazon Linux 2. Addresses [#29601](https://github.com/cypress-io/cypress/issues/29601).
+- Cypress now only officially supports the latest 3 major versions of Chrome, Firefox, and Edge - older browser versions may still work, but we recommend keeping your browsers up to date to ensure compatibility with Cypress. A warning will no longer be displayed on browser selection in the Launchpad for any 'unsupported' browser versions. Additionally, the undocumented `minSupportedVersion` property has been removed from `Cypress.browser`. Addressed in [#30462](https://github.com/cypress-io/cypress/pull/30462).
+- The `cy.origin()` command must now be used when navigating between subdomains. Because this is a fairly disruptive change for users who frequently navigate between subdomains, a new configuration option is being introduced. `injectDocumentDomain` can be set to `true` in order to re-enable the injection of `document.domain` setters in Cypress. This configuration option is marked as deprecated and you'll receive a warning when Cypress is launched with this option set to `true`. It will be removed in a future version of Cypress. Addressed in [#30770](https://github.com/cypress-io/cypress/pull/30770).
+- The `experimentalSkipDomainInjection` configuration has been removed and replaced with an `injectDocumentDomain` configuration. Addressed in [#30770](https://github.com/cypress-io/cypress/pull/30770).
+- It is no longer possible to make a `fetch` or `XMLHttpRequest` request from the `about:blank` page in Electron (i.e. `cy.window().then((win) => win.fetch('http://github.com/%3Csome-url%3E'))`). You must use `cy.request` instead or perform some form of initial navigation via `cy.visit()`. Addressed in [#30394](https://github.com/cypress-io/cypress/pull/30394).
+- The `experimentalJustInTimeCompile` configuration option for component testing has been replaced with a `justInTimeCompile` option that is `true` by default. This option will only compile resources directly related to your spec, compiling them 'just-in-time' before spec execution. This should result in improved memory management and performance for component tests in `cypress open` and `cypress run` modes, in particular for large component testing suites. `justInTimeCompile` is now only supported for [`webpack`](https://www.npmjs.com/package/webpack). Addresses [#30234](https://github.com/cypress-io/cypress/issues/30234). Addressed in [#30641](https://github.com/cypress-io/cypress/pull/30641).
+- Cypress Component Testing no longer supports:
+ - `create-react-app`. Addresses [#30028](https://github.com/cypress-io/cypress/issues/30028).
+ - `@vue/cli-service`. Addresses [#30481](https://github.com/cypress-io/cypress/issues/30481).
+ - `Angular` versions 13, 14, 15, and 16. The minimum supported version is now `17.2.0` in order to fully support Angular [signals](https://angular.dev/guide/signals). Addresses [#29582](https://github.com/cypress-io/cypress/issues/29582). Addressed in [#30539](https://github.com/cypress-io/cypress/pull/30539).
+ - `Next.js` versions 10, 11, 12, and 13. Addresses [#29583](https://github.com/cypress-io/cypress/issues/29583).
+ - `Nuxt.js` version 2. Addresses [#30468](https://github.com/cypress-io/cypress/issues/30468).
+ - `React` versions 16 and 17. Addresses [#29607](https://github.com/cypress-io/cypress/issues/29607).
+ - `Svelte` versions 3 and 4. Addresses [#30492](https://github.com/cypress-io/cypress/issues/30492) and [#30692](https://github.com/cypress-io/cypress/issues/30692).
+ - `Vue` version 2. Addresses [#30295](https://github.com/cypress-io/cypress/issues/30295).
+- The `cypress/react18` test harness is no longer included in the Cypress binary. Instead, React 18 support is now shipped with `cypress/react`! Addresses [#29607](https://github.com/cypress-io/cypress/issues/29607).
+- The `cypress/angular-signals` test harness is no longer included in the Cypress binary. Instead, signals support is now shipped with `cypress/angular`! This requires `rxjs` to be installed as a `peerDependency`. Addresses [#29606](https://github.com/cypress-io/cypress/issues/29606).
+- The Cypress configuration wizard for Component Testing supports TypeScript 4.0 or greater. Addresses [#30493](https://github.com/cypress-io/cypress/issues/30493).
+- `@cypress/webpack-dev-server` no longer supports `webpack-dev-server` version 3. Additionally, `@cypress/webpack-dev-server` now ships with `webpack-dev-server` version 5 by default. `webpack-dev-server` version 4 will need to be installed alongside Cypress if you are still using `webpack` version 4. Addresses [#29308](https://github.com/cypress-io/cypress/issues/29308), [#30347](https://github.com/cypress-io/cypress/issues/30347), and [#30141](https://github.com/cypress-io/cypress/issues/30141).
+- `@cypress/vite-dev-server` no longer supports `vite` versions 2 and 3. Addresses [#29377](https://github.com/cypress-io/cypress/issues/29377) and [#29378](https://github.com/cypress-io/cypress/issues/29378).
+- The `delayMs` option of `cy.intercept()` has been removed. This option was deprecated in Cypress [6.4.0](#6-4-0). Please use the `delay` option instead. Addressed in [#30463](https://github.com/cypress-io/cypress/pull/30463).
+- The `experimentalFetchPolyfill` configuration option was removed. This option was deprecated in Cypress [6.0.0](#6-0-0). We recommend using `cy.intercept()` for handling fetch requests. Addressed in [#30466](https://github.com/cypress-io/cypress/pull/30466).
+- We removed yielding the second argument of `before:browser:launch` as an array of browser arguments. This behavior has been deprecated since Cypress [4.0.0](#4-0-0). Addressed in [#30460](https://github.com/cypress-io/cypress/pull/30460).
+- The `cypress open-ct` and `cypress run-ct` CLI commands were removed. Please use `cypress open --component` or `cypress run --component` respectively instead. Addressed in [#30456](https://github.com/cypress-io/cypress/pull/30456)
+- The undocumented methods `Cypress.backend('firefox:force:gc')` and `Cypress.backend('log:memory:pressure')` were removed. Addresses [#30222](https://github.com/cypress-io/cypress/issues/30222).
+
+**Deprecations:**
+
+- The `resourceType` option on `cy.intercept` has been deprecated. We anticipate the resource types to change or be completely removed in the future. Our intention is to replace essential functionality dependent on the `resourceType` within Cypress in a future version (like hiding network logs that are not fetch/xhr). Please leave feedback on any essential uses of `resourceType`
+ in this [GitHub issue](https://github.com/cypress-io/cypress/issues/30447). Addresses [#30433](https://github.com/cypress-io/cypress/issues/30433).
+- The new `injectDocumentDomain` configuration option is released as deprecated. It will be removed in a future version of Cypress. Addressed in [#30770](https://github.com/cypress-io/cypress/pull/30770).
+
+**Features:**
+
+- `injectDocumentDomain`, a new configuration option, can be set to `true` in order to re-enable the injection of `document.domain` setters in Cypress. Addressed in [#30770](https://github.com/cypress-io/cypress/pull/30770).
+- Cypress Component Testing now supports:
+ - `React` version 19. Addresses [#29470](https://github.com/cypress-io/cypress/issues/29470).
+ - `Angular` version 19. Addresses [#30175](https://github.com/cypress-io/cypress/issues/30175).
+ - `Next.js` version `>=15.0.4`. Versions `15.0.0 - 15.0.3` depend on the React 19 Release Candidate and are not officially supported by Cypress, but should still work. Addresses [#30445](https://github.com/cypress-io/cypress/issues/30445).
+ - `Svelte` version 5. Addresses [#29641](https://github.com/cypress-io/cypress/issues/29641).
+ - `Vite` version 6. Addresses [#30591](https://github.com/cypress-io/cypress/issues/30591).
+
+**Bugfixes:**
+
+- Elements with `display: contents` will no longer use box model calculations for visibility, and correctly show as visible when they are visible. Fixed in [#29680](https://github.com/cypress-io/cypress/pull/29680). Fixes [#29605](https://github.com/cypress-io/cypress/issues/29605).
+- Fixed a visibility issue when the element is positioned `static` or `relative` and the element's offset parent is positioned `absolute`, a descendent of the ancestor, and has no clippable overflow. Fixed in [#29689](https://github.com/cypress-io/cypress/pull/29689). Fixes [#28638](https://github.com/cypress-io/cypress/issues/28638).
+- Fixed a visibility issue for elements with `textContent` but without a width or height. Fixed in [#29688](https://github.com/cypress-io/cypress/pull/29688). Fixes [#29687](https://github.com/cypress-io/cypress/issues/29687).
+- Elements whose parent elements has `overflow: clip` and no height/width will now correctly show as hidden. Fixed in [#29778](https://github.com/cypress-io/cypress/pull/29778). Fixes [#23852](https://github.com/cypress-io/cypress/issues/23852).
+- The CSS pseudo-class `:dir()` is now supported when testing in Electron. Addresses [#29766](https://github.com/cypress-io/cypress/issues/29766).
+- Fixed an issue where the spec filename was not updating correctly when changing specs in `open` mode. Fixes [#30852](https://github.com/cypress-io/cypress/issues/30852).
+- `cy.origin()` now correctly errors when the [`cy.window()`](/api/commands/window), [`cy.document()`](/api/commands/document),
+ [`cy.title()`](/api/commands/title), [`cy.url()`](/api/commands/url), [`cy.location()`](/api/commands/location),
+ [`cy.hash()`](/api/commands/hash), [`cy.go()`](/api/commands/go), [`cy.reload()`](/api/commands/reload),
+ and [`cy.scrollTo()`](/api/commands/scrollto) commands are used outside of the `cy.origin()` command
+ after the AUT has navigated away from the primary origin.
+ Fixes [#30848](https://github.com/cypress-io/cypress/issues/30848).
+ Fixed in [#30858](https://github.com/cypress-io/cypress/pull/30858).
+
+**Misc:**
+
+- Removed some component testing API stubs that were removed in [Cypress v11.0.0](/app/references/migration-guide#Component-Testing-Updates). Addressed in [#30696](https://github.com/cypress-io/cypress/pull/30696). Addresses [#30623](https://github.com/cypress-io/cypress/issues/30623).
+
+**Dependency Updates:**
+
+- Upgraded `electron` from `27.3.10` to `33.2.1`. Addresses [#29547](https://github.com/cypress-io/cypress/issues/29547) and [#30561](https://github.com/cypress-io/cypress/issues/30561).
+- Upgraded `@electron/rebuild` from `3.2.10` to `3.7.1`. Addresses [#28766](https://github.com/cypress-io/cypress/issues/28766) and [#30632](https://github.com/cypress-io/cypress/issues/30632).
+- Upgraded bundled Chromium version from `118.0.5993.159` to `130.0.6723.137`. Addresses [#29547](https://github.com/cypress-io/cypress/issues/29547) and [#30561](https://github.com/cypress-io/cypress/issues/30561).
+- Updated `jQuery` from `3.4.1` to `3.7.1`. Addressed in [#30345](https://github.com/cypress-io/cypress/pull/30345).
+- Updated `react` from `17.0.2` to `18.3.1` and `react-dom` from `17.0.2` to `18.3.1`. Addresses [#30511](https://github.com/cypress-io/cypress/issues/30511).
+- Upgraded [`@vue/test-utils`](https://www.npmjs.com/package/@vue/test-utils) from `2.3.2` to `2.4.6`. Addresses [#26628](https://github.com/cypress-io/cypress/issues/26628).
+
+## 13.17.0
+
+_Released 12/17/2024_
+
+**Features:**
+
+- Added official support for the [Google Chrome for Testing](https://github.com/GoogleChromeLabs/chrome-for-testing) browser. Assuming the browser is in a location where it can be [auto-detected](/app/references/troubleshooting#Launching-browsers), it can be launched by providing the `--browser chrome-for-testing` option. If it can't be auto-detected, the path to the browser can also be provided. Previously [customizing the available browsers](/app/references/launching-browsers#Customize-available-browsers) was required. Addresses [#28123](https://github.com/cypress-io/cypress/issues/28123) and [#28554](https://github.com/cypress-io/cypress/issues/28554).
+
+**Bugfixes:**
+
+- Fixed an issue where targets may hang if `Network.enable` is not implemented for the target. Addresses [#29876](https://github.com/cypress-io/cypress/issues/29876).
+- Updated Firefox `userChrome.css` to correctly hide the toolbox during headless mode. Addresses [#30721](https://github.com/cypress-io/cypress/issues/30721).
+- Fixed an issue loading the `cypress.config.ts` file with Node.js version `22.12.0` if it is loaded as an ESM. Addresses [#30715](https://github.com/cypress-io/cypress/issues/30715).
+
+**Misc:**
+
+- Removed a comment from the scaffolded `supportFile` for component tests around CommonJS syntax. Addresses [#23287](https://github.com/cypress-io/cypress/issues/23287).
+
+**Dependency Updates:**
+
+- Updated `chai` from `4.2.0` to `4.5.0`. Addressed in [#30737](https://github.com/cypress-io/cypress/pull/30737).
+
+## 13.16.1
+
+_Released 12/04/2024_
+
+**Bugfixes:**
+
+- During recorded or parallel runs, execution will fail if Cypress is unable to confirm the creation of an instance instead of skipping the spec. Addresses [#30628](https://github.com/cypress-io/cypress/issues/30628).
+
+## 13.16.0
+
+_Released 11/19/2024_
+
+**Features:**
+
+- Added new [`defaultBrowser`](/app/references/configuration#Browser) configuration option to specify the default browser to launch. This option only affects the first browser launch; changing this option after the browser is already launched will have no effect. Addresses [#6646](https://github.com/cypress-io/cypress/issues/6646).
+
+**Bugfixes:**
+
+- Fixed an issue where some JS assets were not properly getting sourcemaps included with the vite dev server if they had a cache busting query parameter in the URL. Fixed some scenarios to ensure that the sourcemaps that were included by the vite dev server were inlined. Addressed in [#30606](https://github.com/cypress-io/cypress/pull/30606).
+
+**Misc:**
+
+- Updated the protocol to be able to flex logic based on project config. Addresses [#30560](https://github.com/cypress-io/cypress/issues/30560).
+
+## 13.15.2
+
+_Released 11/05/2024_
+
+**Bugfixes:**
+
+- Fixed an issue where the Cypress runner could hang in `after` or `afterEach` hooks that run Cypress commands after a page load timeout error occurs. Addresses [#30238](https://github.com/cypress-io/cypress/issues/30238).
+
+**Misc:**
+
+- Fixed a typo in CLI `global` option help text. Addresses [#30531](https://github.com/cypress-io/cypress/issues/30531).
+
+**Dependency Updates:**
+
+- Updated `mobx` from `5.15.4` to `6.13.5` and `mobx-react` from `6.1.8` to `9.1.1`. Addresses [#30509](https://github.com/cypress-io/cypress/issues/30509).
+- Updated `@cypress/request` from `3.0.4` to `3.0.6`. Addressed in [#30488](https://github.com/cypress-io/cypress/pull/30488).
+
+## 13.15.1
+
+_Released 10/24/2024_
+
+**Bugfixes:**
+
+- Patched [find-process](https://github.com/yibn2008/find-process) to fix an issue where trying to clean up browser profiles can throw an error on Windows. Addresses [#30378](https://github.com/cypress-io/cypress/issues/30378).
+- Fixed an issue where requests to the same resource in rapid succession may not have the appropriate static response intercept applied if there are multiple intercepts that apply for that resource. Addresses [#30375](https://github.com/cypress-io/cypress/issues/30375).
+
+**Misc:**
+
+- Cypress now consumes [geckodriver](https://firefox-source-docs.mozilla.org/testing/geckodriver/index.html) to help automate the Firefox browser instead of [marionette-client](https://github.com/cypress-io/marionette-client). Addresses [#30217](https://github.com/cypress-io/cypress/issues/30217).
+- Cypress now consumes [webdriver](https://github.com/webdriverio/webdriverio/tree/main/packages/webdriver) to help automate the Firefox browser and [firefox-profile](https://github.com/saadtazi/firefox-profile-js) to create a firefox profile and convert it to Base64 to save user screen preferences via `xulstore.json`. Addresses [#30300](https://github.com/cypress-io/cypress/issues/30300) and [#30301](https://github.com/cypress-io/cypress/issues/30301).
+- Spec information is now passed to protocol's `beforeSpec` to improve troubleshooting when reporting on errors. Addressed in [#30316](https://github.com/cypress-io/cypress/pull/30316).
+
+**Dependency Updates:**
+
+- Updated `simple-git` from `3.16.0` to `3.25.0`. Addressed in [#30076](https://github.com/cypress-io/cypress/pull/30076).
+
+## 13.15.0
+
+_Released 09/25/2024_
+
+**Features:**
+
+- Cypress now displays more actionable errors when a Test Replay upload takes too long, and more verbose messages when uncategorized errors occur during the upload process. Addressed in [#30235](https://github.com/cypress-io/cypress/pull/30235).
+
+**Bugfixes:**
+
+- Fixed an issue where Firefox was incorrectly mutating the state of click events on checkboxes after Firefox version `129` and up. Addressed in [#30245](https://github.com/cypress-io/cypress/pull/30245).
+- Fixed a regression introduced in [13.13.0](#13-13-0) where 'Open in IDE' would not work for filepaths containing spaces and various other characters on Windows. Addresses [#29820](https://github.com/cypress-io/cypress/issues/29820).
+
+**Misc:**
+
+- Pass along the related log to the `createSnapshot` function for protocol usage. Addressed in [#30244](https://github.com/cypress-io/cypress/pull/30244).
+
+**Dependency Updates:**
+
+- Update `@cypress/request` from `3.0.1` to `3.0.4`. Addressed in [#30194](https://github.com/cypress-io/cypress/pull/30194).
+- Updated `express` from `4.19.2` to `4.21.0`. This removes the [CVE-2024-43796](https://www.cve.org/CVERecord?id=CVE-2024-43796), [CVE-2024-45590](https://www.cve.org/CVERecord?id=CVE-2024-45590), and [CVE-2024-43800](https://www.cve.org/CVERecord?id=CVE-2024-43800) vulnerabilities being reported in security scans. Addresses [#30241](https://github.com/cypress-io/cypress/pull/30241).
+- Update `launch-editor` from `2.8.0` to `2.9.1`. Addressed in [#30247](https://github.com/cypress-io/cypress/pull/30247).
+- Updated `loader-utils` from `1.4.0` to `1.4.2`. This removes the [CVE-2022-37601](https://nvd.nist.gov/vuln/detail/CVE-2022-37601) vulnerability being reported in security scans. Addresses [#28208](https://github.com/cypress-io/cypress/issues/28208).
+- Updated `send` from `0.17.1` to `0.19.0`. This removes the [CVE-2024-43799](https://www.cve.org/CVERecord?id=CVE-2024-43799) vulnerability being reported in security scans. Addressed in [#30241](https://github.com/cypress-io/cypress/pull/30241).
+
+## 13.14.2
+
+_Released 09/04/2024_
+
+**Bugfixes:**
+
+- Fixed an issue where Cypress could crash with a `WebSocket Connection Closed` error. Fixes [#30100](https://github.com/cypress-io/cypress/issues/30100).
+- Fixed an issue where `cy.screenshot()` was timing out and Cypress was failing to start due to `GLib-GIO-ERROR` error. Reverts [#30109](https://github.com/cypress-io/cypress/pull/30109), the change to allow HiDPI screen for Wayland users. Fixes [#30172](https://github.com/cypress-io/cypress/issues/30172) and [#30160](https://github.com/cypress-io/cypress/issues/30160).
+
+## 13.14.1
+
+_Released 08/29/2024_
+
+**Bugfixes:**
+
+- Fixed an issue where no description was available for the `experimentalJustInTimeCompile` feature inside the Cypress application settings page. Addresses [#30126](https://github.com/cypress-io/cypress/issues/30126).
+
+## 13.14.0
+
+_Released 08/27/2024_
+
+**Performance:**
+
+- Fixed a potential memory leak in the Cypress server when re-connecting to an unintentionally disconnected CDP connection. Fixes [#29744](https://github.com/cypress-io/cypress/issues/29744). Addressed in [#29988](https://github.com/cypress-io/cypress/pull/29988).
+
+**Features:**
+
+- Added new
+ [`experimentalJustInTimeCompile`](/app/references/experiments#Configuration)
+ configuration option for component testing. This option will only compile resources directly related to your spec, compiling
+ them 'just-in-time' before spec execution. This should result in improved memory management and performance for component
+ tests in `cypress open` and `cypress run` modes, in particular for large component testing suites. [`experimentalJustInTimeCompile`](/app/references/experiments#Configuration) is currently supported for [`webpack`](https://www.npmjs.com/package/webpack) and [`vite`](https://www.npmjs.com/package/vite). Addresses [#29244](https://github.com/cypress-io/cypress/issues/29244).
+- `.type({upArrow})` and `.type({downArrow})` now also works for date, month, week, time, datetime-local and range input types. Addresses [#29665](https://github.com/cypress-io/cypress/issues/29665).
+- Added a `CYPRESS_SKIP_VERIFY` flag to enable suppressing Cypress verification checks. Addresses [#22243](https://github.com/cypress-io/cypress/issues/22243).
+- Updated the protocol to allow making Cloud API requests. Addressed in [#30066](https://github.com/cypress-io/cypress/pull/30066).
+- Passing `--browser` flag alone will automatically launch browser after being guided through project and/or testing type selection. Addressed in [#28538](https://github.com/cypress-io/cypress/pull/28538).
+
+**Bugfixes:**
+
+- Fixed an issue where files outside the Cypress project directory were not calculating the bundle output path correctly for the `file:preprocessor`. Addresses [#8599](https://github.com/cypress-io/cypress/issues/8599).
+- Fixed an issue where Cypress would not run if Node.js version `22.7.0` was being used with TypeScript and ES Modules. Fixes [#30084](https://github.com/cypress-io/cypress/issues/30084).
+- Correctly determines current browser family when choosing between `unload` and `pagehide` options in App Runner. Fixes [#29880](https://github.com/cypress-io/cypress/issues/29880).
+
+**Misc:**
+
+- Allow HiDPI screen running Wayland to use Cypress window/browser by adding `--ozone-platform-hint=auto` flag to Electron's runtime argument. Addresses [#20891](https://github.com/cypress-io/cypress/issues/20891).
+
+**Dependency Updates:**
+
+- Updated `detect-port` from `1.3.0` to `1.6.1`. Addressed in [#30038](https://github.com/cypress-io/cypress/pull/30038).
+
+## 13.13.3
+
+_Released 08/14/2024_
+
+**Bugfixes:**
+
+- A console error will no longer display in Chrome about a deprecated unload call originating from jQuery. Addressed in [#29944](https://github.com/cypress-io/cypress/pull/29944).
+- Fixed an issue where certain Test Replay upload error messages were too vague. Connection failures now report the precise system error, and the stall error message is reported rather than the vague, "The user aborted a request." Addressed in [#29959](https://github.com/cypress-io/cypress/pull/29959).
+
+**Misc:**
+
+- Updated `cypress open` hints displayed after Cypress binary install. Addresses [#29935](https://github.com/cypress-io/cypress/issues/29935).
+
+**Dependency Updates:**
+
+- Updated `image-size` from `0.8.3` to `1.1.1`. Addressed in [#30023](https://github.com/cypress-io/cypress/pull/30023).
+
+## 13.13.2
+
+_Released 07/31/2024_
+
+**Performance:**
+
+- Fixed a memory leak with command logs with Test Replay enabled. Addressed in [#29939](https://github.com/cypress-io/cypress/pull/29939).
+- Improved performance of `reduce` in a method within our proxy. Addressed in [#29887](https://github.com/cypress-io/cypress/pull/29887).
+
+**Bugfixes:**
+
+- Fixed an issue where Yarn PnP was not working correctly with Cypress and `@cypress/webpack-batteries-included-preprocessor`. Fixes [#27947](https://github.com/cypress-io/cypress/issues/27947).
+
+**Dependency Updates:**
+
+- Updated `@cypress/request` from `3.0.0` to `3.0.1`. Addresses [#29863](https://github.com/cypress-io/cypress/issues/29863).
+- Updated `chrome-remote-interface` from `0.33.0` to `0.33.2`. Addressed in [#29932](https://github.com/cypress-io/cypress/pull/29932).
+- Updated `mime` from `2.4.4` to `2.6.0`. Addressed in [#29870](https://github.com/cypress-io/cypress/pull/29870).
+- Updated `strip-ansi` from `6.0.0` to `6.0.1`. Addressed in [#29931](https://github.com/cypress-io/cypress/pull/29931).
+
+## 13.13.1
+
+_Released 07/16/2024_
+
+**Bugfixes:**
+
+- Fixed an issue where unhandled `WebSocket connection closed` exceptions would be thrown when CDP connections rapidly connect, disconnect, and connect again while there are pending commands. Fixes [#29572](https://github.com/cypress-io/cypress/issues/29572).
+- CLI output properly displays non-JSON response bodies when a Test Replay upload attempt returns a non-JSON response body for a non-200 status code. Addressed in [#29801](https://github.com/cypress-io/cypress/pull/29801).
+- Fixed an issue where the ReadStream used to upload a Test Replay recording could erroneously be re-used when retrying in cases of retryable upload failures. Fixes [#29227](https://github.com/cypress-io/cypress/issues/29227).
+- Fixed an issue where command snapshots were not being captured within the [`cy.origin()`](/api/commands/origin) command within Test Replay. Addressed in [#29828](https://github.com/cypress-io/cypress/pull/29828).
+
+**Dependency Updates:**
+
+- Updated `jquery` from `3.1.1` to `3.4.1`. Addresses [#29822](https://github.com/cypress-io/cypress/issues/29822). Addressed in [#29837](https://github.com/cypress-io/cypress/pull/29837).
+- Replaced `json-lint` with `json-parse-even-better-errors`. This removes the [CVE-2021-23358](https://nvd.nist.gov/vuln/detail/CVE-2021-23358) vulnerability being reported in security scans. Addresses [#28207](https://github.com/cypress-io/cypress/issues/28207).
+- Updated `minimatch` from `3.0.4` to `3.1.2`. Addressed in [#29821](https://github.com/cypress-io/cypress/pull/29821).
+
+## 13.13.0
+
+_Released 07/02/2024_
+
+**Performance:**
+
+- Improved performance of `experimentalSourceRewriting` option. Fixed in [#29540](https://github.com/cypress-io/cypress/pull/29540).
+
+**Features:**
+
+- Adds Signal support for Angular Component Testing versions 17.2 and up. Addresses [#29264](https://github.com/cypress-io/cypress/issues/29264).
+
+**Bugfixes:**
+
+- Fixed an issue where Chrome launch instances would not recreate the browser CRI client correctly after recovering from an unexpected browser closure. Fixes [#27657](https://github.com/cypress-io/cypress/issues/27657). Fixed in [#29663](https://github.com/cypress-io/cypress/pull/29663).
+- Fixed an issue where Firefox 129 (Firefox Nightly) would not launch with Cypress. Fixes [#29713](https://github.com/cypress-io/cypress/issues/29713). Fixed in [#29720](https://github.com/cypress-io/cypress/pull/29720).
+
+**Dependency Updates:**
+
+- Updated `launch-editor` from `2.3.0` to `2.8.0`. Addressed in [#29770](https://github.com/cypress-io/cypress/pull/29770).
+- Updated `memfs` from `3.4.12` to `3.5.3`. Addressed in [#29746](https://github.com/cypress-io/cypress/pull/29746).
+- Updated `tmp` from `0.2.1` to `0.2.3`. Addresses [#29693](https://github.com/cypress-io/cypress/issues/29693).
+- Updated `ws` from `5.2.3` to `5.2.4`. Addressed in [#29698](https://github.com/cypress-io/cypress/pull/29698).
+
+## 13.12.0
+
+_Released 06/18/2024_
+
+**Features:**
+
+- Added Component Testing support for Angular version 18. Addresses [#29309](https://github.com/cypress-io/cypress/issues/29309).
+
+**Bugfixes:**
+
+- We now trigger `input` and `change` events when typing `{upArrow}` and `{downArrow}` via `.type()` on `input[type=number]` elements. Fixes [#29611](https://github.com/cypress-io/cypress/issues/29611).
+- Fixed an issue where auto scrolling the reporter would sometimes be disabled without the user's intent. Fixes [#25084](https://github.com/cypress-io/cypress/issues/25084).
+- Fixed an issue where `inlineSourceMaps` was still being used when `sourceMaps` was provided in a user's TypeScript config for TypeScript version 5. Fixes [#26203](https://github.com/cypress-io/cypress/issues/26203).
+- When capture protocol script fails verification, an appropriate error is now displayed. Previously, an error regarding Test Replay archive location was shown. Addressed in [#29603](https://github.com/cypress-io/cypress/pull/29603).
+- Fixed an issue where receiving HTTP responses with invalid headers raised an error. Now Cypress removes the invalid headers and gives a warning in the console with debug mode on. Fixes [#28865](https://github.com/cypress-io/cypress/issues/28865).
+
+**Misc:**
+
+- Report afterSpec durations to Cloud API when running in record mode with Test Replay enabled. Addressed in [#29500](https://github.com/cypress-io/cypress/pull/29500).
+
+**Dependency Updates:**
+
+- Updated `firefox-profile` from `4.3.1` to `4.6.0`. Addressed in [#29662](https://github.com/cypress-io/cypress/pull/29662).
+- Updated `typescript` from `4.7.4` to `5.3.3`. Addressed in [#29568](https://github.com/cypress-io/cypress/pull/29568).
+- Updated `url-parse` from `1.5.9` to `1.5.10`. Addressed in [#29650](https://github.com/cypress-io/cypress/pull/29650).
+
+## 13.11.0
+
+_Released 06/04/2024_
+
+**Performance:**
+
+- Improved performance when setting console props within `Cypress.log`. Addressed in [#29501](https://github.com/cypress-io/cypress/pull/29501).
+
+**Features:**
+
+- Added support for [Next.js 14](https://nextjs.org/blog/next-14) for component testing. Addresses [#28185](https://github.com/cypress-io/cypress/issues/28185).
+- Added an `IGNORE_CHROME_PREFERENCES` environment variable to ignore Chrome preferences when launching Chrome. Addresses [#29330](https://github.com/cypress-io/cypress/issues/29330).
+
+**Bugfixes:**
+
+- Fixed a situation where the Launchpad would hang if the project config had not been loaded when the Launchpad first queries the current project. Fixes [#29486](https://github.com/cypress-io/cypress/issues/29486).
+- Pre-emptively fix behavior with Chrome for when `unload` events are forcefully deprecated by using `pagehide` as a proxy. Fixes [#29241](https://github.com/cypress-io/cypress/issues/29241).
+
+**Misc:**
+
+- Enhanced the type definitions available to [`cy.intercept()`](/api/commands/intercept) and [`cy.wait()`](/api/commands/wait). The `body` property of both the request and response in an interception can optionally be specified with user-defined types. Addresses [#29507](https://github.com/cypress-io/cypress/issues/29507).
+
+## 13.10.0
+
+_Released 05/21/2024_
+
+**Features:**
+
+- Added support for `vite` [`v5`](https://vitejs.dev/blog/announcing-vite5) to `@cypress/vite-dev-server`. Addresses [#28347](https://github.com/cypress-io/cypress/issues/28347).
+
+**Bugfixes:**
+
+- Fixed an issue where orphaned Electron processes were inadvertently terminating the browser's CRI client. Fixes [#28397](https://github.com/cypress-io/cypress/issues/28397). Fixed in [#29515](https://github.com/cypress-io/cypress/pull/29515).
+- Fixed an issue where Cypress would use the wrong URL to upload Test Replay recordings when it wasn't able to determine the upload URL. It now displays an error when the upload URL cannot be determined, rather than a "Request Entity Too Large" error. Addressed in [#29512](https://github.com/cypress-io/cypress/pull/29512).
+- Fixed an issue where Cypress was unable to search in the Specs list for files or folders containing numbers. Fixes [#29034](https://github.com/cypress-io/cypress/issues/29034).
+- Fixed an issue setting the `x-cypress-file-path` header when there are invalid header characters in the file path. Fixes [#25839](https://github.com/cypress-io/cypress/issues/25839).
+- Fixed the display of some command assertions. Fixed in [#29517](https://github.com/cypress-io/cypress/pull/29517).
+
+**Dependency Updates:**
+
+- Updated `js-cookie` from `2.2.1` to `3.0.5`. Addressed in [#29497](https://github.com/cypress-io/cypress/pull/29497).
+- Updated `randomstring` from `1.1.5` to `1.3.0`. Addressed in [#29503](https://github.com/cypress-io/cypress/pull/29503).
+
+## 13.9.0
+
+_Released 05/07/2024_
+
+**Features:**
+
+- Added more descriptive error messages when Test Replay fails to record or upload. Addresses [#29022](https://github.com/cypress-io/cypress/issues/29022).
+
+**Bugfixes:**
+
+- Fixed a bug where promises rejected with `undefined` were failing inside `cy.origin()`. Addresses [#23937](https://github.com/cypress-io/cypress/issues/23937).
+- We now pass the same default Chromium flags to Electron as we do to Chrome. As a result of this change, the application under test's `navigator.webdriver` property will now correctly be `true` when testing in Electron. Fixes [#27939](https://github.com/cypress-io/cypress/issues/27939).
+- Fixed network issues in requests using fetch for users where Cypress is run behind a proxy that performs HTTPS decryption (common among corporate proxies). Fixes [#29171](https://github.com/cypress-io/cypress/issues/29171).
+- Fixed an issue where extra windows weren't being closed between specs in Firefox causing potential issues in subsequent specs. Fixes [#29473](https://github.com/cypress-io/cypress/issues/29473).
+
+**Misc:**
+
+- Improved accessibility of the Cypress App in some areas. Addressed in [#29322](https://github.com/cypress-io/cypress/pull/29322).
+
+**Dependency Updates:**
+
+- Updated `electron` from `27.1.3` to `27.3.10` to address [CVE-2024-3156](https://nvd.nist.gov/vuln/detail/CVE-2024-3156). Addressed in [#29431](https://github.com/cypress-io/cypress/pull/29431).
+
+## 13.8.1
+
+_Released 04/23/2024_
+
+**Performance:**
+
+- Fixed a performance issue with activated service workers that aren't controlling clients which could lead to correlation timeouts. Fixes [#29333](https://github.com/cypress-io/cypress/issues/29333) and [#29126](https://github.com/cypress-io/cypress/issues/29126).
+
+**Bugfixes:**
+
+- Fixed a regression introduced in [13.6.0](#13-6-0) where Cypress would occasionally exit with status code 1, even when a test run was successful, due to an unhandled WebSocket exception (`Error: WebSocket connection closed`). Addresses [#28523](https://github.com/cypress-io/cypress/issues/28523).
+- Fixed an issue where Cypress would hang on some commands when an invalid `timeout` option was provided. Fixes [#29323](https://github.com/cypress-io/cypress/issues/29323).
+
+**Misc:**
+
+- `.its()` type now excludes null and undefined. Fixes [#28872](https://github.com/cypress-io/cypress/issues/28872).
+
+**Dependency Updates:**
+
+- Updated `zod` from `3.20.3` to `3.22.5`. Addressed in [#29367](https://github.com/cypress-io/cypress/pull/29367).
+
+## 13.8.0
+
+_Released 04/18/2024_
+
+**Features:**
+
+- Added support for `webpack-dev-server` `v5` to `@cypress/webpack-dev-server`. Addresses [#29305](https://github.com/cypress-io/cypress/issues/29305).
+
+**Bugfixes:**
+
+- Fixed a regression introduced in [13.7.3](#13-7-3) where Cypress could hang handling long assertion messages. Fixes [#29350](https://github.com/cypress-io/cypress/issues/29350).
+
+**Misc:**
+
+- The [`SEMAPHORE_GIT_PR_NUMBER`](https://docs.semaphoreci.com/ci-cd-environment/environment-variables/#semaphore_git_pr_number) environment variable from [Semaphore](https://semaphoreci.com/) CI is now captured to display the linked PR number in the Cloud. Addressed in [#29314](https://github.com/cypress-io/cypress/pull/29314).
+
+## 13.7.3
+
+_Released 04/11/2024_
+
+**Bugfixes:**
+
+- Fixed an issue where asserts with custom messages weren't displaying properly. Fixes [#29167](https://github.com/cypress-io/cypress/issues/29167).
+- Fixed an issue where Cypress launch arguments were not being escaped correctly with multiple values inside quotes. Fixes [#27454](https://github.com/cypress-io/cypress/issues/27454).
+
+**Misc:**
+
+- Updated the Chrome flags to not show the "Enhanced Ad Privacy" dialog. Addresses [#29199](https://github.com/cypress-io/cypress/issues/29199).
+- Suppresses benign warnings that reference Vulkan on GPU-less hosts. Addresses [#29085](https://github.com/cypress-io/cypress/issues/29085). Addressed in [#29278](https://github.com/cypress-io/cypress/pull/29278).
+
+## 13.7.2
+
+_Released 04/02/2024_
+
+**Performance:**
+
+- Improvements to Test Replay upload resiliency. Fixes [#28890](https://github.com/cypress-io/cypress/issues/28890). Addressed in [#29174](https://github.com/cypress-io/cypress/pull/29174).
+
+**Bugfixes:**
+
+- Fixed an issue where Cypress was not executing beyond the first spec in `cypress run` for versions of Firefox 124 and up when a custom user agent was provided. Fixes [#29190](https://github.com/cypress-io/cypress/issues/29190).
+- Fixed a bug where fields using arrays in `cypress.config` are not correctly processed. Fixes [#27103](https://github.com/cypress-io/cypress/issues/27103). Fixed in [#27312](https://github.com/cypress-io/cypress/pull/27312).
+- Fixed a hang where Cypress would run indefinitely while recording to the cloud when CDP disconnects during the middle of a test. Fixes [#29209](https://github.com/cypress-io/cypress/issues/29209).
+- Fixed a bug where option values containing quotation marks could not be selected. Fixes [#29213](https://github.com/cypress-io/cypress/issues/29213).
+
+**Dependency Updates:**
+
+- Updated `express` from `4.17.3` to `4.19.2`. Addressed in [#29211](https://github.com/cypress-io/cypress/pull/29211).
+
+## 13.7.1
+
+_Released 03/21/2024_
+
+**Bugfixes:**
+
+- Fixed an issue where Cypress was not executing beyond the first spec in `cypress run` for versions of Firefox 124 and up. Fixes [#29172](https://github.com/cypress-io/cypress/issues/29172).
+- Fixed an issue blurring shadow dom elements. Fixed in [#29125](https://github.com/cypress-io/cypress/pull/29125).
+
+**Dependency Updates:**
+
+- Updated `jose` from `4.11.2` to `4.15.5`. Addressed in [#29086](https://github.com/cypress-io/cypress/pull/29086).
+
+## 13.7.0
+
+_Released 03/13/2024_
+
+**Features:**
+
+- Added shadow DOM snapshot support within Test Replay in order to highlight elements correctly within the Cypress reporter. Addressed in [#28823](https://github.com/cypress-io/cypress/pull/28823).
+- Added TypeScript support for [Vue 2.7+](https://github.com/vuejs/vue/blob/main/CHANGELOG.md#270-2022-07-01). Addresses [#28591](https://github.com/cypress-io/cypress/issues/28591).
+- Adds additional context to error messages displayed when Test Replay artifacts fail to upload. Addressed in [#28986](https://github.com/cypress-io/cypress/pull/28986).
+
+**Performance:**
+
+- Fixed a performance regression from [13.6.3](#13-6-3) where unhandled service worker requests may not correlate correctly. Fixes [#28868](https://github.com/cypress-io/cypress/issues/28868).
+- Reduces the number of attempts to retry failed Test Replay artifact uploads from 8 to 3, to reduce time spent on artifact upload attempts that will not succeed. Addressed in [#28986](https://github.com/cypress-io/cypress/pull/28986).
+
+**Bugfixes:**
+
+- Changed screenshot capture behavior in Chromium to activate the main Cypress tab before capturing. This prevents screenshot capture from timing out in certain situations. Fixed in [#29038](https://github.com/cypress-io/cypress/pull/29038). Fixes [#5016](https://github.com/cypress-io/cypress/issues/5016)
+- Fixed an issue where `.click()` commands on children of disabled elements would still produce "click" events -- even without `{ force: true }`. Fixes [#28788](https://github.com/cypress-io/cypress/issues/28788).
+- Changed RequestBody type to allow for boolean and null literals to be passed as body values. [#28789](https://github.com/cypress-io/cypress/issues/28789).
+
+**Misc:**
+
+- Changed Component Testing scaffolding instruction to `pnpm add` to add framework dependencies when a project uses `pnpm` as package manager. Addresses [#29052](https://github.com/cypress-io/cypress/issues/29052).
+- Command messages in the Cypress command logs will now truncate display at 100 lines instead of 50. Fixes [#29023](https://github.com/cypress-io/cypress/issues/29023).
+- Capture the `beforeTest` timestamp inside the browser for the purposes of accurately determining test start for Test Replay. Addressed in [#29061](https://github.com/cypress-io/cypress/pull/29061).
+
+**Dependency Updates:**
+
+- Updated [`jimp`](https://www.npmjs.com/package/jimp) from `0.14.0` to `0.22.12`. Addressed in [#29055](https://github.com/cypress-io/cypress/pull/29055).
+- Updated [`http-proxy-middleware`](https://www.npmjs.com/package/http-proxy-middleware) from `2.0.4` to `2.0.6`. Addressed in [#28902](https://github.com/cypress-io/cypress/pull/28902).
+- Updated [`signal-exit`](https://www.npmjs.com/package/signal-exit) from `3.0.3` to `3.0.7`. Addressed in [#28979](https://github.com/cypress-io/cypress/pull/28979).
+
+## 13.6.6
+
+_Released 02/22/2024_
+
+**Bugfixes:**
+
+- Fixed a regression introduced in [13.6.5](#13-6-5) where `cypress verify` would fail for [`nx`](https://nx.dev/) users. Fixes [#28982](https://github.com/cypress-io/cypress/issues/28982).
+
+## 13.6.5
+
+_Released 02/20/2024_
+
+**Bugfixes:**
+
+- Fixed tests hanging when the Chrome browser extension is disabled. Fixes [#28392](https://github.com/cypress-io/cypress/issues/28392).
+- Fixed an issue which caused the browser to relaunch after closing the browser from the Launchpad. Fixes [#28852](https://github.com/cypress-io/cypress/issues/28852).
+- Fixed an issue with the unzip promise never being rejected when an empty error happens. Fixed in [#28850](https://github.com/cypress-io/cypress/pull/28850).
+- Fixed a regression introduced in [13.6.3](#13-6-3) where Cypress could crash when processing service worker requests through our proxy. Fixes [#28950](https://github.com/cypress-io/cypress/issues/28950).
+- Fixed incorrect type definition of `dom.getContainsSelector`. Fixed in [#28339](https://github.com/cypress-io/cypress/pull/28339).
+
+**Misc:**
+
+- Improved accessibility of the Cypress App in some areas. Addressed in [#28774](https://github.com/cypress-io/cypress/pull/28774).
+- Changed references of LayerCI to webapp.io. Addressed in [#28874](https://github.com/cypress-io/cypress/pull/28874).
+
+**Dependency Updates:**
+
+- Upgraded `electron` from `25.8.4` to `27.1.3`.
+- Upgraded bundled Node.js version from `18.15.0` to `18.17.0`.
+- Upgraded bundled Chromium version from `114.0.5735.289` to `118.0.5993.117`.
+- Updated `buffer` from `5.6.0` to `5.7.1`. Addressed in [#28934](https://github.com/cypress-io/cypress/pull/28934).
+- Updated [`duplexify`](https://www.npmjs.com/package/duplexify) from `4.1.1` to `4.1.2`. Addressed in [#28941](https://github.com/cypress-io/cypress/pull/28941).
+- Updated [`is-ci`](https://www.npmjs.com/package/is-ci) from `3.0.0` to `3.0.1`. Addressed in [#28933](https://github.com/cypress-io/cypress/pull/28933).
+
+## 13.6.4
+
+_Released 01/30/2024_
+
+**Performance:**
+
+- Fixed a performance regression from [13.3.2](#13-3-2) where aborted requests may not correlate correctly. Fixes [#28734](https://github.com/cypress-io/cypress/issues/28734).
+
+**Bugfixes:**
+
+- Fixed an issue with capturing assets for Test Replay when service workers are registered in Cypress support files. This issue would cause styles to not render properly in Test Replay. Fixes [#28747](https://github.com/cypress-io/cypress/issues/28747).
+
+**Misc:**
+
+- Added missing properties to the `Cypress.spec` interface for TypeScript users. Addresses [#27835](https://github.com/cypress-io/cypress/issues/27835).
+
+## 13.6.3
+
+_Released 01/16/2024_
+
+**Bugfixes:**
+
+- Force `moduleResolution` to `node` when TypeScript projects are detected to correctly run Cypress. This change should not have a large impact as `commonjs` is already forced when `ts-node` is registered. This fix does not impact the ESM TypeScript configuration loader. Fixes [#27731](https://github.com/cypress-io/cypress/issues/27731).
+- No longer wait for additional frames when recording a video for a spec that was skipped by the Cloud due to Auto Cancellation. Fixes [#27898](https://github.com/cypress-io/cypress/issues/27898).
+- Now `node_modules` will not be ignored if a project path or a provided path to spec files contains it. Fixes [#23616](https://github.com/cypress-io/cypress/issues/23616).
+- Updated display of assertions and commands with a URL argument to escape markdown formatting so that values are displayed as is and assertion values display as bold. Fixes [#24960](https://github.com/cypress-io/cypress/issues/24960) and [#28100](https://github.com/cypress-io/cypress/issues/28100).
+- When generating assertions via Cypress Studio, the preview of the generated assertions now correctly displays the past tense of 'expected' instead of 'expect'. Fixed in [#28593](https://github.com/cypress-io/cypress/pull/28593).
+- Fixed a regression in [13.6.2](#13-6-2) where the `body` element was not highlighted correctly in Test Replay. Fixed in [#28627](https://github.com/cypress-io/cypress/pull/28627).
+- Correctly sync `Cypress.currentRetry` with secondary origin so test retries that leverage [`cy.origin()`](/api/commands/origin) render logs as expected. Fixes [#28574](https://github.com/cypress-io/cypress/issues/28574).
+- Fixed an issue where some cross-origin logs, like assertions or cy.clock(), were getting too many dom snapshots. Fixes [#28609](https://github.com/cypress-io/cypress/issues/28609).
+- Fixed asset capture for Test Replay for requests that are routed through service workers. This addresses an issue where styles were not being applied properly in Test Replay and [`cy.intercept()`](/api/commands/intercept) was not working properly for requests in this scenario. Fixes [#28516](https://github.com/cypress-io/cypress/issues/28516).
+- Fixed an issue where visiting an `http://` site would result in an infinite reload/redirect loop in Chrome 114+. Fixes [#25891](https://github.com/cypress-io/cypress/issues/25891).
+- Fixed an issue where requests made from extra tabs do not include their original headers. Fixes [#28641](https://github.com/cypress-io/cypress/issues/28641).
+- Fixed an issue where [`cy.wait()`](/api/commands/wait) would sometimes throw an error reading a property of undefined when returning responses. Fixes [#28233](https://github.com/cypress-io/cypress/issues/28233).
+
+**Performance:**
+
+- Fixed a performance regression from [13.3.2](#13-3-2) where requests may not correlate correctly when test isolation is off. Fixes [#28545](https://github.com/cypress-io/cypress/issues/28545).
+
+**Dependency Updates:**
+
+- Remove dependency on `@types/node` package. Addresses [#28473](https://github.com/cypress-io/cypress/issues/28473).
+- Updated [`@cypress/unique-selector`](https://www.npmjs.com/package/@cypress/unique-selector) to include a performance optimization. It's possible this could improve performance of the selector playground. Addressed in [#28571](https://github.com/cypress-io/cypress/pull/28571).
+- Replace [`CircularJSON`](https://www.npmjs.com/package/circular-json) with its successor [`flatted`](https://www.npmjs.com/package/flatted) version `3.2.9`. This resolves decoding issues observed in complex objects sent from the browser. Addressed in [#28683](https://github.com/cypress-io/cypress/pull/28683).
+- Updated [`better-sqlite3`](https://www.npmjs.com/package/better-sqlite3) from `8.7.0` to `9.2.2` to fix macOS Catalina issues. Addresses [#28697](https://github.com/cypress-io/cypress/issues/28697).
+
+**Misc:**
+
+- Improved accessibility of some areas of the Cypress App. Addressed in [#28628](https://github.com/cypress-io/cypress/pull/28628).
+- Updated some documentation links to go through on.cypress.io. Addressed in [#28623](https://github.com/cypress-io/cypress/pull/28623).
+
+## 13.6.2
+
+_Released 12/26/2023_
+
+**Bugfixes:**
+
+- Fixed a regression in [13.6.1](#13-6-1) where a malformed URI would crash Cypress. Fixes [#28521](https://github.com/cypress-io/cypress/issues/28521).
+- Fixed a regression in [12.4.0](#12-4-0) where erroneous ` ` tags were displaying in error messages in the Command Log making them less readable. Fixes [#28452](https://github.com/cypress-io/cypress/issues/28452).
+
+**Performance:**
+
+- Improved performance when finding unique selectors for command log snapshots for Test Replay. Addressed in [#28536](https://github.com/cypress-io/cypress/pull/28536).
+
+**Dependency Updates:**
+
+- Updated `ts-node` from `10.9.1` to `10.9.2`. Cypress will longer error during `cypress run` or `cypress open` when using typescript 5.3.2+ with `extends` in `tsconfig.json`. Addresses [#28385](https://github.com/cypress-io/cypress/issues/28385).
+
+## 13.6.1
+
+_Released 12/05/2023_
+
+**Bugfixes:**
+
+- Fixed an issue where pages or downloads opened in a new tab were missing basic auth headers. Fixes [#28350](https://github.com/cypress-io/cypress/issues/28350).
+- Fixed an issue where request logging would default the `message` to the `args` of the currently running command even though those `args` would not apply to the request log and are not displayed. If the `args` are sufficiently large (e.g. when running the `cy.task` from the [code-coverage](https://github.com/cypress-io/code-coverage/) plugin) there could be performance/memory implications. Addressed in [#28411](https://github.com/cypress-io/cypress/pull/28411).
+- Fixed an issue where commands would fail with the error `must only be invoked from the spec file or support file` if the project's `baseUrl` included basic auth credentials. Fixes [#27457](https://github.com/cypress-io/cypress/issues/27457) and [#28336](https://github.com/cypress-io/cypress/issues/28336).
+- Fixed an issue where some URLs would timeout in pre-request correlation. Addressed in [#28427](https://github.com/cypress-io/cypress/pull/28427).
+- Cypress will now correctly log errors and debug logs on Linux machines. Fixes [#5051](https://github.com/cypress-io/cypress/issues/5051) and [#24713](https://github.com/cypress-io/cypress/issues/24713).
+
+**Misc:**
+
+- Artifact upload duration is now reported to Cypress Cloud. Fixes [#28238](https://github.com/cypress-io/cypress/issues/28238). Addressed in [#28418](https://github.com/cypress-io/cypress/pull/28418).
+
+## 13.6.0
+
+_Released 11/21/2023_
+
+**Features:**
+
+- Added an activity indicator to CLI output when artifacts (screenshots, videos, or Test Replay) are being uploaded to the cloud. Addresses [#28239](https://github.com/cypress-io/cypress/issues/28239). Addressed in [#28277](https://github.com/cypress-io/cypress/pull/28277).
+- When artifacts are uploaded to the Cypress Cloud, the duration of each upload will be displayed in the terminal. Addresses [#28237](https://github.com/cypress-io/cypress/issues/28237).
+
+**Bugfixes:**
+
+- We now allow absolute paths when setting `component.indexHtmlFile` in the Cypress config. Fixes [#27750](https://github.com/cypress-io/cypress/issues/27750).
+- Fixed an issue where dynamic intercept aliases now show with alias name instead of "no alias" in driver. Addresses [#24653](https://github.com/cypress-io/cypress/issues/24653)
+- Fixed an issue where [aliasing individual requests](/api/commands/intercept#Aliasing-individual-requests) with `cy.intercept()` led to an error when retrieving all of the aliases with `cy.get(@alias.all)` . Addresses [#25448](https://github.com/cypress-io/cypress/issues/25448)
+- The URL of the application under test and command error "Learn more" links now open externally instead of in the Cypress-launched browser. Fixes [#24572](https://github.com/cypress-io/cypress/issues/24572).
+- Fixed issue where some URLs would timeout in pre-request correlation. Addressed in [#28354](https://github.com/cypress-io/cypress/pull/28354).
+
+**Misc:**
+
+- Browser tabs and windows other than the Cypress tab are now closed between tests in Chromium-based browsers. Addressed in [#28204](https://github.com/cypress-io/cypress/pull/28204).
+- Cypress now ensures the main browser tab is active before running each command in Chromium-based browsers. Addressed in [#28334](https://github.com/cypress-io/cypress/pull/28334).
+
+**Dependency Updates:**
+
+- Upgraded [`chrome-remote-interface`](https://www.npmjs.com/package/chrome-remote-interface) from `0.31.3` to `0.33.0` to increase the max payload from 100MB to 256MB. Addressed in [#27998](https://github.com/cypress-io/cypress/pull/27998).
+
+## 13.5.1
+
+_Released 11/14/2023_
+
+**Bugfixes:**
+
+- Fixed a regression in [13.5.0](#13-5-0) where requests cached within a given spec may take longer to load than they did previously. Addresses [#28295](https://github.com/cypress-io/cypress/issues/28295).
+- Fixed an issue where pages opened in a new tab were missing response headers, causing them not to load properly. Fixes [#28293](https://github.com/cypress-io/cypress/issues/28293) and [#28303](https://github.com/cypress-io/cypress/issues/28303).
+- We now pass a flag to Chromium browsers to disable default component extensions. This is a common flag passed during browser automation. Fixed in [#28294](https://github.com/cypress-io/cypress/pull/28294).
+
+## 13.5.0
+
+_Released 11/08/2023_
+
+**Features:**
+
+- Added Component Testing support for [Angular](https://angular.io/) version 17. Addresses [#28153](https://github.com/cypress-io/cypress/issues/28153).
+
+**Bugfixes:**
+
+- Fixed an issue in chromium based browsers, where global style updates can trigger flooding of font face requests in DevTools and Test Replay. This can affect performance due to the flooding of messages in CDP. Fixes [#28150](https://github.com/cypress-io/cypress/issues/28150) and [#28215](https://github.com/cypress-io/cypress/issues/28215).
+- Fixed a regression in [13.3.3](#13-3-3) where Cypress would hang on loading shared workers when using `cy.reload` to reload the page. Fixes [#28248](https://github.com/cypress-io/cypress/issues/28248).
+- Fixed an issue where network requests made from tabs, or windows other than the main Cypress tab, would be delayed. Fixes [#28113](https://github.com/cypress-io/cypress/issues/28113).
+- Fixed an issue with 'other' targets (e.g. pdf documents embedded in an object tag) not fully loading. Fixes [#28228](https://github.com/cypress-io/cypress/issues/28228) and [#28162](https://github.com/cypress-io/cypress/issues/28162).
+- Fixed an issue where clicking a link to download a file could cause a page load timeout when the download attribute was missing. Note: download behaviors in experimental WebKit are still an issue. Fixes [#14857](https://github.com/cypress-io/cypress/issues/14857).
+- Fixed an issue to account for canceled and failed downloads to correctly reflect these status in Command log as a download failure where previously it would be pending. Fixed in [#28222](https://github.com/cypress-io/cypress/pull/28222).
+- Fixed an issue determining visibility when an element is hidden by an ancestor with a shared edge. Fixes [#27514](https://github.com/cypress-io/cypress/issues/27514).
+- We now pass a flag to Chromium browsers to disable Chrome translation, both the manual option and the popup prompt, when a page with a differing language is detected. Fixes [#28225](https://github.com/cypress-io/cypress/issues/28225).
+- Stopped processing CDP events at the end of a spec when Test Isolation is off and Test Replay is enabled. Addressed in [#28213](https://github.com/cypress-io/cypress/pull/28213).
+
+## 13.4.0
+
+_Released 10/30/2023_
+
+**Features:**
+
+- Introduced experimental configuration options for advanced retry logic: adds `experimentalStrategy` and `experimentalOptions` keys to the `retry` configuration key. See [Experimental Flake Detection Features](/app/references/experiments#Experimental-Flake-Detection-Features) for more information. Addressed in [#27930](https://github.com/cypress-io/cypress/pull/27930).
+
+**Bugfixes:**
+
+- Fixed a regression in [13.3.2](#13-3-2) where Cypress would crash with 'Inspected target navigated or closed' or 'Session with given id not found'. Fixes [#28141](https://github.com/cypress-io/cypress/issues/28141) and [#28148](https://github.com/cypress-io/cypress/issues/28148).
+
+## 13.3.3
+
+_Released 10/24/2023_
+
+**Bugfixes:**
+
+- Fixed a performance regression in [13.3.1](#13-3-1) with proxy correlation timeouts and requests issued from web and shared workers. Fixes [#28104](https://github.com/cypress-io/cypress/issues/28104).
+- Fixed a performance problem with proxy correlation when requests get aborted and then get miscorrelated with follow up requests. Addressed in [#28094](https://github.com/cypress-io/cypress/pull/28094).
+- Fixed a regression in [10.0.0](#10-0-0), where search would not find a spec if the file name contains "-" or "\_", but search prompt contains " " instead (e.g. search file "spec-file.cy.ts" with prompt "spec file"). Fixes [#25303](https://github.com/cypress-io/cypress/issues/25303).
+
+## 13.3.2
+
+_Released 10/18/2023_
+
+**Bugfixes:**
+
+- Fixed a performance regression in [13.3.1](#13-3-1) with proxy correlation timeouts and requests issued from service workers. Fixes [#28054](https://github.com/cypress-io/cypress/issues/28054) and [#28056](https://github.com/cypress-io/cypress/issues/28056).
+- Fixed an issue where proxy correlation would leak over from a previous spec causing performance problems, `cy.intercept` problems, and Test Replay asset capturing issues. Addressed in [#28060](https://github.com/cypress-io/cypress/pull/28060).
+- Fixed an issue where redirects of requests that knowingly don't have CDP traffic should also be assumed to not have CDP traffic. Addressed in [#28060](https://github.com/cypress-io/cypress/pull/28060).
+- Fixed an issue with Accept Encoding headers by forcing gzip when no accept encoding header is sent and using identity if gzip is not sent. Fixes [#28025](https://github.com/cypress-io/cypress/issues/28025).
+
+**Dependency Updates:**
+
+- Upgraded [`@babel/core`](https://www.npmjs.com/package/@babel/core) from `7.22.9` to `7.23.2` to address the [SNYK-JS-SEMVER-3247795](https://snyk.io/vuln/SNYK-JS-SEMVER-3247795) security vulnerability. Addressed in [#28063](https://github.com/cypress-io/cypress/pull/28063).
+- Upgraded [`@babel/traverse`](https://www.npmjs.com/package/@babel/traverse) from `7.22.8` to `7.23.2` to address the [SNYK-JS-BABELTRAVERSE-5962462](https://snyk.io/vuln/SNYK-JS-BABELTRAVERSE-5962462) security vulnerability. Addressed in [#28063](https://github.com/cypress-io/cypress/pull/28063).
+- Upgraded [`react-docgen`](https://www.npmjs.com/package/react-docgen) from `6.0.0-alpha.3` to `6.0.4` to address the [SNYK-JS-BABELTRAVERSE-5962462](https://snyk.io/vuln/SNYK-JS-BABELTRAVERSE-5962462) security vulnerability. Addressed in [#28063](https://github.com/cypress-io/cypress/pull/28063).
+
+## 13.3.1
+
+_Released 10/11/2023_
+
+**Bugfixes:**
+
+- Fixed an issue where requests were correlated in the wrong order in the proxy. This could cause an issue where the wrong request is used for `cy.intercept` or assets (e.g. stylesheets or images) may not properly be available in Test Replay. Addressed in [#27892](https://github.com/cypress-io/cypress/pull/27892).
+- Fixed an issue where a crashed Chrome renderer can cause the Test Replay recorder to hang. Addressed in [#27909](https://github.com/cypress-io/cypress/pull/27909).
+- Fixed an issue where multiple responses yielded from calls to `cy.wait()` would sometimes be out of order. Fixes [#27337](https://github.com/cypress-io/cypress/issues/27337).
+- Fixed an issue where requests were timing out in the proxy. This could cause an issue where the wrong request is used for `cy.intercept` or assets (e.g. stylesheets or images) may not properly be available in Test Replay. Addressed in [#27976](https://github.com/cypress-io/cypress/pull/27976).
+- Fixed an issue where Test Replay couldn't record tests due to issues involving `GLIBC`. Fixed deprecation warnings during the rebuild of better-sqlite3. Fixes [#27891](https://github.com/cypress-io/cypress/issues/27891) and [#27902](https://github.com/cypress-io/cypress/issues/27902).
+- Enables test replay for executed specs in runs that have a spec that causes a browser crash. Addressed in [#27786](https://github.com/cypress-io/cypress/pull/27786).
+
+## 13.3.0
+
+_Released 09/27/2023_
+
+**Features:**
+
+- Introduces new layout for Runs page providing additional run information. Addresses [#27203](https://github.com/cypress-io/cypress/issues/27203).
+
+**Bugfixes:**
+
+- Fixed an issue where actionability checks trigger a flood of font requests. Removing the font requests has the potential to improve performance and removes clutter from Test Replay. Addressed in [#27860](https://github.com/cypress-io/cypress/pull/27860).
+- Fixed network stubbing not permitting status code 999. Fixes [#27567](https://github.com/cypress-io/cypress/issues/27567). Addressed in [#27853](https://github.com/cypress-io/cypress/pull/27853).
+
+## 13.2.0
+
+_Released 09/12/2023_
+
+**Features:**
+
+- Adds support for Nx users who want to run Angular Component Testing in parallel. Addressed in [#27723](https://github.com/cypress-io/cypress/pull/27723).
+
+**Bugfixes:**
+
+- Edge cases where `cy.intercept()` would not properly intercept and asset response bodies would not properly be captured for Test Replay have been addressed. Addressed in [#27771](https://github.com/cypress-io/cypress/pull/27771).
+- Fixed an issue where `enter`, `keyup`, and `space` events were not triggering `click` events properly in some versions of Firefox. Addressed in [#27715](https://github.com/cypress-io/cypress/pull/27715).
+- Fixed a regression in `13.0.0` where tests using Basic Authorization can potentially hang indefinitely on chromium browsers. Addressed in [#27781](https://github.com/cypress-io/cypress/pull/27781).
+
+**Dependency Updates:**
+
+- Upgraded Electron from `21.0.0` to `25.8.0`, which updates bundled Chromium from `106.0.5249.51` to `114.0.5735.289`.
+ Additionally, the Node version binary has been upgraded from `16.16.0` to `18.15.0`. This does **NOT** have an impact on the node version you are using with Cypress and is merely an internal update to the repository & shipped binary.
+ Addressed in [#27715](https://github.com/cypress-io/cypress/pull/27715). Addresses [#27595](https://github.com/cypress-io/cypress/issues/27595).
+
+## 13.1.0
+
+_Released 08/31/2023_
+
+**Features:**
+
+- Introduces a status icon representing the `latest` test run in the Sidebar for the Runs Page. Addresses [#27206](https://github.com/cypress-io/cypress/issues/27206).
+
+**Bugfixes:**
+
+- Fixed a regression introduced in Cypress [13.0.0](#13-0-0) where the [Module API](/app/references/module-api), [`after:run`](/api/node-events/after-run-api), and [`after:spec`](/api/node-events/after-spec-api) results did not include the `stats.skipped` field for each run result. Fixes [#27694](https://github.com/cypress-io/cypress/issues/27694). Addressed in [#27695](https://github.com/cypress-io/cypress/pull/27695).
+- Individual CDP errors that occur while capturing data for Test Replay will no longer prevent the entire run from being available. Addressed in [#27709](https://github.com/cypress-io/cypress/pull/27709).
+- Fixed an issue where the release date on the `v13` landing page was a day behind. Fixed in [#27711](https://github.com/cypress-io/cypress/pull/27711).
+- Fixed an issue where fatal protocol errors would leak between specs causing all subsequent specs to fail to upload protocol information. Fixed in [#27720](https://github.com/cypress-io/cypress/pull/27720)
+- Updated `plist` from `3.0.6` to `3.1.0` to address [CVE-2022-37616](https://github.com/advisories/GHSA-9pgh-qqpf-7wqj) and [CVE-2022-39353](https://github.com/advisories/GHSA-crh6-fp67-6883). Fixed in [#27710](https://github.com/cypress-io/cypress/pull/27710).
+
+## 13.0.0
+
+_Released 08/29/2023_
+
+**Summary:**
+
+When recording to Cypress Cloud, users now receive our newest feature: [Test Replay](/cloud/features/test-replay). Test Replay brings the debugging experience you know and love from the Cypress app directly into your recorded tests in Cypress Cloud.
+
+Previously, trying to debug failures and flake in CI was painful and time consuming with only videos & screenshots. Test Replay provides a way to inspect the DOM, network events, and console logs of your application from your tests exactly as they ran in CI.
+
+Test Replay is available in all Cypress Cloud plans. To start using Test Replay, simply record a run to Cypress Cloud. Learn more in the [Test Replay documentation](/cloud/features/test-replay).
+
+Test Replay now serves as the primary replacement for debugging via video. Video capture and `videoCompression` of captured video are now set to `false` by default and `videoUploadOnPasses` is removed.
+
+Read more about v13.0.0 in [our blog post](https://on.cypress.io/cypress-13-release).
+
+**Breaking Changes:**
+
+:::info
+
+Refer to the [v13 Migration Guide](/app/references/migration-guide#Migrating-to-Cypress-130) for help migrating your code.
+
+:::
+
+- The [`video`](/app/references/configuration#Videos) configuration option now defaults to `false`. Addresses [#26157](https://github.com/cypress-io/cypress/issues/26157).
+- The [`videoCompression`](/app/references/configuration#Videos) configuration option now defaults to `false`. Addresses [#26160](https://github.com/cypress-io/cypress/issues/26160).
+- The [`videoUploadOnPasses`](/app/references/configuration#Videos) configuration option has been removed. Please see our [screenshots & videos guide](/app/guides/screenshots-and-videos#Delete-videos-for-specs-without-failing-or-retried-tests) on how to accomplish similar functionality. Addresses [#26899](https://github.com/cypress-io/cypress/issues/26899).
+- Requests for assets at relative paths for component testing are now correctly forwarded to the dev server. Fixes [#26725](https://github.com/cypress-io/cypress/issues/26725).
+- The [`cy.readFile()`](/api/commands/readfile) command is now retry-able as a [query command](/app/core-concepts/retry-ability). This should not affect any tests using it; the functionality is unchanged. However, it can no longer be overwritten using [`Cypress.Commands.overwrite()`](/api/cypress-api/custom-commands#Overwrite-Existing-Commands). Addressed in [#25595](https://github.com/cypress-io/cypress/pull/25595).
+- The deprecated configuration option `nodeVersion` has been removed. Addresses [#27016](https://github.com/cypress-io/cypress/issues/27016).
+- The properties and values returned by the [Module API](/app/references/module-api) and included in the arguments of handlers for the [`after:run`](/api/node-events/after-run-api) and [`after:spec`](/api/node-events/after-spec-api) have been changed to be more consistent. Addresses [#23805](https://github.com/cypress-io/cypress/issues/23805).
+- For Cypress Cloud runs with Test Replay enabled, the Cypress Runner UI is now hidden during the run. This change was made to improve performance in situations where the Runner no longer needs to be rendered. If video is recorded during the run, the Runner will not be visible. In addition, if a screenshot with `capture: runner` is taken, the screenshot will be taken as if the `capture: viewport` option was passed. You can turn off this behavior by passing [`--runner-ui`](/app/references/command-line#cypress-run-runner-ui). Addressed in [#27482](https://github.com/cypress-io/cypress/pull/27482).
+- The browser and browser page unexpectedly closing in the middle of a test run are now gracefully handled. Addressed in [#27592](https://github.com/cypress-io/cypress/issues/27592).
+- Automation performance is now improved by switching away from websockets to direct CDP calls for Chrome and Electron browsers. Addressed in [#27592](https://github.com/cypress-io/cypress/issues/27592).
+- Edge cases where `cy.intercept` would not properly intercept have been addressed. Addressed in [#27592](https://github.com/cypress-io/cypress/issues/27592).
+- Node 14 support has been removed and Node 16 support has been deprecated. Node 16 may continue to work with Cypress `v13`, but will not be supported moving forward to closer coincide with [Node 16's end-of-life](https://nodejs.org/en/blog/announcements/nodejs16-eol) schedule. It is recommended that users update to at least Node 18.
+- The minimum supported TypeScript version is `4.x`.
+
+**Features:**
+
+- Added [`--runner-ui`](/app/references/command-line#cypress-run-runner-ui) and [`--no-runner-ui`](/app/references/command-line#cypress-run-no-runner-ui) CLI flags to control whether the Cypress Runner UI is visible during a run. Addressed in [#27582](https://github.com/cypress-io/cypress/pull/27582).
+- Consolidates and improves terminal output when uploading test artifacts to Cypress Cloud. Addressed in [#27402](https://github.com/cypress-io/cypress/pull/27402)
+
+**Bugfixes:**
+
+- Fixed an issue where Cypress's internal `tsconfig` would conflict with properties set in the user's `tsconfig.json` such as `module` and `moduleResolution`. Fixes [#26308](https://github.com/cypress-io/cypress/issues/26308) and [#27448](https://github.com/cypress-io/cypress/issues/27448).
+- Clarified Svelte 4 works correctly with Component Testing and updated dependencies checks to reflect this. It was incorrectly flagged as not supported. Fixes [#27465](https://github.com/cypress-io/cypress/issues/27465).
+- Resolve the `process/browser` global inside `@cypress/webpack-batteries-included-preprocessor` to resolve to `process/browser.js` in order to explicitly provide the file extension. File resolution must include the extension for `.mjs` and `.js` files inside ESM packages in order to resolve correctly. Fixes [#27599](https://github.com/cypress-io/cypress/issues/27599).
+- Fixed an issue where the correct `pnp` process was not being discovered. Fixes [#27562](https://github.com/cypress-io/cypress/issues/27562).
+- Fixed incorrect type declarations for Cypress and Chai globals that asserted them to be local variables of the global scope rather than properties on the global object. Fixes [#27539](https://github.com/cypress-io/cypress/issues/27539). Fixed in [#27540](https://github.com/cypress-io/cypress/pull/27540).
+- Dev Servers will now respect and use the `port` configuration option if present. Fixes [#27675](https://github.com/cypress-io/cypress/issues/27675).
+
+**Dependency Updates:**
+
+- Upgraded [`@cypress/request`](https://www.npmjs.com/package/@cypress/request) from `^2.88.11` to `^3.0.0` to address the [CVE-2023-28155](https://github.com/advisories/GHSA-p8p7-x288-28g6) security vulnerability. Addresses [#27535](https://github.com/cypress-io/cypress/issues/27535). Addressed in [#27495](https://github.com/cypress-io/cypress/pull/27495).
+
+## 12.17.4
+
+_Released 08/15/2023_
+
+**Bugfixes:**
+
+- Fixed an issue where having `cypress.config` in a nested directory would cause problems with locating the `component-index.html` file when using component testing. Fixes [#26400](https://github.com/cypress-io/cypress/issues/26400).
+
+**Dependency Updates:**
+
+- Upgraded [`webpack`](https://www.npmjs.com/package/webpack) from `v4` to `v5`. This means that we are now bundling your `e2e` tests with webpack 5. We don't anticipate this causing any noticeable changes. However, if you'd like to keep bundling your `e2e` tests with webpack 4 you can use the same process as before by pinning [@cypress/webpack-batteries-included-preprocessor](https://www.npmjs.com/package/@cypress/webpack-batteries-included-preprocessor) to `v2.x.x` and hooking into the [file:preprocessor](/api/node-events/preprocessors-api#Usage) plugin event. This will restore the previous bundling process. Additionally, if you're using [@cypress/webpack-batteries-included-preprocessor](https://www.npmjs.com/package/@cypress/webpack-batteries-included-preprocessor) already, a new version has been published to support webpack `v5`.
+- Upgraded [`tough-cookie`](https://www.npmjs.com/package/tough-cookie) from `4.0` to `4.1.3`, [`@cypress/request`](https://www.npmjs.com/package/@cypress/request) from `2.88.11` to `2.88.12` and [`@cypress/request-promise`](https://www.npmjs.com/package/@cypress/request-promise) from `4.2.6` to `4.2.7` to address a [security vulnerability](https://security.snyk.io/vuln/SNYK-JS-TOUGHCOOKIE-5672873). Fixes [#27261](https://github.com/cypress-io/cypress/issues/27261).
+
+## 12.17.3
+
+_Released 08/01/2023_
+
+**Bugfixes:**
+
+- Fixed an issue where unexpected branch names were being recorded for cypress runs when executed by GitHub Actions. The `HEAD` branch name will now be recorded by default for pull request workflows if a branch name cannot otherwise be detected from user overrides or from local git data. Fixes [#27389](https://github.com/cypress-io/cypress/issues/27389).
+
+**Performance:**
+
+- Fixed an issue where unnecessary requests were being paused. No longer sends `X-Cypress-Is-XHR-Or-Fetch` header and infers resource type off of the server pre-request object. Fixes [#26620](https://github.com/cypress-io/cypress/issues/26620) and [#26622](https://github.com/cypress-io/cypress/issues/26622).
+
+## 12.17.2
+
+_Released 07/20/2023_
+
+**Bugfixes:**
+
+- Fixed an issue where commands would fail with the error `must only be invoked from the spec file or support file` if their arguments were mutated. Fixes [#27200](https://github.com/cypress-io/cypress/issues/27200).
+- Fixed an issue where `cy.writeFile()` would erroneously fail with the error `cy.writeFile() must only be invoked from the spec file or support file`. Fixes [#27097](https://github.com/cypress-io/cypress/issues/27097).
+- Fixed an issue where web workers could not be created within a spec. Fixes [#27298](https://github.com/cypress-io/cypress/issues/27298).
+
+## 12.17.1
+
+_Released 07/10/2023_
+
+**Bugfixes:**
+
+- Fixed invalid stored preference when enabling in-app notifications that could cause the application to crash. Fixes [#27228](https://github.com/cypress-io/cypress/issues/27228).
+- Fixed an issue with the TypeScript types of [`cy.screenshot()`](/api/commands/screenshot). Fixed in [#27130](https://github.com/cypress-io/cypress/pull/27130).
+
+**Dependency Updates:**
+
+- Upgraded [`@cypress/request`](https://www.npmjs.com/package/@cypress/request) from `2.88.10` to `2.88.11` to address [CVE-2022-24999](https://www.cve.org/CVERecord?id=CVE-2022-24999) security vulnerability. Addressed in [#27005](https://github.com/cypress-io/cypress/pull/27005).
+
+## 12.17.0
+
+_Released 07/06/2023_
+
+**Features:**
+
+- Cypress Cloud users can now receive [desktop notifications](/cloud/features/recorded-runs#Notifications) about their runs, including when one starts, finishes, or fails. Addresses [#26686](https://github.com/cypress-io/cypress/issues/26686).
+
+**Bugfixes:**
+
+- Fixed issues where commands would fail with the error `must only be invoked from the spec file or support file`. Fixes [#27149](https://github.com/cypress-io/cypress/issues/27149) and [#27163](https://github.com/cypress-io/cypress/issues/27163).
+- Fixed a regression introduced in Cypress [12.12.0](#12-12-0) where Cypress may fail to reconnect to the Chrome DevTools Protocol in Electron. Fixes [#26900](https://github.com/cypress-io/cypress/issues/26900).
+- Fixed an issue where chrome was not recovering from browser crashes properly. Fixes [#24650](https://github.com/cypress-io/cypress/issues/24650).
+- Fixed a race condition that was causing a GraphQL error to appear on the [Debug page](/cloud/features/recorded-runs#Debug) when viewing a running Cypress Cloud build. Fixed in [#27134](https://github.com/cypress-io/cypress/pull/27134).
+- Fixed a race condition in electron where the test window exiting prematurely during the browser launch process was causing the whole test run to fail. Addressed in [#27167](https://github.com/cypress-io/cypress/pull/27167).
+- Fixed minor issues with TypeScript types in the CLI. Fixes [#24110](https://github.com/cypress-io/cypress/issues/24110).
+- Fixed an issue where a value for the Electron debug port would not be respected if defined using the `ELECTRON_EXTRA_LAUNCH_ARGS` environment variable. Fixes [#26711](https://github.com/cypress-io/cypress/issues/26711).
+
+**Dependency Updates:**
+
+- Update dependency `semver` to `^7.5.3`. Addressed in [#27151](https://github.com/cypress-io/cypress/pull/27151).
+
+## 12.16.0
+
+_Released 06/26/2023_
+
+**Features:**
+
+- Added support for Angular `16.1.0` in Cypress Component Testing. Addresses [#27049](https://github.com/cypress-io/cypress/issues/27049).
+
+**Bugfixes:**
+
+- Fixed an issue where certain commands would fail with the error `must only be invoked from the spec file or support file` when invoked with a large argument. Fixes [#27099](https://github.com/cypress-io/cypress/issues/27099).
+
+## 12.15.0
+
+_Released 06/20/2023_
+
+**Features:**
+
+- Added support for running Cypress tests with
+ [Chrome's new `--headless=new` flag](https://developer.chrome.com/articles/new-headless/).
+ Chrome versions 112 and above will now be run in the `headless` mode that
+ matches the `headed` browser implementation. Addresses
+ [#25972](https://github.com/cypress-io/cypress/issues/25972).
+- Cypress can now test pages with targeted `Content-Security-Policy` and
+ `Content-Security-Policy-Report-Only` header directives by specifying the
+ allow list via the
+ [`experimentalCspAllowList`](/app/references/experiments#Experimental-CSP-Allow-List)
+ configuration option. Addresses
+ [#1030](https://github.com/cypress-io/cypress/issues/1030). Addressed in
+ [#26483](https://github.com/cypress-io/cypress/pull/26483)
+- The [`videoCompression`](/app/references/configuration#Videos)
+ configuration option now accepts both a boolean or a Constant Rate Factor
+ (CRF) number between `1` and `51`. The `videoCompression` default value is
+ still `32` CRF and when `videoCompression` is set to `true` the default of
+ `32` CRF will be used. Addresses
+ [#26658](https://github.com/cypress-io/cypress/issues/26658).
+- The Cypress Cloud data shown on the
+ [Specs](/app/core-concepts/open-mode#Specs) page and
+ [Runs](/app/core-concepts/open-mode#Runs) page will now reflect Cloud
+ Runs that match the current Git tree if Git is being used. Addresses
+ [#26693](https://github.com/cypress-io/cypress/issues/26693).
+
+**Bugfixes:**
+
+- Fixed an issue where video output was not being logged to the console when
+ `videoCompression` was turned off. Videos will now log to the terminal
+ regardless of the compression value. Addresses
+ [#25945](https://github.com/cypress-io/cypress/issues/25945).
+
+**Dependency Updates:**
+
+- Removed
+ [`@cypress/mocha-teamcity-reporter`](https://www.npmjs.com/package/@cypress/mocha-teamcity-reporter)
+ as this package was no longer being referenced. Addressed in
+ [#26938](https://github.com/cypress-io/cypress/pull/26938).
+
+## 12.14.0
+
+_Released 06/07/2023_
+
+**Features:**
+
+- A new testing type switcher has been added to the Spec Explorer to make it
+ easier to move between E2E and Component Testing. An informational overview of
+ each type is displayed if it hasn't already been configured to help educate
+ and onboard new users to each testing type. Addresses
+ [#26448](https://github.com/cypress-io/cypress/issues/26448),
+ [#26836](https://github.com/cypress-io/cypress/issues/26836) and
+ [#26837](https://github.com/cypress-io/cypress/issues/26837).
+
+**Bugfixes:**
+
+- Fixed an issue to now correctly detect Angular 16 dependencies
+ ([@angular/cli](https://www.npmjs.com/package/@angular/cli),
+ [@angular-devkit/build-angular](https://www.npmjs.com/package/@angular-devkit/build-angular),
+ [@angular/core](https://www.npmjs.com/package/@angular/core),
+ [@angular/common](https://www.npmjs.com/package/@angular/common),
+ [@angular/platform-browser-dynamic](https://www.npmjs.com/package/@angular/platform-browser-dynamic))
+ during Component Testing onboarding. Addresses
+ [#26852](https://github.com/cypress-io/cypress/issues/26852).
+- Ensures Git-related messages on the
+ [Runs page](/app/core-concepts/open-mode#Runs) remain dismissed.
+ Addresses [#26808](https://github.com/cypress-io/cypress/issues/26808).
+
+**Dependency Updates:**
+
+- Upgraded [`find-process`](https://www.npmjs.com/package/find-process) from
+ `1.4.1` to `1.4.7` to address this
+ [Snyk](https://security.snyk.io/vuln/SNYK-JS-FINDPROCESS-1090284) security
+ vulnerability. Addressed in
+ [#26906](https://github.com/cypress-io/cypress/pull/26906).
+- Upgraded [`firefox-profile`](https://www.npmjs.com/package/firefox-profile)
+ from `4.0.0` to `4.3.2` to address security vulnerabilities within
+ sub-dependencies. Addressed in
+ [#26912](https://github.com/cypress-io/cypress/pull/26912).
+
+## 12.13.0
+
+_Released 05/23/2023_
+
+**Features:**
+
+- Adds Git-related messages for the
+ [Runs page](/app/core-concepts/open-mode#Runs) and
+ [Debug page](/cloud/features/recorded-runs#Debug) when users aren't using Git or
+ there are no recorded runs for the current branch. Addresses
+ [#26680](https://github.com/cypress-io/cypress/issues/26680).
+
+**Bugfixes:**
+
+- Reverted [#26452](https://github.com/cypress-io/cypress/pull/26452) which
+ introduced a bug that prevents users from using End to End with Yarn 3. Fixed
+ in [#26735](https://github.com/cypress-io/cypress/pull/26735). Fixes
+ [#26676](https://github.com/cypress-io/cypress/issues/26676).
+- Moved `types` condition to the front of `package.json#exports` since keys
+ there are meant to be order-sensitive. Fixed in
+ [#26630](https://github.com/cypress-io/cypress/pull/26630).
+- Fixed an issue where newly-installed dependencies would not be detected during
+ Component Testing setup. Addresses
+ [#26685](https://github.com/cypress-io/cypress/issues/26685).
+- Fixed a UI regression that was flashing an "empty" state inappropriately when
+ loading the Debug page. Fixed in
+ [#26761](https://github.com/cypress-io/cypress/pull/26761).
+- Fixed an issue in Component Testing setup where TypeScript version 5 was not
+ properly detected. Fixes
+ [#26204](https://github.com/cypress-io/cypress/issues/26204).
+
+**Misc:**
+
+- Updated styling & content of Cypress Cloud slideshows when not logged in or no
+ runs have been recorded. Addresses
+ [#26181](https://github.com/cypress-io/cypress/issues/26181).
+- Changed the nomenclature of 'processing' to 'compressing' when terminal video
+ output is printed during a run. Addresses
+ [#26657](https://github.com/cypress-io/cypress/issues/26657).
+- Changed the nomenclature of 'Upload Results' to 'Uploading Screenshots &
+ Videos' when terminal output is printed during a run. Addresses
+ [#26759](https://github.com/cypress-io/cypress/issues/26759).
+
+## 12.12.0
+
+_Released 05/09/2023_
+
+**Features:**
+
+- Added a new informational banner to help get started with component testing
+ from an existing end-to-end test suite. Addresses
+ [#26511](https://github.com/cypress-io/cypress/issues/26511).
+
+**Bugfixes:**
+
+- Fixed an issue in Electron where devtools gets out of sync with the DOM
+ occasionally. Addresses
+ [#15932](https://github.com/cypress-io/cypress/issues/15932).
+- Updated the Chromium renderer process crash message to be more terse.
+ Addressed in [#26597](https://github.com/cypress-io/cypress/pull/26597).
+- Fixed an issue with `CYPRESS_DOWNLOAD_PATH_TEMPLATE` regex to allow multiple
+ replacements. Addresses
+ [#23670](https://github.com/cypress-io/cypress/issues/23670).
+
+**Dependency Updates:**
+
+- Upgraded [`plist`](https://www.npmjs.com/package/plist) from `3.0.5` to
+ `3.0.6` to address
+ [CVE-2022-26260](https://nvd.nist.gov/vuln/detail/CVE-2022-22912#range-8131646)
+ NVD security vulnerability. Addressed in
+ [#26631](https://github.com/cypress-io/cypress/pull/26631).
+- Upgraded [`engine.io`](https://www.npmjs.com/package/engine.io) from `6.2.1`
+ to `6.4.2` to address
+ [CVE-2023-31125](https://github.com/socketio/engine.io/security/advisories/GHSA-q9mw-68c2-j6m5)
+ NVD security vulnerability. Addressed in
+ [#26664](https://github.com/cypress-io/cypress/pull/26664).
+- Upgraded [`@vue/test-utils`](https://www.npmjs.com/package/@vue/test-utils)
+ from `2.0.2` to `2.3.2`. Addresses
+ [#26575](https://github.com/cypress-io/cypress/issues/26575).
+
+## 12.11.0
+
+_Released 04/26/2023_
+
+**Features:**
+
+- Added Component Testing support for Angular 16. Addresses
+ [#26044](https://github.com/cypress-io/cypress/issues/26044).
+- The run navigation component on the
+ [Debug page](/app/core-concepts/open-mode#Debug) will now display a warning
+ message if there are more relevant runs than can be displayed in the list.
+ Addresses [#26288](https://github.com/cypress-io/cypress/issues/26288).
+
+**Bugfixes:**
+
+- Fixed an issue where setting `videoCompression` to `0` would cause the video
+ output to be broken. `0` is now treated as false. Addresses
+ [#5191](https://github.com/cypress-io/cypress/issues/5191) and
+ [#24595](https://github.com/cypress-io/cypress/issues/24595).
+- Fixed an issue on the [Debug page](/app/core-concepts/open-mode#Debug) where the
+ passing run status would appear even if the Cypress Cloud organization was
+ over its monthly test result limit. Addresses
+ [#26528](https://github.com/cypress-io/cypress/issues/26528).
+
+**Misc:**
+
+- Cleaned up our open telemetry dependencies, reducing the size of the open
+ telemetry modules. Addressed in
+ [#26522](https://github.com/cypress-io/cypress/pull/26522).
+
+**Dependency Updates:**
+
+- Upgraded [`vue`](https://www.npmjs.com/package/vue) from `3.2.31` to `3.2.47`.
+ Addressed in [#26555](https://github.com/cypress-io/cypress/pull/26555).
+
+## 12.10.0
+
+_Released 04/17/2023_
+
+**Features:**
+
+- The Component Testing setup wizard will now show a warning message if an issue
+ is encountered with an installed
+ [third party framework definition](/app/component-testing/custom-frameworks).
+ Addresses [#25838](https://github.com/cypress-io/cypress/issues/25838).
+
+**Bugfixes:**
+
+- Capture the [Azure](https://azure.microsoft.com/) CI provider's environment
+ variable
+ [`SYSTEM_PULLREQUEST_PULLREQUESTNUMBER`](https://learn.microsoft.com/en-us/azure/devops/pipelines/build/variables?view=azure-devops&tabs=yaml#system-variables-devops-services)
+ to display the linked PR number in the Cloud. Addressed in
+ [#26215](https://github.com/cypress-io/cypress/pull/26215).
+- Fixed an issue in the onboarding wizard where project framework & bundler
+ would not be auto-detected when opening directly into component testing mode
+ using the `--component` CLI flag. Fixes
+ [#22777](https://github.com/cypress-io/cypress/issues/22777) and
+ [#26388](https://github.com/cypress-io/cypress/issues/26388).
+- Updated to use the `SEMAPHORE_GIT_WORKING_BRANCH`
+ [Semaphore](https://docs.semaphoreci.com) CI environment variable to correctly
+ associate a Cloud run to the current branch. Previously this was incorrectly
+ associating a run to the target branch. Fixes
+ [#26309](https://github.com/cypress-io/cypress/issues/26309).
+- Fix an edge case in Component Testing where a custom `baseUrl` in
+ `tsconfig.json` for Next.js 13.2.0+ is not respected. This was partially fixed
+ in [#26005](https://github.com/cypress-io/cypress/pull/26005), but an edge
+ case was missed. Fixes
+ [#25951](https://github.com/cypress-io/cypress/issues/25951).
+- Correctly detect and resolve dependencies when configuring Component Testing
+ in projects using Yarn's
+ [Plug'n'Play feature](https://yarnpkg.com/features/pnp). Fixes
+ [#25960](https://github.com/cypress-io/cypress/issues/25960).
+- Fixed an issue where `click` events fired on
+ [`.type('{enter}')`](/api/commands/type) did not propagate through shadow
+ roots. Fixes [#26392](https://github.com/cypress-io/cypress/issues/26392).
+
+**Misc:**
+
+- Removed unintentional debug logs. Addressed in
+ [#26411](https://github.com/cypress-io/cypress/pull/26411).
+- Improved styling on the [Runs Page](/app/core-concepts/open-mode#Runs).
+ Addresses [#26180](https://github.com/cypress-io/cypress/issues/26180).
+
+**Dependency Updates:**
+
+- Upgraded [`commander`](https://www.npmjs.com/package/commander) from `^5.1.0`
+ to `^6.2.1`. Addressed in
+ [#26226](https://github.com/cypress-io/cypress/pull/26226).
+- Upgraded [`minimist`](https://www.npmjs.com/package/minimist) from `1.2.6` to
+ `1.2.8` to address this
+ [CVE-2021-44906](https://github.com/advisories/GHSA-xvch-5gv4-984h) NVD
+ security vulnerability. Addressed in
+ [#26254](https://github.com/cypress-io/cypress/pull/26254).
+
+## 12.9.0
+
+_Released 03/28/2023_
+
+**Features:**
+
+- The [Debug page](/cloud/features/recorded-runs#Debug) now allows for navigating
+ between all runs recorded for a commit. Addresses
+ [#25899](https://github.com/cypress-io/cypress/issues/25899) and
+ [#26018](https://github.com/cypress-io/cypress/issues/26018).
+
+**Bugfixes:**
+
+- Fixed a compatibility issue so that component test projects can use
+ [Vite](https://vitejs.dev/) version `4.2.0` and greater. Fixes
+ [#26138](https://github.com/cypress-io/cypress/issues/26138).
+- Fixed an issue where [`cy.intercept()`](/api/commands/intercept) added an
+ additional `content-length` header to spied requests that did not set a
+ `content-length` header on the original request. Fixes
+ [#24407](https://github.com/cypress-io/cypress/issues/24407).
+- Changed the way that Git hashes are loaded so that non-relevant runs are
+ excluded from the Debug page. Fixes
+ [#26058](https://github.com/cypress-io/cypress/issues/26058).
+- Corrected the [`.type()`](/api/commands/type) command to account for shadow
+ root elements when determining whether or not focus needs to be simulated
+ before typing. Fixes
+ [#26198](https://github.com/cypress-io/cypress/issues/26198).
+- Fixed an issue where an incorrect working directory could be used for Git
+ operations on Windows. Fixes
+ [#23317](https://github.com/cypress-io/cypress/issues/23317).
+
+**Misc:**
+
+- Made some minor styling updates to the Debug page. Addresses
+ [#26041](https://github.com/cypress-io/cypress/issues/26041).
+
+## 12.8.1
+
+_Released 03/15/2023_
+
+**Bugfixes:**
+
+- Fixed a regression in Cypress [10](#10-0-0) where
+ the reporter auto-scroll configuration inside user preferences was
+ unintentionally being toggled off. Users must now explicitly enable/disable
+ auto-scroll under user preferences, which is enabled by default. Fixes
+ [#24171](https://github.com/cypress-io/cypress/issues/24171) and
+ [#26113](https://github.com/cypress-io/cypress/issues/26113).
+
+**Dependency Updates:**
+
+- Upgraded [`ejs`](https://www.npmjs.com/package/ejs) from `3.1.6` to `3.1.8` to
+ address this
+ [CVE-2022-29078](https://github.com/advisories/GHSA-phwq-j96m-2c2q) NVD
+ security vulnerability. Addressed in
+ [#25279](https://github.com/cypress-io/cypress/pull/25279).
+
+## 12.8.0
+
+_Released 03/14/2023_
+
+**Features:**
+
+- The [Debug page](/cloud/features/recorded-runs#Debug) is now able to show
+ real-time results from in-progress runs. Addresses
+ [#25759](https://github.com/cypress-io/cypress/issues/25759).
+- Added the ability to control whether a request is logged to the command log
+ via [`cy.intercept()`](/api/commands/intercept) by passing `log: false` or
+ `log: true`. Addresses
+ [#7362](https://github.com/cypress-io/cypress/issues/7362).
+ - This can be used to override Cypress's default behavior of logging all XHRs
+ and fetches, see the
+ [example](/api/commands/intercept#Disabling-logs-for-a-request).
+- It is now possible to control the number of connection attempts to the browser
+ using the `CYPRESS_CONNECT_RETRY_THRESHOLD` Environment Variable. Learn more
+ [here](/app/references/advanced-installation#Environment-variables).
+ Addressed in [#25848](https://github.com/cypress-io/cypress/pull/25848).
+
+**Bugfixes:**
+
+- Fixed an issue where using `Cypress.require()` would throw the error
+ `Cannot find module 'typescript'`. Fixes
+ [#25885](https://github.com/cypress-io/cypress/issues/25885).
+- The [`before:spec`](/api/node-events/before-spec-api) API was updated to correctly
+ support async event handlers in `run` mode. Fixes
+ [#24403](https://github.com/cypress-io/cypress/issues/24403).
+- Updated the Component Testing
+ [community framework](/app/component-testing/custom-frameworks)
+ definition detection logic to take into account monorepo structures that hoist
+ dependencies. Fixes
+ [#25993](https://github.com/cypress-io/cypress/issues/25993).
+- The onboarding wizard for Component Testing will now detect installed
+ dependencies more reliably. Fixes
+ [#25782](https://github.com/cypress-io/cypress/issues/25782).
+- Fixed an issue where Angular components would sometimes be mounted in
+ unexpected DOM locations in component tests. Fixes
+ [#25956](https://github.com/cypress-io/cypress/issues/25956).
+- Fixed an issue where Cypress component testing would fail to work with
+ [Next.js](https://nextjs.org/) `13.2.1`. Fixes
+ [#25951](https://github.com/cypress-io/cypress/issues/25951).
+- Fixed an issue where migrating a project from a version of Cypress earlier
+ than [10.0.0](#10-0-0) could fail if the project's `testFiles` configuration
+ was an array of globs. Fixes
+ [#25947](https://github.com/cypress-io/cypress/issues/25947).
+
+**Misc:**
+
+- Removed "New" badge in the navigation bar for the debug page icon. Addresses
+ [#25925](https://github.com/cypress-io/cypress/issues/25925).
+- Removed inline "Connect" buttons within the Specs Explorer. Addresses
+ [#25926](https://github.com/cypress-io/cypress/issues/25926).
+- Added an icon for "beta" versions of the Chrome browser. Addresses
+ [#25968](https://github.com/cypress-io/cypress/issues/25968).
+
+**Dependency Updates:**
+
+- Upgraded
+ [`mocha-junit-reporter`](https://github.com/michaelleeallen/mocha-junit-reporter)
+ from `2.1.0` to `2.2.0` to be able to use
+ [new placeholders](https://github.com/michaelleeallen/mocha-junit-reporter/pull/163)
+ such as `[suiteFilename]` or `[suiteName]` when defining the test report name.
+ Addressed in [#25922](https://github.com/cypress-io/cypress/pull/25922).
+
+## 12.7.0
+
+_Released 02/24/2023_
+
+**Features:**
+
+- It is now possible to set `hostOnly` cookies with
+ [`cy.setCookie()`](/api/commands/setcookie) for a given domain. Addresses
+ [#16856](https://github.com/cypress-io/cypress/issues/16856) and
+ [#17527](https://github.com/cypress-io/cypress/issues/17527).
+- Added a Public API for third party component libraries to define a Framework
+ Definition, embedding their library into the Cypress onboarding workflow.
+ Learn more [here](/app/component-testing/custom-frameworks).
+ Implemented in [#25780](https://github.com/cypress-io/cypress/pull/25780) and
+ closes [#25638](https://github.com/cypress-io/cypress/issues/25638).
+- Added a Debug Page tutorial slideshow for projects that are not connected to
+ Cypress Cloud. Addresses
+ [#25768](https://github.com/cypress-io/cypress/issues/25768).
+- Updated the "new" status badge for the Debug page navigation link to be less
+ noticeable when the navigation is collapsed. Addresses
+ [#25739](https://github.com/cypress-io/cypress/issues/25739).
+- Improved various error message around interactions with the Cypress Cloud.
+ Implemented in [#25837](https://github.com/cypress-io/cypress/pull/25837).
+
+**Bugfixes:**
+
+- Fixed an issue where cookies were being duplicated with the same hostname, but
+ a prepended dot. Fixed an issue where cookies may not be expiring correctly.
+ Fixes [#25174](https://github.com/cypress-io/cypress/issues/25174),
+ [#25205](https://github.com/cypress-io/cypress/issues/25205) and
+ [#25495](https://github.com/cypress-io/cypress/issues/25495).
+- Fixed an issue where cookies weren't being synced when the application was
+ stable. Fixed in [#25855](https://github.com/cypress-io/cypress/pull/25855).
+ Fixes [#25835](https://github.com/cypress-io/cypress/issues/25835).
+- Added missing TypeScript type definitions for the
+ [`cy.reload()`](/api/commands/reload) command. Addressed in
+ [#25779](https://github.com/cypress-io/cypress/pull/25779).
+- Ensure Angular components are mounted inside the correct element. Fixes
+ [#24385](https://github.com/cypress-io/cypress/issues/24385).
+- Fix a bug where files outside the project root in a monorepo are not correctly
+ served when using Vite. Addressed in
+ [#25801](https://github.com/cypress-io/cypress/pull/25801).
+- Fixed an issue where using [`cy.intercept`](/api/commands/intercept)'s
+ `req.continue()` with a non-function parameter would not provide an
+ appropriate error message. Fixed in
+ [#25884](https://github.com/cypress-io/cypress/pull/25884).
+- Fixed an issue where Cypress would erroneously launch and connect to multiple
+ browser instances. Fixes
+ [#24377](https://github.com/cypress-io/cypress/issues/24377).
+- Fixed various bugs when recording to the cloud. Fixed in
+ [#25837](https://github.com/cypress-io/cypress/pull/25837).
+
+**Misc:**
+
+- Made updates to the way that the Debug Page header displays information.
+ Addresses [#25796](https://github.com/cypress-io/cypress/issues/25796) and
+ [#25798](https://github.com/cypress-io/cypress/issues/25798).
+
+## 12.6.0
+
+_Released 02/15/2023_
+
+**Features:**
+
+- Added a new CLI flag, called
+ [`--auto-cancel-after-failures`](/app/references/command-line#Options), that
+ overrides the project-level
+ ["Auto Cancellation"](/cloud/features/smart-orchestration/run-cancellation)
+ value when recording to the Cloud. This gives Cloud users on Business and
+ Enterprise plans the flexibility to alter the auto-cancellation value per run.
+ Addressed in [#25237](https://github.com/cypress-io/cypress/pull/25237).
+- It is now possible to overwrite query commands using
+ [`Cypress.Commands.overwriteQuery`](/api/cypress-api/custom-queries).
+ Addressed in [#25078](https://github.com/cypress-io/cypress/issues/25078).
+- Added [`Cypress.require()`](/api/cypress-api/require) for including
+ dependencies within the [`cy.origin()`](/api/commands/origin) callback. This
+ change removed support for using `require()` and `import()` directly within
+ the callback because we found that it impacted performance not only for spec
+ files using them within the [`cy.origin()`](/api/commands/origin) callback,
+ but even for spec files that did not use them. Addresses
+ [#24976](https://github.com/cypress-io/cypress/issues/24976).
+- Added the ability to open the failing test in the IDE from the Debug page
+ before needing to re-run the test. Addressed in
+ [#24850](https://github.com/cypress-io/cypress/issues/24850).
+
+**Bugfixes:**
+
+- When a Cloud user is a part of multiple Cloud organizations, the
+ [Connect to Cloud setup](/cloud/get-started/setup#Set-up-a-project-to-record)
+ now shows the correct organizational prompts when connecting a new project.
+ Fixes [#25520](https://github.com/cypress-io/cypress/issues/25520).
+- Fixed an issue where Cypress would fail to load any specs if the project
+ `specPattern` included a resource that could not be accessed due to filesystem
+ permissions. Fixes
+ [#24109](https://github.com/cypress-io/cypress/issues/24109).
+- Fixed an issue where the Debug page would display a different number of specs
+ for in-progress runs than the in-progress specs reported in Cypress Cloud.
+ Fixes [#25647](https://github.com/cypress-io/cypress/issues/25647).
+- Fixed an issue in middleware where error-handling code could itself generate
+ an error and fail to report the original issue. Fixes
+ [#22825](https://github.com/cypress-io/cypress/issues/22825).
+- Fixed an regression introduced in Cypress [12.3.0](#12-3-0) where custom
+ browsers that relied on process environment variables were not found on macOS
+ arm64 architectures. Fixed in
+ [#25753](https://github.com/cypress-io/cypress/pull/25753).
+
+**Misc:**
+
+- Improved the UI of the Debug page. Addresses
+ [#25664](https://github.com/cypress-io/cypress/issues/25664),
+ [#25669](https://github.com/cypress-io/cypress/issues/25669),
+ [#25665](https://github.com/cypress-io/cypress/issues/25665),
+ [#25666](https://github.com/cypress-io/cypress/issues/25666), and
+ [#25667](https://github.com/cypress-io/cypress/issues/25667).
+- Updated the Debug page sidebar badge to to show 0 to 99+ failing tests,
+ increased from showing 0 to 9+ failing tests, to provide better test failure
+ insights. Addresses
+ [#25662](https://github.com/cypress-io/cypress/issues/25662).
+
+**Dependency Updates:**
+
+- Upgrade [`debug`](https://www.npmjs.com/package/debug) to `4.3.4`. Addressed
+ in [#25699](https://github.com/cypress-io/cypress/pull/25699).
+
+## 12.5.1
+
+_Released 02/02/2023_
+
+**Bugfixes:**
+
+- Fixed a regression introduced in Cypress [12.5.0](#12-5-0) where the
+ `runnable` was not included in the
+ [`test:after:run`](/api/cypress-api/catalog-of-events) event. Fixes
+ [#25663](https://github.com/cypress-io/cypress/issues/25663).
+
+**Dependency Updates:**
+
+- Upgraded [`simple-git`](https://github.com/steveukx/git-js) from `3.15.0` to
+ `3.16.0` to address this
+ [security vulnerability](https://github.com/advisories/GHSA-9p95-fxvg-qgq2)
+ where Remote Code Execution (RCE) via the clone(), pull(), push() and
+ listRemote() methods due to improper input sanitization was possible.
+ Addressed in [#25603](https://github.com/cypress-io/cypress/pull/25603).
+
+## 12.5.0
+
+_Released 01/31/2023_
+
+**Features:**
+
+- Easily debug failed CI test runs recorded to the Cypress Cloud from your local
+ Cypress app with the new Debug page. Please leave any feedback
+ [here](https://github.com/cypress-io/cypress/discussions/25649). Your feedback
+ will help us make decisions to improve the Debug experience. For more details,
+ see [our blog post](https://on.cypress.io/debug-page-release). Addressed in
+ [#25488](https://github.com/cypress-io/cypress/pull/25488).
+
+**Performance:**
+
+- Improved memory consumption in `run` mode by removing reporter logs for
+ successful tests. Fixes
+ [#25230](https://github.com/cypress-io/cypress/issues/25230).
+
+**Bugfixes:**
+
+- Fixed an issue where alternative Microsoft Edge Beta, Canary, and Dev binary
+ versions were not being discovered by Cypress. Fixes
+ [#25455](https://github.com/cypress-io/cypress/issues/25455).
+
+**Dependency Updates:**
+
+- Upgraded
+ [`underscore.string`](https://github.com/esamattis/underscore.string/blob/HEAD/CHANGELOG.markdown)
+ from `3.3.5` to `3.3.6` to reference rebuilt assets after security patch to
+ fix regular expression DDOS exploit. Addressed in
+ [#25574](https://github.com/cypress-io/cypress/pull/25574).
+
+## 12.4.1
+
+_Released 01/27/2023_
+
+**Bugfixes:**
+
+- Fixed a regression from Cypress [12.4.0](#12-4-0) where Cypress was not
+ exiting properly when running multiple Component Testing specs in `electron`
+ in `run` mode. Fixes
+ [#25568](https://github.com/cypress-io/cypress/issues/25568).
+
+**Dependency Updates:**
+
+- Upgraded [`ua-parser-js`](https://github.com/faisalman/ua-parser-js) from
+ `0.7.24` to `0.7.33` to address this
+ [security vulnerability](https://github.com/faisalman/ua-parser-js/security/advisories/GHSA-fhg7-m89q-25r3)
+ where crafting a very-very-long user-agent string with specific pattern, an
+ attacker can turn the script to get stuck processing for a very long time
+ which results in a denial of service (DoS) condition. Addressed in
+ [#25561](https://github.com/cypress-io/cypress/pull/25561).
+
+## 12.4.0
+
+_Released 01/24/2023_
+
+**Features:**
+
+- Added official support for Vite 4 in component testing. Addresses
+ [#24969](https://github.com/cypress-io/cypress/issues/24969).
+- Added new
+ [`experimentalMemoryManagement`](/app/references/experiments#Configuration)
+ configuration option to improve memory management in Chromium-based browsers.
+ Enable this option with `experimentalMemoryManagement=true` if you have
+ experienced "Out of Memory" issues. Please leave any feedback around
+ `experimentalMemoryManagement`
+ [here](https://github.com/cypress-io/cypress/discussions/25557). Your feedback
+ will help us make decisions to improve memory issues. Addresses
+ [#23391](https://github.com/cypress-io/cypress/issues/23391).
+- Added new
+ `experimentalSkipDomainInjection`
+ configuration option to disable Cypress from setting `document.domain` on
+ injection, allowing users to test Salesforce domains. If you believe you are
+ having `document.domain` issues, please see the
+ `experimentalSkipDomainInjection`
+ guide. This config option is end-to-end only. Addresses
+ [#2367](https://github.com/cypress-io/cypress/issues/2367),
+ [#23958](https://github.com/cypress-io/cypress/issues/23958),
+ [#24290](https://github.com/cypress-io/cypress/issues/24290), and
+ [#24418](https://github.com/cypress-io/cypress/issues/24418).
+- The [`.as`](/api/commands/as) command now accepts an options argument,
+ allowing an alias to be stored as type "query" or "static" value. This is
+ stored as "query" by default. Addresses
+ [#25173](https://github.com/cypress-io/cypress/issues/25173).
+- The `cy.log()` command will now display a line break where the `\n` character
+ is used. Addresses
+ [#24964](https://github.com/cypress-io/cypress/issues/24964).
+- [`component.specPattern`](/app/references/configuration#component) now
+ utilizes a JSX/TSX file extension when generating a new empty spec file if
+ project contains at least one file with those extensions. This applies only to
+ component testing and is skipped if
+ [`component.specPattern`](/app/references/configuration#component) has been
+ configured to exclude files with those extensions. Addresses
+ [#24495](https://github.com/cypress-io/cypress/issues/24495).
+- Added support for the `data-qa` selector in the
+ Selector Playground in addition to
+ `data-cy`, `data-test` and `data-testid`. Addresses
+ [#25305](https://github.com/cypress-io/cypress/issues/25305).
+
+**Bugfixes:**
+
+- Fixed an issue where component tests could incorrectly treat new major
+ versions of certain dependencies as supported. Fixes
+ [#25379](https://github.com/cypress-io/cypress/issues/25379).
+- Fixed an issue where new lines or spaces on new lines in the Command Log were
+ not maintained. Fixes
+ [#23679](https://github.com/cypress-io/cypress/issues/23679) and
+ [#24964](https://github.com/cypress-io/cypress/issues/24964).
+- Fixed an issue where Angular component testing projects would fail to
+ initialize if an unsupported browserslist entry was specified in the project
+ configuration. Fixes
+ [#25312](https://github.com/cypress-io/cypress/issues/25312).
+
+**Misc**
+
+- Video output link in `cypress run` mode has been added to its own line to
+ make the video output link more easily clickable in the terminal. Addresses
+ [#23913](https://github.com/cypress-io/cypress/issues/23913).
+
+## 12.3.0
+
+_Released 01/03/2023_
+
+**Features:**
+
+- Added support for mapping the `CYPRESS_PULL_REQUEST_ID`,
+ `CYPRESS_PULL_REQUEST_URL`, and/or `CYPRESS_CI_BUILD_URL` environment
+ variables to the corresponding Cloud run. This provides workarounds when
+ supported CI provider mappings are incorrect or unsupported CI providers are
+ used. Addressed in [#25036](https://github.com/cypress-io/cypress/pull/25036).
+- Added new Cypress API,
+ [`Cypress.currentRetry`](/api/cypress-api/currentretry), to easily access the
+ current test retry count. Addresses
+ [#25239](https://github.com/cypress-io/cypress/pull/25239).
+
+**Performance:**
+
+- Increased the pre-request proxy cleanup interval. The previous cleanup
+ interval was too aggressive for projects loading a large number of JS modules,
+ causing applications to load very slowly and in chunks. Fixed in
+ [#25209](https://github.com/cypress-io/cypress/pull/25209).
+- Fixed an issue where browsers distributed as universal binaries (Chrome,
+ Firefox) on M1 Macs could be launched in the wrong architecture, resulting in
+ poor performance in-browser. Fixed in
+ [#25014](https://github.com/cypress-io/cypress/pull/25014).
+- Resolved a delay that could occur on startup when using a custom Cypress
+ configuration file location in projects with a transitive `typescript`
+ dependency. Fixes
+ [#24781](https://github.com/cypress-io/cypress/issues/24781).
+
+**Bugfixes:**
+
+- Fixes an issue where component test files that contained characters, such as
+ brackets (`[]`), would be ignored when running tests. This is a common pattern
+ in Next.js and Gatsby.js projects. Fixes
+ [#24588](https://github.com/cypress-io/cypress/issues/24588).
+- Updated the Jenkins environment variable mappings so pull request data is
+ correctly linked to the corresponding Cloud run. Fixed in
+ [#25036](https://github.com/cypress-io/cypress/pull/25036).
+- Fixed a regression in [10.11.0](#10-11-0) where the mocha test results no
+ longer sent the pending boolean to reporters. This caused the
+ [`mochawesome`](https://www.npmjs.com/package/mochawesome) reporter to
+ incorrectly report pending tests as pending and skipped. Fixes
+ [#24477](https://github.com/cypress-io/cypress/issues/24477).
+- Fix for regression introduced in [12.1.0](#12-1-0), where
+ [`.contains()`](/api/commands/contains) could return multiple elements instead
+ of one element when it was matching directly on the subject, rather than on
+ the subject's children. Fixes
+ [#25225](https://github.com/cypress-io/cypress/issues/25225).
+- Fixed a small visual bug in the Test Runner such that Chrome users will no
+ longer see a white border on the nav bar at the specific zoom levels. Fixes
+ [#25284](https://github.com/cypress-io/cypress/issues/25284).
+
+**Misc**
+
+- Remove the redundant `Need help` link from the migration information modal
+ because the modal provides in-depth details for users already. Addresses
+ [#21923](https://github.com/cypress-io/cypress/issues/21923).
+- Minor UI updates were make to truncate the browser's name when it exceeds the
+ allocated space and to only show the browsers's major version in the UI.
+ Addresses [#21730](https://github.com/cypress-io/cypress/issues/21730) and
+ [#21755](https://github.com/cypress-io/cypress/issues/21755).
+- Removed the line break that was displayed on the Settings page when a
+ configuration value was an empty object. Addresses
+ [#21790](https://github.com/cypress-io/cypress/issues/21790).
+
+**Dependency Updates:**
+
+- Upgraded [`engine.io`](https://www.npmjs.com/package/engine.io) from `5.2.1`
+ to `6.2.1` to address this
+ [security vulnerability](https://github.com/socketio/engine.io/security/advisories/GHSA-r7qp-cfhv-p84w)
+ where a specially crafted HTTP request can trigger an uncaught exception on
+ the Engine.IO server, thus killing the Node.js process. Addressed in
+ [#23843](https://github.com/cypress-io/cypress/issues/23843).
+- Upgraded [`express`](https://www.npmjs.com/package/express) from `4.17.1` to
+ `4.17.3` to address this
+ [NVD security vulnerability](https://nvd.nist.gov/vuln/detail/CVE-2022-24999).
+ Addressed in [#23843](https://github.com/cypress-io/cypress/issues/23843).
+- Upgraded [`simple-git`](https://www.npmjs.com/package/simple-git) from `3.4.0`
+ to `3.15.0` to address this
+ [NVD security vulnerability](https://nvd.nist.gov/vuln/detail/CVE-2022-25912).
+ Addressed in [#23843](https://github.com/cypress-io/cypress/issues/23843).
+
+## 12.2.0
+
+_Released 12/20/2022_
+
+**Features:**
+
+- Added the ability to match on `resourceType` with
+ [`cy.intercept()`](/api/commands/intercept), and to see the resource type of
+ an intercepted request as `req.resourceType`. Addresses
+ [#14525](https://github.com/cypress-io/cypress/issues/14525).
+- Users working in React Component Testing projects can now generate a basic
+ spec file from the components that exist in their project. Addresses
+ [#24008](https://github.com/cypress-io/cypress/issues/24008).
+
+**Performance:**
+
+- Fixed a regression introduced in the Electron browser in
+ [Cypress 10.8.0](#10-8-0) where the `CYPRESS_EVERY_NTH_FRAME` environment
+ variable was not being set appropriately causing all frames to be captured
+ which slowed down tests. Fixes
+ [#23830](https://github.com/cypress-io/cypress/issues/23830).
+
+**Bugfixes:**
+
+- Fixed an issue where the `query` object was not available on requests from
+ [`cy.intercept()`](/api/commands/intercept) once they were yielded. Fixes
+ [#25088](https://github.com/cypress-io/cypress/issues/25088).
+- Fixed an issue with Angular Component Testing where urls within SASS/SCSS
+ files were not being correctly resolved which could result in incomplete
+ styling. Fixes [#24272](https://github.com/cypress-io/cypress/issues/24272).
+- Fixed a regression introduced in [Cypress 12](#12-0-0) where
+ [`cy.get()`](/api/commands/get) would ignore a `null` value for the
+ `withinSubject` option. Fixes
+ [#25104](https://github.com/cypress-io/cypress/issues/25104).
+- Fixed an issue where an unhandled promise rejection would display an
+ incomplete error message in the command log. Fixes
+ [#24915](https://github.com/cypress-io/cypress/issues/24915).
+- Fixed an issue where the incorrect Cypress version could be shown in the
+ migration wizard. Fixes
+ [#25138](https://github.com/cypress-io/cypress/issues/25138).
+- Fixed an issue where the Cypress migration wizard would fail to run in
+ [global mode](/app/references/command-line#cypress-open-global) on newer
+ versions of Cypress. Addressed in
+ [#25138](https://github.com/cypress-io/cypress/issues/25138).
+- Fixed an issue with Angular Component Testing where a custom
+ [`sourceRoot`](https://angular.io/guide/workspace-config#project-configuration-options)
+ configuration would not be respected. Fixes
+ [#24827](https://github.com/cypress-io/cypress/issues/24827).
+- Fixed TypeScript typings for [`cy.nextUntil()`](/api/commands/nextuntil) to
+ include the `filter` parameter. Fixes
+ [#24772](https://github.com/cypress-io/cypress/issues/24772).
+
+## 12.1.0
+
+_Released 12/12/2022_
+
+**Features:**
+
+- Added [`cy.getAllCookies()`](/api/commands/getallcookies) and
+ [`cy.clearAllCookies()`](/api/commands/clearallcookies), which get and clear
+ cookies for all browser cookies across any domains. Addresses
+ [#24265](https://github.com/cypress-io/cypress/issues/24265),
+ [#8956](https://github.com/cypress-io/cypress/issues/8956), and
+ [#408](https://github.com/cypress-io/cypress/issues/408).
+- Updated the error messaging to provide more context when parallel group
+ parameters are mismatched when sent to the Cypress Cloud. Fixes
+ [#24734](https://github.com/cypress-io/cypress/issues/24734).
+
+**Bugfixes:**
+
+- Fixed an issue with the `cy.session` command where it now recollects the
+ session data after validation is successful to correctly store the full
+ browser context before the command ends. Addressed with
+ [#25112](https://github.com/cypress-io/cypress/pull/25112).
+- Fixed an issue where recent versions of Firefox in headless mode would behave
+ inconsistently with headed. Fixes
+ [#24900](https://github.com/cypress-io/cypress/issues/24900).
+- Fixed an issue where [`.select(index)`](/api/commands/select#Index) would fail
+ when multiple `` elements have the same value property. Fixes
+ [#24739](https://github.com/cypress-io/cypress/issues/24739).
+- Cleaned up temp files generated by `cypress run`. Addressed by
+ [#24957](https://github.com/cypress-io/cypress/pull/24957)
+- The Chrome web security configuration tooltip will now be shown only if
+ [`chromeWebSecurity`](/app/guides/cross-origin-testing#Disabling-Web-Security) is
+ set to false when using a non-chromium browser. Fixes
+ [#23846](https://github.com/cypress-io/cypress/issues/23846).
+- Fixed an issue where updating a component would not trigger the `supportFile`
+ to reload imported stylesheets. This is fixed by doing a full reload for Vite,
+ to ensure the spec re-runs correctly with the latest styles. Fixes
+ [#24874](https://github.com/cypress-io/cypress/issues/24874).
+- The
+ [Run All Specs experiment](/app/references/experiments#End-to-End-Testing)
+ will now open in a new tab rather than close and reopen the browser. This will
+ make the run faster and help mitigate
+ [#21743](https://github.com/cypress-io/cypress/issues/21743). Fixes
+ [#24919](https://github.com/cypress-io/cypress/issues/24919).
+
+## 12.0.2
+
+_Released 12/08/2022_
+
+**Bugfixes:**
+
+- Fixed a regression in [12.0.0](#12-0-0) where
+ [`.contains()`](/api/commands/contains) received multiple elements as a
+ subject, it only searched inside the first one. Fixes
+ [#25025](https://github.com/cypress-io/cypress/issues/25025)
+- Fixed a regression in [12.0.0](#12-0-0) around
+ [`.contains()`](/api/commands/contains) where if the subject was a `