Umsetzung

Wie Fenster/Container als Kontext gesetzt werden und wie Kindobjekte relativ gesucht werden.

Heilige Dreifaltigkeit (Orientierung): 👤 Abstrakter Bezeichner · ✨ Konkreter Lokator (Fleischwerdung) · 🛠️ Widget/Adapter (Interaktion)


Idee

Kontext-Scoping bedeutet: 👉 Ein Fenster/Dialog/Container wird als Suchkontext gesetzt – und alle Kindobjekte werden relativ gesucht.

Dadurch muss die Fenster-ID nicht in jedem Kind-Locator wiederholt werden. Das spart Redundanz und macht die Tests stabiler (DRY).


Schritt 1 – Fenster wählen

Robot Framework Beispiel:

Select Window    customer.search
  • Sucht das Fenster mit data-testid="customer.search.window".

  • Speichert dieses Element als aktuellen Kontext.


Schritt 2 – Relativ suchen

Alle Kindobjekte werden im Kontext des Fensters gefunden:

.//*[@data-testid="customer.search.field"]
.//*[@data-testid="customer.search.submit"]

Das führende . bedeutet: „suche relativ zum aktuellen Kontext“ (Fenster) statt im gesamten DOM.


Schritt 3 – Umsetzung im Adapter

Python-Beispiel (Selenium-Style):

ctx = None

def select_window(window_id):
    global ctx
    ctx = driver.find_element(By.CSS_SELECTOR, f'[data-testid="{window_id}"]')

def in_window_click(child_id):
    element = ctx.find_element(By.CSS_SELECTOR, f'[data-testid="{child_id}"]')
    element.click()

Robot-Keywords könnten dann heißen:

Select Window        customer.search
Click In Window      submit
Set Value In Window  field    Anna

Warum ist das DRY?

  • Fenster-Locator (customer.search.window) steht nur einmal.

  • Kind-Lokatoren (field, submit) enthalten keinen duplizierten Fensterteil.

  • Änderungen am Fenster → nur eine Stelle in der Registry anpassen.


Anti-Patterns

❌ Fenster-Locator in jedem Kind duplizieren:

//*[@data-testid="customer.search.window"]//*[@data-testid="customer.search.field"]

❌ Ohne Kontext global suchen:

//*[@data-testid="customer.search.field"]

→ Kann bei mehreren Fenstern zum falschen Element führen.


Zusammenfassung

  • Select Window setzt den Suchkontext.

  • .//-Notation sorgt für relative Suche.

  • Adapter implementiert das Kontext-Handling.

  • Ergebnis: einmal Fenster, viele Kinder → DRY bleibt gewahrt.

Zuletzt aktualisiert