Monkey-Testing Ihrer Website mit GitHub Copilot × Playwright: Ein praktischer Leitfaden
Table of Contents
- Einführung
- Testumgebung
- Phase 1: Bestandsaufnahme der Testziele
- Vollständiges Lesen des Quellcodes
- Automatische Testplan-Erstellung
- Phase 2: Vollständiges Routen-Crawl-Testing
- HTTP-Status-Überprüfung
- DOM-Strukturprüfung
- Dead-Link-Prüfung
- Phase 3: Interaktionsüberprüfung
- FAQ (<details>-Elemente)
- Such-Modal (Pagefind)
- YouTube-Fassaden-Muster
- Kopier-Button (nach View Transitions)
- ScrollToTop-Button
- Phase 4: SEO- & Strukturierte-Daten-Audit
- OGP-Meta-Tags
- Strukturierte Daten (JSON-LD)
- Sitemap
- Phase 5: Barrierefreiheits-Überprüfung
- Phase 6: View-Transitions-Navigationstests
- Phase 7: Sicherheitsheader-Überprüfung
- Entdeckte Fehler und Korrekturen
- Fehler 1: Fehlende Resilienz beim Such-Modal
- Fehler 2: Fehlende Google-Ursprünge im CSP-Header
- Systematisierung der Testmethodik
- Schicht 1: Statische Analyse (Quellcode lesen)
- Schicht 2: HTTP-Schicht-Tests (vollständiges Routen-Crawling)
- Schicht 3: DOM-Schicht-Tests (Strukturüberprüfung)
Einführung
Die Qualitätssicherung einer Website ist mit einer einmaligen Prüfung vor dem Release nicht ausreichend. Unerwartete Probleme können jederzeit auftreten – bei Inhaltserweiterungen, Bibliotheks-Updates, CDN-Konfigurationsänderungen und mehr.
Dieser Artikel dokumentiert eine praxisnahe Monkey-Testing-Sitzung, bei der der VS Code Agent Mode (GitHub Copilot) direkt einen Browser steuerte, um eine gesamte Website zu testen. Wir haben die Testmethodik systematisiert, die die KI konsistent ausführte – von der statischen Quellcode-Analyse bis zur dynamischen Browser-Überprüfung.
Testumgebung
| Element | Details |
|---|---|
| Editor | VS Code + GitHub Copilot (Agent Mode) |
| KI-Modell | Claude Opus 4.6 |
| Browsersteuerung | In VS Code integrierte Playwright-Tools |
| Testobjekt | Statische Website gebaut mit Astro + UnoCSS + Cloudflare Pages |
| Vorschau | npm run preview (lokal) + Produktions-URL |
Im Agent Mode führt Copilot selbstständig Terminal-Befehle aus, liest/schreibt Dateien und steuert den Browser. Der Tester gibt lediglich die Anweisung „bitte testen”, und die KI führt den gesamten nachfolgenden Prozess automatisch aus.
Phase 1: Bestandsaufnahme der Testziele
Vollständiges Lesen des Quellcodes
Die KI scannt zunächst die Verzeichnisstruktur des Projekts und liest den gesamten Quellcode aller Komponenten, Seiten und Hilfsfunktionen.
src/
├── components/ ← Alle 28 Komponenten gelesen
├── content/blog/ ← Frontmatter von 16 Artikeln analysiert
├── pages/ ← Alle Routing-Dateien identifiziert
├── layouts/ ← BaseLayout-Struktur verstanden
└── utils/ ← rehype-Plugins & OG-Bildgenerierung geprüft
In dieser Phase identifiziert die KI automatisch:
- Vollständige Routenliste: 7 statische Seiten + Blog-bezogene Routen (Artikel, Tags, Archiv, Autoren, Paginierung)
- Interaktive Elemente: Such-Modal, FAQ-Toggles, Kopier-Buttons, YouTube-Fassade, Scroll-nach-oben, Hero-Slider
- Externe Integrationen: ssgform.com (Formulare), Cloudflare Turnstile (Bot-Schutz), Google AdSense, GA4
Automatische Testplan-Erstellung
Aus den Analyseergebnissen des Quellcodes generiert die KI automatisch einen Testplan als Todo-Liste. Menschen müssen keine Checklisten erstellen.
Phase 2: Vollständiges Routen-Crawl-Testing
HTTP-Status-Überprüfung
Die gebaute Website wird mit npm run preview gestartet, und Playwright greift auf alle Routen zu.
Testziele: 31 Routen
├── Statische Seiten 7 (/, /about/, /services/, etc.)
├── Blog-Beiträge 16
├── Tag-Seiten 24
├── Archiv 4
├── Paginierung 2 (/blog/page/2/, /blog/page/3/)
├── Autorenseiten 2
├── RSS 1
└── 404-Test 1
Ergebnis: Alle Routen 200 OK (außer beabsichtigter 404)
DOM-Strukturprüfung
Folgendes wird auf jeder Seite automatisch überprüft:
| Prüfpunkt | Überprüfungsmethode | Ergebnis |
|---|---|---|
| Fehlerhafte Bilder | img.complete && img.naturalWidth === 0 | 0 gefunden |
| Leere Links | href ist leer, # oder nicht gesetzt | 0 gefunden |
| Unsichere externe Links | target="_blank" ohne rel="noopener" | 0 gefunden |
| H1-Anzahl | document.querySelectorAll('h1').length === 1 | Alle Seiten OK |
| Skip-Link | Vorhandensein von „Zum Inhalt springen” | Alle Seiten OK |
| lang-Attribut | html[lang="ja"] | Alle Seiten OK |
Dead-Link-Prüfung
Interne Links wurden rekursiv von der Einstiegsseite gesammelt und die Erreichbarkeit aller 55 eindeutigen URLs bestätigt. 0 tote Links wurden gefunden.
Phase 3: Interaktionsüberprüfung
Die KI manipuliert Browserelemente direkt mit Playwright, um JavaScript-gesteuerte Funktionalität zu überprüfen.
FAQ (<details>-Elemente)
// Beispiel-Testcode, der von der KI ausgeführt wird
const details = document.querySelectorAll('details');
// Anfangszustand: alle geschlossen → OK
// Klicken zum Öffnen → OK
// Erneut klicken zum Schließen → OK
Such-Modal (Pagefind)
- Such-Dialog mit
window.openSearch()öffnen - Warten, bis die Pagefind-UI vollständig geladen ist
- „Astro” eingeben und bestätigen, dass Suchergebnisse angezeigt werden
- Schließen mit ESC-Taste bestätigen
YouTube-Fassaden-Muster
- Das
.yt-facade-Element anklicken - Bestätigen, dass ein iframe für
youtube-nocookie.com/embed/dynamisch generiert wird - Bestätigen, dass der
autoplay=1-Parameter enthalten ist
Kopier-Button (nach View Transitions)
Bestätigt, dass Kopier-Buttons für Code-Blöcke nach Seitenübergängen via View Transitions neu initialisiert werden und funktionieren. Die Neuregistrierung über das astro:page-load-Event funktionierte korrekt.
ScrollToTop-Button
Zum Seitenende scrollen → Button erscheint → klicken → bestätigen, dass window.scrollY auf 0 zurückkehrt.
Phase 4: SEO- & Strukturierte-Daten-Audit
OGP-Meta-Tags
Folgendes wurde auf allen Seiten überprüft:
og:title/og:description/og:image/og:url/og:typesind gesetzttwitter:cardist aufsummary_large_imagegesetztcanonical-URL ist korrekt- OG-Bild-URL existiert und hat die empfohlene Größe (1200×630)
Strukturierte Daten (JSON-LD)
JSON-LD auf jeder Seite wurde geparst, um Schema-Typen und Inhalte zu überprüfen.
| Seitentyp | Strukturierte Daten |
|---|---|
| Alle Seiten | Organization, WebSite |
| Blog-Beiträge | BreadcrumbList, BlogPosting, FAQPage |
| Artikel mit FAQ | FAQPage (mainEntity enthält Fragen und Antworten) |
Sitemap
Bestätigt, dass sitemap-index.xml → sitemap-0.xml alle 57 URLs enthält. Die Sitemap-Referenz aus robots.txt funktionierte ebenfalls korrekt.
Phase 5: Barrierefreiheits-Überprüfung
AXE-Engine-äquivalente Prüfungen wurden via Playwright auf mehreren Seiten durchgeführt.
| Prüfpunkt | Getestete Seiten | Verstöße |
|---|---|---|
| img alt-Attribute | 4 | 0 |
| Button-Labels | 4 | 0 |
| Überschriftenhierarchie (h1→h2→h3 Reihenfolge) | 4 | 0 |
| Formular-Input-Labels | 1 (Kontakt) | 0 |
| Landmark-Elemente | 4 | 0 |
| Externe Link rel-Attribute | 4 | 0 |
| tabindex-Werte | 4 | 0 |
Keine Verstöße auf allen 4 Seiten und allen Prüfpunkten.
Phase 6: View-Transitions-Navigationstests
Bei Astro View Transitions wird das DOM differenziell aktualisiert, was die JavaScript-Neuinitialisierung zur Herausforderung macht. Folgende Übergangsmuster wurden überprüft:
Startseite → Blog-Liste → Artikel → Tag → Autor → Kontakt → Dienstleistungen → Startseite
Nach jedem Übergang bestätigte Punkte:
- URL, Titel und H1 werden korrekt aktualisiert
- Such-Button funktioniert
- Kopier-Buttons werden neu initialisiert
- Breadcrumb-Navigation wird aktualisiert
- Keine JS-Fehler
Phase 7: Sicherheitsheader-Überprüfung
Überprüfung der Antwort-Header auf der Produktions-Website:
| Header | Wert | Bewertung |
|---|---|---|
| Content-Security-Policy | Vollständig konfiguriert | ◎ |
| X-Frame-Options | SAMEORIGIN | ◎ |
| X-Content-Type-Options | nosniff | ◎ |
| Strict-Transport-Security | max-age=15552000 | ○ |
| Referrer-Policy | strict-origin-when-cross-origin | ◎ |
| Permissions-Policy | geolocation=(), camera=(), etc. | ◎ |
Entdeckte Fehler und Korrekturen
Diese Testsitzung deckte 2 Fehler auf, die beide in derselben Sitzung behoben wurden.
Fehler 1: Fehlende Resilienz beim Such-Modal
Symptom: Wird der Such-Button gedrückt, bevor das Pagefind-Skript vollständig geladen ist, reagiert die Oberfläche nicht mehr.
Ursache: loadPagefindScript() hatte keinen Retry-Mechanismus nach einem anfänglichen Fehler.
Behebung: Implementierung des Löschens des Promise-Caches bei Fehler und Anzeige eines „Neu laden”-Buttons als Fallback-UI.
Fehler 2: Fehlende Google-Ursprünge im CSP-Header
Symptom: Google AdSense-bezogene Ressourcen werden durch CSP blockiert, was Konsolenfehler verursacht.
Ursache: connect-src und frame-src enthielten nicht https://www.google.com / https://www.google.co.jp.
Behebung: Hinzufügen der Google-bezogenen Ursprünge zu den CSP-Direktiven in public/_headers.
Systematisierung der Testmethodik
Wenn man diesen KI-Monkey-Testing-Ansatz organisiert, lässt er sich in folgende Schichten einteilen:
Schicht 1: Statische Analyse (Quellcode lesen)
- Verzeichnisstruktur scannen
- Komponentenabhängigkeiten kartieren
- Frontmatter-Schema (Zod) analysieren
- CSP- und Weiterleitungskonfiguration prüfen
Schicht 2: HTTP-Schicht-Tests (vollständiges Routen-Crawling)
- Statuscode-Überprüfung (200/404/301)
- Antwort-Header-Audit (Sicherheit, Cache)
- Konsistenz von Sitemap, robots.txt, ads.txt
Schicht 3: DOM-Schicht-Tests (Strukturüberprüfung)
- Fehlerhafte Bilder, leere Links, unsichere externe Links
So führen Sie KI-Monkey-Testing durch
Bestandsaufnahme
Gesamten Quellcode lesen, um Routen, Komponenten und zu testende Interaktionen zu identifizieren.
Crawl-Testing
HTTP-Anfragen an alle Routen senden und Statuscodes, fehlerhafte Bilder und leere Links erkennen.
Interaktionsüberprüfung
JS-gesteuerte Elemente wie FAQ-Toggles, Kopier-Buttons, Such-Modals und YouTube-Embeds testen.
Struktur- & SEO-Audit
Strukturierte Daten, OGP, Meta-Tags, Überschriftenhierarchie und Barrierefreiheit auf allen Seiten überprüfen.
- Jede Seite einzeln visuell im Browser prüfen
- Checklisten manuell erstellen und verwalten
- Anfällig für Übersehen und vergessene Prüfungen
- Die Dokumentation von Reproduktionsschritten ist zeitaufwändig
- Automatisches Crawlen aller Routen zur Überprüfung von HTTP-Status und DOM-Struktur
- KI extrahiert Testziele automatisch aus dem Quellcode
- Lückenlose Erkennung von fehlerhaften Bildern, leeren Links und JS-Fehlern
- Entdeckung → Ursachenanalyse → Behebung → erneuter Test – alles in einer einzigen Sitzung
Ist der GitHub Copilot Agent Mode kostenlos nutzbar?
Kann der gleiche Ansatz mit anderen Browser-Tools als Playwright verwendet werden?
Kann dies auch auf nicht-statische Websites angewendet werden?
Kann die KI entdeckte Fehler auch selbst beheben?
Gui
CEO von Acecore. Ein vielseitiger Ingenieur, der Systementwicklung, Webproduktion, Infrastrukturbetrieb und IT-Bildung abdeckt. Löst gerne organisatorische und menschliche Herausforderungen durch Technologie.
Want to learn more about our services?
We provide comprehensive support including system development, web design, graphic design, and IT education.