Ne pouvez pas obtenir la n-ième nœud en Sélénium
J'essaie d'écrire des expressions xpath pour que mes tests ne pas être brisé par de petites modifications de conception. Ainsi, au lieu de les expressions qui Selenium IDE génère, j'écris mes propres.
Voici une question:
//input[@name='question'][7]
Cette expression ne fonctionne pas du tout. Des nœuds d'entrée nommée "question", sont répartis à travers la page. Ils ne sont pas frères et sœurs.
J'ai essayé d'utiliser une expression intermédiaire, mais il échoue également.
(//input[@name='question'])[2]
error = Error: Element (//input[@name='question'])[2] not found
C'est pourquoi je suppose que Seleniun a une mauvaise mise en œuvre de XPath.
Selon XPath docs, la position de prédicat doit filtrer par la position dans la nodeset, donc il faut trouver le septième input
avec le nom 'question'
. En Sélénium cela ne fonctionne pas. Les sélecteurs CSS (:nth-of-kind
) ni.
J'ai dû écrire une expression que les filtres de leur commune parents:
//*[contains(@class, 'question_section')][7]//input[@name='question']
Est-ce une Sélénium problème spécifique, ou je suis en train de lire les specs mauvais sens? Que puis-je faire pour faire une expression plus courte?
OriginalL'auteur culebrón | 2010-07-30
Vous devez vous connecter pour publier un commentaire.
C'est une FAQ.
[]
a une priorité plus élevée que//
.L'expression ci-dessus sélectionne chaque
input
élément avec@name = 'question'
, qui est le 7e enfant de son parent -- et aparently les parents deinput
les éléments du document qui n'est pas montré n'a pas trop deinput
enfants.Utilisation (notez les parenthèses):
Ceci sélectionne la 7ème élément
input
dans le document qui remplit les conditions énoncées dans le prédicat.Modifier:
Gens, qui connaissent le Sélénium (Dave Hunt) suggèrent que l'expression ci-dessus est écrit en Sélénium:
Ensuite, utilisez Dave Hunt, en réponse, a plus de chance d'être pris en charge par ce que le Sélénium appelle "XPath".
Notez que le Sélénium ne interpréter un localisateur de XPath si elle commence avec
//
ouxpath=
donc en commençant avec un(
sera, par défaut, de tenter de localiser l'élément par son identificateur (id
ouname
).Ainsi,
xpath=(//input[@name='question'])[7]
alors être acceptable?Oui, je suppose que ce serait de travailler en Sélénium.
OriginalL'auteur Dimitre Novatchev
Si vous voulez le 7e
input
avecname
attribut avec une valeur dequestion
dans la source puis essayez ce qui suit://
est un exact synonyme dedescendant-or-self::
, donc je ne pense pas que cela aide.Vous avez raison, mais
descendant-or-self
est pas un synonyme dedescendant
. Voir w3.org/TR/xpath/#path-abbrev "REMARQUE: Le chemin de localisation//para[1]
ne signifie pas la même chose que le chemin de la localisation/descendant::para[1]
. Ce dernier sélectionne le premier descendantpara
élément; l'ancien sélectionne tous les descendantspara
éléments qui sont le premierpara
les enfants de leurs parents."Corriger answe (+1).
OriginalL'auteur Dave Hunt