xpath axes dynamic xpath selenium webdriver
In diesem Tutorial werden XPath-Achsen für dynamisches XPath in Selenium WebDriver anhand verschiedener verwendeter XPath-Achsen, Beispiele und Erläuterungen zur Struktur erläutert:
Im vorherigen Tutorial haben wir die XPath-Funktionen und ihre Bedeutung für die Identifizierung des Elements kennengelernt. Wenn jedoch mehr als ein Element eine zu ähnliche Ausrichtung und Nomenklatur aufweist, ist es unmöglich, das Element eindeutig zu identifizieren.
konvertiere youtube in mp4 hoher qualität
=> Lesen Sie hier den Perfect Selenium Training Guide.
Was du lernen wirst:
Grundlegendes zu XPath-Achsen
Lassen Sie uns das oben erwähnte Szenario anhand eines Beispiels verstehen.
Stellen Sie sich ein Szenario vor, in dem zwei Links mit dem Text „Bearbeiten“ verwendet werden. In solchen Fällen ist es wichtig, die Knotenstruktur des HTML zu verstehen.
Bitte kopieren Sie den folgenden Code, fügen Sie ihn in den Editor ein und speichern Sie ihn als .htm-Datei.
Edit Edit
Die Benutzeroberfläche sieht wie folgt aus:
Problemstellung
F # 1) Was tun, wenn selbst XPath-Funktionen das Element nicht identifizieren können?
Antworten: In einem solchen Fall verwenden wir die XPath-Achsen zusammen mit den XPath-Funktionen.
Der zweite Teil dieses Artikels befasst sich mit der Verwendung des hierarchischen HTML-Formats zur Identifizierung des Elements. Wir werden zunächst ein paar Informationen zu den XPath-Achsen erhalten.
F # 2) Was sind XPath-Achsen?
Antworten: Eine XPath-Achse definiert den Knotensatz relativ zum aktuellen (Kontext-) Knoten. Es wird verwendet, um den Knoten zu lokalisieren, der relativ zum Knoten in diesem Baum ist.
F # 3) Was ist ein Kontextknoten?
Antworten: Ein Kontextknoten kann als der Knoten definiert werden, den der XPath-Prozessor gerade betrachtet.
Verschiedene XPath-Achsen für Selentests
Es gibt dreizehn verschiedene Achsen, die unten aufgeführt sind. Wir werden jedoch nicht alle während der Selentests verwenden.
- Vorfahr : Diese Achse zeigt alle Vorfahren relativ zum Kontextknoten an und reicht auch bis zum Wurzelknoten.
- Vorfahr oder Selbst: Dieser gibt den Kontextknoten und alle Vorfahren relativ zum Kontextknoten an und enthält den Wurzelknoten.
- Attribut: Dies gibt die Attribute des Kontextknotens an. Es kann mit dem Symbol „@“ dargestellt werden.
- Kind: Dies zeigt die untergeordneten Elemente des Kontextknotens an.
- nach unten: Dies zeigt die Kinder und Enkelkinder und ihre Kinder (falls vorhanden) des Kontextknotens an. Dies gibt NICHT das Attribut und den Namespace an.
- Nachkomme oder Selbst: Dies zeigt den Kontextknoten und die Kinder sowie Enkelkinder und ihre Kinder (falls vorhanden) des Kontextknotens an. Dies gibt NICHT das Attribut und den Namespace an.
- Folgendes: Dies zeigt alle Knoten an, die angezeigt werden nach dem der Kontextknoten in der HTML-DOM-Struktur. Dies zeigt NICHT Nachkommen, Attribute und Namespace an.
- folgendes Geschwister: Dieser gibt alle Geschwisterknoten an (dasselbe übergeordnete Element wie der Kontextknoten), die erscheinen nach dem Kontextknoten in der HTML-DOM-Struktur. Dies zeigt NICHT Nachkommen, Attribute und Namespace an.
- Namespace: Dies zeigt alle Namespace-Knoten des Kontextknotens an.
- Elternteil: Dies gibt das übergeordnete Element des Kontextknotens an.
- vorhergehend: Dies zeigt alle Knoten an, die angezeigt werden Vor der Kontextknoten in der HTML-DOM-Struktur. Dies zeigt NICHT Nachkommen, Attribute und Namespace an.
- Vorgeschwister: Dieser gibt alle Geschwisterknoten an (dasselbe übergeordnete Element wie der Kontextknoten), die angezeigt werden Vor der Kontextknoten in der HTML-DOM-Struktur. Dies zeigt NICHT Nachkommen, Attribute und Namespace an.
- selbst: Dieser gibt den Kontextknoten an.
Struktur der XPath-Achsen
Betrachten Sie die folgende Hierarchie, um zu verstehen, wie die XPath-Achsen funktionieren.
Im folgenden Beispiel finden Sie einen einfachen HTML-Code. Bitte kopieren Sie den folgenden Code in den Editor und speichern Sie ihn als HTML-Datei.
Animal
Vertebrate
Fish
Mammal
Herbivore
Carnivore
Lion
Tiger
Other
Invertebrate
Insect
Crustacean
Die Seite sieht wie folgt aus. Unsere Mission ist es, die XPath-Achsen zu nutzen, um die Elemente eindeutig zu finden. Versuchen wir, die Elemente zu identifizieren, die in der obigen Tabelle markiert sind. Der Kontextknoten ist 'Säugetier'
# 1) Vorfahr
Tagebuch: Identifizieren des Vorfahrenelements aus dem Kontextknoten.
XPath # 1: // div (@ class = ’Mammal’) / ancestor :: div
Der XPath '// div (@ class =’ Mammal ’) / ancestor :: div' wirft zwei übereinstimmende Knoten:
- Wirbeltier, da es das Elternteil von „Mammal“ ist, wird es daher auch als Vorfahr betrachtet.
- Tier als Elternteil des Elternteils von „Mammal“, daher gilt es als Vorfahr.
Jetzt müssen wir nur noch ein Element identifizieren, das die Klasse 'Tier' ist. Wir können den XPath wie unten erwähnt verwenden.
XPath#2: //div(@class='Mammal')/ancestor::div(@class='Animal')
Wenn Sie den Text 'Tier' erreichen möchten, kann unter XPath verwendet werden.
# 2) Vorfahr oder Selbst
Tagebuch: Identifizieren des Kontextknotens und des Vorfahrenelements aus dem Kontextknoten.
XPath # 1: // div (@ class = ’Mammal’) / ancestor-or-self :: div
Der obige XPath # 1 wirft drei übereinstimmende Knoten:
- Tier (Vorfahr)
- Wirbeltier
- Säugetier (Selbst)
# 3) Kind
Tagebuch: Um das Kind des Kontextknotens 'Mammal' zu identifizieren.
XPath # 1: // div (@ class = ’Mammal’) / child :: div
XPath # 1 hilft bei der Identifizierung aller untergeordneten Elemente des Kontextknotens „Mammal“. Wenn Sie das spezifische untergeordnete Element erhalten möchten, verwenden Sie bitte XPath # 2.
XPath # 2: // div (@ class = ’Mammal’) / child :: div (@ class = ’Herbivore’) / h5
# 4) Nachkomme
Tagebuch: Identifizieren der Kinder und Enkelkinder des Kontextknotens (z. B. „Tier“).
XPath # 1: // div (@ class = ’Animal’) / Nachkomme :: div
Da Animal das oberste Mitglied in der Hierarchie ist, werden alle untergeordneten und untergeordneten Elemente hervorgehoben. Wir können auch den Kontextknoten für unsere Referenz ändern und jedes gewünschte Element als Knoten verwenden.
# 5) Nachkomme oder Selbst
Tagebuch: Das Element selbst und seine Nachkommen finden.
XPath1: // div (@ class = ’Animal’) / Nachkomme-oder-Selbst :: div
Der einzige Unterschied zwischen Nachkommen und Nachkommen oder Selbst besteht darin, dass es sich selbst zusätzlich zur Hervorhebung der Nachkommen hervorhebt.
# 6) Folgen
Tagebuch: So finden Sie alle Knoten, die dem Kontextknoten folgen. Hier ist der Kontextknoten das div, das das Mammal-Element enthält.
XPath: // div (@ class = ’Mammal’) / folgendes :: div
In den folgenden Achsen werden alle Knoten hervorgehoben, die dem Kontextknoten folgen, sei es das Kind oder der Nachkomme.
# 7) Nachgeschwister
Tagebuch: So finden Sie alle Knoten nach dem Kontextknoten, die dasselbe übergeordnete Element haben und Geschwister des Kontextknotens sind.
XPath: // div (@ class = ’Mammal’) / folgendes Geschwister :: div
Der Hauptunterschied zwischen dem folgenden und dem folgenden Geschwister besteht darin, dass das folgende Geschwister alle Geschwisterknoten nach dem Kontext nimmt, aber auch dasselbe übergeordnete Element verwendet.
# 8) Vorhergehend
Tagebuch: Es werden alle Knoten benötigt, die vor dem Kontextknoten stehen. Dies kann der übergeordnete oder der übergeordnete Knoten sein.
Hier ist der Kontextknoten Wirbelloses Tier, und hervorgehobene Linien im obigen Bild sind alle Knoten, die vor dem Wirbellosen Knoten stehen.
# 9) Vorheriges Geschwister
Tagebuch: So finden Sie das Geschwister, das dasselbe übergeordnete Element wie der Kontextknoten hat und das vor dem Kontextknoten steht.
Da der Kontextknoten das Wirbellose ist, wird nur das Wirbeltier hervorgehoben, da diese beiden Geschwister sind und dasselbe übergeordnete „Tier“ haben.
# 10) Eltern
Tagebuch: So finden Sie das übergeordnete Element des Kontextknotens. Wenn der Kontextknoten selbst ein Vorfahr ist, hat er keinen übergeordneten Knoten und würde keine übereinstimmenden Knoten abrufen.
Kontextknoten Nr. 1: Säugetier
XPath: // div (@ class = ’Mammal’) / parent :: div
Da der Kontextknoten Mammal ist, wird das Element mit Vertebrate hervorgehoben, da dies das übergeordnete Element des Mammal ist.
Kontextknoten Nr. 2: Tier
XPath: // div (@ class = ’Animal’) / parent :: div
Da der Tierknoten selbst der Vorfahr ist, werden keine Knoten hervorgehoben, und daher wurden keine übereinstimmenden Knoten gefunden.
# 11) Selbst
Tagebuch: Um den Kontextknoten zu finden, wird das Selbst verwendet.
Kontextknoten: Säugetier
XPath: // div (@ class = ’Mammal’) / self :: div
Wie wir oben sehen können, wurde das Säugetierobjekt eindeutig identifiziert. Wir können auch den Text „Säugetier“ auswählen, indem wir den folgenden XPath verwenden.
XPath: // div (@ class = ’Mammal’) / self :: div / h4
Verwendung von vorhergehenden und folgenden Achsen
Angenommen, Sie wissen, dass Ihr Zielelement die Anzahl der Tags vor oder zurück vom Kontextknoten ist, können Sie dieses Element und nicht alle Elemente direkt hervorheben.
Beispiel: Vorhergehend (mit Index)
Nehmen wir an, unser Kontextknoten ist 'Andere' und wir möchten das Element 'Säugetier' erreichen. Dazu verwenden wir den folgenden Ansatz.
Erster Schritt: Verwenden Sie einfach das Vorhergehende, ohne einen Indexwert anzugeben.
XPath: // div (@ class = ’Other’) / vorangestellt :: div
Dies gibt uns 6 passende Knoten und wir wollen nur einen Zielknoten 'Mammal'.
Zweiter Schritt: Geben Sie dem div-Element den Indexwert (5) (indem Sie vom Kontextknoten nach oben zählen).
XPath: // div (@ class = ’Other’) / vorangestellt :: div (5)
Auf diese Weise wurde das Element „Säugetier“ erfolgreich identifiziert.
Beispiel: folgend (mit Index)
Nehmen wir an, unser Kontextknoten ist 'Mammal' und wir möchten das Element 'Crustacean' erreichen. Dazu verwenden wir den folgenden Ansatz.
Erster Schritt: Verwenden Sie einfach Folgendes, ohne einen Indexwert anzugeben.
XPath: // div (@ class = ’Mammal’) / folgendes :: div
Dies gibt uns 4 passende Knoten und wir wollen nur einen Zielknoten 'Crustacean'
Zweiter Schritt: Geben Sie dem div-Element den Indexwert (4) (vom Kontextknoten vorauszählen).
XPath: // div (@ class = ’Other’) / folgend :: div (4)
Auf diese Weise wurde das Element „Crustacean“ erfolgreich identifiziert.
Das obige Szenario kann auch mit neu erstellt werden Vorgeschwister und Folgeschwister durch Anwendung des obigen Ansatzes.
Fazit
Die Objektidentifikation ist der wichtigste Schritt bei der Automatisierung einer Website. Wenn Sie die Fähigkeit erwerben, das Objekt genau zu lernen, sind 50% Ihrer Automatisierung abgeschlossen. Während Locators zur Identifizierung des Elements verfügbar sind, gibt es einige Fälle, in denen selbst die Locators das Objekt nicht identifizieren können. In solchen Fällen müssen wir unterschiedliche Ansätze anwenden.
Hier haben wir XPath-Funktionen und XPath-Achsen verwendet, um das Element eindeutig zu identifizieren.
Wir schließen diesen Artikel mit einigen Punkten, die Sie beachten sollten:
- Sie sollten keine 'Vorfahren' -Achsen auf den Kontextknoten anwenden. Der Kontextknoten selbst ist der Vorfahr.
- Sie sollten keine 'übergeordneten' Achsen auf den Kontextknoten anwenden, da der Kontextknoten selbst der Vorfahr ist.
- Sie sollten keine 'untergeordneten' Achsen auf den Kontextknoten anwenden, da der Kontextknoten selbst der Nachkomme ist.
- Sie sollten keine 'Nachkommen' -Achsen auf den Kontextknoten anwenden, da der Kontextknoten selbst der Vorfahr ist.
- Sie sollten keine 'folgenden' Achsen auf den Kontextknoten anwenden, da dies der letzte Knoten in der HTML-Dokumentstruktur ist.
- Sie sollten keine 'vorhergehenden' Achsen auf den Kontextknoten anwenden, da dies der erste Knoten in der HTML-Dokumentstruktur ist.
Viel Spaß beim Lernen !!!
=> Besuchen Sie hier für die exklusive Selenium Training Tutorial-Reihe.
Literatur-Empfehlungen
- XPath-Funktionen für dynamisches XPath in Selen
- Cucumber Selenium Tutorial: Integration von Cucumber Java Selenium WebDriver
- Selen-Locators: Identifizieren von Webelementen mithilfe von XPath in Selen (Beispiele)
- Einführung in Selenium WebDriver - Selenium Tutorial # 8
- ChromeDriver Selenium Tutorial: Selenium Webdriver-Tests auf Chrome
- Implementierung unseres ersten WebDriver-Skripts - Selenium WebDriver Tutorial # 10
- 30+ beste Selen-Tutorials: Lernen Sie Selen anhand realer Beispiele
- Umgang mit Webtabellen, Frames und dynamischen Elementen in Selenium Script - Selenium Tutorial # 18