Ich schreibe einen Selen-Testfall. Und hier ist der xpath-Ausdruck, den ich verwende, um alle 'Modify'-Schaltflächen in einer Datentabelle abzugleichen.
//img[@title='Modify']
Meine Frage ist, wie kann ich die übereinstimmenden Knotensätze nach Index besuchen? Ich habe es mit versucht
//img[@title='Modify'][i]
und
//img[@title='Modify' and position() = i]
Aber beides funktioniert nicht. Ich habe es auch mit XPath Checker (One Firefox-Erweiterung) versucht. Es wurden insgesamt 13 Übereinstimmungen gefunden, dann habe ich keine Ahnung, wie ich eine davon auswählen soll. Oder unterstützt XPath die angegebene Auswahl von Knoten, die sich nicht unter demselben übergeordneten Knoten befinden?
Es gibt keine
i
in XPath.Entweder verwenden Sie Literalzahlen:
//img[@title='Modify'][1]
Oder Sie erstellen die Ausdruckszeichenfolge dynamisch:
'//img[@title='Modify']['+i+']'
( Beachten Sie jedoch, dass dynamische XPath-Ausdrücke in XSLT nicht funktionieren .)Ja:
(//img[@title='Modify'])[13]
Dies
//img[@title='Modify'][i]
bedeutet "alle<img>
mit dem Titel" Ändern "und einem untergeordneten Element mit dem Namen<i>
".quelle
td
s zu finden , die das sechste Kind von a warentr
und keinen leeren Inhalt haben://tr/td[6][string-length(text()) > 0]
Kurzform für
Daher wird der i-te Knoten unter demselben übergeordneten Knoten zurückgegeben.
Sie wollen
quelle
/descendant::img[@title='Modify'][$index]
Wird einfach gut funktionieren. Beachten Sie auch den[i]
Prädikattest für die Existenz einesi
untergeordneten Elements.Es gibt kein
i
in xpath ist nicht ganz wahr. Sie können weiterhincount()
den Index verwenden , um ihn zu finden.Betrachten Sie die folgende Seite
Die Seite hat 2 Tabellen und 6 Spalten mit jeweils eindeutigen Spaltennamen und 6 Zeilen mit variablen Daten. Die letzte Zeile enthält die
Modify
Schaltfläche in beiden Tabellen.Angenommen, der Benutzer muss die 4.
Modify
Schaltfläche aus der ersten Tabelle basierend auf der Überschrift auswählenVerwenden Sie den xpath
//th[.='Heading 4']/ancestor::thead/following-sibling::tbody/tr/td[count(//tr/th[.='Heading 4']/preceding-sibling::th)+1]/button
In
count()
solchen Situationen ist der Bediener praktisch.Logik:
Modify
Schaltfläche mit//th[.='Heading 4']
count(//tr/th[.='Heading 4']/preceding-sibling::th)+1
Holen Sie sich die Zeilen für den entsprechenden Header mit
//th[.='Heading 4']/ancestor::thead/following-sibling::tbody/tr/td[count(//tr/th[.='Heading 4']/preceding-sibling::th)+1]
Holen Sie sich die
Modify
Schaltfläche aus der extrahierten Knotenliste mit//th[.='Heading 4']/ancestor::thead/following-sibling::tbody/tr/td[count(//tr/th[.='Heading 4']/preceding-sibling::th)+1]/button
quelle
(// * [@ attribute = 'value']) [index], um das Ziel des Elements zu finden, während Sie mehrere Übereinstimmungen darin finden
quelle
Hier ist die Lösung für die Indexvariable
Angenommen, Sie haben 5 Elemente mit demselben Locator gefunden und möchten für jedes Element eine Aktion ausführen, indem Sie die Indexnummer angeben (hier wird die Variable für den Index als "i" verwendet).
Es braucht XPath:
quelle