Frage

Bei ASP.NET sind die Tag-IDs ziemlich volatil. Um meine Tests robuster zu machen, möchte ich Elemente anhand ihrer Beschriftungstexte lokalisieren.Ich habe einiges mit WatiN gespielt und es macht das perfekt, aber dieses Projekt scheint heutzutage irgendwie tot zu sein, also dachte ich, ich würde mir auch Selenium ansehen, bevor ich mich für ein Framework entscheide.

Ich habe HTML, das ungefähr so ​​aussieht

<label for="ctl00_content_loginForm_ctl01_username">Username</label>:
<input type="text" id="ctl00_content_loginForm_ctl01_username" />

Ich möchte nicht tippen:

selenium.Type("ctl00_content_loginForm_ctl01_username", "xxx");

Das ist zu stark vom Ausweis abhängig.In WatiN würde ich schreiben:

browser.TextField(Find.ByLabelText("Username")).TypeText("xxx");

Gibt es eine Möglichkeit, dies in Selenium zu tun?

War es hilfreich?

Lösung

Ich glaube, dass Sie dies mit Folgendem erreichen können:

selenium.Type(selenium.getAttribute("//label[text()='Username']/@for"), "xxx");

Das Bit text()='Username' erhält die gewünschte Bezeichnung durch sein innerHTML, dann gibt /@for Ihnen den Wert seines Attributs „for“ zurück.

Kopf hoch: Dies ist nicht getestet (entschuldigen Sie das!), aber ich denke, dass es funktionieren wird, basierend auf einigen Tools im IDE-Plugin

Andere Tipps

Das funktioniert:

//input[@id=(//label[text()="Username"]/@for)]

Erläuterung:Da Sie nach der Eingabe suchen:

//input[@id=("ctl00_content_loginForm_ctl01_username")]

Ersetzen Sie „ctl00_content_loginForm_ctl01_username“ durch den Attributwert des Labels:

//label[text()="Username"]/@for

Ok, das ist vielleicht ein Jahr alt, aber was soll's.Dadurch wird die erste Eingabe unter einer Beschriftung ausgewählt, die den Text „Benutzername“ enthält.

//label[text()='Username']/input

Im Allgemeinen bevorzuge ich die Verwendung von contains(), da ich finde, dass einige Browser lästige Leerzeichen in das Occasional-Element einfügen:

//label[contains(., 'Username')]/input

Beachten Sie, dass der einfache Schrägstrich vor der Eingabe bedeutet, dass nur eine Ebene tiefer gesucht wird, während der doppelte Schrägstrich alle Ebenen unter der Bezeichnung überprüfen würde.Verwenden Sie XPather für Firefox, um Ihre XPaths zu erstellen und zu überprüfen. Das ist sehr nützlich.

Ja, Sie können XPath-, CSS- oder DOM-Locators verwenden, um Ihr Element zu identifizieren.In diesem Beispiel könnte Ihr XPath wie //lable[@for='ctl00_content_loginForm_ctl01_username'] aussehen, um diese bestimmte Bezeichnung zu identifizieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top