diff --git a/docs/accessibility/changelog.mdx b/docs/accessibility/changelog.mdx
index a61eafbb3c..3c56015ac6 100644
--- a/docs/accessibility/changelog.mdx
+++ b/docs/accessibility/changelog.mdx
@@ -7,10 +7,6 @@ sidebar_position: 200
# Changelog
-## Week of 11/11/2024
-
-- A "Share Issue" button has been added to the element details section for each reported rule violation. This allows for easily copying the key details and related links for a particular issue into your clipboard to add to a message or to a ticket in your issue tracking system.
-
## Week of 10/28/2024
- Our [Axe Core® versioning policy](/accessibility/core-concepts/how-it-works#Axe-Core-updates) has been published, providing a 30-day buffer between any Axe Core® releases and the adoption of those releases in Cypress Cloud.
diff --git a/docs/accessibility/configuration/axe-core-configuration.mdx b/docs/accessibility/configuration/axe-core-configuration.mdx
index 45cddca7a9..b5f10646d3 100644
--- a/docs/accessibility/configuration/axe-core-configuration.mdx
+++ b/docs/accessibility/configuration/axe-core-configuration.mdx
@@ -8,7 +8,7 @@ sidebar_label: 'Axe Core® configuration'
-Configuration for Axe-Core® rules is available through your Account Executive. We are happy to have a call with you to dial in your report config to make sure you are getting the most useful reports possible, and we find this onboarding very effective.
+Configuration for Axe-Core® rules is available through your Account Executive. We we are happy to have a call with you to dial in your report config to make sure you are getting the most useful reports possible, and we find this onboarding very effective.
In most cases, configuration of these rules as they run in Cypress Cloud isn't needed, because your implementation of any policies about what should "fail a build" is handled using the [Accessibility Results API](/accessibility/results-api), where you have full control over how to parse the results and what rules need to be reacted to. Keeping the results in Cypress Cloud broad helps you to still be able to see and understand all of the accessibility information, even if only a subset of the results would be considered blocking.
@@ -24,7 +24,7 @@ In most cases, configuration of these rules as they run in Cypress Cloud isn't n
## Component Testing
-Cypress Accessibility works great with component testing. In addition the rules that are off by default, "page-level" rules do not run for component tests, since a component is usually a fragment mounted in an empty page that would not be expected to have things like headings or a `main` element.
+Cypress Accessibility works great with component testing. In addition the the rules that are off by default, "page-level" rules do not run for component tests, since a component is usually a fragment mounted in an empty page that would not be expected to have things like headings or a `main` element.
## Updates to the Axe Core® library
diff --git a/docs/accessibility/core-concepts/how-it-works.mdx b/docs/accessibility/core-concepts/how-it-works.mdx
index 637640ab96..d24b2d2b07 100644
--- a/docs/accessibility/core-concepts/how-it-works.mdx
+++ b/docs/accessibility/core-concepts/how-it-works.mdx
@@ -11,7 +11,7 @@ The stages of the Cypress Accessibility process are as follows:
1. As your run is recorded and specs are uploaded to Cypress Cloud, accessibility checks begin, based on the incoming [Test Replay](/cloud/features/test-replay) data, on the Cypress Cloud servers.
1. When your run completes, the final specs are processed for accessibility checks. All earlier specs have already entered processing and are likely completed by the end of the run.
-1. Cypress Cloud organizes all the Views (pages and components) that were rendered during the run, merging and deduplicating across tests so that page-level results and live DOM snapshots can be grouped together.
+1. Cypress Cloud organizes all the the Views (pages and components) that were rendered during the run, merging and deduplicating across tests so that page-level results and live DOM snapshots can be grouped together.
1. A combined "rule-level" report is created.
1. The completed results are displayed in Cypress Cloud and are flagged in integrations such Slack as GitHub/Gitlab comments, and available CI via the Results API so that you can optionally fail your pipeline if your standards are not met.
diff --git a/docs/accessibility/get-started/introduction.mdx b/docs/accessibility/get-started/introduction.mdx
index e4e1f1ae81..ce4dcd55c8 100644
--- a/docs/accessibility/get-started/introduction.mdx
+++ b/docs/accessibility/get-started/introduction.mdx
@@ -15,7 +15,7 @@ Looking for a general guide for Accessibility testing in Cypress App? [Go here](
-
-## 2. Record a run
-
-Cypress Accessibility generates reports using [Test Replay](/cloud/features/test-replay) data and requires Cypress v13+. No additional configuration or instrumentation is required to get started.
-
-[Record a run](/cloud/get-started/setup) to the Cypress Cloud with Test Replay to start using Cypress Accessibility.
-
-## 3. View your Accessibility results
-
-After recording a test run, you can view your Accessibility results in the Cypress Cloud via the **Accessibility** tab.
-
-
-
-## 4. Customize your results
-
-Cypress Accessibility provides flexible configuration options to customize your reports. You can configure:
-
-- [Element filters](/accessibility/configuration/elementfilters): specify selectors for elements that should be excluded from Accessibility scans
-- [View filters](/accessibility/configuration/viewfilters): specify URL patterns for URLs that should be excluded from Accessibility scans. Excluding a URL also excludes all links to that URL.
-- [Views](/accessibility/configuration/views): specify URL patterns that represent views
-
-To add or modify the configuration for your project, navigate to the **App Quality** tab in your project settings.
-
-
diff --git a/docs/accessibility/guides/_category_.json b/docs/accessibility/guides/_category_.json
deleted file mode 100644
index 371eacc4b7..0000000000
--- a/docs/accessibility/guides/_category_.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "label": "Guides",
- "position": 70
-}
diff --git a/docs/accessibility/guides/accessibility-automation.mdx b/docs/accessibility/guides/accessibility-automation.mdx
deleted file mode 100644
index c1b6565503..0000000000
--- a/docs/accessibility/guides/accessibility-automation.mdx
+++ /dev/null
@@ -1,47 +0,0 @@
----
-title: Accessibility automation principles
-sidebar_position: 80
----
-
-This guide describes some general ideas that are relevant to Cypress Accessibility, but are also somewhat shared among accessibility automation tools of any kind.
-
-## What it means to fix all Axe Core® violations {#what-it-means-to-fix-all-axe-core-violations}
-
-Cypress Accessibility runs Axe Core® checks on every significant state and variation of the applications you test with Cypress. This kind of automation can catch up to [57% of issues that would appear in a manual audit](https://www.deque.com/blog/automated-testing-study-identifies-57-percent-of-digital-accessibility-issues/), but it does not replace the human judgment that is applied during an audit. Auditors test a wide variety of scenarios and technologies in a way that would be impossible to fully automate.
-
-It helps to think of accessibility at three levels. The first is “basic usability”. Paying attention to issues reported by Cypress and Axe Core® should help you to this point. This is the threshold at which a disabled user is likely to be able to make substantial progress through the application, but may still hit major barriers or usability issues. If your contact forms and issue reporting systems are accessible, you will be able to learn about these problems from actual users.
-
-The second level of accessibility is full conformance with all Web Content Accessibility Guidelines (WCAG) success criteria. As mentioned above, more than half of issues reported in manual audits can be reported and caught early with Axe Core ®automation. Conformance with the WCAG is often the standard set by legislation and regulation related to web accessibility. If your goal is regulatory compliance, this is the bar. No generic automation tool can “prove” compliance with this standard, it **requires** human assessment.
-
-The third level, and the true goal of many accessibility programs, is a good user experience. This needs to be validated by actual disabled users who are daily users of assistive technology. It’s entirely possible to have a website that passes the first two levels, and still offers a poor user experience.
-
-Accessibility is about communicating the nature and structure of the application, and the available actions and information, in a way that allows disabled users to independently understand the interface and complete all tasks. The foundational [POUR principles](https://www.24a11y.com/2019/pour-the-foundation-first/) of the WCAG \- that software must be Perceivable, Operable, Understandable and Robust \- are bigger than any specific set of test plans or static checks. While Axe Core® tell us about many genuine accessibility barriers, it is important to leverage that information into making good decisions about accessibility and providing a truly equal experience.
-
-## False positives
-
-False positives are always a risk in any automated scans. Both Cypress Accessibility and Axe Core® are designed in a way that minimizes them, but it’s always possible that there will be some violations in the report that you recognize as invalid and would rather exclude, or are genuinely incorrect.
-
-While false positives are rare, if in doubt, use the “provide feedback” button to alert us to something you see as a false positive and we can work on diagnosing and solving the issue from our side.
-
-### Genuine false positives
-
-There are two main possible sources of genuine false positive results:
-
-1. The check was run on an **invalid** **state** \- for example a partially hydrated DOM \- that no user would ever see. These are scenarios that Cypress can account for in the product if they are reported.
-2. The state tested was correct but Axe Core® reported a violation that it shouldn’t have, as a result of a bug or missing check. Since Axe Core® is an open-source product, if and when we encounter bugs, we can open issues in the project and even make pull requests if needed.
-
-### Loading states
-
-There’s another scenario that can present as a potential false positive: legitimate user-facing loading states. These are situations where some data is pending in your application.
-
-It might be tempting to say “this state shouldn’t be captured, it’s not fully loaded” \- but in reality, these types of “pending” states are valid, and often contain visual information like loading spinners, UI skeletons, and progress bars which should be accessible themselves, so the user knows what data is loading. It’s also possible that the data doesn’t come in at all, or is very slow, and a user needs to figure out what is happening and what they can do, so the application needs to remain in a fully accessible, usable condition even if data is pending.
-
-In general it’s a good idea in front-end development to “make impossible states impossible”, and in doing so you can follow the accessibility principle of Robustness (the last of the 4 POUR principles mentioned above), while also making it much less likely that an invalid state is possible to reach in Cypress in the first place. This can also have a beneficial effect on the overall stability of your tests.
-
-### Assistive technology support
-
-Certain accessibility techniques are not fully supported by all assistive technologies like screen readers or voice control software. Axe Core® accounts for this. The software and operating systems tested against are listed in their [Accessibility Supported document](https://github.com/dequelabs/axe-core/blob/develop/doc/accessibility-supported.md). For example: it can seem like a false positive from Axe Core® if a failing technique used in your code appears to work correctly in a certain screen reader, browser and operating system combination that you test with. But if it does not have sufficient accessibility support in commonly used technology configurations, Axe Core® will intentionally fail that technique, allowing you to switch to something with better support.
-
-## Summary
-
-Accessibility automation is a crucial part of an accessibility strategy in any fast-moving, modern codebase. When multiple code changes are merged on a daily or weekly basis, there is no possibility to run manual checks on every state and variation of the application prior to merge. Understanding some of the details of an "always on" set of accessibility checks in your test pipeline, where a lot of states are automatically detected, will help you develop a feel for how Cypress Accessibility behaves and what kinds of things it is best at finding, as well as what might be left over for other forms of testing.
diff --git a/docs/accessibility/guides/accessibility-automation/_category_.json b/docs/accessibility/guides/accessibility-automation/_category_.json
deleted file mode 100644
index cbe6ea57c2..0000000000
--- a/docs/accessibility/guides/accessibility-automation/_category_.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "label": "Accessibility automation",
- "collapsible": true,
- "collapsed": false
-}
diff --git a/docs/accessibility/guides/blocking-pull-requests.mdx b/docs/accessibility/guides/blocking-pull-requests.mdx
deleted file mode 100644
index 2b4fd92b51..0000000000
--- a/docs/accessibility/guides/blocking-pull-requests.mdx
+++ /dev/null
@@ -1,60 +0,0 @@
----
-title: Blocking pull requests and setting policies
-sidebar_position: 40
----
-
-Cypress Accessibility reports are generated on the server in Cypress Cloud, based on artifacts uploaded by the test runs. Because of this, there is no impact to your actual Cypress test execution, in terms of performance or anything else - including failing the Cypress run due to accessibility violations.
-
-## Using the Results API
-
-The [Cypress Accessibility Results API](/accessibility/results-api) provides access to accessibility results after the run is completed, so that you can implement patterns like blocking a pull request or sending out alerts based on specific accessibility criteria. This is done by adding a separate accessibility verification step to your CI pipeline, and using a helper function provided by Cypress to automatically request the report for the appropriate Cypress run based on the build context. The example below shows how this can look in GitHub Actions when there is an accessibility failure based on your own chosen policy:
-
-
-
-## Implementing a status check
-
-The API gives you full flexibility to examine the results and react to it in whatever way you need to. It also provides a signal that can be used in status checks on Pull Requests. Here is an example where the accessibility verification step is passing:
-
-
-
-## Implementing a policy in the verification step
-
-The [Results API Documentation](/accessibility/results-api) describes the capabilities of the API in more detail, but here is a simplified example of how to use the API to implement the "no new failing accessibility rules" policy shown above.
-
-```js
-const { getAccessibilityResults } = require('@cypress/extract-cloud-results')
-
-// define your known failing rules
-const rulesWithExistingViolations = [
- 'button-name',
- ...
-]
-
-// call the API
-getAccessibilityResults()
- .then((results) => {
- // compare the accessibility results with your acceptable standard
- const newRuleViolations = results.rules.filter((rule) => {
- return !rulesWithExistingViolations.includes(rule.name)
- })
-
- if (newRuleViolations.length > 0) {
- // based on the standard, trigger any side effect you like, such as failing the step
- throw new Error(
- `${newRuleViolations.length} rule regressions were introduced and must be fixed.`
- )
- }
-})
-```
-
-This process of examining the results and then deciding the appropriate response gives you the most flexibility in terms of how exactly you want to force a stopping point or specific reaction based on the contents. You have access to the results as well as any context needed from the CI environment, such as tags, to implement the correct response to any specific result values.
diff --git a/docs/accessibility/guides/improving-accessibility.mdx b/docs/accessibility/guides/improving-accessibility.mdx
deleted file mode 100644
index ecbf2b27c3..0000000000
--- a/docs/accessibility/guides/improving-accessibility.mdx
+++ /dev/null
@@ -1,60 +0,0 @@
----
-title: Improving accessibility
-sidebar_position: 20
----
-
-In this section we'll discuss how to break down the data in your accessibility report and make a plan for remediation.
-
-
-
-## Starting from Scratch
-
-When you first start to use Cypress Accessibility, you may be testing a legacy application with many existing accessibility violations. The [Accessibility tab for a run](/accessibility/core-concepts/run-level-reports) can show multiple violations detected on dozens or hundreds of pages in your application. The number of failing elements and page or component snapshots available might be overwhelming, making it difficult to know where to start.
-
-In this situation, the first step is to understand some of the key variables and how they are related within your organization. The kinds of things to consider are:
-
-- your goals for the accessibility of the application
-- your timeline for making it accessible
-- the available resources for remediation
-- what code is likely to change in the near future, where accessibility can be included in designs and requirements
-- the consequences, risks, and costs of remaining inaccessible
-
-These factors will help you find the right strategy for engaging with the results displayed in your accessibility reports. While incremental accessibility efforts by designers and engineers are never wasted, the best outcomes come from an overall organizational commitment to ship accessible software, which requires investment from all departments, so understanding your organization's stance on accessibility and who needs to be in the conversation is also helpful.
-
-If your organization or team is newer to accessibility, you are likely to find plenty of issues reported by Axe Core® in Cypress Cloud. Many of the issues in your first report may relate to concepts that are new, such as [ARIA attributes](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA) or [invalid nesting of interactive controls](https://dequeuniversity.com/rules/axe/4.2/nested-interactive). Since it will be impossible to fix all issues overnight, we recommend finding some low-hanging fruit as a starting point. This can help your team build confidence by getting some wins on the board, and teach them the overall idea of how accessibility problems get fixed.
-
-### Good low-hanging fruit
-
-Some of the easiest, and most valuable issues to tackle first come from [WCAG SC 4.2.1 \- Name, role, value](https://www.w3.org/WAI/WCAG21/Understanding/name-role-value.html). This is the part of the Web Content Accessibility Guidelines that’s concerned with making sure interactive controls have appropriate labels for all users. In general, your app is likely to have some violations in this category, and Axe-Core® tends to flag these as Critical or Serious, because the lack of a label usually makes it difficult or impossible for some users to know what something does in a user interface.
-
-Within the “Name, role, value” success criterion, the [`button-name`](https://dequeuniversity.com/rules/axe/4.7/button-name) rule in Axe Core® (“Buttons must have discernible text”) is a great place to start. Icons being used as buttons are common in modern user interfaces and they are often missing descriptive text content for screen reader users, which directly impacts their ability to understand the purpose and effect of the button and independently complete tasks in your application.
-
-This rule, and others like it, are good starting points because the rule is easy to understand and easy to fix. Since the solution is purely a code update to add the missing label text to buttons, this category of rule requires little or no coordination across departments or teams to address. These types of issues are also straightforward to demonstrate and validate even for beginners with a screen reader.
-
-Existing code failing the button-name rule can usually be remediated pretty quickly, as long as it is clear what the correct text label is for a given control. And when it comes to new code, this text label content is also easy to add to discussions in the design and requirements stages of the development cycle, shifting the accessibility conversation left.
-
-Since every violation in Cypress is linked to a Deque University page with details about the nature of the problem and how to fix it, all the needed context is available, even to engineers who may be new to the topic of accessiblity in general, or to a specific violation.
-
-Even if your first rule is not “Buttons must have discernible text”, we suggest finding one with a similarly small amount of coordination or understanding needed to fix, so the team can experience success as quickly as possible.
-
-### Finding low-hanging fruit with Cypress
-
-Cypress Accessibility generates a separate report for each page and component tested in a run. It’s also possible to see all accessibility rules that failed across the entire run. The rules-first approach is useful when finding low-hanging fruit. The rules with the smallest element count are the closest to being fully fixed, and removed from the report. If, at the “All Views” level, there’s not a good rule with a low element count, the next step is to focus on just a single View in the report. You might not be able to fix all buttons across the application, for example, but maybe you can pick a single page and fix just the issues on that specific page.
-
-### Setting the goal
-
-Your goal is to get your target rule’s failing elements down to zero for your chosen scope. That scope can be a specific page, a set of pages, or the entire application. Seeing that rule disappear from a report provides a clear finish line for you and your team. It also provides time to assess the impact of the changes.
-
-Often, due to the componentized nature of modern web apps, fixing an issue in one place has knock-on benefits around the app. Even if you focused on a narrow scope, your changes may still have had a wider impact, so remember: it’s fine for these first goals to be small at first. In fact, it’s preferable.
-
-### Iterating towards success {#iterating-towards-success}
-
-By setting a reasonable goal to understanding and fix specific rules scoped to defined areas of the application being tested, your team can make incremental progress on accessibility without becoming overwhelmed. With support from the Deque University “Learn More” links embedded into the reports, your team can specialize in one rule at a time, learn the related context, and then go deeper on more complicated or debatable topics.
-
-Given enough capacity, as dictated by the urgency of accessibility remediation combined with other business constraints, you will eventually solve all issues that are reported with Cypress Accessibility, and be well on your way to a more usable, accessible experience.
-
-If you are interested in using Cypress to detect and prevent regressions in the rules that you already have passing, you can learn how to use the Results API to do this in our [Blocking Pull Requests Section](/accessibility/guides/blocking-pull-requests).
diff --git a/docs/accessibility/guides/introduction.mdx b/docs/accessibility/guides/introduction.mdx
deleted file mode 100644
index 0ed4f67cbd..0000000000
--- a/docs/accessibility/guides/introduction.mdx
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: Introduction
-sidebar_position: 10
----
-
-:::info
-
-##### What you'll learn
-
-- How to set goals and make progress using Cypress Accessibility
-- How to generate reports during local development cycles
-- Common issues and questions related to all kinds of accessibility automation
-- How to use Cypress Accessibility to monitor a production website
-- Switching between "improvement" and "maintenance" mindsets
- :::
-
-## Making the most of Cypress Accessibility
-
-In these guides, we'll describe how to leverage Cypress Accessibility to improve and maintain the accessibility of the websites and applications you test with Cypress. We'll also discuss how to work with your Cypress point-of-contact to set the product up to provide the most value to you based on the goals you have for each specific app you are testing.
-
-Every project will be in a different state when you start to use Cypress Accessibility. You might find you have thousands of issues on hundreds of different pages and components, or you might have just a few issues detected in an already-accessible experience.
-
-For projects that have a high volume of issues, we'll describe how to use Cypress Accessibility to drive the process of remediation and improvement, get some measurable wins on the board for your team, and support the gradual introduction of accessibility standards.
-
-For projects with few or no issues currently, we’ll lay out how Cypress supports a resilient, efficient, and timely approach to maintain your standards and avoid surprises over the long term.
-
-The end goal of this process is not to simply pass all your automated accessibility checks, but to deliver a truly usable, accessible, and equal experience to all your users. So we'll also discuss limitations related to static automatic checks and how to write explicit test coverage to prevent regressions and increase confidence.
-
-## Contents
-
-1. [Improving Accessibility](/accessibility/guides/improving-accessibility)
-1. [Maintaining Accessibility](/accessibility/guides/maintaining-accessibility)
-1. [Blocking pull requests and setting policies](/accessibility/guides/blocking-pull-requests)
-1. [Getting feedback during local development](/accessibility/guides/local-development)
-1. [Production monitoring](/accessibility/guides/production-monitoring)
-1. [Maximizing coverage](/accessibility/guides/maximizing-coverage)
-1. [Accessibility automation principles](/accessibility/guides/accessibility-automation)
diff --git a/docs/accessibility/guides/local-development.mdx b/docs/accessibility/guides/local-development.mdx
deleted file mode 100644
index ee0190c1c5..0000000000
--- a/docs/accessibility/guides/local-development.mdx
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Feedback during local development
-sidebar_position: 50
----
-
-# Feedback during local development
-
-While there are some workarounds possible with browser extensions or Cypress plugins, the most reliable solution for local development is to record to Cypress Cloud from your local development machine. This allows you to run a small set of tests directly related to your changes and fully skip your build pipeline and CI processes. It can be run with a one line command:
-
-```
-npx cypress run --key --record --spec "cypress/e2e/my-spec.cy.js"
-```
-
-(You can skip the `--key` option by setting `CYPRESS_RECORD_KEY` as an environment variable. Learn more about recording in our [docs about recorded runs](/cloud/features/recorded-runs)).
-
-This has 3 key benefits:
-
-- Accuracy \- you will see exactly what Cypress does with your new code changes, taking into account your project's configuration, and using the Cloud's version of Axe Core®. There will be no violations reports for rules, pages, or elements your team has chosen to ignore, for example.
-- Speed \- since the application is already built locally, while you are working on it, it is ready to test immediately without your build pipeline
-- Scope \- you can run only the tests you need, which can make results even faster, and helps you exclude issues unrelated to the area you are working on
-
-One other reason to get early feedback this way is to quickly know if, in fixing one accessibility problem, you’ve revealed or introduced another. Recording small runs locally is a big quality-of-life improvement when you are specifically looking for this kind of feedback.
-
-If you expect your team to do a lot of runs this way and that these partial results would clutter your Cypress project, you can set up a dedicated Cloud project for “locally generated” runs to keep things organized.
diff --git a/docs/accessibility/guides/maintaining-accessibility.mdx b/docs/accessibility/guides/maintaining-accessibility.mdx
deleted file mode 100644
index 2f63756a53..0000000000
--- a/docs/accessibility/guides/maintaining-accessibility.mdx
+++ /dev/null
@@ -1,52 +0,0 @@
----
-title: Maintaining accessibility
-sidebar_position: 30
----
-
-This section discusses the different mindset and success metrics you may have when a project moves from remediating known issues, to long term accessibility maintenance.
-
-## Switching from “improving” to “maintaining”
-
-As soon as a given accessibility rule reaches zero violations for a given page, component, or application, you enter “maintenance mode” for that rule. If the content being tested is stable, any time a failure of that rule shows back up in the reports for that area on a feature branch, it will be clear that changes on that feature branch are the reason for the failure. These changes could be changes in the application code that made it less accessible, **or** changes in the tests to cover new parts of the application.
-
-If a previously-passing rule starts failing on your main branch after not being fixed in a pull request, you can trace back to the re-introduction of the failure and understand what code or test change is responsible. This allows for follow-up and training with developers who introduce issues and gives you the needed information to know about and fix the problem itself.
-
-Your overall goal should be to reach a fully-passing state on every rule. Cypress provides you a lot of flexibility to manage large amounts of accessibility violations and make incremental progress towards well-defined targets. Through a combination of fixing accessibility problems, and configuring Cypress to focus on a tight scope of rules, standards, and application areas that matter most to you, you might be closer than you think to a “clean” main branch, from which you can expand your standards over time.
-
-## Maintaining accessibility
-
-Once you reach the state of a report that contains no violations, your organization’s usage of Cypress Accessibility will change dramatically, and start to focus mainly on detecting and preventing accessibility problems before they merge. This can be a big adjustment. Chipping away at a large backlog of known issues, and fixing things rule-by-rule, provides a clear measure of progress to your team and a sense of momentum. It’s likely you will have been able to measure success and set goals in relation to the accessibility violations present on your main branch up to now.
-
-When those violations are all fixed, what exactly is Cypress Accessibility “doing” in your pipeline? And how should you measure success?
-
-### What Cypress Accessibility is doing when a project is in maintenance mode {#what-cypress-accessibility-is-doing-when-a-project-is-in-maintenance-mode}
-
-The short answer is: providing **pre-merge insights**, and **post-merge monitoring**, that supports you in maintaining accessibility. Accessibility debt tends to accumulate silently over time, leading to large, problematic backlogs that are difficult to work through, and land on your desk all at once after an audit. As you will have learned by going through the remediation process to get to a clean report in the first place: it’s not always easy to fix an already-inaccessible experience. Sometimes you have to start a whole feature or component over, because you’ve built multiple structures on top of an inaccessible foundation.
-
-Early feedback about accessibility on feature branches will allow developers to review small, precise reports, and get all the context they need to either fix issues immediately, or raise problematic patterns for wider discussion. This is especially helpful when a new team member joins, who isn’t as familiar with accessibility practices, or when a well-meaning full-stack developer – somebody who can “get by” in the front-end – unintentionally makes a minor change with major accessibility implications.
-
-Detecting problems before code merges allows the training, awareness-building, discussion, and remediation to all happen in the same cycle as regular code review, when everybody has all the context they need, not weeks or months later when it will be difficult to inject a ticket into the backlog to untangle what might have become a “load-bearing” accessibility problem.
-
-### How to measure success in maintenance mode {#how-to-measure-success-in-maintenance-mode}
-
-The issues surfaced in Cypress Accessibility should follow certain patterns, allowing you to get a good “pulse” on your team’s effectiveness with accessibility and time spent dealing with issues. The best-case scenario is that, with a stable team of front-end developers working on the product, the total number of violations on the main branch, as well as the number of violations identified and corrected on feature branches, should trend downwards over time. This driven by a buildup of education as a result of the continuous feedback. The presence of the feedback should _change developer behavior_ and truly help shift accessibility left, into questions that get asked and answered even before development, when a ticket is created or a design is handed off. At that point, mistakes are avoided, instead of corrected.
-
-We don’t expect most teams to reach a state where they always get everything right in the first code commit: there will always be some issues surfacing in Cypress Cloud – but as teams mature, it’s reasonable to expect the reports to contain less and less violations. This state is ideal \- your development teams should be focused on adding value to your company by making changes to the product.
-
-For most of you reading this, accessibility problems are quality issues, just like bugs and UI issues, and they are important and need to be addressed. This is why optimizing and minimizing the effort related to accessibility is so valuable in a literal sense \- your team is going to spend time on accessibility anyway, every cycle saved on dealing with accessibility is freed up for feature work, quality improvements, and other important activities.
-
-### Ideal conditions never last forever
-
-The main thing that would disrupt the downward trend of pre-merge violations is plain old reality. Teams change, priorities change, people move around an organization, they get hired, they leave, they go on vacation. All of this can be disruptive to an accessibility program – sometimes it’s a specific person or small group that is keeping standards up and providing guidance to their peers. When that person moves out of their team, a previously stable accessibility situation can start to regress.
-
-Cypress Accessibility will help you see this kind of disruption in real time and help you take action as needed. One of the biggest pain points that has been described to us by customers is unexpectedly having a large backlog of high-priority accessibility issues surfaced in an annual audit, even when they had fixed everything from the previous audit. This happens for a few reasons: sometimes the fixes introduce new problems, sometimes net-new work is added that includes new accessibility violations, or design changes lead to front-end modifications with unexpected accessibility implications.
-
-With Cypress Accessibility, you have an early warning system for these situations. They will show up as an increase in violations reported during code reviews, and there will be no chance for this accessibility debt to accumulate silently. Your team has an opportunity to “self-correct” when this happens, or if accessibility is disregarded and violations do get merged, you will be able to track that on your main branch.
-
-## Summary
-
-Accessibility is an ongoing process that affects the whole organization, not a single project of fixing a known list of issues and “completing” accessibility. The automation layer of accessibility tests offered by Cypress Accessibility maximizes the amount of information you can have at your fingertips to improve your accessibility status and maintain an accessible application over the long term, in a software development environment where both expected and unexpected changes create constant challenges for quality.
-
-Cypress Accessibility provides a consolidated report with page- and component-level breakdowns and interactive, visual DOM snapshots to understand exactly what every violation relates to in your application. With filtering and configuration you can create a manageable series of goals to solve every accessibility issue that Axe Core® can detect. Once your accessibility report is fully passing for the rules and pages that make sense for your business and project, Cypress Accessibility supports continuous feedback on new code changes before they merge, and gives you an early warning system if things are getting off track.
-
-The clarity and efficiency from using Cypress Accessibility will optimize your team’s time spent managing and fixing accessibility issues that are detectable by automation, helping them focus more on building great things that create value for your organization, without sacrificing this critical aspect of quality software development and building up debt over time to do so.
diff --git a/docs/accessibility/guides/maximizing-coverage.mdx b/docs/accessibility/guides/maximizing-coverage.mdx
deleted file mode 100644
index cb41b402f5..0000000000
--- a/docs/accessibility/guides/maximizing-coverage.mdx
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Maximizing coverage
-sidebar_position: 70
----
-
-As you gain more familiarity with the nature of accessibility violations and the underlying ideas behind them, you will see the connection between the generic, static checks offered by Axe Core®, and the specific user-facing behavior of your own applications. In many cases, you will be able to add new assertions to your tests, based on what you learned from Cypress Accessibility, but customized to your specific situation.
-
-An example of this is when Cypress Accessibility reports a button with a missing accessible name. The actual text that should go with the button depends upon your own application, and is unknown to Axe-Core, so a label check will pass for almost _any_ text that is placed in the button. After you’ve added the required text to the codebase, you can write an assertion about that specific text in your Cypress tests, to make clear to future developers that it is part of the spec of the application. That’s a small example, but it applies in many larger situations too.
-
-## Accessibility “hotspots”
-
-Another way to leverage the violations detected by Cypress Accessibility is to treat each one as a sign that accessibility in that area of the application may not have been considered when it was built. Because the whole DOM of the page or component is available for every violation, it’s faster to do a manual check of the patterns being used in the page around an Axe Core® violation. This can reveal accessibility “hotspots” containing usability issues that aren’t otherwise detectable by automation, but would appear in a manual audit. These can be cataloged and corrected, then regression tested with traditional Cypress automation.
-
-## Combining testing approaches
-
-Combining the always-on generic checks provided by Cypress Accessibility with regular Cypress assertions about specific details of your application can help accessibility quality stay high once things are fixed, regardless of whether problems were originally detected manually or automatically. This can take your accessibility confidence far beyond the 57% of issues detected, often cited when thinking about Axe Core® as a standalone library.
-
-In the testing context, you are already specifying user-facing aspects of your application, and that means almost any findings from manual regression checks or user feedback, can be explicitly covered by your standard testing approach. So the overall potential of your automation pipeline to provide good feedback about accessibility regressions is very high, if you leverage explicit assertions on top of the static check "error detection" approach to find mistakes.
diff --git a/docs/accessibility/guides/production-monitoring.mdx b/docs/accessibility/guides/production-monitoring.mdx
deleted file mode 100644
index 786002f7b4..0000000000
--- a/docs/accessibility/guides/production-monitoring.mdx
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: Production monitoring
-sidebar_position: 60
----
-
-Many organizations use Cypress automation in CI, and for local development, but also run scheduled tests against production or staging environments. This pattern works especially well for situations where a Content Management System is involved and content authors can add or modify things that affect the user interface, or anything else where the content being tested is not fully controlled by the testing environment. Since it can be impossible to write explicit assertions for ever-changing content like this, or for A/B tests of different UI variations implemented outside your codebase, production smoke tests tend to be more high-level health checks.
-
-Cypress Accessibility makes this kind of testing even more useful, as it will be able to run just fine against that dynamic set of content. Just by visiting a production URL in your Cypress tests, and taking one or two light actions in the UI, that page will be captured in your accessibility report, and alert you about content changes outside of your development lifecycle that introduce accessibility issues.
-
-One common approach to this kind of monitoring, if the project does not already have Cypress tests, is to use something like a site map, or just an array of target URLs, to quickly spin up a lot of coverage without writing new tests for every page, and then run that Cypress test on a schedule to get daily updated accessibility reports. Here is an example of doing this by requesting the `sitemap.xml` file from a website and scrolling to the footer on each page.
-
-```js
-describe('accessibility scan', () => {
- it('checks accessibility with the sitemap.xml', () => {
- cy.request('https:///sitemap.xml').then((response) => {
- const xmlString = response.body
- const parser = new DOMParser()
- const xmlDoc = parser.parseFromString(xmlString, 'application/xml')
- const URLs = Array.from(xmlDoc.querySelectorAll('loc')).map(
- (loc) => loc.textContent
- )
- Cypress._.each(URLs, (URL) => {
- it(`visits ${URL}`, () => {
- cy.visit(URL)
- cy.contains('').scrollIntoView()
- })
- })
- })
- })
-})
-```
-
-The outcome of this is a first-page-load accessibility report for every URL in the site. Any Cypress UI tests for specific workflows will increase the coverage area automatically to include the states and variations reached during the workflows.
diff --git a/docs/accessibility/results-api.mdx b/docs/accessibility/results-api.mdx
index 7003e059b6..f42d85cd59 100644
--- a/docs/accessibility/results-api.mdx
+++ b/docs/accessibility/results-api.mdx
@@ -52,24 +52,6 @@ The Cypress App [repository](https://github.com/cypress-io/cypress) uses the Res
```javascript title="scripts/verifyAccessibilityResults.js"
const { getAccessibilityResults } = require('@cypress/extract-cloud-results')
-/**
- * The list of rules that currently have 1+ elements that have been flagged with
- * violations within the Cypress Accessibility report that need to be addressed.
- *
- * Once the violation is fixed in the Accessibility report,
- * the fixed rule should be removed from this list.
- *
- * View the Accessibility report for the Cypress run in the Cloud
- * for more details on how to address these failures.
- */
-const rulesWithExistingViolations = [
- 'aria-required-children',
- 'empty-heading',
- 'aria-dialog-name',
- 'link-in-text-block',
- 'list',
-]
-
getAccessibilityResults({
projectId: '...', // optional if set from env
recordKey: '...', // optional if set from env
@@ -78,10 +60,11 @@ getAccessibilityResults({
const { runNumber, accessibilityReportUrl, summary, rules } = results
const { total } = summary.violationCounts
- console.log(
- `Received ${summary.isPartialReport ? 'partial' : ''} results for run #${runNumber}.`
- )
- console.log(`See full report at ${accessibilityReportUrl}.`)
+ console
+ .log(
+ `Received ${summary.isPartialReport ? 'partial' : ''} results for run #${runNumber}.`
+ )
+ .console.log(`See full report at ${accessibilityReportUrl}.`)
// write your logic to conditionally fail based on the results
if (total === 0) {
@@ -118,6 +101,24 @@ getAccessibilityResults({
}
console.log('No new Accessibility violations detected!')
+
+ /**
+ * The list of rules that currently have 1+ elements that have been flagged with
+ * violations within the Cypress Accessibility report that need to be addressed.
+ *
+ * Once the violation is fixed in the Accessibility report,
+ * the fixed rule should be removed from this list.
+ *
+ * View the Accessibility report for the Cypress run in the Cloud
+ * for more details on how to address these failures.
+ */
+ const rulesWithExistingViolations = [
+ 'aria-required-children',
+ 'empty-heading',
+ 'aria-dialog-name',
+ 'link-in-text-block',
+ 'list',
+ ]
})
```
@@ -242,10 +243,10 @@ env:
jobs:
run-cypress:
- runs-on: ubuntu-24.04
+ runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v3
- name: install
run: npm install
- name: Run
@@ -288,7 +289,7 @@ run-cypress:
pipeline {
agent {
docker {
- image 'cypress/base:22.12.0'
+ image 'cypress/base:latest'
}
}
@@ -359,7 +360,7 @@ version: 2.1
jobs:
linux-test:
docker:
- - image: cypress/base:22.12.0
+ - image: cypress/base:latest
working_directory: ~/repo
steps:
diff --git a/docs/api/commands/origin.mdx b/docs/api/commands/origin.mdx
index d98a40bd00..9d8f5f89e9 100644
--- a/docs/api/commands/origin.mdx
+++ b/docs/api/commands/origin.mdx
@@ -3,8 +3,8 @@ title: origin
e2eSpecific: true
---
-Visit multiple domains of different
-[origin](https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy#definition_of_an_origin)
+Visit multiple different
+[origins](https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy#definition_of_an_origin)
in a single test.
In normal use, a single Cypress test may only run commands in a single origin, a
@@ -28,6 +28,18 @@ doc.
:::
+:::info
+
+Changes in Cypress [v14.0.0](/app/references/changelog#14-0-0)
+
+Cypress no longer injects `document.domain` by default, which means `cy.origin()`
+must now be used to navigate between any two origins in the same test, even if
+the two origins are in the same superdomain. This behavior can be disabled by setting
+the `injectDocumentDomain` configuration option to `true`, to allow a smooth transition
+of tests to the new behavior. In Cypress 15, this configuration option will be removed.
+
+:::
+
## Syntax
```js
@@ -63,26 +75,28 @@ cy.get('h1').contains('My cool site under test')
const hits = getHits()
cy.visit('https://example.cypress.io/history/founder')
// To interact with cross-origin content, move this inside cy.origin() callback
-cy.get('h1').contains('About our Founder')
-// Domain must be a precise match including subdomain, i.e. example.cypress.io
-cy.origin('cypress.io', () => {
- cy.visit('/history/founder')
- cy.get('h1').contains('About our Founder')
- // Fails because hits is not passed in via args
- cy.get('#hitcounter').contains(hits)
+cy.get('h1').contains('Kitchen Sink')
+// Origin must be a precise match including scheme, subdomain and port, i.e. https://www.cypress.io
+cy.origin('https://www.cypress.io', () => {
+ cy.visit('/about-us')
+ cy.get('h1').contains('About us')
+ // Fails because doanloads is not passed in via args
+ cy.contains(downloads)
})
-// Won't work because still on cypress.io
-cy.get('h1').contains('My cool site under test')
+// Won't work because still on www.cypress.io
+cy.get('h1').contains('Kitchen Sink')
```
### Arguments
- **url _(String)_**
+ **origin _(String)_**
-A URL specifying the secondary origin in which the callback is to be executed.
-This should at the very least contain a hostname, and may also include the
-protocol, port number & path. The hostname must precisely match that of the
-secondary origin, including all subdomains. Query params are not supported.
+A string specifying the origin in which the callback is to be executed.
+This should at the very least contain a hostname. It may also include the
+scheme and port number. The path may be included, but is not necessary.
+The hostname must precisely match that of the secondary origin, including
+all subdomains. Query params are not supported. If no scheme is provided,
+the scheme defaults to `https`.
This argument will be used in two ways:
@@ -542,6 +556,7 @@ inclusion in a future version of Cypress.
| Version | Changes |
| ------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
+| [14.0.0](/app/references/changelog#14-0-0) | `cy.origin()` is now required when navigating between origins in the same test, rather than superdomains. |
| [12.6.0](/app/references/changelog#10-7-0) | Support for `Cypress.require()` added and support for CommonJS `require()` and ES module `import()` removed |
| [10.11.0](/app/references/changelog#10-7-0) | Support for CommonJS `require()` and ES module `import()` added and support for `Cypress.require()` removed |
| [10.7.0](/app/references/changelog#10-7-0) | Support for `Cypress.require()` added |
diff --git a/docs/api/commands/window.mdx b/docs/api/commands/window.mdx
index 6afc4bf2e8..e2a16100e9 100644
--- a/docs/api/commands/window.mdx
+++ b/docs/api/commands/window.mdx
@@ -174,7 +174,7 @@ It fails. But the interesting thing is that the type of `event` is
`KeyboardEvent` when you `console.log(event)`.
It's because Cypress uses an `iframe` to load the application under test. In
-other words, the `KeyboardEvent` used in the code above and the
+other words, the `KeyboardEvent` used in the the code above and the
`KeyboardEvent` class from which the `event` variable is constructed are
different `KeyboardEvent`s.
diff --git a/docs/api/cypress-api/require.mdx b/docs/api/cypress-api/require.mdx
index d12ca9b14e..a67f2bf852 100644
--- a/docs/api/cypress-api/require.mdx
+++ b/docs/api/cypress-api/require.mdx
@@ -15,7 +15,7 @@ in browser-targeted code.
:::caution
-Using `Cypress.require()` within the [`cy.origin()`](/api/commands/origin)
+Using `Cypress.require()` within the [`cy.origin()`](https://docs.cypress.io/api/commands/origin)
callback requires enabling the
[`experimentalOriginDependencies`](/app/references/experiments#End-to-End-Testing) option in the Cypress configuration.
diff --git a/docs/api/node-events/overview.mdx b/docs/api/node-events/overview.mdx
index acd7b1e02a..57fc7dde69 100644
--- a/docs/api/node-events/overview.mdx
+++ b/docs/api/node-events/overview.mdx
@@ -234,7 +234,7 @@ Cypress does this by spawning an independent `child_process` which then
`requires` the [Cypress configuration file](/app/references/configuration).
This is similar to the way Visual Studio Code or Atom works.
-This code will be executed using the Node version that launched Cypress.
+This code will be executed using the the Node version that launched Cypress.
### npm modules
diff --git a/docs/app/continuous-integration/aws-codebuild.mdx b/docs/app/continuous-integration/aws-codebuild.mdx
index 4a54c7cd3f..423cc4c502 100644
--- a/docs/app/continuous-integration/aws-codebuild.mdx
+++ b/docs/app/continuous-integration/aws-codebuild.mdx
@@ -132,14 +132,14 @@ version: 0.2
## https://docs.aws.amazon.com/codebuild/latest/userguide/batch-build-buildspec.html
## Define build to run using the
-## "cypress/browsers:22.12.0" image
+## "cypress/browsers:node-22.11.0-chrome-130.0.6723.69-1-ff-132.0-edge-130.0.2849.56-1" image
## from the Cypress Amazon ECR Public Gallery
batch:
fast-fail: false
build-list:
- identifier: cypress-e2e-tests
env:
- image: public.ecr.aws/cypress-io/cypress/browsers:22.12.0
+ image: public.ecr.aws/cypress-io/cypress/browsers:node-22.11.0-chrome-130.0.6723.69-1-ff-132.0-edge-130.0.2849.56-1
phases:
install:
diff --git a/docs/app/continuous-integration/bitbucket-pipelines.mdx b/docs/app/continuous-integration/bitbucket-pipelines.mdx
index 1f1d85296c..052610f2c8 100644
--- a/docs/app/continuous-integration/bitbucket-pipelines.mdx
+++ b/docs/app/continuous-integration/bitbucket-pipelines.mdx
@@ -18,13 +18,35 @@ title: Bitbucket Pipelines
Detailed documentation is available in the
[Bitbucket Pipelines Documentation](https://support.atlassian.com/bitbucket-cloud/docs/get-started-with-bitbucket-pipelines/).
-Bitbucket runs most builds in Docker containers as described in [Docker image options](https://support.atlassian.com/bitbucket-cloud/docs/docker-image-options/).
+The example below shows a basic setup and job to use
+[Bitbucket Pipelines](https://bitbucket.org/product/features/pipelines) to run
+end-to-end tests with Cypress and Electron.
-If you use the currently available default Bitbucket / Atlassian Linux images listed in the
-"Default build environment" of the Bitbucket Cloud documentation
-[Use Docker images as build environments](https://support.atlassian.com/bitbucket-cloud/docs/use-docker-images-as-build-environments/) you must additionally install [Cypress Linux prerequisites](/app/get-started/install-cypress#Linux-Prerequisites).
+```yaml title="bitbucket-pipelines.yml"
+image: node:latest
+
+pipelines:
+ default:
+ - step:
+ script:
+ # install dependencies
+ - npm ci
+ # start the server in the background
+ - npm run start &
+ # run Cypress tests
+ - npm run e2e
+```
+
+**How this `bitbucket-pipelines.yml` works:**
-For a simpler setup, use a Cypress Docker image, as described in the following section.
+- On _push_ to this repository, this job will provision and start Bitbucket
+ Pipelines-hosted Linux instance for running the pipelines defined in the
+ `pipelines` section of the configuration.
+- The code is checked out from our GitHub/Bitbucket repository.
+- Finally, our scripts will:
+ - Install npm dependencies
+ - Start the project web server (`npm start`)
+ - Run the Cypress tests within our GitHub/Bitbucket repository within Electron
## Testing with Cypress Docker Images
@@ -34,10 +56,10 @@ Cypress locally and in CI, with some images including Chrome, Firefox and Edge.
example, this allows us to run the tests in Firefox by passing the
`--browser firefox` attribute to `cypress run`.
-Read about [Cypress Docker variants](/app/continuous-integration/overview#Cypress-Docker-variants) to decide which image is best for your project.
+Read about [Cypress docker variants](/app/continuous-integration/overview#Cypress-Docker-variants) to decide which image is best for your project.
```yaml title="bitbucket-pipelines.yml"
-image: cypress/browsers:22.12.0
+image: cypress/browsers:node-22.11.0-chrome-130.0.6723.69-1-ff-132.0-edge-130.0.2849.56-1
pipelines:
default:
@@ -51,17 +73,6 @@ pipelines:
- npx cypress run --browser firefox
```
-**How this `bitbucket-pipelines.yml` works:**
-
-- On _push_ to this repository, this job will provision and start Bitbucket
- Pipelines using the Cypress Docker image. It will run the pipelines defined in the
- `pipelines` section of the configuration.
-- The code is checked out from the Bitbucket repository.
-- Finally, our scripts will:
- - Install npm dependencies
- - Start the project web server (`npm start`)
- - Run the Cypress tests within the Bitbucket repository using Firefox
-
## Caching Dependencies and Build Artifacts
Per the
@@ -76,7 +87,7 @@ Artifacts from a job can be defined by providing paths to the `artifacts`
attribute.
```yaml title="bitbucket-pipelines.yml"
-image: cypress/browsers:22.12.0
+image: cypress/browsers:node-22.11.0-chrome-130.0.6723.69-1-ff-132.0-edge-130.0.2849.56-1
pipelines:
default:
@@ -140,7 +151,7 @@ recording test results to [Cypress Cloud](/cloud/get-started/introduction).
:::
```yaml title="bitbucket-pipelines.yml"
-image: cypress/base:22.12.0
+image: cypress/base:22.11.0
## job definition for running E2E tests in parallel
e2e: &e2e
@@ -199,7 +210,7 @@ definitions:
The complete `bitbucket-pipelines.yml` is below:
```yaml title="bitbucket-pipelines.yml"
-image: cypress/base:22.12.0
+image: cypress/base:22.11.0
## job definition for running E2E tests in parallel
e2e: &e2e
diff --git a/docs/app/continuous-integration/circleci.mdx b/docs/app/continuous-integration/circleci.mdx
index b4af9ed1bd..3e180b455f 100644
--- a/docs/app/continuous-integration/circleci.mdx
+++ b/docs/app/continuous-integration/circleci.mdx
@@ -42,7 +42,7 @@ orbs:
workflows:
build:
jobs:
- - cypress/run: # "run" job comes from "cypress" orb
+ - cypress/run # "run" job comes from "cypress" orb
start-command: 'npm run start'
```
diff --git a/docs/app/continuous-integration/github-actions.mdx b/docs/app/continuous-integration/github-actions.mdx
index c5199cd9ef..fa921cbefa 100644
--- a/docs/app/continuous-integration/github-actions.mdx
+++ b/docs/app/continuous-integration/github-actions.mdx
@@ -98,7 +98,7 @@ on: push
jobs:
cypress-run:
- runs-on: ubuntu-24.04
+ runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4
@@ -180,9 +180,9 @@ on: push
jobs:
cypress-run:
- runs-on: ubuntu-24.04
+ runs-on: ubuntu-22.04
container:
- image: cypress/browsers:22.12.0
+ image: cypress/browsers:node-22.11.0-chrome-130.0.6723.69-1-ff-132.0-edge-130.0.2849.56-1
options: --user 1001
steps:
- name: Checkout
@@ -229,7 +229,7 @@ on: push
jobs:
install:
- runs-on: ubuntu-24.04
+ runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4
@@ -249,7 +249,7 @@ jobs:
path: build
cypress-run:
- runs-on: ubuntu-24.04
+ runs-on: ubuntu-22.04
needs: install
steps:
- name: Checkout
@@ -325,7 +325,7 @@ on: push
jobs:
install:
- runs-on: ubuntu-24.04
+ runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4
@@ -363,7 +363,7 @@ jobs:
# ... omitted install job from above
cypress-run:
- runs-on: ubuntu-24.04
+ runs-on: ubuntu-22.04
needs: install
strategy:
# don't fail the entire matrix on failure
@@ -494,7 +494,7 @@ on: push
jobs:
cypress-run:
name: Cypress run
- runs-on: ubuntu-24.04
+ runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4
@@ -521,7 +521,7 @@ on: push
jobs:
cypress-run:
name: Cypress run
- runs-on: ubuntu-24.04
+ runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4
diff --git a/docs/app/continuous-integration/gitlab-ci.mdx b/docs/app/continuous-integration/gitlab-ci.mdx
index e5f5a916ec..40f6a977e3 100644
--- a/docs/app/continuous-integration/gitlab-ci.mdx
+++ b/docs/app/continuous-integration/gitlab-ci.mdx
@@ -68,7 +68,7 @@ stages:
- test
test:
- image: cypress/browsers:22.12.0
+ image: cypress/browsers:node-22.11.0-chrome-130.0.6723.69-1-ff-132.0-edge-130.0.2849.56-1
stage: test
script:
# install dependencies
@@ -99,7 +99,7 @@ cache:
- .npm/
test:
- image: cypress/browsers:22.12.0
+ image: cypress/browsers:node-22.11.0-chrome-130.0.6723.69-1-ff-132.0-edge-130.0.2849.56-1
stage: test
script:
# install dependencies
@@ -166,7 +166,7 @@ cache:
## Install npm dependencies and Cypress
install:
- image: cypress/browsers:22.12.0
+ image: cypress/browsers:node-22.11.0-chrome-130.0.6723.69-1-ff-132.0-edge-130.0.2849.56-1
stage: build
script:
- npm ci
@@ -211,13 +211,13 @@ cache:
## Install npm dependencies and Cypress
install:
- image: cypress/browsers:22.12.0
+ image: cypress/browsers:node-22.11.0-chrome-130.0.6723.69-1-ff-132.0-edge-130.0.2849.56-1
stage: build
script:
- npm ci
ui-chrome-tests:
- image: cypress/browsers:22.12.0
+ image: cypress/browsers:node-22.11.0-chrome-130.0.6723.69-1-ff-132.0-edge-130.0.2849.56-1
stage: test
parallel: 5
script:
diff --git a/docs/app/continuous-integration/overview.mdx b/docs/app/continuous-integration/overview.mdx
index 82c0ea1deb..0b6ade0a37 100644
--- a/docs/app/continuous-integration/overview.mdx
+++ b/docs/app/continuous-integration/overview.mdx
@@ -212,9 +212,9 @@ cypress run --record --key=abc123 --parallel
CI providers, such as [GitHub Actions](https://docs.github.com/en/actions/using-jobs/running-jobs-in-a-container) and
[CircleCI](https://circleci.com/docs/executor-intro/#docker), allow workflows to run using
-[Docker container images](https://docs.docker.com/get-started/docker-concepts/the-basics/what-is-a-container/).
+[Docker container images](https://docs.docker.com/app/docker-concepts/the-basics/what-is-a-container/).
-Cypress supports the use of [Docker](https://docs.docker.com/get-started/docker-overview/)
+Cypress supports the use of [Docker](https://docs.docker.com/app/docker-overview/)
through the provisioning of official [Cypress Docker images](https://github.com/cypress-io/cypress-docker-images).
Images are Linux-based and support the following platforms:
@@ -235,7 +235,7 @@ Cypress Docker images are available from:
- [cypress/base](https://github.com/cypress-io/cypress-docker-images/tree/master/base) is the entry-level Cypress Docker image, allowing you to test in the Electron browser, built in to Cypress.
It contains a complete Linux (Debian) operating system, together with the
- [prerequisite operating system packages](/app/get-started/install-cypress#UbuntuDebian) for Cypress,
+ [prerequisite operating system packages](https://docs.cypress.io/app/get-started/install-cypress#UbuntuDebian) for Cypress,
Node.js, npm and Yarn v1 Classic.
An image `` gives you the choice of Node.js version.
diff --git a/docs/app/core-concepts/best-practices.mdx b/docs/app/core-concepts/best-practices.mdx
index b73c4c7eeb..d6dbedf45e 100644
--- a/docs/app/core-concepts/best-practices.mdx
+++ b/docs/app/core-concepts/best-practices.mdx
@@ -236,7 +236,7 @@ recommend you approach testing your components, look to: [Cypress Component Test
Selecting elements with data attributes, text content, or Testing Library locators can each have some different implications for accessibility,
but none of these approaches is a "complete" accessibility test, and you will always need additional, accessibility-specific testing (including automated and manual tests) to confirm
-your application is working as expected for people with disabilities and the technology they use. See [our accessibility testing guide](/app/guides/accessibility-testing) for more details and comparisons of approaches.
+your application is working as expected for people with disabilities and the technology they use. See[our accessibility testing guide](/app/guides/accessibility-testing) for more details and comparisons of approaches.
## Assigning Return Values
@@ -312,7 +312,7 @@ or interact with sites or servers you do not control.
that you control. Try to avoid visiting or requiring a 3rd party server. If you choose,
you may use [`cy.request()`](/api/commands/request) to talk to 3rd party servers
via their APIs. If possible, cache results via [`cy.session()`](/api/commands/session)
-to avoid repeat visits. See also reasons against [Testing Apps You Don't Control](/app/end-to-end-testing/writing-your-first-end-to-end-test#Testing-Apps-You-Dont-Control).
+to avoid repeat visits.
:::
diff --git a/docs/app/end-to-end-testing/writing-your-first-end-to-end-test.mdx b/docs/app/end-to-end-testing/writing-your-first-end-to-end-test.mdx
index da5226f2e4..9bcb2297a0 100644
--- a/docs/app/end-to-end-testing/writing-your-first-end-to-end-test.mdx
+++ b/docs/app/end-to-end-testing/writing-your-first-end-to-end-test.mdx
@@ -225,6 +225,35 @@ have failed.
title="First test with cy.visit()"
/>
+:::danger
+
+Testing Apps You Don't Control
+
+In this guide we are testing our example application:
+[`https://example.cypress.io`](https://example.cypress.io). However you should
+think carefully about testing applications you **don't control**. Why?
+
+- They have the potential to change at any moment which will break tests.
+- They may do A/B testing which makes it impossible to get consistent results.
+- They may detect you are a script and block your access.
+- They may have security features enabled which prevent Cypress from working.
+
+Generally speaking, the point of Cypress is to be a tool you use every day to
+build and test your own applications, not a general purpose web automation tool.
+However, this is a guideline rather than a hard-and-fast rule and there are a
+number of good reasons to make exceptions for certain kinds of application:
+
+- They are specifically designed to integrate with third parties, e.g. SSO
+ providers.
+- They provide you with a complementary service, e.g. SaaS control panels or
+ analytics.
+- They reuse your content or provide plugins for an app you control.
+
+The key here is to carefully weigh the benefits of the tests in question against
+the possible disruption and flake these sorts of tests can introduce.
+
+:::
+
### Step 2: Query for an element
Now that we've got a page loaded, we need to take some action on it. Why don't
@@ -482,45 +511,6 @@ If you want a minimal code approach to creating tests, you can use
interactions and generate tests. Visit our
[guide](/app/guides/cypress-studio) for more information.
-## Testing Apps You Don't Control
-
-:::danger
-
- **Anti-Pattern:** Trying to visit
-or interact with sites or servers you do not control.
-
-:::
-
-In this guide we are testing our example application:
-[https://example.cypress.io](https://example.cypress.io).
-However you should think carefully about testing applications you **don't control**
-or you haven't been invited to test by the owner.
-Why?
-
-- They may have security features enabled which prevent Cypress from working,
- such as detecting Cypress script usage. This can block your access and make it
- appear that the application website is unresponsive.
-- They have the potential to change at any moment which will break tests.
-- They may do A/B testing which makes it impossible to get consistent results.
-
-Generally speaking, the point of Cypress is to be a tool you use every day to
-build and test your own applications, not a general purpose web automation tool.
-However, this is a guideline rather than a hard-and-fast rule and there are a
-number of good reasons to make exceptions for certain kinds of application:
-
-- They are specifically designed to integrate with third parties, e.g. SSO
- providers.
-- They provide you with a complementary service, e.g. SaaS control panels or
- analytics.
-- They reuse your content or provide plugins for an app you control.
-
-The key here is to carefully weigh the benefits of the tests in question against
-the possible disruption and flake these sorts of tests can introduce.
-
-See also [Visiting External Sites](/app/core-concepts/best-practices#Visiting-External-Sites),
-on our [Best Practices](/app/core-concepts/best-practices) page,
-which discusses strategies when this is necessary.
-
## Next steps
- Take our free
diff --git a/docs/app/faq.mdx b/docs/app/faq.mdx
index 28a0798a30..092736d97d 100644
--- a/docs/app/faq.mdx
+++ b/docs/app/faq.mdx
@@ -452,7 +452,7 @@ a remote page and does not resolve until all of the external resources complete
their loading phase. Because we expect your applications to observe differing
load times, this command's default timeout is set to 60000ms. If you visit an
invalid url or a
-[second unique domain](/app/guides/cross-origin-testing#Different-superdomain-per-test-requires-cyorigin),
+[second unique domain](/app/guides/cross-origin-testing#Different-origins-per-test-require-cyorigin),
Cypress will log a verbose yet friendly error message.
**_In CI, how do I make sure my server has started?_**
@@ -1253,10 +1253,24 @@ steps, Cypress adds its own overhead. Thus, the performance numbers you get from
Cypress tests are slower than "normal" use. Still, you can access the native
`window.performance` object and grab the page time measurements, see the
[Evaluate performance metrics](https://github.com/cypress-io/cypress-example-recipes#testing-the-dom)
-recipe.
+recipe. You can also
+[run Lighthouse audit straight from Cypress](https://www.testingwithmarie.com/post/web-performance-testing-with-google-lighthouse)
+via [cypress-audit](https://www.npmjs.com/package/cypress-audit) community
+plugin.
## Integrations with Other Tools/Frameworks/Libraries
+### Can I test Gatsby.js sites using Cypress?
+
+For end-to-end tests, yes, as you can read in the official
+[Gatsby docs](https://www.gatsbyjs.com/docs/end-to-end-testing/). You can also
+watch the "Cypress + Gatsby webinar"
+[recording](https://www.youtube.com/watch?v=Tx6Lg9mwcCE).
+
+For component testing, Gatsby is not currently supported out of the box, but it
+might be possible by
+[configuring a custom devServer](/app/references/configuration#devServer).
+
### Can I test React applications using Cypress?
For end-to-end testing, yes, absolutely. A good example of a fully tested React
@@ -1484,5 +1498,5 @@ You will need to add a `tsconfig.json` to the folder and specify the types the
files inside that folder should use.
Don't forget to update your
-[`specPattern`](/app/references/configuration#component)
+[`specPattern`](https://docs.cypress.io/app/references/configuration#component)
to include the new file location.
diff --git a/docs/app/get-started/install-cypress.mdx b/docs/app/get-started/install-cypress.mdx
index 68ff6af50f..0729817929 100644
--- a/docs/app/get-started/install-cypress.mdx
+++ b/docs/app/get-started/install-cypress.mdx
@@ -106,15 +106,15 @@ need prebuilt.
### Operating System
-Cypress supports running under these operating systems:
+Cypress is a desktop application that is installed on your computer. The desktop
+application supports these operating systems:
- **macOS** 10.15 and above _(Intel or Apple Silicon 64-bit (x64 or arm64))_.
-- **Linux** Ubuntu 20.04 and above, Fedora 40 and above, and Debian 11 and above _(x64 or arm64)_ (see [Linux Prerequisites](#Linux-Prerequisites) down
+- **Linux** Ubuntu 20.04 and above, Fedora 39 and above, and Debian 11 and above _(x64 or arm64)_ (see [Linux Prerequisites](#Linux-Prerequisites) down
below).
- Cypress deprecated the use of Node.js `16.x` in Cypress [`13.0.0`](/app/references/changelog#13-0-0). We recommend that users update to at least Node.js `18.x`.
For related reasons, Cypress deprecates the use of Linux operating systems with library [`glibc`](https://www.gnu.org/software/libc/) versions `2.17` - `2.27`. The Linux CLI command `ldd --version` displays your glibc version.
- **Windows** 10 and above _(x64)_.
-- **Windows Server** 2019 and 2022 _(x64)_.
### Node.js
@@ -189,7 +189,7 @@ It is worth noting that Cypress on Linux requires a minimum [`glibc`](https://ww
apt-get install libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libnss3 libxss1 libasound2 libxtst6 xauth xvfb
```
-For Ubuntu 24.04, and above, use the following command:
+For Ubuntu 24.04 use the following command:
```shell
apt-get install libgtk2.0-0t64 libgtk-3-0t64 libgbm-dev libnotify-dev libnss3 libxss1 libasound2t64 libxtst6 xauth xvfb
diff --git a/docs/app/guides/cross-origin-testing.mdx b/docs/app/guides/cross-origin-testing.mdx
index 5f67abeadc..ce0c74e719 100644
--- a/docs/app/guides/cross-origin-testing.mdx
+++ b/docs/app/guides/cross-origin-testing.mdx
@@ -31,9 +31,6 @@ and we are _mostly_ able to do this.
### What Cypress does under the hood
-- Injects
- [`document.domain`](https://developer.mozilla.org/en-US/docs/Web/API/Document/domain)
- into `text/html` pages.
- Proxies all HTTP / HTTPS traffic.
- Changes the hosted URL to match that of the application under test.
- Uses the browser's internal APIs for network level traffic.
@@ -55,7 +52,7 @@ Cypress must assign and manage browser certificates to be able to
modify the traffic in real time. You'll notice Chrome display a warning that the 'SSL certificate does not
match'. This is expected behavior. Under the hood we act as our own CA
authority and issue certificates dynamically in order to intercept requests
-otherwise impossible to access. We only do this for the superdomain currently
+otherwise impossible to access. We only do this for the origin currently
under test, and bypass other traffic.
Note, that Cypress allows you to optionally specify CA / client certificate
@@ -72,39 +69,37 @@ It's important to note that although we do our **very best** to ensure your
application works normally inside of Cypress, there _are_ some limitations you
need to be aware of.
-- [Different superdomain per test requires cy.origin command](#Different-superdomain-per-test-requires-cyorigin)
+- [Different origins per test require cy.origin()](#Different-origins-per-test-require-cyorigin)
- [Cross-origin iframes are not supported](#Cross-origin-iframes)
- [Navigating from HTTPS to HTTP will error](#Insecure-Content)
- [Cypress requires that the URLs navigated to have the same port](#Same-port-per-test)
-### Different superdomain per test requires cy.origin
+### Different origins per test require `cy.origin()`
Cypress changes its own host URL to match that of your applications. With the
exception of `cy.origin`, Cypress requires that the URLs navigated to have the
-[same superdomain](/app/guides/cross-origin-testing#Parts-of-a-URL) for the
+[origin](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin) for the
entirety of a single test.
-If you attempt to visit two different superdomains, the `cy.origin` command must
+If you attempt to visit two different origins, the `cy.origin` command must
be used to wrap Cypress commands of the second visited domain. Otherwise,
Cypress commands will timeout after the navigation and will eventually error.
This is because the commands that were expected to run on the second domain are
actually being run on the first domain.
-Without `cy.origin`, you can visit different superdomains in _different_ tests,
-but not in the _same_ test. Please read our
-[Cross Origin Testing Guide](/app/guides/cross-origin-testing) for more
-information.
+Without `cy.origin()`, you can visit different origins in _different_ tests,
+but not in the _same_ test.
#### Examples of test cases that will error without the use of `cy.origin`
1. [`.click()`](/api/commands/click) an `` with an `href` to a different
- superdomain with subsequent Cypress commands being run.
+ origin with subsequent Cypress commands being run.
2. [`.submit()`](/api/commands/submit) a `