Zum Inhalt springen
SDETRole
SDETRole

Glossar · UI-Automatisierung

XPath

Auch genannt: XPath-Ausdruck, XPath Locator, XML Path Language, XPath-Selektor

Definition

Eine Abfragesprache zur Auswahl von Knoten in einem XML- oder HTML-Dokument, die in der UI-Automatisierung Elemente über Struktur, Attribute oder Text lokalisiert.

XPath (XML Path Language) beschreibt einen Pfad durch einen Dokumentbaum zu den gewünschten Knoten. In der Testautomatisierung ist es eine der Möglichkeiten, einen Locator zu schreiben. Sein Hauptvorteil gegenüber CSS: Es kann auf Textinhalt matchen und sich in jede Richtung bewegen, nach oben zu einem Elternelement, seitwärts zu einem Geschwisterelement oder nach unten zu einem Nachfahren. Browser implementieren XPath 1.0, daher stehen Funktionen aus späteren Versionen wie matches() oder lower-case() nicht zur Verfügung.

Beispiel

//button[normalize-space()='Sign in']
//input[@name='email']
//label[text()='Password']/following-sibling::input
//tr[td[normalize-space()='Order 1042']]//button[@aria-label='Cancel']
//a[contains(@href, '/invoices/')]

Die vierte Zeile zeigt, warum viele zu XPath greifen: Finde die Tabellenzeile, die eine bestimmte Zelle enthält, und dann den Button innerhalb dieser Zeile.

WebElement cancel = driver.findElement(
    By.xpath("//tr[td[normalize-space()='Order 1042']]//button[@aria-label='Cancel']"));

Absolut versus relativ

Ein absoluter XPath beginnt an der Wurzel (/html/body/div[2]/form/button) und bricht, sobald sich irgendein Wrapper ändert. Ein relativer XPath beginnt mit // und verankert sich an etwas Bedeutungsvollem. Wenn Sie in den DevTools den „vollständigen XPath“ kopieren, erhalten Sie die absolute Form, und die ist in einem Test fast nie das, was Sie wollen.

Häufige Fehler

  • Indexbasierte Pfade wie (//div)[7]. Sie bilden das Layout ab, nicht die Bedeutung.
  • text() bei Elementen mit verschachteltem Markup. //button[text()='Save'] schlägt fehl, wenn das Label in einem Kind-<span> steht. normalize-space() (oder .) verwendet stattdessen den vollständigen String-Wert.
  • Eine Klasse mit @class='btn' matchen. Das trifft nur, wenn btn der gesamte Attributwert ist. Verwenden Sie contains(concat(' ', normalize-space(@class), ' '), ' btn ') oder wechseln Sie zu CSS .btn.
  • Aus Gewohnheit standardmäßig XPath verwenden. In Playwright decken getByRole und getByText die meisten textbasierten Fälle ab und sind besser lesbar.

Tippen Sie, um SDETRole zu durchsuchen.

Volltextsuche mit Pagefind · läuft in Ihrem Browser Suchseite öffnen →