2010-02-02 26 views
6

Esta es mi primera publicación aquí y dado que he visto muchas respuestas excelentes, pensé que lo probaría.Elemento XPath que contiene un atributo y el elemento primario de su padre contiene otro atributo

Estoy tratando de usar XPath para obtener un elemento específico en un documento HTML. He aquí un ejemplo con sede fuera de 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> 

Utilizando el ejemplo anterior (que se simplifica a los efectos de pedir ayuda), me gustaría ser capaz de encontrar el elemento de entrada cuyo nombre = 'q' y que tiene un ancestro que tiene 5 padres con el nombre = 'f'.

Por ejemplo, si tuviera que hacer esto en la sintaxis de S.W.A.T. que es una biblioteca de automatización de pruebas web de código abierto situado en http://ulti-swat.wikispaces.com, la sintaxis sería como sigue:

| AssertElementExists | Expresión | name = q; parentElement.parentElement.parentElement.parentElement.parentElement.name = f | entrada |

Acabo de empezar 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 con conocimiento puede ayudar?

Respuesta

13

Usted podría 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' 

Se puede usar esta escritorio XPath Visualizer para probar sus expresiones XPath. A basic tutorial can be found here.

Cuestiones relacionadas