Blog > Identificando elementos com XPath

28/jan

Nest post iremos conhecer um pouco sobre o XPath, uma linguagem de consulta em documentos de estrutura XML (como HTML por exemplo), muito utilizada em diversas linguagens de programação, e extremamente útil na identificação de elementos para automação de testes de software em plataforma web.

Introdução

O XPath é uma linguagem de consulta, semelhante a expressão regular, para pesquisa em documentos com estrutura XML (como HTML por exemplo). É um recurso extremamente útil e muito utilizado durante a criação de scripts de testes de software em plataforma web. 

Softwares de automação de testes são utilizados para simular a ação de usuários reais através de interações diretas com a aplicação sob teste. Para isso, é necessário que os elementos contidos na aplicação sejam identificados pela ferramentas de automação de testes, para que então, ações (cliques, digitação, etc) sejam executadas sobre eles.

Vamos usar o código abaixo para trabalhar nossos exemplos:

<html>
   <body>
      <table>
         <tr>
            <th>Ação</th>
            <th>Nome</th>
         </tr>
         <tr>
            <td><input type=“button” value=“Promover” id=“btnPromover" /></td>
            <td>Cristiano Caetano</td>
         </tr> 
         <tr>
             <td><input type=“button” value=“Promover” /></td>
             <td>Elias Nogueira</td>
         </tr>
         <tr>
             <td><input type=“button” value=“Promover” /></td>
             <td>Júlio de Lima</td>
         </tr>    
      </table>
   </body>
</html>

O código acima gera a seguinte visualização:

Tradicionalmente, existem duas formas (que oferecem menos risco), de identificar um elemento contido em um documento, são elas: baseado na árvore do elemento e baseado nas propriedades do elemento.

Baseado na árvore do elemento

Onde eu mostro para a ferramenta de automação toda a árvore do elemento:

Ação Identificação do elemento
Clicar Documento HTML > Corpo > Tabela > 2a Linha > 1a Coluna > Botão Promover  

Obs. Neste caso, clicaria sobre o botão “Promover" do “Cristiano Caetano”.

Baseado nas propriedades do elemento

Onde eu mostro para a ferramenta de automação propriedade(s) que destacam o elemento dos demais:

Ação Identificação do elemento
Clicar Valor: “Promover”, Tipo: “button”, Id: “btnPromover”  

Obs. Neste caso, clicaria sobre o botão “Promover" do “Cristiano Caetano”.

Usando o XPath

Usamos o XPath para informar à ferramenta de automação como encontrar os elementos, a partir da árvore ou a partir das propriedades do elemento, usando uma linguagem simples, comum a todas as ferramentas e linguagens de programação que possuem suporte à linguagem.

Em XPath, identificaríamos o botão “Promover", do “Cristiano Caetano”, desta forma:

Baseado na árvore do elemento

Ação Identificação do elemento
Clicar /html/body/table/tr[2]/td[1]/input

Baseado nas propriedades do elemento

Ação Identificação do elemento
Clicar //input[@id=“btnPromover”]

Os exemplos acima deixam duas coisas bem claras:

  1. A linguagem XPath é capaz de identificar elementos através da árvore e através das propriedades;
  2. É mais simples e seguro identificar elementos que possuem propriedades que o tornam únicos.

Entendendo a simbologia básica

Símbolo Descrição
/ Pesquisa a partir da raiz da árvore
// Pesquisa em toda a árvore
[ ] Definição das propriedades de um elemento
@ Propriedade do elemento
* Todos os elementos

Exemplos:

Expressão XPath Descrição
/html/body/table Encontra todas as tabelas contidas dentro da tag "body", que está dentro da tag “html"
//input[1] Encontra o primeiro elemento “input”, pesquisando em toda a árvore
//table/tr/td[1] Encontra o primeiro elemento “td” contido nas tags “tr” das tags “table”, pesquisando em toda a árvore
//table/* Encontra todos os elementos contidos nas tags “table", pesquisando em toda a árvore
//*[@id=“btnPromover”] Encontra um elemento que tenha a propriedade “id”, e que esta seja igual a “btnPromover", pesquisando em toda a árvore
//input[@type=“button”][@id=“btnPromover”] Encontra um elemento “input” que tenha a propriedade “type” igual a “btnPromover” e que tenha a propriedade “id” igual a “btnPromover", pesquisando em toda a árvore

Utilizando métodos do XPath

Encontrando um elemento através do texto contido nele

O método “text()” é utilizado para encontrar elementos através do texto contido dentro deles, por exemplo, queremos encontrar o elemento “td” que possui o texto “Júlio de Lima”:

//td[text()="Júlio de Lima"]

Encontrando o primeiro elemento de um escopo

Através do método “first()” é possível identificar o primeiro elemento contido em um determinado escopo, por exemplo, queremos identificar o elemento “input” contido na primeira coluna da primeira linha de uma tabela:

//table/tr[first()]/td[1]/input

Podemos utilizar operadores numéricos juntamente com este método, por exemplo, se quisermos identificar o elemento “input” contido na primeira coluna da segunda linha de uma tabela:

//table/tr[first()+1]/td[1]/input

Encontrando o último elemento de um escopo

Através do método “last()” é possível identificar o último elemento contido em um determinado escopo, por exemplo, queremos identificar o elemento “input” contido na primeira coluna da última linha de uma tabela:

//table/tr[last()]/td[1]/input

Podemos utilizar operadores numéricos juntamente com este método, por exemplo, se quisermos identificar o elemento “input” contido na primeira coluna da penúltima linha de uma tabela:

//table/tr[last()-1]/td[1]/input

Usando Comparações

Usando comparações de conteúdos podemos encontrar elementos baseados no texto contido dentro de seus filhos. Por exemplo, queremos identificar o elemento “input” que está dentro da primeira coluna, de uma linha na qual a segunda coluna possui o texto “Elias Nogueira”:

//tr[td[2]="Elias Nogueira"]/td[1]/input

Ferramentas

Algumas ferramentas, como o Firepath por exemplo, abordada em detalhes neste post do Elias Nogueira, podem auxiliar na descoberta da XPath de um elemento.

Conclusão

Como vemos, o XPath pode ser utilizado para identificar elementos de diversas formas, uma vez que haja acesso a documentos de estrutura XML como por exemplo, aplicações web, construídas em HTML.

Fontes

http://pt.wikipedia.org/wiki/XPath
http://www.w3schools.com/xpath/xpath_syntax.asp

POSTS RELACIONADOS

AGENDA

CURSOS RELACIONADOS