web-dev-qa-db-de.com

XPath zur Auswahl des folgenden Geschwisters

Dies ist der Code, den ich derzeit habe:

<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>

Ich habe folgendes versucht:

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

Ich verwende Selenium, und ich möchte, dass es auf die Bearbeitungsschaltfläche klickt, die direkt hinter der ABZ span steht.

5
user3525228

Dieser xpath hat in Chrome mit Ihrem HTML-Code für mich funktioniert:

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

Bearbeiten

Der .. bedeutet, eine Ebene hinaufzugehen. Der .. führt den Selektor von span zu section. Dann findet der following-sibling die section nach der übergeordneten section Ihrer passenden span.

Ihr ursprünglicher Selektor stimmte mit span überein und suchte dann nach einem following-sibling für span.

23
Richard

Zusätzlich zur Antwort oben funktionieren die beiden folgenden Ausdrücke gut.

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

OR

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

Insbesondere wird die nachfolgende Achse jeden Knoten auswählen, der dem Kontextknoten folgt, während die Achse, die einem Geschwister folgt, nur die gleichgeordneten Knoten für den Kontextknoten auswählt.

1
Mohit Arora