Suponha que eu tenha isto (simplificado):
<form id="myform">
<!-- some input fields -->
<input type="submit" value="proceed"/>
</form>
Em seguida, posso selecionar o botão enviar pelo XPath //form[@id='myform']/input[@type='submit']
. Ótimo.
No entanto, meus modelos podem mudar e eu quero ser flexível na profundidade em que o botão enviar está localizado. Pode ser colocado em uma mesa, assim:
<form id="myform">
<!-- some input fields -->
<table><tr><td>
<input type="submit" value="proceed"/>
</td></tr></table>
</form>
Eu sei que posso selecionar elementos que são netos, mas não posso selecionar grand-grand-grand -...- childeren de qualquer profundidade. Por exemplo:
//form[@id='myform']/*/input[@type='submit']
seleciona apenas netos, sem maiores profundidades.//form[@id='myform']/*/*/input[@type='submit']
seleciona apenas netos, nem mais nem menos profundidades.//form[@id='myform']/**/input[@type='submit']
não é válido.
Então, como faço para selecionar este botão de envio de forma confiável sem usar IDs de elemento?
//form//input
retorna null em C # enquanto o Chrome pode encontrar 35 entradas usando o mesmo xpathSe você estiver usando o XmlDocument e o XmlNode.
Dizer:
Usar:
Depende da ferramenta que você usa. Mas .// selecionará qualquer filho, qualquer profundidade de um nó de referência.
fonte
fonte
Além disso, você pode fazer isso com seletores de css:
espaço entre os elementos no css elector significa pesquisar a entrada [type = 'submit'] que os elementos em qualquer profundidade do formulário pai # elemento myform
fonte