Heim > Artikel > Web-Frontend > So schreiben und handhaben Sie dynamischen XPath in Selenium [mit Taktiken]
Für automatisierte Tests ist es von entscheidender Bedeutung, die Webelemente einer Application Under Test (AUT) erkennen zu können. Zu lernen, wie man Webelemente findet und dynamischen XPath in Selenium manuell schreibt, kann lange dauern und viel Übung erfordern.
Zum Beispiel zeigen wir Ihnen, wie Sie mit XPath manuell und einfach Webelemente in Selenium finden.
Locators sind eine der wertvollen Funktionen von Selenium. Sie ermöglichen es uns, Webelemente zu lokalisieren. Wenn beispielsweise die Locators wie ID, Klassenname, Name, Linktext usw. die Webelemente nicht finden, verwenden wir XPath, um sie auf der Webseite zu finden.
XPath, auch bekannt als XML Path, ist einer der am häufigsten verwendeten Locators von Selenium WebDriver zum Navigieren durch die HTML-Struktur einer Seite. Es kann verwendet werden, um jedes Element auf einer Webseite mithilfe der HTML-DOM-Struktur in HTML- und XML-Dokumenten zu finden.
XPath soll die XML-Dokumentnavigation ermöglichen, um einzelne Elemente, Attribute oder andere Teile eines XML-Dokuments für eine spezifische Verarbeitung auszuwählen. Beispielsweise generiert XPath zuverlässige Locators, ist jedoch hinsichtlich der Leistung langsamer als CSS Selector.
Die Sprache XPath wird verwendet, um Elemente in einer HTML-Seite auszuwählen. Mit XPath können Sie jedes Element auf einer Seite anhand seines Tag-Namens, seiner ID, seiner CSS-Klasse usw. finden. In Selenium gibt es zwei Arten von XPath.
Es ist der direkteste Weg, das Element zu finden, aber der Nachteil von „absolutem XPath“ besteht darin, dass dieser bestimmte XPath fehlschlägt, wenn sich der Pfad des Elements ändert.
Das entscheidende Merkmal von XPath ist, dass es mit einem einzelnen Schrägstrich (/) beginnt, was anzeigt, dass Sie mit Dynamic XPath ein Element aus dem Stammknoten auswählen können.
Ein relativer XPath ist ein XPath, bei dem der Pfad an einem Knoten Ihrer Wahl beginnt und nicht am Stammknoten.
Der Vorteil der Verwendung von relativem XPath besteht darin, dass Sie nicht den gesamten XPath angeben müssen; Stattdessen können Sie in der Mitte oder irgendwo dazwischen beginnen.
*Nachteile: *
Das Identifizieren des Elements dauert länger, da wir einen Teilpfad und nicht einen genauen Pfad angeben.
Wenn sich mehrere Elemente auf demselben Pfad befinden, wird das erste identifizierte Element ausgewählt.
Vom Kontextknoten (aktuell) aus durchsuchen die XPath-Achsen verschiedene Knoten im XML-Dokument. Es wird beispielsweise verwendet, um den Knoten zu finden, der diesem Baum am nächsten liegt.
XPath-Achsen sind Methoden zum Suchen dynamischer Elemente, die mit Standard-XPath-Methoden, die keine ID, keinen Klassennamen, keinen Namen oder andere Bezeichner enthalten, unmöglich zu finden wären.
Axes-Methoden werden verwendet, um Elemente zu finden, die sich aufgrund einer Aktualisierung oder eines anderen Vorgangs dynamisch ändern. Beispielsweise werden in Selenium Webdriver häufig die Methoden „Kind“, „Eltern“, „Vorfahr“, „Geschwister“, „Vorhergehend“, „Selbst“ und andere Achsen verwendet.
Sie haben Testskripte geändert, als die AUT-Änderungen eine der komplexesten und zeitaufwändigsten Aufgaben in der Testautomatisierung waren, insbesondere in den frühen Phasen der Softwareentwicklung.
Daher können Entwickler häufig Bezeichner und Elemente von einem Build zum anderen ändern. Darüber hinaus können sich die AUT-Elemente während der Ausführung dynamisch ändern.
Um diese Probleme zu beheben, sollten Automatisierungstester keine festen XPaths für Testfallelemente festlegen, sondern XPaths stattdessen dynamisch basierend auf bestimmten Mustern skripten.
Hier sind die 11 einzigartigen und unterschiedlichen Möglichkeiten, dynamischen XPath in Selenium zu erstellen:
real-device-cloud-cta.jpg
Dieser Mechanismus wird auch als Absolute XPath-Elementerkennung bezeichnet.
Syntax:
html/body/div[1]/div[2]/div[2]/div[1]/form/div[1]/div/div[1]/div/div/input[1]
Ein einzelner Schrägstrich wird verwendet, um einen XPath mit einem absoluten Pfad zu erstellen, d. h. der XPath ist so konzipiert, dass die Auswahl vom Dokumentknoten/Startknoten/übergeordneten Knoten aus beginnt.
Dieser Mechanismus wird auch als Suchen von Elementen mit relativem XPath bezeichnet.
Ein doppelter Schrägstrich wird verwendet, um einen XPath mit einem relativen Pfad zu erstellen, was bedeutet, dass der XPath an einer beliebigen Stelle im Dokument mit der Auswahl beginnen kann. Suchen Sie dann auf der gesamten Seite (DOM) nach der vorhergehenden Zeichenfolge.
Syntax
//form/div[1]/div/div[1]/div/div/input[1]
Die Syntax könnte auf zwei Arten geschrieben werden, wie unten gezeigt. Einschluss oder Ausschluss von HTML-Tags. Wenn Sie HTML-Tags ausschließen möchten, müssen Sie *.
verwendenSyntax
//[@attribute_name='attribute_value']
oder
//*[@attribute_name='attribute_value']
Syntax
//[@attribute_name1='attribute_value1'][@attribute_name2='attribute_value2]
oder
//*[@attribute_name1='attribute_value1'][@attribute_name2='attribute_value2]
Syntax
//[@attribute_name1='attribute_value1' und @attribute_name2='attribute_value2]
oder
//*[@attribute_name1='attribute_value1' und @attribute_name2='attribute_value2]
Syntax
//[@attribute_name1='attribute_value1' oder @attribute_name2='attribute_value2]
oder
//*[@attribute_name1='attribute_value1' oder @attribute_name2='attribute_value2]
Contains() ist eine Methode zur Identifizierung eines Elements, das sich dynamisch ändert und bei Kenntnis eines Teils des Attributwerts des Elements.
Wenn wir mit dem Wert des Attributs eines Elements vertraut sind (beginnend mit dem angegebenen Text), können wir es mit der Methode „starts-with()“ identifizieren.
Syntax
//[enthält(@attribute_name,'attribute_value')]
oder
//*[contains(@attribute_name,'attribute_value')]
Dieser Mechanismus wird verwendet, um ein Element basierend auf dem Text einer Webseite zu finden.
Last() wählt das letzte Element (des angegebenen Typs) aus allen Eingabeelementen aus.
Syntax
//[text()='Neuer Look für die Anmeldung folgt bald']
oder
//[text()='Neuer Look für die Anmeldung folgt bald']
Das Element wird aus allen Eingabeelementen basierend auf der angegebenen Positionsnummer ausgewählt.
Im folgenden XPath sucht [@type=’text’] ein Textfeld und die Funktion [position()=2] identifiziert ein Textfeld an der zweiten Position von oben.
Syntax
findElement(By.xpath("(//input[@type='text'])[position()=2]"))
oder
findElement(By.xpath("(//input[@type='text'])[2]"))
Wir könnten zum n-ten Element gelangen, indem wir die Indexposition in eckige Klammern setzen. Dann konnten wir das Feld „Nachname“ mithilfe des untenstehenden XPath identifizieren.
Syntax
findElement(By.xpath("//label[2]"))
Mit Ausnahme von Vorfahren, Attributknoten und Namespace-Knoten werden hierdurch alle Knoten ausgewählt, die vor dem aktuellen Knoten im Dokument erscheinen.
WebElement select = drivers.findElement(By.id(„gender“));
Listenoptionen = select.findElements(By.tagName(“Male”));
for (WebElement-Option: Optionen) {
if(“Germany”.equals(option.getText()))
option.click();
mit selectByValue()
Listenfeld auswählen = neuer Select(Treiber.
Listenfeld.
Listbox auswählen = neuer Select(Treiber.
WebElement-Option = listbox.getFirstSelectedOption();
System.out.println(option.getText()); //druckt die ausgewählte Option.
//Alle ausgewählten Optionen auflisten.
//Alle Optionen auflisten.
Ein dynamisches Element ist ein Webelement, dessen IDs und nicht nur IDs, sondern alle Attribute wie Klassenname, Wert usw. nicht festgelegt sind.
Daher ändert sich die Seite jedes Mal, wenn Sie sie neu laden. Daher können Sie dieses Element nicht ausschließlich über den Locator verarbeiten.
Zum Beispiel ändert sich der Klassenname von Gmail-Posteingangselementen mit jeder Anmeldung.
Datenbankgesteuerte oder sitzungsgesteuerte dynamische Elemente Wenn Sie ein Datenbankelement ändern, wirkt sich dies auf mehrere zu testende Anwendungsbereiche aus.
Die dynamischen Elemente sind ausschließlich inhaltlich, wobei die Formatierung im Design festgelegt ist. Textfelder und Schaltflächen werden häufig mit dynamischen Bezeichnern verwendet.
Wenn Sie eine dynamische Website automatisieren, werden die Skripte unterbrochen, sobald sich der Inhalt ändert, was dazu führt, dass Ihr Test fehlschlägt. Dann müssen Sie Ihren Testfall jedes Mal aktualisieren, was eine zeitaufwändige Aufgabe ist.
Wir müssen immer verstehen, wie sich diese Elemente verhalten, wenn die Seite neu geladen oder eine neue Sitzung gestartet wird. Wir können eine Strategie für die Interaktion mit diesen Elementen vorbereiten, sobald wir sie verstanden haben.
Ähnlich wie beim Partial-Link-Selektor in Selenium können wir die Xpath-Suche mit dem Starttext-Match-Element verwenden.
Alle Knoten, die auf den Kontextknoten folgen, sind unten aufgeführt. Wir können „Folgendes“ verwenden, um die unten aufgeführten Elemente in der Webelementliste anzugeben.
Wenige dynamische Elemente enthalten statische Werte; basierend auf diesen Werten; Mit der Funktion „enthält“ können wir nach solchen Elementen suchen. Beispielsweise gibt es im obigen HTML-Schaltflächenklassennamen eine statische Zeichenfolge „Hstpl-12345“. Beispielsweise können wir XPath verwenden, um nach einem Schaltflächenelement mit einem Klassennamen zu suchen, der das Wort „Hstpl“ enthält.
Wenn es im DOM mehrere Elemente mit ähnlichen Attributen gibt, kann es schwierig sein, nach ihnen zu suchen, insbesondere wenn sie dynamisch sind.
Angenommen, es gibt zehn Schaltflächen auf einer Seite und Sie möchten die fünfte finden. Dann suchen wir nach Elementen mit dem „Button“-Tag und gehen zum fünften Index der Liste der Schaltflächen, um dieses Element zu finden.
Absolute Xpath verwendet den gesamten Pfad vom Root-Element zum spezifischen Element. Wie unten gezeigt, beginnt ein absoluter XPath mit HTML und einem Schrägstrich (/). Verwenden Sie zum Generieren von XPaths den Fire-Pfad (Firebug).
Sie sind jedoch anfälliger für Regressionen, da geringfügige Änderungen im DOM dazu führen, dass sie falsch sind oder auf ein anderes Element verweisen.
Daher gilt die Verwendung von absolutem Xpath in den meisten Fällen nicht als bewährte Methode, löst aber das Problem der dynamischen Elemente.
Eine andere Methode zum Umgang mit dynamischen Elementen besteht darin, alle Elemente mit demselben Tag-Namen zu finden und dann nach dem erforderlichen Element zu suchen, basierend darauf, ob es Text, einen Wert oder Elementattribute enthält.
In diesem Artikel wurde gezeigt, wie Sie die XPath-Funktionen „contains()“, „starts-with()“ und „text()“ mit Attributen und Text verwenden, um Elemente in der HTML-DOM-Struktur eindeutig zu identifizieren.
In Selenium wird XPath verwendet, um Elemente zu lokalisieren, wenn andere Locators ausfallen. Es gibt zwei Arten von Selenium XPath: Absoluter XPath und Relativer XPath.
Quelle: Dieser Artikel wurde ursprünglich auf testgrid.io veröffentlicht.
Das obige ist der detaillierte Inhalt vonSo schreiben und handhaben Sie dynamischen XPath in Selenium [mit Taktiken]. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!