Start / Cheat Sheets

Cheat Sheet

Playwright-Testhandwerk — Cheat Sheet

Stand: · Playwright mit KI-Agenten

PlaywrightTestautomatisierungTypeScriptCI/CD

Der Spickzettel zum Handwerk aus dem Seminar Playwright mit KI-Agenten: was ein Test braucht, damit er etwas aussagt und in der Pipeline hält. Den agentischen Teil — Planner, Generator, Healer, MCP und CLI — behandelt ein eigenes Blatt: Playwright mit KI-Agenten.

Maßgeblich ist die Originaldokumentation auf playwright.dev; dieses Blatt trifft eine Auswahl und bringt sie die Methode nicht bei — dafür ist das Seminar da.

Testmodell: die vier Ebenen

EbeneBedeutung
BrowserEin Prozess, wird pro Worker wiederverwendet
Browser ContextIsolierte Sitzung, billig, pro Test neu
PageEin Tab innerhalb des Kontexts
WorkerProzess des Test Runners, führt Dateien parallel aus

Isolation entsteht durch den Kontext, nicht durch Aufräumcode am Testende. Weil ein Kontext fast nichts kostet, bekommt ihn jeder Test neu — Geschwindigkeit und Isolation stehen hier nicht gegeneinander.

Modul: Ein belastbares Playwright-Fundament

Locators — welcher wann

LocatorPassend für
getByRoleBedienelemente mit Rolle und Namen — erste Wahl
getByLabelFormularfelder über ihre Beschriftung
getByTextStatische Texte und Meldungen
getByTestIdStellen ohne stabile Semantik, bewusst gesetzt
CSS oder XPathLetzter Ausweg, an Struktur statt Bedeutung gebunden

Die Reihenfolge ist eine Rangfolge: Je näher ein Locator an der Wahrnehmung eines Menschen liegt, desto länger hält er. Rollenbasierte Locators finden das Element nur, wenn es auch für Assistenztechnik erreichbar ist.

Modul: Ein belastbares Playwright-Fundament

Web-first Assertions

// Warten von selbst bis zum Zeitlimit — kein waitForTimeout nötig
await expect(alarm).toHaveText('Nicht lieferbar');
await expect(kasse).toBeEnabled();
await expect(page.getByTestId('zeile')).toHaveCount(2);
await expect(alarm).not.toBeVisible();   // Fehlerfall absichern

Sichtbarkeit ist fast keine Aussage, der Wert ist die Aussage. Die negative Assertion fehlt in erzeugtem Code am häufigsten.

Modul: Ein belastbares Playwright-Fundament

Artefakte und ihre Aussage

ArtefaktBeantwortet
ScreenshotWie sah die Seite im Moment des Fehlers aus
VideoWelche Schritte gingen dem Fehler voraus
TraceWas genau tat der Test, und was tat die Seite
HTML-ReportWelche Tests liefen, wie lange, mit welchem Ergebnis

Der Trace legt Aktion, DOM-Zustand, Netzwerk und Konsole auf eine gemeinsame Zeitachse und beantwortet damit das Was und das Warum zugleich. Videos ergänzen ihn, ersetzen ihn nicht.

Modul: Ein belastbares Playwright-Fundament

Kommandozeile

npx playwright test --ui              # interaktiv, mit Zeitachse
npx playwright test warenkorb --debug # schrittweise, Browser hält an
npx playwright codegen <url>          # aufzeichnen, Locators vorschlagen
npx playwright show-trace trace.zip   # Nachschau
npx playwright test --repeat-each=3 --workers=4   # Instabilität provozieren
npx playwright test --shard=1/4       # verteilen
npx playwright merge-reports --reporter html blobs/

Module: Playwright-Fundament · Parallelität, Testdaten und große Suites

Fixtures und Page Objects

FormZweck
HilfsfunktionEin technischer Handgriff, ohne eigenen Zustand
KomponentenobjektEin wiederkehrender Bereich, etwa die Kopfzeile
Page ObjectEine Seite mit ihren Locators und Handlungen
FixtureAusgangszustand samt Aufräumen, injiziert in den Test
Fixture-ArtKonsequenz
Standard, Geltungsbereich TestPro Test neu aufgebaut und abgeräumt
scope: 'worker'Einmal je Worker, von allen Tests geteilt
auto: trueLäuft, auch ohne dass ein Test sie anfordert
option: trueWert kommt aus der Konfiguration, nicht aus dem Test
export const test = base.extend<Fixtures>({
  warenkorb: async ({ page }, use) => {
    const seite = new WarenkorbSeite(page);
    await seite.oeffnen();
    await use(seite);          // danach: aufräumen — greift auch bei Fehlschlag
  },
});

Assertions bleiben im Test. Wandern sie ins Page Object, liest man hinterher eine Klickfolge, die irgendwo im Hintergrund etwas behauptet. Geteilter Zustand in einer Worker-Fixture ist erlaubt — nur darf kein Test ihn verändern.

Modul: Wartbarkeit mit Fixtures und Domänenabstraktionen

Parallelität und Kollisionen

BegriffBedeutung
ParallelisierungMehrere Worker auf einer Maschine
ShardingAufteilung der Suite auf mehrere Maschinen
fullyParallelVerteilt einzelne Tests, nicht nur Dateien
Serieller BereichTests hängen voneinander ab, Folgetests entfallen
KollisionsquelleSymptom
Gemeinsames BenutzerkontoAbmeldung oder Zustand aus dem Nachbartest
Fester DatensatzErwarteter Bestand stimmt sporadisch nicht
Globaler Backend-ZustandErgebnisse hängen an der Reihenfolge
Dateisystem oder DownloadsZugriffskonflikte, überschriebene Dateien
Ports und externe DiensteZeitweise Verbindungsfehler ohne Muster

Ein Test, der allein grün und in der Suite rot ist, ist fast immer ein Kollisionsfall — und die Ursache sitzt im Test, der gleichzeitig lief. Die Diagnose in dreißig Sekunden: --workers=1. Verschwindet der Fehler, ist es eine Kollision.

Gegenmittel ist nicht weniger Parallelität, sondern eine eindeutige Kennung je Test — etwa aus testInfo.workerIndex und testInfo.testId — plus Aufräumen in der Fixture statt am Testende.

Modul: Parallelität, Testdaten und große Suites

API-gestütztes Testen

AufgabeWeg
Ausgangszustand herstellenAPI, schnell und stabil
Bedienbarkeit prüfenOberfläche, sonst fehlt die Aussage
Nachbedingung prüfenAPI, wenn die Oberfläche sie nicht zeigt
Fremde Dienste ausschaltenNetzwerkaufrufe abfangen und beantworten

Die Regel: über die Oberfläche nur prüfen, was auch ein Mensch dort prüfen würde. Der Anmeldezustand ist zwischen APIRequestContext und BrowserContext austauschbar — einmal per API anmelden, im Browser weiterarbeiten.

Modul: Testabdeckung strategisch ausbauen

CI-Läufe

AuslöserUmfang
Push auf einen ZweigSmoke-Auswahl, wenige Minuten
Pull RequestVollständige Regression, ein Browser
NächtlichBrowsermatrix und lange Szenarien
Vor einem ReleaseAlles, inklusive Quarantäne-Prüfung
Nur-in-CI-FehlerGegenmittel
Weniger Ressourcen, andere ZeitenWeb-first Assertions, keine festen Pausen
Andere Zeitzone oder Sprachelocale und timezoneId in der Konfiguration
Fehlende Systempaketeplaywright install --with-deps
Andere TestdatenDaten je Lauf erzeugen statt vorauszusetzen

Für stabile Läufe empfiehlt die Dokumentation zunächst einen Worker; Breite entsteht über Sharding, nicht über Worker. Browser-Caching lohnt selten — das Wiederherstellen dauert etwa so lange wie das Herunterladen.

Modul: Playwright-Tests in der CI-Pipeline

Typische Fallen

  • Selektoren aus generierten Klassennamen übernehmen, die der nächste Build ändert.
  • Feste Wartezeiten statt Web-first Assertions — sie verdecken Ladeprobleme und brechen auf langsamer CI.
  • Nur Sichtbarkeit prüfen, statt was in einem Element steht.
  • Negative Assertions weglassen und damit Fehlerfälle nie absichern.
  • Traces nur lokal aktivieren und in der Pipeline genau dann keine haben.
  • Fehlschläge durch Wiederholung wegdrücken, statt sie zu lesen.
  • Ein einziges Testkonto für die ganze Suite — die häufigste Kollisionsursache.
  • Aufräumen ans Testende legen, wo es bei einem Fehlschlag nie erreicht wird.
  • Shards ohne Zusammenführung fahren und vier Teilberichte hinterlassen.
  • Assertions in Hilfsfunktionen verstecken und dem Test seine Aussage nehmen.

Zum Seminar Playwright mit KI-Agenten