Angenommen, ich habe dies (vereinfacht):
<form id="myform">
<!-- some input fields -->
<input type="submit" value="proceed"/>
</form>
Dann kann ich die Senden-Schaltfläche von XPath auswählen //form[@id='myform']/input[@type='submit']
. Toll.
Meine Vorlagen können sich jedoch ändern, und ich möchte in der Tiefe, in der sich die Schaltfläche "Senden" befindet, flexibel sein. Es könnte in eine Tabelle wie folgt gestellt werden:
<form id="myform">
<!-- some input fields -->
<table><tr><td>
<input type="submit" value="proceed"/>
</td></tr></table>
</form>
Ich weiß, dass ich Elemente auswählen kann, die Enkelkinder sind, aber ich kann keine Groß-Groß-Groß-Kinder jeglicher Tiefe auswählen. Z.B:
//form[@id='myform']/*/input[@type='submit']
wählt nur Enkelkinder aus, keine weiteren Tiefen.//form[@id='myform']/*/*/input[@type='submit']
wählt nur Enkel aus, keine weiteren oder weniger Tiefen.//form[@id='myform']/**/input[@type='submit']
ist ungültig.
Wie wähle ich diese Schaltfläche zum Senden zuverlässig aus, ohne Element-IDs zu verwenden?
//form//input
gibt null in C # zurück, während Chrome 35 Eingaben mit demselben xpath finden kannWenn Sie XmlDocument und XmlNode verwenden.
Sagen:
Verwenden:
Dies hängt vom verwendeten Tool ab. Aber .// wählt jedes Kind und jede Tiefe aus einem Referenzknoten aus.
quelle
quelle
Sie können dies auch mit CSS-Selektoren tun:
Leerzeichen zwischen Elementen in CSS-Wähler bedeutet, dass die Eingabe [type = 'submit'] nach Elementen in einer beliebigen Tiefe des übergeordneten Formulars # myform element durchsucht wird
quelle