How Cypress Supports Firefox with WebDriver BiDi
Cypress automates Firefox through WebDriver BiDi. Learn which Firefox versions work with Cypress 15, how to run tests, and what changes for network interception.
Cypress automates Firefox through WebDriver BiDi. To run tests in a locally installed Firefox, use cypress run --browser firefox. The compatible Firefox version depends on your Cypress release: Cypress 15.0.0–15.18.1 requires Firefox 135 or newer; Cypress 15.19.0 and later requires Firefox 140 or newer.
What WebDriver BiDi means for Cypress and Firefox
WebDriver BiDi is the browser automation interface Cypress uses for Firefox. Cypress 14.1.0 introduced BiDi for Firefox 135 and newer, while retaining a CDP fallback for older Firefox releases. Cypress 15.0.0 removed Firefox CDP support, making BiDi the supported Firefox automation interface.
This is a protocol change underneath Cypress’s test API. According to Cypress’s migration guidance, existing Cypress commands do not need to change when Firefox moves to BiDi. The practical upgrade check is your installed browser version, especially if it is pinned in an ESR installation, container image, or CI provider image.
Firefox and Cypress version compatibility
| Cypress version | Minimum Firefox version | Firefox automation |
|---|---|---|
| 14.1.0 and later, before 15.0.0 | BiDi is used for Firefox 135 and newer; older Firefox could use the CDP fallback | BiDi for supported newer Firefox, with fallback before Cypress 15 |
| 15.0.0–15.18.1 | Firefox 135 | WebDriver BiDi; no Firefox CDP fallback |
| 15.19.0 and later | Firefox 140 | WebDriver BiDi |
Use the floor for the exact Cypress release in your project. Current Cypress browser guidance says Firefox versions below 140 implement BiDi incompletely and will fail with Cypress 15.19.0 and later. If upgrading Cypress would put your pinned Firefox below the required floor, update the browser image or installation first.
Run Cypress tests in Firefox
- Install Firefox in the environment where Cypress runs. Cypress detects browsers available on the local operating system.
- Check the installed Firefox version against the compatibility table above.
- Run the Cypress suite with Firefox selected:
npx cypress run --browser firefox
If Cypress is installed globally or exposed directly in your shell, the equivalent command is:
cypress run --browser firefox
In interactive mode, launch Cypress with npx cypress open and choose Firefox from the browser selector. Cypress also documents Firefox Developer Edition and Firefox Nightly among its Firefox-family browser options. Use a browser installed in the local or CI environment; selecting Firefox does not install it.
These are Cypress’s documented invocation patterns, not a claim that the commands were independently executed for this article.
What changes in Cypress commands and network interception
Cypress 15 uses its automation client for cy.url(), cy.hash(), cy.go(), cy.reload(), cy.title(), and cy.location(). The Cypress changelog identifies WebDriver BiDi for Firefox and CDP for Chromium browsers in this behavior. Cypress says this avoids cross-origin access issues that can arise when values are read through the window object.
cy.window() still returns the current window object, but some properties can remain inaccessible depending on the origin context. BiDi does not make every browser feature behave identically across engines.
Network interception is an important distinction. Cypress documents that Firefox and WebKit continue to use the legacy network path because Cypress has not implemented a native browser network path for those browsers. Chrome, Chromium, and Edge use the native path by default in the documented configuration. Do not infer from Firefox’s BiDi automation support that its network interception uses the same path as Chromium.
Plan Firefox coverage in local development and CI
- Pin compatible versions: Keep the Cypress release and Firefox version paired deliberately. Record both in the CI image or setup configuration so an image refresh does not silently cross the compatibility floor.
- Choose coverage intentionally: Cypress recommends balancing confidence, test duration, and infrastructure cost when choosing a cross-browser CI strategy. Decide whether Firefox runs on every change, on a schedule, or in a separate job based on the coverage your team needs.
- Keep browser availability explicit: Firefox must be installed in the CI environment. Confirm that the expected binary is present before investigating test-level failures.
- Compare failures across engines: A failure limited to Firefox may reflect browser behavior or the Firefox-specific network interception path, rather than a change required to Cypress commands.
- Upgrade in a controlled order: If the next Cypress release requires a newer Firefox, update the pinned browser image and validate the pair as part of the same upgrade.
Troubleshooting Cypress Firefox runs
| Symptom | Likely cause | What to do |
|---|---|---|
| Cypress cannot find Firefox | Firefox is not installed or is not available in the local or CI environment. | Install Firefox in that environment, then retry with --browser firefox. Check that the job runs in the image you updated. |
| Firefox fails to launch with Cypress 15.19.0 or newer | The Firefox version is below 140, where BiDi support is incomplete for this Cypress release. | Update Firefox to version 140 or newer, or use a Cypress release whose documented browser floor matches your pinned Firefox. |
| Cypress 15 no longer works with an older Firefox setup | Cypress 15 removed the CDP fallback for Firefox; older Cypress releases had used it for Firefox below 135. | Use Firefox 135 or newer for Cypress 15.0.0–15.18.1, or Firefox 140 or newer for Cypress 15.19.0 and later. |
A value read through cy.window() is unavailable |
Cross-origin restrictions can still make some window properties inaccessible. | Use the Cypress command that exposes the value you need, such as cy.url(), cy.title(), or cy.location(), where applicable. BiDi does not remove origin security boundaries. |
| A network interception test behaves differently in Firefox | Firefox uses Cypress’s legacy network path, unlike the documented native path used by Chrome, Chromium, and Edge by default. | Check the Firefox-specific behavior and your interception assumptions. Do not assume the Chromium network path applies to Firefox. |
| Firefox passes locally but fails in CI | The CI image may have a different Firefox version, or Firefox may be missing from the job environment. | Inspect and pin the CI browser version, verify it meets the Cypress release floor, and ensure the job uses the intended image. |
Or skip the browser setup
If your goal is to capture a page image or PDF rather than run browser tests, ScreenshotNeo provides a website screenshot API and MCP server. A GET request returns a PNG, JPEG, WebP, or PDF. For example, this cURL request saves a WebP screenshot:
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
See the ScreenshotNeo API documentation for request options. Python and Node.js examples are also available:
import requests
r = requests.get(
"https://api.screenshotneo.com/v1/shot",
params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"},
timeout=90,
)
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
- Cookie banners, newsletter popups, and chat widgets are removed before capture; each cleanup step can be turned off.
- Bot checks and CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed. Response headers indicate the page verdict and billing status.
- An MCP server offers
take_screenshot,get_page_info, andcapture_pdftools for Claude, Cursor, and other MCP clients. - The free plan includes 1,000 screenshots a month with no card. Paid plans start at $5 for 3,000 screenshots.
Sign up for 1,000 free screenshots a month, with no card required.
FAQ
Does Cypress support Firefox?
Yes. Cypress automates Firefox through WebDriver BiDi in current Cypress releases.
Does Firefox support require changes to my Cypress tests?
Cypress’s migration guidance says existing Cypress commands do not need to change for the protocol transition.
Does BiDi mean Firefox and Chrome have identical Cypress behavior?
No. Browser engines and Cypress implementation paths still differ, including the documented Firefox legacy network interception path.
Can I run Firefox tests in Cypress Cloud or CI?
Run Firefox where the browser is installed and available to the Cypress process. For CI, ensure the selected image includes a Firefox version compatible with the Cypress release.


