xpath functions dynamic xpath selenium
Dieses Tutorial erklärt die Verwendung von XPath-Funktionen bei der Identifizierung der Elemente anhand von Beispielen:
Vor der Automatisierung einer Website ist es erforderlich, das Objekt korrekt zu identifizieren, bevor wir eine Operation daran ausführen können. Wie wir wissen, können Sie das Element am einfachsten anhand von Attributen wie ID, Name, Link, Klasse oder anderen eindeutigen Attributen identifizieren, die mit dem Tag verfügbar sind, an dem sich das Element befindet.
Dies ist nur möglich, wenn diese Attribute vorhanden und / oder eindeutig sind, damit das Objekt korrekt identifiziert wird.
=> Schauen Sie sich hier den Selenium Beginners Guide an.
Was du lernen wirst:
Übersicht über die XPath-Funktionen
Lassen Sie uns das Szenario diskutieren, in dem die Attribute nicht ohne weiteres verfügbar sind.
Problemstellung
Wie identifizieren wir das Element, wenn die Locators wie ID, Name, Klasse, Link usw. im Element-Tag nicht verfügbar sind?
Dies kann anhand des gegebenen Beispiels klar verstanden werden:
Einloggen in Twitter
Wie Sie im obigen Screenshot sehen können, sind dem Header 'Bei Twitter anmelden' keine Attribute zugeordnet. Wir können jedoch keinen der Locators wie ID, Klasse, Link oder Name verwenden, um dieses Element zu identifizieren.
Der Algorithmus von dijkstra verwendet die Prioritätswarteschlange Java
Das Firepath-Plugin des Firefox-Tools hat den folgenden XPath generiert:
// * [@ id = ’Seitencontainer’] / div / div [1] / h1
Wir empfehlen nicht, den oben genannten XPath als Seitenstruktur oder ID zu verwenden, da er sich dynamisch ändern kann. Wenn wir diesen instabilen XPath verwenden, müssen wir den XPath möglicherweise häufiger ändern, was in der Wartung zeitaufwändiger ist. Dies ist ein Fall, in dem wir den generischen XPath-Ausdruck nicht mit Locatoren wie ID, Klasse, Name oder Link verwenden können.
Lösung
Identifizieren des Elements mithilfe der XPath-Funktionen anhand von Text
Da uns der sichtbare Text 'Bei Twitter anmelden' zur Verfügung steht, würden wir Folgendes verwenden XPath-Funktionen um das Element eindeutig zu identifizieren.
- enthält () [Nach Text]
- beginnt mit () [Nach Text]
- Text()
XPath-Funktionen wie enthält (), beginnt mit () und text (), wenn sie mit Hilfe des Textes „Bei Twitter anmelden“ verwendet werden, helfen uns, das Element korrekt zu identifizieren, und weitere Vorgänge können mit demselben Element ausgeführt werden.
# 1) Enthält () Methode:
Syntax: Verwenden Sie einen der folgenden XPath-Ausdrücke, die die Methode includes () enthalten, um das Webelement 'Bei Twitter anmelden' zu finden.
Nach Text
- // h1 [enthält (text (), ’Anmelden bei’)]
- // h1 [enthält (text (), ’in to Twitter’)]
Hinweis: 1 übereinstimmender Knoten zeigt an, dass das Webelement erfolgreich identifiziert wurde.
Aus dem obigen Beispiel geht hervor, dass die Methode includes () nicht den absoluten (Voll-) Text benötigt, um das Element korrekt zu identifizieren. Der Teiltext reicht aus, um ihn korrekt zu identifizieren. Der ausgewählte Teiltext sollte jedoch eindeutig sein. Der Benutzer kann das Element auch dann leicht identifizieren, wenn die Ausrichtung der Seite mithilfe der Methode includes () geändert wird.
Bitte beachten Sie, dass das Element auch dann korrekt identifiziert wird, wenn Sie den absoluten Text 'Bei Twitter anmelden' mit der Methode includes () verwenden.
# 2) Starts-with () -Methode:
Syntax: Verwenden Sie die folgenden XPath-Beispielausdrücke mit der Methode begin-with (), um das Webelement 'Bei Twitter anmelden' zu finden.
Nach Text
- // h1 [beginnt mit (text (), 'Anmelden')]
- // h1 [beginnt mit (text (), ’Anmelden bei’)]
Aus dem obigen Beispiel geht hervor, dass für die XPath-Funktionen begin-with () mindestens das erste Wort („Log“) des sichtbaren Textes erforderlich ist, um das Element eindeutig zu identifizieren. Es funktioniert auch mit dem Teiltext und schlägt fehl, wenn wir nicht das erste Wort des teilweise sichtbaren Textes einfügen.
Bitte beachten Sie, dass das Element auch dann korrekt identifiziert wird, wenn Sie den absoluten Text 'Bei Twitter anmelden' mit der Methode 'Starts-with ()' verwenden.
Ungültiger XPath für Starts mit (): // h1 [beginnt mit (text (), ’in to Twitter’)]
Hinweis: Keine übereinstimmenden Knoten zeigen an, dass das Webelement nicht identifiziert wurde.
# 3) Text () Methode:
Syntax: Verwenden Sie den folgenden XPath-Ausdruck mit der text () -Methode, um das Webelement 'Bei Twitter anmelden' zu finden.
In diesem Ausdruck verwenden wir den absoluten Text, der zwischen dem Start-Tag vorhanden ist. Wenn wir die Funktion text () mit partiellem Xpath verwenden, wie wir es in includes () tun und mit () beginnen, können wir das Element nicht finden.
Ungültiger Xpath für text ():
Identifizieren des Elements mithilfe der XPath-Funktionen nach Attribut
Wir verwenden die XPath-Funktionen (enthält oder beginnt mit) mit Attribut, wenn im Container-Tag einige eindeutig identifizierte Attributwerte verfügbar sind. Auf Attribute wird über das Symbol „@“ zugegriffen.
Dies kann mit dem Gegebenen klar verstanden werden Beispiel:
Einloggen in Google
# 1) Enthält () Methode:
Syntax: Um das Schaltflächenelement 'Ich fühle mich glücklich' mithilfe der XPath-Funktion eindeutig zu identifizieren, enthält () mithilfe des Attributs.
(i) Nach Wertattribut:
- // input [enthält (@ value, ’Feeling’)]
- // input [enthält (@ value, ’Lucky’)]
Aus den obigen Bildern geht hervor, dass die Verwendung des Attributwerts mit der Methode 'Feeling' oder 'Lucky' mit der Methode includes () das Element eindeutig identifiziert. Es ist jedoch wichtig zu beachten, dass das Element auch dann korrekt identifiziert wird, wenn wir den vollständigen Inhalt des Value-Attributs verwenden.
(ii) Nach Name Attribut:
//input[contains(@name=’btnI’)]
Der ungültige Fall für die XPath-Funktion mit dem Attribut:
Wir müssen sehr vorsichtig sein, wenn wir das Attribut auswählen, das mit der Methode includes () und begin-with () verwendet werden soll. Wenn der Attributwert nicht eindeutig ist, können wir das Element nicht eindeutig identifizieren.
Angenommen, wenn wir das Attribut 'Typ' verwenden, um die Schaltfläche 'Ich fühle mich glücklich' zu identifizieren, funktioniert der XPath nicht.
2 übereinstimmende Knoten zeigen an, dass das Element nicht korrekt identifiziert wurde. Hier ist der Typattributwert nicht eindeutig.
# 2) Starts-with () -Methode:
Die Methode begin-with () mit dem Attribut ist sehr nützlich, wenn wir die Elemente finden müssen, deren früherer Teil des Attributs fest bleibt, während sich der spätere Teil weiter ändert. Dieser Ansatz ist sehr nützlich, wenn die Objekte den Wert ihrer Attribute dynamisch ändern. Dies kann auch verwendet werden, wenn ähnliche Arten von Elementen erfasst werden sollen.
Gehe zu Facebook Login
Überprüfen Sie das erste Textfeld „Vorname“ und das zweite Textfeld „Nachname“ des Anmeldeformulars.
Das erste Textfeld 'Vorname' wird identifiziert.
Das zweite Textfeld 'Nachname' wird identifiziert.
In beiden Textfeldern, die für die Anmeldung bei Facebook angegeben sind, bleibt der Startteil der ID-Attribute unverändert.
Vorname id = 'u_0_2'
Nachname id = ’u_0_4”
Dies ist das Szenario, in dem wir das Attribut begin-with () verwenden können, um alle Elemente unter einem solchen Typ von id-Attribut abzurufen. Bitte beachten Sie, dass wir diese beiden Felder nur als Referenz verwenden. Es könnten jedoch mehr Felder auf dem Bildschirm mit IDs vorhanden sein, die mit 'u_0_' beginnen.
Beginnt mit () [Nach Attribut-ID]
//input[starts-with(@id,”u_0_”)]
Wichtiger Hinweis: Hier haben wir doppelte Anführungszeichen anstelle von einfachen Anführungszeichen verwendet. Aber einfache Anführungszeichen funktionieren auch mit der Start-mit-Methode.
11 übereinstimmende Knoten zeigen an, dass dieser XPath alle Elemente identifiziert hat, deren IDs mit 'u_0_' beginnen. Der letzte Teil der ID (2 für Vorname, 4 für Nachname usw.) bestimmt, wie wir das Element eindeutig identifizieren.
Wir können das Funktionsattribut 'Start-mit' verwenden, bei dem wir den ähnlichen Elementtyp in einer Liste sammeln und eines davon dynamisch auswählen müssen, indem wir das Argument in einer generischen Methode umgehen, um das Element eindeutig zu identifizieren.
Bitte folgen Sie dem folgenden Beispiel, um die Start-mit-Funktion zu unserem Vorteil zu nutzen.
Beispielcode:
/* Generic Method */ public void xpathLoc(String identifier){ //The below step identifies the element “First Name” uniquely when the argument is “2” WebElement E1=d1.findElement(By.xpath('//input[starts-with(@id,”u_0_”+identifier )]')); E1.sendKeys(“Test1”); /* This step enters the value of First Name as “Test 1” */ } /* Main Method */ public static void main(String[] args) { xpathLoc(“2”); --- This step calls the xpathLoc() method to identify the first name. }
Hinweis: Eclipse erlaubt möglicherweise nicht die Verwendung von doppelten Anführungszeichen. Möglicherweise müssen Sie auf anderen Code zurückgreifen, um dynamisches XPath zu erstellen.
Der Beispielcode dient als Referenz. Sie können es so erweitern, dass es in alle Elemente und Operationen passt, die Sie ausführen möchten, sowie in die Werte, die Sie eingeben möchten (bei Textfeldern), um den Code vielseitiger zu gestalten.
Fazit
In diesem Artikel wurde erläutert, wie wir XPath-Funktionen verwenden können, die (), begin-with () und text () mit Attributen und Text enthalten, um die Elemente in der HTML-DOM-Struktur eindeutig zu identifizieren.
Nachfolgend einige Beobachtungen, die wir für die XPath-Funktionen zeichnen können:
- Verwenden Sie in XPath die Methode 'enthält ()', wenn Sie den teilweise konstanten sichtbaren Text oder das Attribut kennen.
- Verwenden Sie die Methode 'Starts mit ()' in XPath, wenn Sie den sichtbaren Text oder das Attribut der anfänglichen Teilkonstante kennen.
- Sie können auch die Methode includes () und begin-with () mit absolutem Text oder Attribut verwenden.
- Verwenden Sie die Methode 'text ()' in XPath, wenn Sie den absolut sichtbaren Text kennen.
- Sie können die text () -Methode nicht für den Teiltext verwenden.
- Sie können die Methode begin-with () nicht verwenden, wenn der Anfangstext in XPath nicht verwendet wird oder wenn sich der Anfangstext ständig ändert.
Im nächsten Tutorial lernen wir, wie Sie XPath-Achsen mit XPath-Funktionen verwenden, um die Position von Elementen auf der verfügbaren Webseite weiter zu verbessern.
=> Lesen Sie die Easy Selenium Training Series durch.
Literatur-Empfehlungen
- Selen-Locators: Identifizieren von Webelementen mithilfe von XPath in Selen (Beispiele)
- Umgang mit Webtabellen, Frames und dynamischen Elementen in Selenium Script - Selenium Tutorial # 18
- Python-String-Funktionen
- Xpath Extractor Post-Prozessor in JMeter
- Selenium Find Element By Text Tutorial mit Beispielen
- Cucumber Selenium Tutorial: Integration von Cucumber Java Selenium WebDriver
- Ein umfassendes XPath-Tutorial - XML Path Language
- Einführung in Selenium WebDriver - Selenium Tutorial # 8