Testfälle ohne technische Verschmutzung
Warum fachliche Testfälle frei von Technik bleiben müssen – und wie wir das konsequent umsetzen.
Grundsatz: Ein Testfall beschreibt fachliches Verhalten in Fachsprache – mit abstrakten Schlüsselwörtern und abstrakten Lokatoren. Technische Problemlösungen (Warten, Synchronisation, wilde Selektoren, Treiber-APIs, Programmierlogik) haben im Testfall nichts zu suchen.
Zielbild (kurz)
Lesbar für Fachtester:innen
Wiederverwendbar und DRY
Wartungsarm, weil Technik zentral gekapselt ist (Bibliothek/Adapter)
Was nicht in den Testfall gehört (No-Gos)
Harte Wartezeiten
Warte 5s
, Sleep 5000
Fragil, verlangsamt Runs, maskiert echte Timing-Probleme.
Synchronisationscode
Polling-Schleifen, Retry-Basteleien, Wait Until Element Is Visible
als Pflaster
Sync gehört zentral in die Keyword-Bibliothek/Adapter.
Wilde/konkrete Lokatoren
xpath=//div[3]/span[2]
, .app > :nth-child(7)
Unlesbar & instabil; ersetze durch funktionale Namen mit Mapping.
Programmierlogik
if/else
, Schleifen, Regex-Flows, Variablen-Akrobatik
Vermischt Fachlogik mit Technik; erschwert Review & Wartung.
Treiber-/Framework-Aufrufe
WebDriver-Calls, HTTP-Clients, Java/Python im Test
Bricht Abstraktion; gehört in Adapter/Library – nicht in fachliche Skripte.
Diese Punkte sind technische Probleme (Timing, Stabilität, Identifikation) und gehören hinter die Keyword-Schnittstelle.
Was in den Testfall gehört
Domänen-Keywords
Open Application
,
Select Menu
,
Set Value
,
Click
,
Verify Value
Beschreiben Was passiert (Intent), nicht Wie.
Abstrakte Lokatoren
Destination
,
Status Message
,
New Expense Report
Benennen Was adressiert wird (funktionaler Name), Technik bleibt verborgen.
Fachliche Orchestrierung
Schrittfolge des Geschäftsprozesses
Klare, lesbare Abläufe statt Technik-Gerümpel.
Geschäftliche Checks
Verify Value Status Message Expense report saved
Prüfen Outcome, nicht Implementierungsschritte.
Heilige Dreifaltigkeit (Was–Wie–Tut)
Was: Abstrakter Lokator (funktionaler Name) – z. B.
"Destination"
.Tut: Abstraktes Schlüsselwort (Intent) – z. B.
Set Value
,Click
,Verify Value
,Select Menu
.Wie: Bibliothek/Adapter löst die Technik – Mapping zu konkreten Selektoren, Smart-Waits, Retries, Scrolling, Fehlerbilder.
→ Alles Technische passiert hinter der Keyword-Schnittstelle.
Beispiel: vorher → nachher
Vorher (verschmutzt):
*** Test Cases ***
Anti-Pattern Example (Dirty)
Sleep 5s
Click Element xpath=//div[3]/span[2]
Wait Until Element Is Visible css=.toast-success 10s
Run Keyword If '${status}' == 'OK' Log Ready
Nachher (sauber):
*** Test Cases ***
Create New Expense Report (Clean)
[Documentation] Domain-level steps only; all technical handling is inside keywords.
Open Application Travel Expenses
Select Menu New Expense Report
Set Value Travel Date 2025-05-12
Set Value Destination Berlin
Click Save
Verify Value Status Message Expense report saved
Hinweis: Click New Expense Report
kann je nach Locator-Kategorie intern auf Menu-Logik routen. Für Fachtester ist Select Menu New Expense Report
oft noch klarer.
Lokator-Map (Beispiel, abstrakt → konkret)
TravelExpenses:
__self__:
class: okw4robot_web.gui.web.widgets.PageRoot
locator: { css: '[data-testid="expenses-page"]' }
# Menüeintrag mit Pfad (Sonderrolle: Menu)
New Expense Report:
class: okw4robot_web.gui.web.widgets.MenuItem
path: ["File", "New", "Expense Report"]
reveal: hover_or_click
# Felder
Travel Date:
class: okw4robot_web.gui.web.widgets.TextField
locator: { css: "#travelDate" }
Destination:
class: okw4robot_web.gui.web.widgets.TextField
locator: { css: "#destination" }
# Aktionen / Status
Save:
class: okw4robot_web.gui.web.widgets.Button
locator: { css: "button.save" }
Status Message:
class: okw4robot_web.gui.web.widgets.Label
locator: { css: "#status" }
Die Bibliothek liest diese Map, löst die funktionalen Namen auf und kümmert sich um Sichtbarkeit, Scroll, Retry, etc.
Definition of Done (Do/Don’t)
Don’t
❌
Sleep
,Wait Until Element Is ...
im Testfall❌
xpath=
,css=
,id=
im Testfall❌ Treiber-/HTTP-Aufrufe oder Programmiersprache im Testfall
Do
✅ Nur abstrakte Keywords & abstrakte Lokatoren
✅ Fachliche Schritte klar & knapp
✅ Technik (Sync, Stabilität, Selektoren) in Adapter/Bibliothek
Refactoring-Leitfaden (Bestand säubern)
Lokatoren extrahieren → funktionale Namen + zentrale Map.
Warte/Sync entfernen → Smart-Waits/Retry in Bibliothek kapseln.
Programmierlogik tilgen → domänenspezifische Keywords einführen, Datenvariation via Testdatenquelle.
Guardrails einziehen → Lint/CI blockiert No-Gos in
*.robot
.
Nutzen (warum sich die Disziplin lohnt)
Lesbarkeit: Fachtester verstehen Tests ohne Technik-Handbuch.
Wartbarkeit: Änderungen an UI/Timing betreffen primär den Adapter, nicht alle Tests.
Stabilität: Zentrale Sync-Strategien statt Flickenteppich.
DRY: Ein Ort für Selektoren & Technik – keine Wiederholungen in Tests.
Zuletzt aktualisiert