[cdpfleet](https://cdpfleet.com/) / Cross-browser testing

For QA and front-end teams

# Every browser your users have, *without installing one*.

Point Playwright at cdpfleet and the same test runs on real Chrome, Edge, Firefox, WebKit and eight more browsers, on the stable build or the next one, at the screen size you choose. Each run can leave a video, so a failure comes with the evidence.

[All browsers and versions](https://cdpfleet.com/docs/browsers)[Playwright Test setup](https://cdpfleet.com/docs/connect)

-   **12**browsers, real builds
-   **beta · dev**channels next to stable
-   **640×480 – 3840×2160**screen sizes, headful

## One test suite, many browsers

-   **Playwright Test:** give each project a [Connect URL](https://cdpfleet.com/docs/connect) as its `wsEndpoint`, and every worker gets its own cloud browser; nothing to install on the CI machine.
-   **Which engines:** Chrome, Edge, Brave, Opera, Whale, Yandex, Chromium, Patchright and Rebrowser are Chromium-based; Firefox and Camoufox are based on Firefox source (not affiliated with Mozilla); WebKit is the engine behind Apple's browsers ([all browsers](https://cdpfleet.com/docs/browsers)).
-   **Rendering differences show up where they should:** printing to PDF works on every Chromium-based browser and is refused on Firefox, Camoufox and WebKit ([case 44](https://cdpfleet.com/docs/cases/print-to-pdf)); WebKit lays pages out with its own engine ([WebKit vs Chromium](https://cdpfleet.com/docs/compare/webkit-vs-chromium)).
-   **Mock the backend the same way everywhere:** `route.fulfill` stubs and failures behaved the same on Chromium, Firefox and WebKit ([case 48](https://cdpfleet.com/docs/cases/mock-api-responses)).

```js
// playwright.config.ts
import { defineConfig } from '@playwright/test';
const headers = { 'x-api-key': process.env.CDPFLEET_API_KEY };
const url = (browser) => `wss://router01.cdpfleet.com/connect/${browser}?headless=new`;
export default defineConfig({
  projects: [
    { name: 'chrome', use: { connectOptions: { wsEndpoint: url('chrome'), headers } } },
    { name: 'edge', use: { connectOptions: { wsEndpoint: url('edge'), headers } } },
  ],
});
```

## The next version, and the last one

-   **Channels:** `"channel": "beta"` or `"dev"` runs the next release before your users get it: Chrome beta and dev, Edge beta and dev, Brave beta, Opera developer. Each browser's page lists today's builds ([browsers](https://cdpfleet.com/docs/browsers)).
-   **Older majors:** `"version"` pins a retained previous major, e.g. the last two Chrome majors and older Camoufox builds, for "does it still work on last month's browser?" ([pinned-version recipe](https://cdpfleet.com/docs/examples#pinned-version)).
-   **What changes between versions, measured:** stable, beta, dev and an older Chrome side by side got exactly the builds the catalog lists; the user agent carries only the major, and the TLS fingerprint was identical from 153 to 158 ([case 03](https://cdpfleet.com/docs/cases/chrome-versions)). Release-by-release diffs: [browser updates](https://cdpfleet.com/docs/updates).

## Screens and devices

-   **Screen size:** headful sessions run on a display you choose, from 640×480 to 3840×2160, e.g. `"screen_size": "1366x768"`; open the context with `viewport: null` so the page sees it ([chrome-screen-size recipe](https://cdpfleet.com/docs/examples#chrome-screen-size)).
-   **Mobile layouts:** Playwright's device emulation works for responsive testing — user agent, viewport, touch and device pixel ratio change — but it is still desktop Chrome underneath, which a bot check can tell ([case 02](https://cdpfleet.com/docs/cases/mobile-emulation)). Real devices: [mobile](https://cdpfleet.com/mobile).

## Evidence when a test fails

-   **A video of the run:** headful sessions are recorded by default, headless ones with `live_view` or `cdp`; 480p on every plan, 720p and 1080p on a recording plan ([recordings](https://cdpfleet.com/recordings)). A broken scrape was explained by its recording: the last seconds showed the last page, not a broken selector ([case 41](https://cdpfleet.com/docs/cases/replay-a-failed-run)).
-   **Playwright traces and video, client-side:** the trace zip and WebM land on your machine over the normal connection, no server feature needed ([case 18](https://cdpfleet.com/docs/cases/trace-and-video)).
-   **Screenshots and PDFs** from one page load, with element crops for repeated visual checks ([case 29](https://cdpfleet.com/docs/cases/screenshot-and-pdf)).
-   **Watch or take over a run live:** a [live view](https://cdpfleet.com/live-view) link a person can open while the test runs.

## Related

Cases, recipes, posts and comparisons about this — updated as new ones are published.

### Reference docs

The details, options and errors.

-   [Browsers](https://cdpfleet.com/docs/browsers)Every browser, its versions and channels.
-   [Connect URL](https://cdpfleet.com/docs/connect)Playwright Test wsEndpoint.
-   [Recipe: Chrome beta](https://cdpfleet.com/docs/examples#chrome-beta)The next Chrome release.
-   [Recipe: Edge beta](https://cdpfleet.com/docs/examples#edge-beta)The next Edge release.
-   [Recipe: Opera developer](https://cdpfleet.com/docs/examples#opera-developer)The next Opera release.
-   [Recipe: an older Chrome major](https://cdpfleet.com/docs/examples#pinned-version)Pin last month's browser.
-   [Recipe: WebKit](https://cdpfleet.com/docs/examples#webkit)Check layout in WebKit.
-   [Recipe: a full-HD screen](https://cdpfleet.com/docs/examples#chrome-screen-size)screen\_size on headful Chrome.
-   [Chrome vs Edge](https://cdpfleet.com/docs/compare/chrome-vs-edge)Measured differences.
-   [Chrome vs Chromium](https://cdpfleet.com/docs/compare/chrome-vs-chromium)Branded build vs open source.
-   [Session recording](https://cdpfleet.com/docs/recordings)Video of every session.

### Cases 23

Real problems solved end to end, run on production in five languages.

-   [Case 73: Akamai on real sites: twelve browsers, three sites, one exit each](https://cdpfleet.com/docs/cases/akamai-real-sites-by-browser)Three real sites behind Akamai Bot Manager, chosen from our sweep as easy, medium and hard, loaded once by each of twelve browsers and by a returning Camoufox…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/cases/73-akamai-real-sites-by-browser)
-   [Case 74: Does the browser agree with its IP? Timezone, language and WebRTC through exits in three countries](https://cdpfleet.com/docs/cases/timezone-locale-ip-consistency)Five setups through residential exits in the US, Germany and Japan: which ones keep timezone, language, Accept-Language, Intl formats and the WebRTC address…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/cases/74-timezone-locale-ip-consistency)
-   [Case 71: DataDome on real sites: twelve browsers, three sites, one exit each](https://cdpfleet.com/docs/cases/datadome-real-sites-by-browser)Three real sites behind DataDome, chosen from our sweep as easy, medium and hard, loaded once by each of twelve browsers and by a returning Camoufox profile, all…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/cases/71-datadome-real-sites-by-browser)
-   [Case 70: Cloudflare on real sites: twelve browsers, three sites, one exit each](https://cdpfleet.com/docs/cases/cloudflare-real-sites-by-browser)Three real sites behind Cloudflare, chosen from our sweep as easy, medium and hard, loaded once by each of twelve browsers and by a returning Camoufox profile, all…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/cases/70-cloudflare-real-sites-by-browser)
-   [Case 68: CAPTCHA demo pages: what reCAPTCHA v3 scores and hCaptcha show seven browsers, and why a demo can't rank them](https://cdpfleet.com/docs/cases/captcha-scores-by-browser)Google's public reCAPTCHA v3 score demo and hCaptcha's demo widget, loaded once per cell by seven browser setups through your own proxy and a sticky cdpfleet-resi…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/cases/68-captcha-scores-by-browser)
-   [Case 69: VPN Tunnel vs a plain residential proxy: WebRTC, HTTP/3 and two bot-protection pages](https://cdpfleet.com/docs/cases/vpn-tunnel-vs-proxy)The same sticky residential exit with and without `vpn_tunnel`, on headful Chrome and Camoufox: which public IP WebRTC shows, whether HTTP/3 (QUIC) gets used, and…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/cases/69-vpn-tunnel-vs-proxy)
-   [Case 66: Which fingerprints stay the same across launches: canvas, WebGL, audio and fonts on seven browsers](https://cdpfleet.com/docs/cases/fingerprint-stability-across-launches)Three launches per browser, each reading a canvas hash, the WebGL renderer and a rendered WebGL image, an audio hash and a font list on the same page. Chrome, Edge,…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/cases/66-fingerprint-stability-across-launches)
-   [Case 67: Akamai and HUMAN: what gets through? Four browsers, three networks, the vendors' own sites](https://cdpfleet.com/docs/cases/akamai-and-human-what-gets-through)akamai.com (Akamai Bot Manager) and humansecurity.com (HUMAN, formerly PerimeterX), each protected by its own vendor, loaded once per cell by headless Chromium,…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/cases/67-akamai-and-human-what-gets-through)

[All cases →](https://cdpfleet.com/docs/cases) 23 match this topic

### Browser comparisons 13

Measured side by side on the fleet.

-   [Yandex Browser vs Chrome](https://cdpfleet.com/docs/compare/yandex-vs-chrome)Yandex Browser 26.8 runs on Chromium 150, six majors behind Chrome 156, names itself in the user agent and client hints, puts Russian first in navigator.languages…
-   [Camoufox vs Firefox, headless](https://cdpfleet.com/docs/compare/camoufox-vs-firefox-headless)Headless Firefox and headless Camoufox (both based on Firefox source; not affiliated with Mozilla) side by side: the headless tells a page can read, what Camoufox…
-   [WebKit vs Chromium](https://cdpfleet.com/docs/compare/webkit-vs-chromium)Playwright's WebKit 26.4 claims a Mac in its user agent but reports Linux, sets navigator.webdriver and speaks HTTP/1.1 through a proxy. Where it beats Chromium…
-   [Naver Whale vs Chrome](https://cdpfleet.com/docs/compare/whale-vs-chrome)Whale 5.39 runs on Chromium 150, five majors behind Chrome 155, names itself in the user agent and client hints, and sends a TLS hello one extension short of…
-   [Camoufox 152 vs Camoufox 150](https://cdpfleet.com/docs/compare/camoufox-152-vs-150)Both claim Firefox 152 and send the same TLS fingerprint — but on 152 Playwright's evaluate and init scripts run in an isolated world the page can't see, while on…
-   [Edge vs Brave](https://cdpfleet.com/docs/compare/edge-vs-brave)Two Chromium 155 forks with the same TLS and HTTP/2 fingerprint: Edge names itself in the user agent and reports its real machine; Brave hides in the user agent but…
-   [Opera vs Chrome](https://cdpfleet.com/docs/compare/opera-vs-chrome)Opera 137 runs on Chromium 153, two majors behind Chrome 155, and names itself everywhere — OPR in the user agent, Opera in the client hints — while its TLS, HTTP/2…
-   [Patchright vs Rebrowser](https://cdpfleet.com/docs/compare/patchright-vs-rebrowser)Two stealth-patched Chromium builds that look the same to a site — same TLS and HTTP/2 fingerprints, no webdriver, no Runtime.enable leak — but Patchright is…

[All browser comparisons →](https://cdpfleet.com/docs/compare) 13 match this topic

## Read next

[Browsers →](https://cdpfleet.com/browsers)[Recordings →](https://cdpfleet.com/recordings)[Live view →](https://cdpfleet.com/live-view)[CDP & Puppeteer →](https://cdpfleet.com/cdp)

---
Source: https://cdpfleet.com/cross-browser-testing · Markdown: https://cdpfleet.com/cross-browser-testing.md · All docs for AI tools: https://cdpfleet.com/llms.txt
