web-dev-qa-db-fra.com

XPath pour sélectionner frère suivant

C'est le code que j'ai actuellement:

<div>
<ul class="nav nav-pills nav-stacked">
<li>
<li>
<li>
<li>
<li>
<section>
<span name="merchant">ABZ</span>
</section>
<section>
<span class="glyphicon glyphicon-pencil" name="edit"></span>
<span class="glyphicon glyphicon-remove" name="delete"></span>
</section>
</li>
<li>
<li>
<li>
<li>
</ul>
<div class="add-item bottom" name="new-merchant">
</div>

J'ai essayé ce qui suit:

xpath=//span[contains(.,'ABZ')]/following-sibling::section/span[@name='edit']
xpath=//span[contains(.,'ABZ')]/following-sibling::span[1]

J'utilise Selenium et je veux qu'il clique sur le bouton d'édition situé juste après la variable ABZ span.

5
user3525228

Ce xpath a fonctionné pour moi sous Chrome, en utilisant votre code HTML:

//span[contains(text(), 'ABZ')]/../following-sibling::section/span[@name='edit']

Modifier

Le .. signifie monter d'un niveau. Le .. prend le sélecteur de span à section. Ensuite, le following-sibling trouve la section après le parent section de votre span correspondante.

Votre sélecteur d'origine correspondait à span, puis recherchait un following-sibling à span.

23
Richard

En ajoutant à la réponse ci-dessus, les deux expressions ci-dessous fonctionneront bien.

//span[contains(text(), 'ABZ')]/following::section/span[@name='edit']

OR

//span[contains(text(), 'ABZ')]/../following-sibling::section/span[@name='edit']

Notamment, l'axe qui suit choisira chaque nœud qui suit le nœud de contexte, tandis que l'axe qui suit un frère choisira uniquement les nœuds frères du nœud de contexte.

1
Mohit Arora