Playwright

1. Co je Playwright?

Playwright je moderní framework pro automatizované end-to-end testování webových aplikací.

Umožňuje ovládat reálný prohlížeč, simulovat chování uživatele a ověřovat chování aplikace z pohledu frontend UI.

Playwright je vhodný zejména pro:

  • Web portály
  • Internet banking
  • E-commerce aplikace
  • Admin portály
  • SPA aplikace (React, Angular, Vue)
  • Cross-browser testing
  • CI/CD automatizaci

2. Hlavní výhody Playwright

  • Moderní a rychlý framework
  • Vestavěný auto-waiting
  • Výborná stabilita testů
  • Cross-browser podpora
  • Paralelní spouštění testů
  • Vestavěný trace viewer
  • Podpora API testingu
  • Mockování network requestů
  • Screenshoty a video recording
  • Silná podpora accessibility selectorů

3. Podporované prohlížeče

Browser Engine Playwright Browser
Chromium Chrome / Edge
Firefox Firefox
WebKit Safari engine

Díky WebKit podpoře lze testovat i Safari behavior, což je častý problém u jiných frameworků.


4. Klíčové vlastnosti Playwright

Cross-browser testy

Jeden test lze spouštět nad více browsery bez změny kódu.

projects: [
  { name: 'chromium' },
  { name: 'firefox' },
  { name: 'webkit' }
]

Locators

Playwright používá moderní a stabilní systém locatorů.

Doporučené přístupy:

getByRole()
getByLabel()
getByText()
getByPlaceholder()
getByTestId()

Příklad:

page.getByRole('button', { name: 'Submit payment' })

Accessibility-based selektory bývají stabilnější a čitelnější než CSS selektory.


Auto-waiting

Playwright automaticky čeká, až je prvek:

  • visible
  • enabled
  • attached to DOM
  • ready for interaction

Díky tomu výrazně snižuje flaky testy.

Špatně:

await page.waitForTimeout(5000);

Lépe:

await expect(button).toBeVisible();

Trace Viewer

Playwright umí ukládat detailní trace průběhu testu.

Obsahuje:

  • Kroky testu
  • Screenshoty
  • DOM snapshoty
  • Network requesty
  • Console logy
  • Timing jednotlivých akcí
npx playwright show-trace trace.zip

API a network testing

Playwright podporuje:

  • Intercept requestů
  • Mockování API
  • Monitoring network traffic
  • API testing bez browseru
await page.route('**/payments', route => {
  route.fulfill({
    status: 200,
    body: JSON.stringify({ success: true })
  });
});

5. Instalace Playwright

V Node.js projektu se Playwright typicky instaluje jako development dependency.

npm init playwright@latest

Instalátor vytvoří:

  • ukázkové testy
  • playwright.config.ts
  • test adresář
  • CI konfiguraci

Spuštění testů

npx playwright test

HTML report

npx playwright show-report

Spuštění konkrétního testu

npx playwright test login.spec.ts

Debug mode

npx playwright test --debug

6. Struktura Playwright projektu

project/
│
├── tests/
├── pages/
├── fixtures/
├── utils/
├── playwright.config.ts
├── package.json
└── test-results/

Doporučená struktura:

  • tests/ — samotné testy
  • pages/ — Page Object Model
  • fixtures/ — reusable setup
  • utils/ — helper funkce

7. Ukázkový test webového portálu

import { test, expect } from '@playwright/test';

test('user can see account overview after login', async ({ page }) => {
  await page.goto('https://banking-test.example.com/login');

  await page.getByLabel('Username').fill('test.user');

  await page.getByLabel('Password').fill('correct-password');

  await page.getByRole('button', { name: 'Log in' }).click();

  await expect(
    page.getByRole('heading', {
      name: 'Account overview'
    })
  ).toBeVisible();

  await expect(
    page.getByTestId('account-balance')
  ).toContainText('EUR');
});

8. Assertions

Assertions ověřují očekávaný stav aplikace.

Časté assertions:

await expect(locator).toBeVisible();

await expect(locator).toContainText('Success');

await expect(locator).toHaveValue('John');

await expect(page).toHaveURL(/dashboard/);

await expect(locator).toBeEnabled();

9. Page Object Model (POM)

POM odděluje UI logiku od testů.

Výhody:

  • Lepší maintenance
  • Menší duplicita
  • Přehlednější testy
  • Znovupoužitelný kód

Příklad:

export class LoginPage {

  constructor(page) {
    this.page = page;
  }

  async login(username, password) {
    await this.page.getByLabel('Username').fill(username);
    await this.page.getByLabel('Password').fill(password);

    await this.page
      .getByRole('button', { name: 'Log in' })
      .click();
  }
}

10. Test hooks

Hooks umožňují setup a cleanup testů.

test.beforeEach(async ({ page }) => {
  await page.goto('/');
});

test.afterEach(async () => {
  console.log('Cleanup');
});

11. Paralelní běh testů

Playwright podporuje paralelní execution.

Výhody:

  • Rychlejší CI pipeline
  • Kratší execution time
  • Lepší škálovatelnost
npx playwright test --workers=4

12. Screenshoty a video

Playwright umí automaticky ukládat:

  • Screenshoty
  • Video recording
  • Trace files
use: {
  screenshot: 'only-on-failure',
  video: 'retain-on-failure',
  trace: 'retain-on-failure'
}

13. Debugging

Inspector mode

npx playwright test --debug

Codegen

Playwright umí generovat testy z uživatelských akcí.

npx playwright codegen https://example.com

Codegen je vhodný pro rychlý start, ale výsledný kód bývá potřeba refaktorovat.


14. Mockování API

Mockování pomáhá:

  • izolovat frontend
  • zrychlit testy
  • simulovat error scénáře
  • odstranit závislost na backendu
await page.route('**/balance', async route => {
  await route.fulfill({
    status: 200,
    body: JSON.stringify({
      balance: 1500
    })
  });
});

15. Environment konfigurace

Playwright podporuje různé prostředí:

  • DEV
  • TEST
  • UAT
  • PROD-like
use: {
  baseURL: 'https://test.example.com'
}

16. CI/CD integrace

Playwright se často používá v:

  • GitHub Actions
  • Azure DevOps
  • GitLab CI
  • Jenkins

Typický pipeline flow:

Install dependencies
↓
Build application
↓
Run Playwright tests
↓
Generate report
↓
Publish artifacts

17. Best practices

  • Používej accessibility locators
  • Minimalizuj waitForTimeout()
  • Piš krátké a izolované testy
  • Používej Page Object Model
  • Odděluj test data
  • Mockuj nestabilní externí služby
  • Spouštěj testy paralelně
  • Pravidelně refaktoruj automation code

18. Nejčastější chyby

  • Používání nestabilních CSS selectorů
  • Příliš mnoho sleep/wait timeoutů
  • Závislost mezi testy
  • Sdílená test data
  • Příliš dlouhé E2E scénáře
  • Ignorování flaky testů
  • Chybějící cleanup

19. Výhody Playwright oproti Selenium

Playwright Selenium
Vestavěný auto-waiting Často nutné explicit waits
Modern API Starší API
Vestavěný trace viewer Nutné externí nástroje
Rychlejší execution Pomalejší
Lepší DX Více konfigurace

20. Shrnutí

Playwright je moderní a velmi silný framework pro automatizaci webových aplikací.

Je vhodný zejména pro:

  • Moderní web aplikace
  • CI/CD pipelines
  • Cross-browser testing
  • Stabilní E2E automatizaci
  • API + UI kombinované testy
„Playwright pomáhá vytvářet rychlé, stabilní a maintainable automatizované testy.“