Elemento XPath que contiene un atributo y cuyo padre contiene otro atributo
Pregunta
Esta es mi primera publicación aquí y, como he visto muchas respuestas excelentes, pensé que lo intentaría.
Estoy tratando de usar XPATH para obtener un elemento específico en un documento HTML. Aquí hay un ejemplo basado en la página web de Google:
<html>
<head>
<title>XPath Test</title>
</head>
<body>
<form name='f'>
<table>
<tbody>
<tr>
<td>
<input name='q' type="text" />
</td>
</tr>
</tbody>
</table>
</form>
</body>
</html>
Usando el ejemplo anterior (que se simplifica para pedir ayuda), me gustaría poder encontrar el elemento de entrada cuyo nombre = 'Q' y que tiene un antepasado que tiene 5 padres con el nombre = 'F '.
Por ejemplo, si tuviera esto en la sintaxis de SWAT, que es una biblioteca de pruebas de automatización web de código abierto ubicada en http://ulti-swat.wikispaces.com, la sintaxis sería la siguiente:
| AfirmareMeMexists | Expression | name = Q; ParentElement.ParentElement.ParentElement.ParentElement.ParentElement.name = f | Entrada |
Acabo de comenzar a aprender XPATH y estoy tratando de entender cómo combinar predicados con ejes. ¿Es posible hacer expresiones como esta con XPath? Si es así, ¿alguien puede ayudarlo por favor?
Solución
Podrías hacer:
//input[@name='q' and ancestor-or-self::*[@name='f']]
// -- input element whose name='q' and who has an ancestor with the name='f'
o
//input[@name='q' and ../../../../../../*[@name='f']]
// -- input element whose name='q' and who is 5 parents up with the name='f'
Puedes usar este escritorio Visualizador xpath Para probar sus expresiones XPath. A El tutorial básico se puede encontrar aquí.