- Published on
Playwright (1. díl) - Úvod a porovnání se Selenium a Cypress
Co je Playwright?
Playwright je open-source nástroj (vyvinutý Microsoftem) pro end-to-end testování webových aplikací. Podporuje tři nejpoužívanější webové prohlížeče (Chromium/Chrome, Firefox a WebKit/Safari). Testy lze psát v JavaScriptu, TypeScriptu, Pythonu, Javě nebo .NETu a nástroj má vlastní vestavěný test runner (viz Co je to test runner?). Kromě použití na automatické testování funkcionality webových aplikací lze použít i na kontrolu vizuální stránky (screenshoty, videozáznamy) a API testy. Testy lze spouštět jak v režimu headed, tak i headless (při spuštění testu se zobrazí okno prohlížeče, nebo se test spustí „na pozadí“ - viz Co je headed a headless režim?).
Hlavní přednosti Playwrightu
- Podpora Chromium, Firefox a WebKit
- Automatické čekání na načtení prvků
- Možnost testovat více uživatelů nebo oken současně
- Zabudované screenshoty, videa a HTML reporty
- Možnost testování REST API
- Snadná integrace do CI/CD
Playwright vs. Selenium
Výhody Selenium oproti Playwrightu
1. Širší podpora programovacích jazyků
- Selenium podporuje Java, Python, C#, Ruby, JavaScript, Kotlin a další.
- Playwright oficiálně podporuje JavaScript/TypeScript, Python, Java a .NET.
2. Podpora více (i starších) prohlížečů
- Selenium umožňuje testování i ve starších verzích prohlížečů, včetně Internet Exploreru.
- Playwright podporuje pouze Chromium (Chrome), Firefox a WebKit (Safari), ale nepodporuje Internet Explorer a některé starší verze jiných prohlížečů.
3. Zavedený ekosystém a silná komunita
- Selenium je na trhu déle a má silnou a aktivní komunitu.
4. Integrace s nástroji třetích stran
- Selenium se dobře integruje s:
- CI/CD nástroji
- Testovacími frameworky (např. TestNG, JUnit)
- Cloud službami (např. BrowserStack, Sauce Labs)
- Reporting nástroji
5. Dodržuje W3C WebDriver standard
- Selenium používá oficiální WebDriver protokol, který je podporován přímo výrobci prohlížečů. Nabízí tak stabilní a oficiálně podporovaný způsob testování reálného chování prohlížeče.
Nevýhody Selenium oproti Playwrightu
1. Chybí vizuální debugovací prostředí a tracing
(Co to je tracing? viz Co znamená tracing v Playwrightu?)
- Selenium nemá na rozdíl od Playwrightu UI mode pro sledování jednotlivých kroků v testu. Tento režim umožňuje interaktivní spouštění a ladění testů pomocí grafického rozhraní, které zobrazuje průběh testu, aktuální stav stránky a umožňuje krokovat jednotlivé části testovacího kódu. Každý krok testu lze rozkliknout, vidět jeho výsledek a případně zopakovat.
- Playwright podporuje nahrávání videa spuštěného testu
2. Slabší podpora některých funkcí
- Selenium nemá přímou podporu pro:
- Více záložek (tabs)
- Kontexty prohlížeče (browser contexts)
- Shadow DOM
- Automatické čekání na prvky
3. Větší nestabilita a flaky testy
V Selenium často svádí k použití tvrdých waitů (
Thread.sleep())Playwright nabízí:
- Automatické čekání
- Vestavěné retry mechanismy
4. Chybí podpora pro API testy
Selenium se zaměřuje čistě na UI (API testy je třeba zajistit jinými frameworky - v Javě např. REST Assured)
Playwright podporuje:
- Testování REST API
- Zachytávání síťové komunikace
5. Pomalejší běh testů
- Zatímco Selenium komunikuje s prohlížečem přes síť pomocí WebDriver protokolu, Playwright běží v rámci jednoho procesu, a proto bývá výrazně rychlejší.
Proč je Playwright rychlejší než Selenium?
Jak Selenium komunikuje s prohlížečem
Selenium používá tzv. WebDriver protokol, který je založený na architektuře klient-server:
- Testovací skript (např. v Javě) funguje jako klient.
- Ovladač prohlížeče (konkrétní implementace WebDriveru - např.
chromedriver) je server. - Každý testovací příkaz (např. "klikni na tlačítko") se odesílá jako HTTP požadavek na WebDriver (resp. chromedriver).
- WebDriver předá instrukci prohlížeči a vrací odpověď zpět.
Každý krok testu probíhá přes síťovou komunikaci – i když lokální, stále jde o pomalejší proces než níže uvedený způsob u Playwrightu.
Jak Playwright komunikuje s prohlížečem
Playwright je nástroj, který běží v rámci jednoho procesu nebo pomocí IPC komunikace (inter-process communication).
- Nepoužívá WebDriver.
- Komunikuje přímo s jádry prohlížečů (Chromium, Firefox, WebKit) - příkazy volány přímo, bez potřeby síťové komunikace.
6. Složitější nastavení a konfigurace
- Selenium: Vyžaduje instalaci a správu
chromedriver,geckodriveratd. (není až takový problém při použití Maven apod.) - Playwright: Instaluje a spravuje prohlížeče automaticky.
Playwright vs. Cypress
Jednou z hlavních vlastností Cypressu je, že běží přímo uvnitř prohlížeče, v kterém zároveň běží i testovaná stránka. To přináší jak výhody, tak nevýhody:
Výhody běhu uvnitř prohlížeče
1. Přímý přístup k webové aplikaci
Cypress má přístup ke všem objektům stránky, jako kdyby byl součástí aplikace:
- Může číst a upravovat DOM
- Přistupuje k JavaScriptovým proměnným aplikace
- Snadno kontroluje stavy (např. cookies, Redux)
2. Rychlejší debugování a výpisy chyb
- Cypress má GUI s výpisy přímo ve stránce.
- Umožňuje sledovat jednotlivé kroky testu a aktuální stav DOM.
3. Automatické čekání
Díky napojení na běžící aplikaci může Cypress:
- Automaticky čekat na načtení prvků
Nevýhody běhu uvnitř prohlížeče
1. Zkreslení reálného prostředí
- Cypress běží jako součást aplikace, a tak s ní sdílí paměť, kontext, proměnné (není zcela izolovaný, jako by byl skutečný uživatel)
2. Omezená podpora více oken, tabů a kontextů
- Cypress nepodporuje nativně více oken či tabů
- Neumí izolovat testy pomocí „browser context“ jako Playwright.
Výhody Cypressu oproti Playwrightu
1. Jednodušší start
- Cypress je vhodný i pro úplné začátečníky. Instalace, UI prostředí i základní testy jsou velmi intuitivní
2. Nástroje pro vizuální ladění
- Možnost „time-travel“ – při ladění testů v UI prostředí se lze vracet i do minulosti
3. Výborná integrace s front-end frameworky
- Skvělá integrace s Reactem, Vue, Angular.
- Možnost mountování jednotlivých komponent (component testing).
Nevýhody Cypressu oproti Playwrightu
1. Omezená podpora prohlížečů
- Cypress podporuje především Chromium (Chrome, Edge) a Firefox.
- Playwright navíc podporuje i WebKit (Safari).
2. Vlastní asynchronní řetězení příkazů
Běžné způsoby práce s proměnnými (např. přes const, let) nefungují očekávaným způsobem. Důvodem je, že Cypress používá vlastní systém asynchronního řetězení příkazů (tzv. command queue), který ovlivňuje i logikou psaní testů. Například tento kód nefunguje:
const text = cy.get('h1').text() // text je undefined
- cy.get() nevrací hodnotu hned, ale pouze zařadí příkaz do fronty
- test běží asynchronně a Cypress sám řídí, kdy se co provede
V Cypressu je třeba k takové proměnné přistupovat např. pomocí .then() (případně použitím aliasů):
cy.get('button').then(($btn) => {
const txt = $btn.text()
cy.get('form').submit()
cy.get('button').should(($btn2) => {
expect($btn2.text()).not.to.eq(txt)
})
})
Jak to ovlivňuje použitelnost?
Ztráta plynulosti při psaní testů.
- Nelze jednoduše ukládat hodnoty do běžných proměnných. Je třeba psát více vnořených .then() nebo používat aliasy.
Nedá se použít await a async
- Cypress není kompatibilní s klasickou async/await syntaxí.
Složitější logika a čitelnost
- Testy často končí jako vnořená "callback hell", pokud je potřeba více kroků. Oproti tomu v Playwrightu lze použít běžnou await syntaxi.
3. Menší možnosti paralelizace
- Cypress má určitá omezení při běhu více testů paralelně (zejména v open-source verzi).
- Playwright umožňuje snadné paralelní spouštění testů i bez placených nástrojů.
Selenium vs. Cypress vs. Playwright
| Funkce | Selenium | Cypress | Playwright |
|---|---|---|---|
| Rychlost | ❌ | ✅ | ✅✅ |
| Podpora více jazyků | ✅✅ | ❌ (pouze JavaScript) | ✅ |
| Debugovací nástroje | ❌ | ✅✅ | ✅✅ |
| API testování | ❌ | ⚠️ (částečné) | ✅✅ |
| Paralelizace | ✅ | ⚠️ (omezená) | ✅✅ |
| Testování komponent | ❌ | ✅✅ | ⚠️ (omezené) |
Slovníček
Co je to test runner?
test runner zajišťuje spuštění, organizaci a vyhodnocení testů. Playwright používá svůj vlastní integrovaný test runner.
Co má test runner na starosti?
- Spouští testy – najde soubory s testy (např.
*.spec.ts) a postupně je vykonává - Izoluje testy – každý test běží ve vlastním kontextu
- Zajišťuje paralelizaci – umí spouštět testy současně v několika vláknech (workers)
- Spravuje hooky (
beforeEach,afterEachapod.) - Reportuje výsledky
- Podporuje projektové konfigurace, např. spuštění testů ve více prohlížečích (Chromium, Firefox, WebKit)
Co je headed a headless režim?
Headless režim
headless znamená spuštění testu bez grafického rozhraní. Prohlížeč se spustí na pozadí bez otevření okna na obrazovce.
Výhody
- Rychlejší běh testů.
- Vhodné pro CI/CD prostředí (např. GitHub Actions, GitLab CI).
- Méně zatěžuje systém.
Nevýhody
- Není možné vidět, co se v prohlížeči děje.
- Může být obtížnější ladit vizuální chyby.
Headed režim
V headed režimu se prohlížeč skutečně otevře a test probíhá s viditelným oknem.
Výhody
- vhodné pro ladění – vidíte, co test skutečně dělá
- Lze snadno identifikovat chyby v uživatelském rozhraní
Nevýhody
- Pomalější než
headless - Nevhodné pro automatizované prostředí
- Pomalější než
Co znamená tracing v Playwrightu?
Tracing je mechanismus pro detailní zaznamenání průběhu testu, který lze zpětně analyzovat.
Co tracing zaznamenává:
- Snímky stránky (snapshots) po každé akci
- Snímky DOMu (jak vypadal HTML strom v danou chvíli)
- Síťovou komunikaci – požadavky a odpovědi (včetně hlaviček, status kódů)
- Kroky testu – každý příkaz a jak dlouho trval
- Konzolové logy a chyby
- Screenshoty, videa (pokud je zapnuto)
Po běhu testu vyrobí Playwright .zip soubor, který lze otevřít v interaktivním Trace vieweru.
Co bude dál?
V dalších dílech se podívám na první testy v Playwrightu a jeho konfiguraci.

