{"id":51529548,"url":"https://github.com/krll-dev/playwright-e2e","last_synced_at":"2026-07-09T01:30:26.982Z","repository":{"id":369464914,"uuid":"1289760601","full_name":"krll-dev/playwright-e2e","owner":"krll-dev","description":null,"archived":false,"fork":false,"pushed_at":"2026-07-05T13:30:26.000Z","size":29,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-05T14:14:16.701Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/krll-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-07-05T07:01:35.000Z","updated_at":"2026-07-05T13:05:53.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/krll-dev/playwright-e2e","commit_stats":null,"previous_names":["krll-dev/playwright-e2e"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/krll-dev/playwright-e2e","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krll-dev%2Fplaywright-e2e","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krll-dev%2Fplaywright-e2e/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krll-dev%2Fplaywright-e2e/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krll-dev%2Fplaywright-e2e/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/krll-dev","download_url":"https://codeload.github.com/krll-dev/playwright-e2e/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krll-dev%2Fplaywright-e2e/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35283905,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-08T02:00:06.796Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-09T01:30:21.678Z","updated_at":"2026-07-09T01:30:26.962Z","avatar_url":"https://github.com/krll-dev.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# playwright-e2e\n\nE2E-Testautomatisierung mit **Playwright (Java)**, **JUnit 5** und **Allure** –\ninklusive eigener **Bestand-Mini-App** (Sparten **KFZ** \u0026 **Unfall**) als\nZielsystem. Architektur und Konventionen: [`CLAUDE.MD`](CLAUDE.MD).\n\n## Aufbau\n\nEin Maven-Projekt, zwei Teile:\n\n- **`src/main/` – Bestand-Mini-App**: kleines Bestandssystem mit Login, Suche,\n  Schnellerfassung KFZ/Unfall (drei Unfall-Varianten: Einzelunfall,\n  Gruppenunfall mit/ohne Namensnennung), Bearbeitungsmasken und REST-Anlage.\n  Reines JDK (`com.sun.net.httpserver`) + Gson, alles **in-memory** (keine DB).\n- **`src/test/` – E2E-Tests** nach komponentenbasiertem POM:\n\n```\ntests  →  flow/  →  page/  →  component/        (asserten → orchestrieren → agieren)\ndata/     Records + sealed Interfaces (UnfallVariante, Bearbeitung)\nrest/     BestandRestClient (Testdaten-Vorbedingungen per POST /api/vertraege)\ncontext/  TestContext-Record (Page + BrowserContext + APIRequestContext, pro Test frisch)\n```\n\n\u003e **Neu Tests schreiben?** Der Praxisleitfaden\n\u003e [`docs/tests-schreiben.md`](docs/tests-schreiben.md) zeigt mit kurzen\n\u003e Beispielen, wie man die verschiedenen Testarten schreibt (Sammel-Annotationen,\n\u003e parametrisierte Tests, `@AsUser`, Zustand über Felder, REST, Testgruppen,\n\u003e Flow/Page/Component).\n\nKernideen:\n\n- **Statelessness**: `TestContext` wird pro Test erzeugt und per\n  Konstruktor-Injektion an Flows gereicht; nichts überlebt den Test.\n- **Sealed Interfaces + exhaustives `switch`** (JDK 21): die drei\n  Unfall-Varianten und die Bearbeitungsoperationen sind Daten – neue Variante =\n  neuer Record + ein `case`, der Compiler erzwingt Vollständigkeit.\n- **Verkettbare Edits**: `BearbeitungFlow.fuehreAus(List.of(new ZahlwegAendern(…),\n  new NeuePersonHinzufuegen(…), …))`.\n- **Custom `PlaywrightExtension`**: startet die App in-process, hält Playwright\n  je Worker-Thread (parallele Testklassen), Video pro Test, Trace bei Fehler,\n  Login-State pro Nutzer (`@AsUser`), alles an Allure angehängt.\n\n## Lokal ausführen\n\n```bash\n# Tests (App startet automatisch in-process; braucht Google Chrome)\nmvn test\n\n# Ohne installiertes Chrome: gebündeltes Playwright-Chromium\nmvn test -Dbrowser.channel=\n\n# App standalone starten (http://localhost:8080, Login: admin/geheim2)\nmvn compile exec:java\n```\n\n### Langlaufende Tests (On-Demand-Gruppen)\n\nLanglaufende Tests werden per JUnit-`@Tag` markiert und laufen **standardmäßig\nnicht** mit. Es gibt drei vorbereitete Gruppen – `@Slow`, `@Nightly`, `@Load`\n(in `src/test/java/dev/krll/e2e/config/`), setzbar auf Klasse oder Methode und\northogonal zu `@CoreTest`/`@KfzTest`/`@UnfallTest`.\n\n```bash\nmvn test                      # Standard: On-Demand-Gruppen ausgeschlossen (schnell)\nmvn test -Pslow               # nur @Slow-Tests\nmvn test -Pnightly            # nur @Nightly-Tests\nmvn test -Pload               # nur @Load-Tests\n\n# Mehrere Gruppen zugleich (Tag-Expression):\nmvn test -Dtest.groups=\"slow | nightly\" -Dtest.excludedGroups=\n\n# Wirklich alles inkl. On-Demand:\nmvn test -Dtest.excludedGroups=\n```\n\nNeue Gruppe anlegen: kleine `@Tag(\"…\")`-Annotation nach dem Muster von\n`Slow.java` hinzufügen, den Tag in `test.excludedGroups` (in der `pom.xml`)\naufnehmen und optional ein gleichnamiges Profil ergänzen. Details in\n[`CLAUDE.MD`](CLAUDE.MD#langlaufende-tests-on-demand-gruppen).\n\nAlle Werte (URLs, Credentials, Browser) sind System-Properties mit Defaults im\n`\u003cproperties\u003e`-Block der `pom.xml` – Details in\n[`CLAUDE.MD`](CLAUDE.MD#konfiguration--ausführung).\n\nAllure-Report:\n\n```bash\nmvn allure:report   # -\u003e target/site/allure-maven-plugin\nmvn allure:serve    # Report direkt im Browser öffnen\n```\n\n## Code-Stil\n\nEinheitliche Formatierung über **[Spotless](https://github.com/diffplug/spotless)**\nmit **[Palantir Java Format](https://github.com/palantir/palantir-java-format)**\n(konfiguriert in der [`pom.xml`](pom.xml)):\n\n```bash\nmvn spotless:apply   # Code formatieren\nmvn spotless:check   # nur prüfen (bricht bei Verstößen ab; läuft auch in CI)\n```\n\nDurchsetzung auf zwei Ebenen:\n\n- **CI-Gate**: `mvn spotless:check` läuft als eigener Schritt im Workflow und\n  blockiert Pull Requests bei Formatverstößen.\n- **Git-Hook** (`.githooks/pre-commit`): formatiert gestagte `.java`-Dateien\n  automatisch vor jedem Commit. **Einmalig pro Klon aktivieren:**\n\n  ```bash\n  git config core.hooksPath .githooks\n  ```\n\n\u003e Hinweis: Der Formatter benötigt unter JDK 21 die `add-exports`/`add-opens`-Flags\n\u003e aus [`.mvn/jvm.config`](.mvn/jvm.config) – diese Datei ist eingecheckt und wird\n\u003e von Maven automatisch geladen.\n\n## CI/CD\n\nDer Workflow [`.github/workflows/e2e.yml`](.github/workflows/e2e.yml) läuft bei\njedem Push und Pull Request:\n\n1. JDK 21 + Google Chrome (stable) einrichten,\n2. **Code-Stil prüfen** (`mvn -B spotless:check`),\n3. **Smoke-Test**: Bestand-Mini-App standalone starten und `/health` prüfen,\n4. E2E-Tests ausführen (`mvn -B test` – die App läuft dabei in-process),\n5. Allure-Report erzeugen (`mvn -B allure:report`),\n6. Report bei Pushes auf **GitHub Pages** veröffentlichen:\n   **https://krll-dev.github.io/playwright-e2e/**\n\nPush-/PR-Läufe bleiben schnell (On-Demand-Gruppen ausgeschlossen). Eine Gruppe\ngezielt in CI laufen lassen: Workflow **manuell** über „Run workflow\" starten und\nim Feld `groups` z. B. `slow` eintragen (leer = Standardlauf).\n\n### GitHub Pages (einmalige Einrichtung)\n\n\u003e **Repo → Settings → Pages → Build and deployment → Source: „GitHub Actions\"**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkrll-dev%2Fplaywright-e2e","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkrll-dev%2Fplaywright-e2e","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkrll-dev%2Fplaywright-e2e/lists"}