le sélénium xpath - comment sélectionner la dernière ligne d'une table avec un contenu spécifique?
J'ai un tableau comme ceci:
<table>
<th>
<td>Area</td><td># of errors</td>
</th>
<tr><td>school</td><td>23</td></tr>
<tr><td>student</td><td>0</td></tr>
<tr><td>school</td><td>17</td></tr>
<tr><td>student</td><td>0</td></tr>
</table>
Comment puis-je sélectionner la dernière ligne pour les "Écoles" de la Zone.
Jusqu'à récemment, j'ai utilisé assert_text avec
//table//tr//td[contains(text(),'school')]/following::td
et un value
de 0, c'est à dire zéro des erreurs.
Cependant, maintenant, j'ai besoin de compte pour les lignes qui ont des erreurs, mais qui regarde encore la "dernière" de la ligne pour une région qui a zéro des erreurs.
Pour ce cas, en utilisant
//table//tr//td[contains(text(),'school')]/following::td
incorrecte sélectionne la première ligne qui a le 23 erreurs.
J'ai essayé d'utiliser tr[last()]
-
//table//tr[last()]//td[contains(text(),'school')]/following::td[2]
mais le problème est que cela, sélectionnez la dernière ligne du tableau - qui est pour les étudiants. Je veux la dernière ligne du tableau qui est pour les écoles (c'est en fait l'avant-dernière ligne de la table de toutes les lignes).
J'ai aussi essayé:
//table//td[contains(text(),'school')][last()]/following::td[2]
mais cela ne fonctionne pas (il continue à sélectionne que de la première école de ligne).
J'ai besoin d'être en mesure de rendre compte juste pour une école en ligne, deux de l'école lignes et plus de 2 école de lignes donc j'ai besoin de l'expression être suffisamment dynamique pour gérer cela.
OriginalL'auteur Michael Durrant | 2013-04-12
Vous devez vous connecter pour publier un commentaire.
Vous êtes à la recherche d'un élément qui contient le texte "école", mais le balisage a le texte "École", XPath est sensible à la casse.
Vous pouvez contourner ce problème en traduisant des lettres majuscules en minuscules, ce serait faire de votre XPath comme suit:
*Note*
Je n'ai pas utilisé le XPath2 bas-de-casse() de la fonction, car il ne fonctionnera pas dans tous les navigateurs.
*Edit*
Mis à jour pour la nouvelle balise le chemin xpath qui est insensible à la casse serait:
ou plus version simplifiée qui n'est pas insensible à la casse serait:
(. est une abréviation pour le texte(), vous pouvez changer si vous le souhaitez)
vous pourriez probablement aussi sortir avec
il a raison sur le fond. À la lumière de la ré-édité exemple, essayez ceci:
(//tr[td[.='school')]])[last()]/following::tr/td[2]
.Ou Ross, l'un au-dessus fonctionnerait tout aussi bien 🙂
OriginalL'auteur Ardesco
À l'aide de votre finale de XPath, ça fonctionne pour moi, et de ne sélectionner le dernier "Écoles". Alors j'aimerais aller et demander quelles sont les versions de tout ce que vous utilisez, quels sont les navigateurs etc
Aussi, parfois, lors de l'utilisation de XPath il peut être un peu pointilleux avec la position des indexeurs, ainsi que sur le...
chercher un autre addon appelé firepath. Il s'intègre avec firebug et est très utile.
OriginalL'auteur Arran