L'écriture de XPath pour les éléments qui n'ont pas d'ID ou le Nom de Sélénium
Je suis en train d'automatiser les tests du code de... eh bien, écrit sans le tester à l'esprit (pas d'Id sur de nombreux éléments, et beaucoup d'éléments avec les mêmes noms de classes). Je vous serais reconnaissant de toute aide (les questions sont en dessous du code):
<div id="author-taxonomies" class="menu-opened menu-hover-opened-inactive" onmouseover="styleMenuElement(this)" onmouseout="styleMenuElement(this)" onclick="toggleSFGroup(this)">Author</div>
<div id="author-taxonomies-div" class="opened">
<div id="top-level-menu" class="opened">
<div id="top-level-menu-item-1" class="as-master">
<div class="filter-label"> Name</div>
</div>
<div id="top-level-menu-item-1" class="as-slave"
style="top: 525px; left: 34px; z-index: 100; display: none;"> </div>
<div id="top-level-menu-item-2" class="as-master">
<div class="filter-label">Title</div>
</div>
<div id="top-level-menu-item-2" class="as-slave">
<div id="top-level-menu-item-2" class="as-slave-title as-slave-title-subgroup"
>Title</div>
<div id="top-level-menu-item-2" class="as-slave-body"> </div>
<div class="as-slave-buffer"> </div>
</div>
<div id="top-level-menu-item-3" class="as-master">
<div class="filter-label">Location</div>
</div>
<div id="top-level-menu-item-3" class="as-slave"> </div>
</div>
</div>
La question est: comment faire pour consulter des étiquettes particulières de ce menu et les propriétés avec des expressions xPath? Par exemple, si je veux:
- vérifier l'Emplacement de l'étiquette est-il
- vérifier si "Titre" avec classe "esclave" n'est pas visible au moment
Vous devez vous connecter pour publier un commentaire.
Ce serait quelque chose de similaire à:
Mise à jour: assurez-vous également d'installer la suite de firefox add-in, il est Vraiment utile lorsque vous essayez différentes expressions xpath sur un site https://addons.mozilla.org/en-US/firefox/addon/1095
Comme une note de côté: essayez d'éviter d'utiliser xpath locators en Sélénium, si possible. Si vous avez une longue expression xpath, il peut être jusqu'à 20 fois plus lent pour le Sélénium pour trouver l'élément par rapport à l'identifier en utilisant son ID unique. Bien sûr, parfois il n'y a pas d'alternative à l'aide de xpath. Toutefois, lorsque vous ne l'utilisez, garder '//' expressions de minimum - c'est une véritable performance killer.
Si vous êtes juste de commencer avec le Sélénium, le téléchargement de la le sélénium add-on pour Firefox. Dès que vous cliquez sur les éléments DOM, le Sélénium vous montre le chemin xpath pour y accéder.
Je suis actuellement en train de travailler sur une bibliothèque open source pour générer des expressions xpath par l'intermédiaire d'un fluide .Net de l'API. L'idée est d'être en mesure de générer xpath à base de sélénium locators sans avoir à connaître xpath.
Voici un exemple de comment la bibliothèque peut être utilisée dans votre cas:
XPathFinder.Trouver.Tag("div").Avec.L'attribut"id", "top-level-menu-item-3").Et.Enfant("div").Avec.L'attribut"class", "filtre-label").ToXPathExpression();
Ceci va produire la xpath suivante:
"//div[@id= "top-level-menu-item-3']/div[@class='filtre-label']"
Vérifier à
http://code.google.com/p/xpathitup/
Vous pouvez utiliser firepath qui peut être installé sur firebug(à la fois le plugin firefox). Lorsque vous obtenez un xpath, ne pas oublier d'ajouter
//
avant de l'utiliser. Dans le code ou dans selenium IDE. Vous n'êtes pas d'ajouter c'est pourquoi il est inutilisable. Il existe deux types de xpath absolue et relative. Si vous utilisez l'absolu, il prendra soin de la dynamique de l'ids. Mais si vous utilisez relative ça va casser à chaque exécution.