UI/UX Testing-Tool für den Europa-Park KI-Chatbot (mAIstack).
- Python 3.9+
- Node.js (für AXE MCP Server, optional)
# Virtuelle Umgebung erstellen und aktivieren
python3 -m venv .venv
source .venv/bin/activate
# Dependencies installieren
pip install playwright pytest pytest-playwright axe-playwright-python pyyaml python-dotenv jinja2 flask
# Playwright-Browser installieren
playwright install chromium
# Konfiguration anlegen
cp .env.example .env
cp config/prompts.example.yaml config/prompts.yamlTrage die URLs eurer Chatbot-Umgebungen ein:
environments:
dev:
url: "https://dev-chatbot.europapark.example.com"
staging:
url: "https://staging-chatbot.europapark.example.com"
prod:
url: "https://chatbot.europapark.de"
default: devpython run.py --discover --env devDie erkannten Selektoren werden in config/selectors.yaml gespeichert.
Bei Bedarf manuell anpassen.
Trage die CI-Werte des getesteten Produkts ein, sobald bekannt:
brand:
colors:
primary: "#244369"
accent: "#ee353a"
fonts:
primary: "Source Sans Pro"Nicht gesetzte Werte (null) führen dazu, dass der jeweilige Test übersprungen
wird — nicht dazu, dass er fehlschlägt.
Welche Fragen der Chatbot beantworten soll und welche Begriffe in der Antwort vorkommen müssen, steht nicht im Testcode, sondern in dieser Datei. Damit läuft das Werkzeug gegen jeden Chatbot, ohne dass Tests angepasst werden müssen.
cp config/prompts.example.yaml config/prompts.yamlDie Vorlage dokumentiert alle Felder und bringt die domänenfreien Fälle (Begrüßung, Sonderzeichen, HTML-Injection, Schnellfeuer) fertig vorbelegt mit. Einzutragen sind die fachlichen Fragen:
prompts:
domain_knowledge:
opening_hours:
prompt: "Wann habt ihr geöffnet?"
expect_any: ["uhr", "geöffnet", "montag"]Jeder Eintrag unter domain_knowledge und off_topic wird zu einem eigenen
Testfall — beliebig viele, ohne Codeänderung. Fehlt ein Eintrag, überspringt
sich der zugehörige Test. Ein Lauf ohne prompts.yaml prüft also nur die
domänenfreien Fälle und ist trotzdem grün.
config/prompts.yaml ist bewusst nicht versioniert: die Fragen beschreiben
das getestete Produkt, nicht das Testwerkzeug.
# Web-Dashboard starten
python app.pyÖffne http://localhost:5000 im Browser. Das Dashboard bietet:
- Umgebung und Testsuite per Dropdown wählen
- Tests per Klick starten mit Live-Ergebnissen
- Selektor-Discovery direkt im Browser
- Reports und Screenshots ansehen
# Alle Tests ausführen
python run.py
# Spezifische Umgebung
python run.py --env staging
# Nur eine Testsuite
python run.py --suite ui # UI-Konsistenz
python run.py --suite ux # UX-Flows
python run.py --suite a11y # Accessibility
# Browser sichtbar (nicht headless)
python run.py --headed
# Umgebungen anzeigen
python run.py --list-envs
# CSS-Selektoren erkennen
python run.py --discover- Layout und Dimensionen des Chat-Widgets
- Branding: Farben, Fonts, Logo
- Responsive Darstellung (Desktop, Tablet, Mobile)
- Automatische Screenshots
- Begrüßungsnachricht
- Gesprächsverläufe und Folgefragen
- Fehlerbehandlung (leere Eingabe, Sonderzeichen, XSS)
- Antwortzeiten und Performance
- WCAG 2.1 AA Audit (via axe-core)
- Tastaturnavigation
- ARIA-Labels und Fokus-Management
- Farbkontraste
Nach jedem Testlauf wird ein Markdown-Bericht in reports/ generiert mit:
- Automatischen Testergebnissen als Checkliste
- Manuellen Prüfpunkten zum Abhaken
- Verweisen auf Screenshots in
screenshots/
Für tiefgehende, KI-gestützte Accessibility-Analysen kann zusätzlich der AXE MCP Server in Claude Code genutzt werden.
Setup-Anleitung: config/mcp_axe_setup.md
EP-Testing_Tool/
├── app.py # Web-Frontend (Flask)
├── run.py # CLI-Einstiegspunkt
├── conftest.py # pytest Fixtures
├── config/ # Konfigurationsdateien
├── tests/
│ ├── ui/ # UI-Tests
│ ├── ux/ # UX-Tests
│ └── a11y/ # Accessibility-Tests
├── utils/ # Hilfsfunktionen
├── templates/
│ ├── web/ # HTML-Templates (Frontend)
│ └── *.md.j2 # Report-Templates
├── static/ # CSS & JS für Frontend
├── reports/ # Generierte Berichte
└── screenshots/ # Aufgenommene Screenshots