Załóżmy, że mam to (uproszczone):
<form id="myform">
<!-- some input fields -->
<input type="submit" value="proceed"/>
</form>
Następnie mogę wybrać przycisk przesyłania za pomocą XPath //form[@id='myform']/input[@type='submit']
. Wspaniały.
Jednak moje szablony mogą się zmienić i chcę być elastyczny co do głębokości, w jakiej znajduje się przycisk przesyłania. Można go umieścić w tabeli, na przykład:
<form id="myform">
<!-- some input fields -->
<table><tr><td>
<input type="submit" value="proceed"/>
</td></tr></table>
</form>
Wiem, że mogę wybierać elementy, które są wnukami, ale nie mogę wybrać wnuk-pradziadków o jakiejkolwiek głębi. Na przykład:
//form[@id='myform']/*/input[@type='submit']
wybiera tylko wnuki, nie ma dalszych głębin.//form[@id='myform']/*/*/input[@type='submit']
wybiera tylko prawnuki, nie ma dalszych ani mniejszych głębokości.//form[@id='myform']/**/input[@type='submit']
nie jest poprawny.
Jak więc niezawodnie wybrać ten przycisk przesyłania bez używania identyfikatorów elementów?
//form//input
zwraca wartość null w C #, podczas gdy Chrome może znaleźć 35 danych wejściowych przy użyciu tej samej ścieżki xpathJeśli używasz XmlDocument i XmlNode.
Mówić:
Posługiwać się:
To zależy od używanego narzędzia. Ale .// wybierze dowolne dziecko, dowolną głębokość z węzła odniesienia.
źródło
źródło
Możesz to również zrobić za pomocą selektorów css:
spacja między elementami w elektorze css oznacza wyszukiwanie danych wejściowych [type = 'submit'], które elementy na dowolnej głębokości formularza nadrzędnego # element myform
źródło