Supongamos que tengo esto (simplificado):
<form id="myform">
<!-- some input fields -->
<input type="submit" value="proceed"/>
</form>
Entonces puedo seleccionar el botón enviar por XPath //form[@id='myform']/input[@type='submit']
. Excelente.
Sin embargo, mis plantillas pueden cambiar y quiero ser flexible en la profundidad en la que se encuentra el botón de enviar. Podría colocarse en una tabla, como esta:
<form id="myform">
<!-- some input fields -->
<table><tr><td>
<input type="submit" value="proceed"/>
</td></tr></table>
</form>
Sé que puedo seleccionar elementos que son nietos, pero no puedo seleccionar grand-grand-grand -...- hijos de ninguna profundidad. P.ej:
//form[@id='myform']/*/input[@type='submit']
solo selecciona nietos, no más profundidades.//form[@id='myform']/*/*/input[@type='submit']
Solo selecciona nietos-nietos, ni más ni menos profundidad.//form[@id='myform']/**/input[@type='submit']
no es válido.
Entonces, ¿cómo selecciono este botón de envío de manera confiable sin usar ID de elemento?
//form//input
devuelve nulo en C # mientras que Chrome puede encontrar 35 entradas usando el mismo xpathSi está utilizando XmlDocument y XmlNode.
Decir:
Utilizar:
Depende de la herramienta que uses. Pero .// seleccionará cualquier hijo, cualquier profundidad de un nodo de referencia.
fuente
fuente
Además, puedes hacerlo con selectores css:
espacio entre elementos en elector css significa buscar entrada [tipo = 'enviar'] esos elementos en cualquier profundidad del formulario principal # elemento myform
fuente