
Playwright overhalede Cypress i ugentlige npm-downloads omkring midten af 2024, og i begyndelsen af 2026 er kløften vokset til cirka 30 millioner mod 6,5 millioner ugentlige downloads. Det skete ikke ved et tilfælde. Alle andre sammenligninger på Googles første side er skrevet af en QA-tool-leverandør eller et SaaS-testfirma. Denne er fra et team, der bygger produktions-webapps og vælger et testautomatiseringsframework til rigtige projekter, ikke for at promovere et produkt.
Her er hvor Selenium passer ind: Det er stadig det mest udbredte E2E-framework globalt, især i Java- og Python-miljøer. Det forsvinder ikke nogen steder. Men til nye JavaScript/TypeScript-projekter i 2026 er det egentlige spørgsmål Playwright vs Cypress, med Selenium som den legacy-reserve.
Kort overblik, hurtig opsummering
Vælg Playwright, hvis du vil have det bedste samlede testframework i 2026: hurtigst eksekvering, gratis parallelisering, understøttelse af flere sprog og fremragende TypeScript DX. Vælg Cypress, hvis dit team prioriterer interaktiv debugging og komponenttestning over alt andet. Vælg Selenium, hvis du befinder dig i et Java/Python-enterprisemiljø med eksisterende Selenium-infrastruktur.
| Funktion | Playwright | Cypress | Selenium |
|---|---|---|---|
| Skabt af | Microsoft | Cypress.io | Selenium-fællesskabet |
| Første udgivelse | 2020 | 2014 | 2004 |
| Arkitektur | WebSocket (CDP) | I-browseren | WebDriver-protokol |
| Sprog | JS/TS, Python, Java, C# | Kun JS/TS | JS, Python, Java, C#, Ruby, PHP, Kotlin |
| Browserunderstøttelse | Chromium, Firefox, WebKit | Chrome, Firefox, Edge, Electron, WebKit (eksperimentel) | Chrome, Firefox, Safari, Edge, IE |
| Eksekveringshastighed | Hurtigst (~4,5s) | Mellem (~9,4s) | Langsomst (~14,5s) |
| Parallelisering | Indbygget, gratis (sharding) | Betalt (Cypress Cloud) eller community-værktøjer | Selenium Grid (self-hosted) |
| Cloud/Dashboard-omkostninger | $0 | $67-$267/md (årlig fakturering) | $0 (+ infrastrukturomkostninger) |
| TypeScript DX | Førsteklasses | God (nogle ejendommeligheder) | Community-indsats |
| Komponenttestning | Eksperimentel | Moden (førsteklasses) | Ingen |
| Læringskurve | Moderat | Lav (for JS-udviklere) | Stejl |
| Bedst til | De fleste nye projekter | Frontend-teams, der ønsker interaktiv DX | Enterprise Java/Python-miljøer |
Det er opsummeringen. Resten af denne artikel forklarer beviserne bag hver række med kode, benchmarks og ærlige meninger.
Arkitektur, hvordan hvert værktøj taler med browseren
Arkitekturen er rodårsagen til næsten enhver forskel, du vil se i denne sammenligning. Tænk på det sådan her: Playwright taler til browseren som en sceneinstruktør, der hvisker instruktioner direkte til skuespillerne. Cypress sidder på scenen med skuespillerne og kører i samme rum. Selenium sender instruktioner gennem en mellemmand, der står i gangen.
<!-- IMAGE: Architecture comparison showing Playwright WebSocket connection, Cypress in-browser execution, and Selenium WebDriver intermediary layer -->Playwright: Direkte browserkontrol via WebSocket
Playwright kommunikerer med browsere gennem WebSocket-forbindelser ved hjælp af Chrome DevTools Protocol (CDP) til Chromium og tilsvarende protokoller til Firefox og WebKit. Der er ingen mellemled; din testkode sender kommandoer direkte til browsermotoren. Det betyder lavere latency, flere muligheder (flere faner, flere oprindelser, netværksinterception) og færre bevægelige dele, der kan gå i stykker.
Cypress: Eksekvering i browseren
Cypress tager en fundamentalt anderledes tilgang. Det injicerer sig selv i browseren og kører din testkode i samme JavaScript-event-loop som din applikation. Det er derfor, Cypress føles så hurtigt til simple tests; der er nul netværksoverhead mellem din test og appen. Men denne arkitektur forklarer også Cypress' begrænsninger: ingen understøttelse af flere faner, begrænset cross-origin-testning og kun JavaScript/TypeScript (da testene skal køre i en browserkontekst).
Selenium: WebDriver-mellemleddet
Selenium bruger WebDriver-protokollen. Din testkode sender HTTP-anmodninger til en browser-driver-binær fil (chromedriver, geckodriver), som oversætter disse anmodninger til browserkommandoer. Hver kommando er en tur-retur: test til driver til browser og tilbage. Denne indirektion tilføjer latency og skaber flere fejlpunkter. Selenium adopterer gradvist BiDi-protokollen for at reducere denne overhead, men det er ikke helt der endnu.
Konklusion: Playwright vinder på arkitektur. Direkte WebSocket-kommunikation betyder hurtigere eksekvering, flere muligheder og færre ustabile fejl. Cypress' in-browser-model er genuint smart til simple single-origin-tests, men den skaber hårde lofter, som Playwright ikke har. Seleniums arkitektur viser sin alder.
Sprog- og browserunderstøttelse
Dette er ofte det første filter. Hvis dit team ikke skriver JavaScript, er Cypress straks udelukket.
| Kategori | Playwright | Cypress | Selenium |
|---|---|---|---|
| JavaScript / TypeScript | Ja | Ja | Ja |
| Python | Ja (officiel) | Nej | Ja (officiel) |
| Java | Ja (officiel) | Nej | Ja (officiel) |
| C# / .NET | Ja (officiel) | Nej | Ja (officiel) |
| Ruby | Nej | Nej | Ja (officiel) |
| PHP | Nej | Nej | Ja (community) |
| Kotlin | Nej | Nej | Ja (community) |
| Chromium / Chrome | Ja (bundlet) | Ja | Ja (via chromedriver) |
| Firefox | Ja (bundlet) | Ja | Ja (via geckodriver) |
| WebKit / Safari | Ja (bundlet, cross-platform) | Eksperimentel | Ja (kun macOS, via SafariDriver) |
| Edge | Ja (Chromium-baseret) | Ja | Ja |
| IE | Nej | Nej | Ja |
Hvad betyder det i praksis? Hvis du er en Java-virksomhed med 20 QA-ingeniører, er Cypress ikke en mulighed, punktum. Hvis cross-browser-testning inklusive Safari er vigtig (og det bør det være, Safari har ca. 18 % af den globale browserandel), håndterer Playwright det out of the box på ethvert OS, mens Cypress stadig mærker WebKit-understøttelse som "eksperimentel".
Selenium vinder på ren bredde. Det understøtter flere sprog og flere browsere end nogen af alternativerne. Men for de sprog og browsere, der betyder mest i 2026 -- JavaScript/TypeScript, Python og Chromium/Firefox/WebKit-trioen -- dækker Playwright alt med nul konfiguration og bundlede browser-binærfiler.
Konklusion: Selenium vinder på bredde (fleste sprog, fleste browsere, inklusive IE). Playwright vinder på praktisk dækning, de browsere og sprog, der betyder noget i 2026, bundlet og med nul konfiguration. Cypress er den snævreste mulighed.
Skrivning af tests, side-ved-side kode-sammenligning
Nok teori. Her er den samme test skrevet i alle tre frameworks. Det er her, du mærker forskellen i DX (Developer Experience).
Login-flow-test
En standard login-test: naviger til en side, udfyld legitimationsoplysninger, send, og verificer omdirigeringen.
// Playwright
import { test, expect } from '@playwright/test';
test('user can log in', async ({ page }) => {
await page.goto('/login');
await page.locator('#email').fill('[email protected]');
await page.locator('#password').fill('s3cureP@ss');
await page.locator('button[type="submit"]').click();
await expect(page).toHaveURL('/dashboard');
await expect(page.locator('h1')).toContainText('Welcome');
});// Cypress
describe('Login', () => {
it('user can log in', () => {
cy.visit('/login');
cy.get('#email').type('[email protected]');
cy.get('#password').type('s3cureP@ss');
cy.get('button[type="submit"]').click();
cy.url().should('include', '/dashboard');
cy.get('h1').should('contain', 'Welcome');
});
});// Selenium (with WebDriver)
const { Builder, By, until } = require('selenium-webdriver');
describe('Login', function () {
let driver;
before(async () => {
driver = await new Builder().forBrowser('chrome').build();
});
after(async () => {
await driver.quit();
});
it('user can log in', async () => {
await driver.get('http://localhost:3000/login');
await driver.findElement(By.id('email')).sendKeys('[email protected]');
await driver.findElement(By.id('password')).sendKeys('s3cureP@ss');
await driver.findElement(By.css('button[type="submit"]')).click();
await driver.wait(until.urlContains('/dashboard'), 5000);
const heading = await driver.findElement(By.css('h1')).getText();
expect(heading).to.include('Welcome');
});
});Bemærk forskellene. Playwrights async/await med page.locator() læses rent og auto-venter på, at elementer er handlingsdygtige, før der interageres med dem. Cypress' chaining-API (cy.get().type().click()) er kortfattet og genuinely behagelig til simple flows. Selenium kræver eksplicitte waits (driver.wait(until.urlContains(...))), manuel browser-livscyklusstyring og mere boilerplate-kode.
API-mocking og netværksinterception
Dette scenario afslører en meget større kløft. Intercept en API-kald, returner mock-data, og verificer, at UI'en gengives korrekt.
// Playwright -- native network interception
test('shows mocked user list', async ({ page }) => {
await page.route('**/api/users', (route) => {
route.fulfill({
status: 200,
contentType: 'application/json',
body: JSON.stringify([{ id: 1, name: 'Alice' }]),
});
});
await page.goto('/users');
await expect(page.locator('.user-card')).toHaveCount(1);
await expect(page.locator('.user-card')).toContainText('Alice');
});// Cypress -- native network interception
it('shows mocked user list', () => {
cy.intercept('GET', '/api/users', {
statusCode: 200,
body: [{ id: 1, name: 'Alice' }],
}).as('getUsers');
cy.visit('/users');
cy.wait('@getUsers');
cy.get('.user-card').should('have.length', 1);
cy.get('.user-card').should('contain', 'Alice');
});// Selenium -- no native network interception
// You need a separate proxy tool like BrowserMob Proxy
// or mock your API server directly. There is no built-in
// equivalent to page.route() or cy.intercept().
// Typical workaround: start a mock server before the test
const mockServer = require('./helpers/mock-server');
before(async () => {
await mockServer.start({ port: 4000 });
mockServer.stub('GET', '/api/users', [{ id: 1, name: 'Alice' }]);
});
it('shows mocked user list', async () => {
await driver.get('http://localhost:3000/users');
// ... assert using findElement
});Dette er stort. API-mocking er afgørende for pålidelige E2E-tests, og både Playwright og Cypress håndterer det nativt. Selenium kræver en separat mock-server eller proxy-værktøj, mere infrastruktur, mere kompleksitet, flere ting, der kan gå i stykker.
Konklusion: Playwright vinder på kodeklarhed og kapacitet. Dens async/await-syntaks er renere end Cypress' chaining til komplekse scenarier, og den håndterer API-mocking, flere faner og flere oprindelser nativt. Cypress vinder på enkelthed til ligefremme single-page-flows; chaining-API'en er genuinely behagelig. Selenium er mest verbos og kræver mest boilerplate.
Playwright vs Cypress vs Selenium: Hastighedsbenchmarks
"Hvilken er hurtigst?" er et af de mest søgte spørgsmål i denne sammenligning. Her er faktiske tal fra Checklys benchmark-studie og BetterStacks målinger, krydsrefereret for konsistens.
"Test Suite Execution Time (seconds)"
Datatable
| "Framework" | "Execution Time" |
|---|---|
| "Playwright" | 4.5 |
| "Cypress" | 9.4 |
| "Selenium" | 14.5 |
Playwright afslutter tilsvarende testsuites på cirka 4,5 sekunder, sammenlignet med 9,4 sekunder for Cypress og 14,5 sekunder for Selenium. Det er ikke en marginal forskel; det er en 2x og 3x kløft.
Hvorfor er Playwright hurtigere? Tre grunde: WebSocket-kommunikation eliminerer den HTTP-overhead, som Selenium bærer rundt på. Playwrights browser context-model skaber isolerede testmiljøer uden at starte hele browserprocesser op. Og dens paralleleksekvering sker på framework-niveau; du behøver ikke eksterne værktøjer.
Hastighedskløften bliver større med større suites. Playwrights browser contexts skalerer effektivt, fordi de deler en enkelt browserproces. Selenium spawner nye browserinstanser pr. parallel worker. Cypress kører tests serielt i sin open source-version, så en voksende suite betyder lineært voksende eksekveringstid, medmindre du betaler for Cypress Cloud.
Et migrationstilfælde sætter tal på dette: BigBinary rapporterede en 89 % reduktion i testeksekveringstid efter skiftet fra Cypress til Playwright; deres fulde suite faldt fra 2 timer og 27 minutter til 16 minutter ved brug af Playwrights sharding.
Konklusion: Playwright vinder afgørende på hastighed. Det kører testsuites 2x hurtigere end Cypress og 3x hurtigere end Selenium. Denne kløft bliver større med større suites, fordi Playwrights browser context-model skalerer bedre end at spawne nye browserinstanser.
Debugging og udvikleroplevelse
Her bliver tingene nuancerede. Playwright er teknisk overlegen, men Cypress har en genuine DX-fordel, der holder teams loyale.
Interaktiv debugging
Cypress Test Runner er stadig guldstandarden for interaktiv debugging. Du ser din test udføre i realtid inde i en rigtig browser med time-travel-debugging; klik på ethvert trin i kommandologgen for at se den nøjagtige DOM-tilstand i det øjeblik. For frontend-udviklere, der debugger visuelle regressioner eller layoutproblemer, er dette svært at slå. Ærligt talt er det den enkelt bedste funktion i hele Cypress' værktøjskasse.
Playwright Trace Viewer tager en anden tilgang. Den optager spor under testkørsler, screenshots, DOM-snapshots, netværksanmodninger og konsollogs ved hvert trin. Du åbner disse spor i en browserbaseret viewer bagefter. Til CI-debugging (at finde ud af, hvorfor en test fejlede i en headless-pipeline) er Trace Viewer faktisk mere nyttig end Cypress' interaktive runner, fordi du får fuld kontekst uden at skulle reproducere lokalt.
Playwrights --ui-mode tilføjede en interaktiv oplevelse tættere på Cypress' Test Runner i nyere versioner, men den er ikke lige så poleret. Den er funktionel, ikke henrykkende.
Selenium IDE findes, men er begrænset. Mest Selenium-debugging er console.log og screenshots. Det virker, men det føles som 2012.
TypeScript-først udvikling
Playwright er TypeScript-først. Det leveres med autogenererede typer, dens konfigurationsfil er playwright.config.ts som standard, og VS Code-autocomplete fungerer fejlfrit. Når du skriver page. og trykker på autocomplete, får du hver metode med fulde typesignaturer.
Cypress understøtter TypeScript, men der er friktionspunkter. Brugerdefinerede kommandoer kræver manuelle typedeklarationer (udvidelsen af Cypress.Chainable-grænsefladen), og chaining-API'en forvirrer nogle gange TypeScript-inferensen. Filen cypress.config.ts virker, men DX'en er ikke lige så glat.
Seleniums TypeScript-understøttelse er en community-indsats og føles påsat sammenlignet med Playwrights native oplevelse.
Konklusion: Cypress vinder på interaktiv DX; dens Test Runner er genuinely henrykkende for frontend-udviklere, der debugger visuelle tests. Playwright vinder på CI-debugging og TypeScript; Trace Viewer er formålet bygget til at diagnosticere fejl i headless CI-miljøer, og dens TypeScript-understøttelse er bedst i klassen. Seleniums debugging-historie er den svageste.
CI/CD-integration og parallelisering
Her møder gummi vejen. Din testsuite kører i CI hundredvis af gange om dagen, ikke på din laptop. Her er en copy-paste GitHub Actions-konfiguration til hvert framework, noget ingen konkurrent på Googles første side tilbyder.
GitHub Actions-konfiguration
# Playwright -- built-in parallelization, zero cost
name: Playwright Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
shard: [1/4, 2/4, 3/4, 4/4]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- run: npm ci
- run: npx playwright install --with-deps
- run: npx playwright test --shard=${{ matrix.shard }}
- uses: actions/upload-artifact@v4
if: failure()
with:
name: playwright-report-${{ matrix.shard }}
path: playwright-report/# Cypress -- parallel requires Cypress Cloud (paid)
name: Cypress Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
containers: [1, 2, 3, 4]
steps:
- uses: actions/checkout@v4
- uses: cypress-io/github-action@v6
with:
record: true
parallel: true
group: 'CI'
env:
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}# Selenium -- requires browser service container
name: Selenium Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
services:
selenium:
image: selenium/standalone-chrome:latest
ports:
- 4444:4444
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- run: npm ci
- run: npm test
env:
SELENIUM_REMOTE_URL: http://localhost:4444/wd/hubParallelisering: Gratis vs. Betalt
Playwright-konfigurationen ovenfor splitter din testsuite over 4 parallelle shards med --shard=1/4. En 10-minutters suite kører på 2,5 minutter. Nul omkostninger. Ingen cloud-service krævet.
Cypress' gratis Starter-plan inkluderer nu parallelisering, men med et loft på 500 testresultater/måned, hvilket de fleste teams brænder igennem på en dag eller to med aktiv udvikling. Til seriøs CI-brug skal du bruge Cypress Cloud (starter ved $67/md ved årlig fakturering for Team-planen med 120K resultater/år) eller community-alternativer som sorry-cypress. Flagene record: true og parallel: true i YAML'en ovenfor kræver en Cypress Cloud-forbindelse.
Selenium-parallelisering kræver Selenium Grid (self-hosted, ops-overhead) eller en cloud-leverandør som BrowserStack. Det er den mest komplekse opsætning af de tre.
Konklusion: Playwright vinder på CI/CD. Gratis, ubegrænset parallelisering med nul infrastruktur er svær at slå. Cypress' gratis tier inkluderer parallelisering, men er begrænset til 500 resultater/måned; rigtige teams har brug for en betalt plan. Selenium kræver mest ops-arbejde.
Omkostninger og prisanalyse
Dette er det største indholdsgab på hele SERP'en for dette søgeord. Hver konkurrent springer det over, men omkostninger betyder noget, især i stor skala.
Licensering og prisniveauer
| Funktion | Playwright | Cypress (Gratis) | Cypress Cloud Team | Cypress Cloud Business | Selenium + Grid |
|---|---|---|---|---|---|
| Licens | MIT (gratis) | MIT (gratis) | $67/md (årlig) | $267/md (årlig) | Apache 2.0 (gratis) |
| Paralleleksekvering | Indbygget | Ja (loft på 500 resultater/md) | Ja (120K resultater/år) | Ja (ubegrænset) | Self-hosted Grid |
| Dashboard til testresultater | HTML-reporter (gratis) | Nej | Ja (120K resultater/år) | Ja (ubegrænset) | Tredjepartsværktøjer |
| Flake-detektion | Indbyggede retries | Basis-retries | Ja | Ja | Nej |
| Testanalytik | Indbygget rapportering | Nej | Begrænset | Fuld | Tredjepartsværktøjer |
| Spec-prioritering | Nej | Nej | Nej | Ja | Nej |
Reelle omkostninger efter teamstørrelse
| Teamstørrelse | Playwright | Cypress (med Cloud Team) | Selenium (med BrowserStack) |
|---|---|---|---|
| Solo-udvikler | $0 | $0 (gratis tier) | $0 (lokal) |
| 5-personers team | $0 | $67/md ($804/år) | ~$150/md ($1.800/år) |
| 20-personers QA-team | $0 | $267/md ($3.204/år) | ~$600/md ($7.200/år) |
| Enterprise (50+) | $0 | Custom (Enterprise) | Custom (BrowserStack/Sauce Labs) |
Playwright er gratis for alt, hvad Cypress tager penge for. Parallelisering, testanalytik via HTML-reporteren, trace viewer til debugging, codegen til test-scaffolding, alt inkluderet til nul omkostninger. Det eneste, Playwright ikke tilbyder, er et hosted cloud-dashboard med team-samarbejdsfunktioner, og for mange teams er den indbyggede HTML-rapport og CI-artefakter nok.
Selenium er også gratis, men infrastrukturprisen for at køre Selenium Grid i stor skala er ikke ubetydelig. Nogen på dit team skal vedligeholde de Grid-noder, håndtere browserversionsopdateringer og debugge infrastruktursvigt.
Konklusion: Playwright vinder på omkostninger, det er ikke engang tæt. Hver funktion, Cypress låser bag en betalingsmur (parallelisering, testanalytik, flake-detektion), inkluderer Playwright gratis. Selenium er gratis på tool-niveau, men infrastrukturegningen løber op.
Komponenttestning
Komponenttestning lader dig montere en enkelt React-, Vue- eller Angular-komponent i isolation og teste den uden at starte en fuld applikation op. Cypress pionerede denne tilgang, og det er en af de stærkeste grunde til at vælge Cypress i dag.
Cypress har førsteklasses komponenttestning til React (18-19), Vue 3, Angular (18-21) og Svelte 5. Du bruger den samme cy.mount()-API og den samme Test Runner, du allerede kender fra E2E-tests. Dokumentationen er moden, økosystemet er solidt, og det virker pålideligt. For teams, der ønsker et enkelt værktøj til både komponent- og E2E-testning, er Cypress' komponenttestning en genuine differentiator.
Playwright tilføjede eksperimentel komponenttestning i nyere versioner, der understøtter React, Vue og Svelte. Det er funktionelt, men mindre poleret end Cypress' implementering. Hvis komponenttestning er en day-one-prioritet, har Cypress fordelen. Men Playwrights hurtige release-cadence (månedligt) betyder, at denne kløft lukkes.
Selenium har ingen understøttelse af komponenttestning. Det opererer på browserniveau, ikke komponentniveau. Hvis du har brug for komponenttestning alongside Selenium E2E-tests, vil du bruge et separat værktøj som React Testing Library eller Vitest.
Konklusion: Cypress vinder på komponenttestning; det pionerede tilgangen, har den mest modne implementering og dækker det bredeste udvalg af frameworks. Playwright er en stærk nummer to. Selenium er ikke en contender her.
Fællesskab, økosystem og adoptionstendenser
Tal fortæller en historie her. Playwright overhalede Cypress i npm-downloads omkring midten af 2024, og i februar 2026 er kløften betydelig: Playwright trækker cirka 30 millioner ugentlige downloads mod Cypress' 6,5 millioner og Selenium WebDrivers 1,8 millioner.
"Weekly npm Downloads (thousands)"
Datatable
| "Quarter" | "Playwright" | "Cypress" | "Selenium WebDriver" |
|---|---|---|---|
| "Q1 2024" | 8000 | 6500 | 2200 |
| "Q3 2024" | 14000 | 6600 | 2100 |
| "Q1 2025" | 19000 | 6500 | 2000 |
| "Q3 2025" | 25000 | 6400 | 1900 |
| "Q1 2026" | 30000 | 6500 | 1800 |
GitHub-stjerner følger et lignende mønster: Playwright ligger på cirka 82.800, Cypress på 49.461 og Selenium på 33.769 pr. februar 2026. State of JavaScript-undersøgelsen rangerer konsekvent Playwright højest i udviklertilfredshed og interesse.
Men npm fortæller kun JavaScript-historien. Seleniums sande installerede base spænder over Java-, Python-, C#- og Ruby-økosystemer, hvor npm-downloads ikke gælder. I Java-enterprise-verdenen er Selenium stadig det dominerende framework med bred margin.
Hvorfor vokser Playwright så hurtigt? Microsofts backing giver det konsistente månedlige releases og langsigtet stabilitet. TypeScript-først-designet aligner med, hvor frontend-udviklingen er på vej hen. Gratis parallelisering fjerner den friktion, som Cypress Cloud-prissætning skaber. Og understøttelse af flere sprog betyder, at Python- og Java-teams kan migrere fra Selenium uden at skifte sprog.
Cypress falder ikke i absolutte tal; downloads har plateauet omkring 6-7 millioner ugentligt. Men dens relative andel krymper, da Playwright absorberer både nye projekter og Cypress/Selenium-migrationer.
Konklusion: Playwright vinder på momentum. Det har den hurtigste vækst, højeste udviklertilfredshed og stærkeste trajectory. Selenium vinder på installeret base. Cypress beholder et loyalt fællesskab, men dets vækst har plateauet.
Migrationsguide, skift af frameworks
Hvis du overvejer et skift, er her den praktiske oversættelsesguide.
Cypress til Playwright: API-oversættelse
// BEFORE: Cypress login test
describe('Login', () => {
it('logs in successfully', () => {
cy.visit('/login');
cy.get('#email').type('[email protected]');
cy.get('#password').type('password123');
cy.get('form').submit();
cy.url().should('include', '/dashboard');
});
});// AFTER: Same test in Playwright
import { test, expect } from '@playwright/test';
test('logs in successfully', async ({ page }) => {
await page.goto('/login');
await page.locator('#email').fill('[email protected]');
await page.locator('#password').fill('password123');
await page.locator('form').evaluate(form => form.submit());
await expect(page).toHaveURL(/dashboard/);
});Vigtige oversættelser: cy.visit() bliver til page.goto(). cy.get() bliver til page.locator(). cy.intercept() bliver til page.route(). cy.wait('@alias') bliver til page.waitForResponse(). Cypress' implicitte chaining bliver til eksplicit async/await.
Selenium til Playwright: API-oversættelse
// BEFORE: Selenium login test
const { Builder, By, until } = require('selenium-webdriver');
async function loginTest() {
const driver = await new Builder().forBrowser('chrome').build();
try {
await driver.get('http://localhost:3000/login');
await driver.findElement(By.id('email')).sendKeys('[email protected]');
await driver.findElement(By.id('password')).sendKeys('password123');
await driver.findElement(By.css('form')).submit();
await driver.wait(until.urlContains('/dashboard'), 10000);
} finally {
await driver.quit();
}
}// AFTER: Same test in Playwright
import { test, expect } from '@playwright/test';
test('logs in successfully', async ({ page }) => {
await page.goto('/login');
await page.locator('#email').fill('[email protected]');
await page.locator('#password').fill('password123');
await page.locator('form').evaluate(form => form.submit());
await expect(page).toHaveURL(/dashboard/);
});Den største forskel? Playwright håndterer browserlivscyklus og auto-waiting for dig. Ikke flere driver.quit() i finally-blokke. Ikke flere driver.wait(until.urlContains(...), 10000); Playwright auto-venter på navigation. Fjern alle dine implicitte og eksplicitte waits; Playwrights auto-waiting erstatter dem.
Migrations-checkliste
- Revider din eksisterende testsuite, tæl tests, identificer brugerdefinerede kommandoer (Cypress) eller kompleks wait-logik (Selenium)
- Installer Playwright alongside dit nuværende framework, kør begge i CI under overgangen
- Oversæt tests inkrementalt, start med de simplest, højeste-værdi tests
- Erstat brugerdefinerede kommandoer med page objects eller fixtures, Cypress-brugerdefinerede kommandoer har ikke en 1:1 Playwright-ækvivalent
- Opdater din CI-konfiguration, tilføj Playwrights sharding-konfiguration, fjern Cypress Cloud-nøgler hvis relevant
- Kør begge frameworks parallelt i 1-2 sprints for at fange regressioner
- Udfas det gamle framework, når alle tests er migreret og stabile
En typisk 200-test Cypress-suite kan migreres på 1-2 sprints af én ingeniør. Selenium-til-Playwright-migrationen tager lidt længere tid, fordi Selenium-tests tenderer til at have mere kompleks wait-logik, der skal tænkes om. Hvis du migrerer, er Playwright destinationen, 90 % af teams vælger i 2026. Migrationen i sig selv er ligetil; den sværeste del er normalt brugerdefinerede Cypress-kommandoer eller kompleks Selenium-wait-logik.
Stack-specifikke anbefalinger, React, Next.js og videre
Generisk "det afhænger"-rådgivning er ubrugelig. Her er hvad vi ville vælge til specifikke tech-stacks, baseret på at bygge produktionsapps med disse frameworks.
| Stack | Bedste valg | Nummer to | Hvorfor |
|---|---|---|---|
| React / Next.js | Playwright | Cypress | Next.js har officiel Playwright-integration. API-route-testning, serverkomponent-testning og gratis parallelisering gør Playwright til det klare fit. |
| Vue / Nuxt | Playwright eller Cypress | , | Genuint toss-up. Cypress har moden Vue-komponenttestning. Playwright excellerer ved E2E. Intet forkert valg. |
| Angular | Playwright | Selenium | Angulars officielle anbefalinger inkluderer nu Playwright blandt de moderne alternativer efter Protractors udfasning. |
| Java / Python backend | Playwright eller Selenium | , | Hvis teamet har Selenium-ekspertise, behold det. Ellers gør Playwrights multi-language bindings det til et naturligt alternativ. |
| Legacy enterprise (IE-support) | Selenium | , | Den eneste mulighed. Playwright droppede IE. Cypress havde det aldrig. |
Hvis dit team bygger med Next.js og evaluerer frameworks, dækker vores Next.js vs Remix-sammenligning, hvordan framework-arkitektur påvirker din teststrategi. Playwrights evne til at teste API-routes og serverkomponenter nativt gør det specielt kraftfuldt i Next.js-økosystemet.
AI-assisteret testning i 2026
AI-assisteret testning er ikke længere hypotetisk; værktøjer som GitHub Copilot, Cursor og Claude Code genererer testkode dagligt for tusindvis af udviklere. Valg af framework påvirker, hvor godt disse værktøjer virker.
Playwright har den bedste AI-kompatibilitet. Dens TypeScript-første API med stærke typedefinitioner betyder, at AI-assistenter genererer mere præcis testkode. De strukturerede async/await-mønstre er lettere for LLM'er at ræsonnere om end Cypress' chaining. Og Playwrights eget npx playwright codegen-værktøj optager browserinteraktioner og genererer komplette testfiler med intelligent locator-valg, ingen AI-abonnement nødvendig.
Cypress virker rimeligt godt med AI-værktøjer. Dens deklarative chaining-API er kortfattet og velrepræsenteret i træningsdata. Men cy.-namespacet og mønstre for brugerdefinerede kommandoer kan få kodegenerering til at snuble, hvilket producerer tests, der ser korrekte ud, men fejler på grund af Cypress-specifikke ejendommeligheder.
Selenium er den svageste match til AI-assisteret testning. Verbos boilerplate, flere sprogbindings med forskellige APIs og inkonsistente mønstre på tværs af Java/Python/JS betyder, at AI-genereret Selenium-kode kræver mest manuel oprydning.
Overdriv ikke AI's rolle her; det er en produktivitetsmultiplikator, ikke en erstatning for testdesign. Men hvis dit team bruger AI-kodningsassistenter (og det gør de fleste i 2026), producerer Playwright de mest pålidelige genererede tests.
Konklusion: Playwright vinder til AI-assisteret testgenerering. Dens type-de API og strukturerede mønstre producerer de bedste resultater med moderne AI-kodningsassistenter.
Beslutningsframework, hvilket værktøj skal du vælge?
Her er afsnittet, du kom efter. Konkrete scenarier, konkrete anbefalinger.
| Hvis dit projekt har brug for... | Vælg | Hvorfor | Alternativ |
|---|---|---|---|
| Bedste samlede E2E-framework | Playwright | Hurtigst, mest capable, gratis, stærkt fællesskab | Cypress (hvis DX er kritisk) |
| Interaktiv debugging til frontend | Cypress | Test Runners time-travel-debugging er uovertruffen | Playwright (UI-mode forbedres) |
| Multi-language team (Java/Python/C#) | Playwright | Officielle bindings til 4 sprog | Selenium (bredest sprogunderstøttelse) |
| Budgetbevidst team | Playwright | $0 for alt, inklusive parallelisering | Selenium (gratis men infrastrukturpriser) |
| Prioritet på komponenttestning | Cypress | Mest modne komponenttestningsimplementering | Playwright (eksperimentel) |
| Enterprise Java/Python-shop | Selenium eller Playwright | Eksisterende investering betyder noget; Playwright hvis migrering | , |
| Solo frontend-udvikler | Cypress eller Playwright | Cypress til hurtigst onboarding; Playwright til power | , |
| Safari/WebKit-testning krævet | Playwright | Førsteklasses WebKit-understøttelse, cross-platform | Selenium (kun macOS Safari) |
| Legacy IE-support krævet | Selenium | Den eneste mulighed | , |
| Hurtigste CI/CD-pipelines | Playwright | Gratis sharding, hurtigst eksekvering | , |
| Team, der migrerer fra Selenium | Playwright | Nemmeste migrationssti, de fleste teams' destination | , |
| 20+ personers QA-team | Playwright | Skalerer uden betalte services | Selenium (hvis allerede investeret) |
Hvornår du IKKE skal bruge hvert værktøj
- Vælg ikke Playwright, hvis hele dit team kender Cypress dybt, har omfattende brugerdefinerede kommandoer og ingen smertepunkter. Migrationsomkostninger eksisterer, og "nyere" betyder ikke "bedre til din situation."
- Vælg ikke Cypress, hvis du har brug for multi-language-understøttelse, testning med flere faner eller gratis paralleleksekvering i stor skala. Disse er arkitektoniske begrænsninger, ikke funktioner på en roadmap.
- Vælg ikke Selenium til nye JavaScript/TypeScript-projekter. Både Playwright og Cypress tilbyder dramatisk bedre DX, hastighed og pålidelighed for JS-teams.
Hvordan Techsy tilgår testautomatisering
Hos Techsy har vi implementeret E2E-testning på dusinvis af produktions-webapplikationer. Her er vores faktiske proces:
-
Standardiser på Playwright til nye projekter. Dens hastighed, gratis parallelisering og TypeScript-første DX aligner med vores Next.js/React-stack. Vi skriver E2E-tests alongside features, ikke efter sprinten, ikke "når vi har tid", men som en del af definition of done.
-
Brug Cypress, når et klientteam har eksisterende Cypress-infrastruktur, og migration ikke er berettiget. Vi presser ikke teams til at migrere for skyldens skyld. Hvis Cypress virker, og teamet er produktivt, hjælper vi dem med at få mere ud af det.
-
Hjælp teams med at migrere fra Selenium, når vedligeholdelsesbyrden overstiger migrationsomkostningen, hvilket sker oftere, end man skulle tro. Selenium-suites tenderer til at akkumulere kompleks wait-logik og skrøbelige selectors over år.
Vores typiske testing-stack: Playwright til E2E, React Testing Library til komponentniveau-tests og GitHub Actions til CI. Denne kombination dækker den fulde testpyramide med minimal værktøjskompleksitet.
Har du brug for hjælp til at opsætte automatiseret testning til din webapp? Vores team implementerer Playwright- og Cypress-testning på tværs af React-, Next.js- og Node.js-projekter. Få en gratis testkonsultation.
Endelig konklusion
| Kategori | Vinder | Noter |
|---|---|---|
| Hastighed | Playwright | 2x hurtigere end Cypress, 3x hurtigere end Selenium |
| Browserunderstøttelse | Playwright | Bundler Chromium, Firefox og WebKit cross-platform |
| Sprogunderstøttelse | Selenium | Flest sprog (6+ officielle bindings) |
| DX / Debugging | Cypress | Interaktiv Test Runner er stadig den bedste debugging-oplevelse |
| CI/CD-integration | Playwright | Gratis parallelisering via sharding, nul infrastruktur |
| Omkostninger | Playwright | $0 for alt. Cypress Cloud starter ved $67/md |
| Komponenttestning | Cypress | Førsteklasses support til React, Vue, Angular, Svelte |
| Fællesskabsvækst | Playwright | ~30M ugentlige npm-downloads, ~82,8K GitHub-stjerner |
| TypeScript DX | Playwright | TypeScript-først design, bedst autocomplete og typesikkerhed |
| Migrationsmål | Playwright | Hvor 90 % af migrerende teams lander i 2026 |
| AI-kompatibilitet | Playwright | Type-de API producerer de mest pålidelige AI-genererede tests |
| Samlet (2026) | Playwright | Bedste balance af hastighed, kapacitet, omkostninger og fællesskab |
For de fleste teams, der starter et nyt projekt i 2026, er Playwright standardvalget. Det er det hurtigste, mest capable og helt gratis. Det vinder 9 ud af 12 kategorier i tabellen ovenfor.
Men standarder er ikke universelle. Cypress forbliver det rigtige valg for frontend-teams, der prioriterer interaktiv debugging og komponenttestning, og som kan leve inden for dets arkitektoniske begrænsninger. Selenium forbliver essentielt for Java/Python-enterprisemiljøer med eksisterende testinfrastruktur og til de stadig sjældne tilfælde, hvor IE-support betyder noget.
Den værste beslutning er analyseparalyse. Vurdér dit teams sprog, dine browserkrav, dit CI-budget og dine debugging-præferencer. Vælg ét. Begynd at skrive tests. Du kan altid migrere senere, og som vi viste ovenfor, er migrationsstien veldokumenteret.
Kilder
- Playwright-dokumentation
- Cypress Cloud-priser
- npm Trends, Playwright vs Cypress vs Selenium
- Checkly, hastighedssammenligningsbenchmark
- Next.js, Testning med Playwright
- State of JavaScript 2024 -- Testbiblioteker
- BigBinary, Hvorfor vi skiftede fra Cypress til Playwright
Playwright vs Cypress vs Selenium: FAQ
Er Playwright bedre end Cypress?
For de fleste teams i 2026, ja. Playwright er hurtigere (2x i benchmarks), understøtter flere browsere og sprog, har gratis parallelisering og bedre TypeScript-understøttelse. Cypress vinder på interaktiv debugging-DX og modenhed inden for komponenttestning. Hvis disse to ting er din topprioritet, er Cypress stadig et stærkt valg.
Erstatter Playwright Selenium?
I JavaScript/TypeScript-økosystemet, stort set ja. Playwrights npm-downloads er cirka 4,5x Cypress og 17x Selenium WebDriver. Men Selenium forbliver dominerende i Java- og Python-enterprisemiljøer, hvor dets multi-language-understøttelse og årtiers økosystemværktøjer er essentielle. Selenium er ikke dødt; det indsnævres til sin niche.
Hvilken er hurtigere, Playwright eller Cypress?
Playwright kører testsuites cirka 2x hurtigere, 4,5 sekunder mod 9,4 sekunder i sammenlignelige benchmarks. Kløften bliver større med større suites, fordi Playwrights browser context-model er mere effektiv end Cypress' procesmodel. Ét team rapporterede en 89 % reduktion i samlet CI-tid efter migration.
Understøtter Cypress Safari?
Cypress har eksperimentel WebKit-understøttelse, men det betragtes ikke som produktionsklart. Playwright inkluderer WebKit (Safaris rendering-engine) som en førsteklasses, fuldt understøttet browser, der kører på ethvert OS. Hvis Safari-testning er kritisk for dine brugere, er Playwright det sikrere valg.
Er Selenium dødt i 2026?
Nej. Selenium forbliver det mest udbredte E2E-framework globalt, især i Java- og Python-økosystemer. Det er den eneste mulighed til IE/legacy-browser-testning. Men til nye JavaScript/TypeScript-projekter er Playwright og Cypress bedre valg efter ethvert praktisk mål.
Kan Playwright teste mobile apps?
Playwright kan emulere mobile browsere (Chrome til Android, Safari til iOS via WebKit) med præcis viewport-, touch- og user agent-simulering. Det kan ikke automatisere native mobile apps. Til native app-testning har du brug for Appium (som bruger Seleniums WebDriver-protokol) eller et dedikeret mobiltestframework som Detox.
Skal jeg lære Playwright eller Cypress først?
Hvis du er ny til E2E-testning i 2026, start med Playwright. Det har den stærkeste væksttrajectory, det mest omfattende feature-sæt, og færdighederne overføres til ethvert JavaScript/TypeScript-projekt. Cypress er værd at lære, hvis dit team allerede bruger det, eller hvis interaktiv debugging er din primære bekymring.
Hvad er ulemperne ved Playwright?
Playwrights interaktive debugging-oplevelse er mindre poleret end Cypress' Test Runner (selvom Playwright UI-mode lukker kløften). Dens komponenttestning er mindre moden end Cypress'. Og dets hurtige månedlige release-cadence betyder, at API-overfladen ændres hyppigt; du skal holde dig opdateret med updates.
Hvor meget koster Cypress Cloud?
Cypress Cloud starter ved $67/md (faktureret årligt) for Team-planen med 120.000 testresultater om året og går op til $267/md for Business med ubegrænsede resultater. Enterprise-priser er custom. Playwright tilbyder tilsvarende features, parallelisering, testanalytik via HTML-reporteren og flake-detektion via retries, gratis.
Hvilket E2E-framework virker bedst med GitHub Actions?
Alle tre virker med GitHub Actions, men Playwright kræver mindst konfiguration. Playwrights officielle Docker-images og indbyggede sharding (--shard=1/4) gør CI-opsætning til en enkelt YAML-fil. Cypress har brug for sin officielle GitHub Action og et Cypress Cloud-abonnement til parallelisering. Selenium har brug for en service-container til browser-driveren.
Virker Playwright med Java eller Python?
Ja. Playwright har officielle Java-, Python-, C#- og JavaScript/TypeScript-bindings vedligeholdt af Microsoft. Cypress er kun JavaScript/TypeScript. Dette gør Playwright til et compelling Selenium-alternativ for ikke-JS-teams, der ønsker moderne værktøjer uden at skifte sprog.
Hvordan migrerer jeg fra Selenium til Playwright?
Start med at installere Playwright alongside Selenium. Oversæt tests inkrementalt: page.locator() erstatter driver.findElement(), page.goto() erstatter driver.get(), og du kan fjerne alle eksplicitte waits, fordi Playwright auto-venter. Opdater din CI-konfiguration, kør begge frameworks parallelt under overgangen, og udfas derefter Selenium, når alle tests er grønne. En typisk 200-test-suite tager 1-2 sprints for én ingeniør.