Question

Avec ASP.NET, les ID de balise sont assez volatils, donc pour rendre mes tests plus robustes, je veux localiser les éléments par leurs textes d'étiquette. J'en ai joué avec Wasing et cela le fait parfaitement, mais ce projet semble un peu mort de nos jours, alors j'ai pensé que je regarderais le sélénium aussi avant de décider d'un cadre.

J'ai HTML qui ressemble à quelque chose comme ça

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

Je ne veux pas taper:

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

Cela dépend trop de l'ID. Dans Wasing, j'écrirais:

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

Existe-t-il un moyen de le faire en sélénium?

Était-ce utile?

La solution

Je crois que vous pouvez le faire avec les éléments suivants:

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

Le bit text () = 'username' obtient l'étiquette que vous souhaitez par son innerhtml, alors le / @ pour vous redonne la valeur de son attribut "For".

La tête haute: Ce n'est pas testé (excuses pour cela!) Mais je pense que cela fonctionnera, en fonction de certains outils dans le plugin IDE

Autres conseils

Cela marche:

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

Explication: Puisque vous recherchez l'entrée:

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

Remplacez le "CTL00_CONTENT_LOGINFORM_CTL01_USERNAME" par la valeur de l'attribut de l'étiquette:

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

Ok, cela peut avoir un an mais ce qu'ils sont. Cela sélectionnera la première entrée sous une étiquette contenant le texte «Nom d'utilisateur».

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

Je préfère généralement utiliser CONTAINS () car je trouve que certains navigateurs ajoutent des espaces ennuyeux dans l'élément occasionnel:

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

Notez que la slash unique avant l'entrée indique qu'il ne ressemblera à qu'un niveau vers le bas, où la double barre oblique vérifierait tous les niveaux sous l'étiquette. Utilisez XPather pour Firefox pour créer et vérifier vos xpaths, c'est très utile.

Oui, vous pouvez utiliser des localisateurs XPATH, CSS ou DOM pour identifier votre élément. Dans cet exemple, votre xpath pourrait ressembler à // lable [@ for = 'ctl00_content_loginform_ctl01_username'] pour identifier cette étiquette particulière.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top