Elemento XPath que contém um atributo e cujo pai dos pais contém outro atributo
Pergunta
Este é o meu primeiro post aqui e, como já vi muitas respostas excelentes, pensei em tentar.
Estou tentando usar o XPath para obter um elemento específico em um documento HTML. Aqui está um exemplo baseado na página do Google Web:
<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 o exemplo acima (que é simplificado para fins de pedir ajuda), gostaria de encontrar o elemento de entrada cujo nome = 'q' e quem tem um ancestral que tem 5 pais com o nome = 'f '.
Por exemplo, se eu fizesse isso na sintaxe do SWAT, que é uma biblioteca de testes de automação de código-fonte aberto localizado em http://ulti-swat.wikispaces.com, a sintaxe seria a seguinte:
| AssertElementExists | Expressão | Nome = Q; ParentElement.ParenteLement.parenteLement.parenteLement.parenteLement.name = f | Entrada |
Comecei a aprender XPath e estou tentando entender como combinar predicados com eixos. É possível fazer expressões como essa com XPath? Em caso afirmativo, alguém pode ter conhecimento, por favor ajude?
Solução
Você poderia fazer:
//input[@name='q' and ancestor-or-self::*[@name='f']]
// -- input element whose name='q' and who has an ancestor with the name='f'
ou
//input[@name='q' and ../../../../../../*[@name='f']]
// -- input element whose name='q' and who is 5 parents up with the name='f'
Você pode usar este desktop Visualizador XPath Para testar suas expressões XPath. UMA O tutorial básico pode ser encontrado aqui.