xpath axes dynamic xpath selenium webdriver
Este tutorial explica os eixos XPath para XPath dinâmico no Selenium WebDriver com a ajuda de vários eixos XPath usados, exemplos e explicação da estrutura:
No tutorial anterior, aprendemos sobre as funções XPath e sua importância na identificação do elemento. No entanto, quando mais de um elemento tem orientação e nomenclatura muito semelhantes, torna-se impossível identificar o elemento exclusivamente.
=> Confira o Guia de Treinamento do Perfect Selenium aqui.
O que você aprenderá:
Compreendendo os eixos XPath
Vamos entender o cenário acima mencionado com a ajuda de um exemplo.
Pense em um cenário onde dois links com o texto “Editar” são usados. Nesses casos, torna-se pertinente entender a estrutura nodal do HTML.
Copie e cole o código abaixo no bloco de notas e salve-o como um arquivo .htm.
Edit Edit
A IU será semelhante à tela abaixo:
Declaração do Problema
P # 1) O que fazer quando até mesmo as funções XPath falham em identificar o elemento?
Responda: Nesse caso, usamos os eixos XPath junto com as funções XPath.
A segunda parte deste artigo trata de como podemos usar o formato HTML hierárquico para identificar o elemento. Começaremos obtendo algumas informações sobre os eixos XPath.
P # 2) O que são eixos XPath?
Responda: Um eixo XPath define o conjunto de nós relativo ao nó atual (contexto). É usado para localizar o nó relativo ao nó dessa árvore.
P # 3) O que é um nó de contexto?
que tipos de testes o pepino o ajuda a fazer?
Responda: Um nó de contexto pode ser definido como o nó que o processador XPath está olhando no momento.
Diferentes eixos XPath usados em testes de selênio
Existem treze eixos diferentes listados abaixo. No entanto, não vamos usar todos eles durante os testes do Selenium.
- antepassado : Este eixo indica todos os ancestrais relativos ao nó de contexto, chegando também até o nó raiz.
- antepassado ou eu: Este indica o nó de contexto e todos os ancestrais relativos ao nó de contexto e inclui o nó raiz.
- atributo: Isso indica os atributos do nó de contexto. Pode ser representado com o símbolo “@”.
- criança: Isso indica os filhos do nó de contexto.
- para baixo: Isso indica os filhos e netos e seus filhos (se houver) do nó de contexto. Isso NÃO indica o Atributo e o Namespace.
- descendente-ou-eu: Isso indica o nó de contexto e os filhos, e os netos e seus filhos (se houver) do nó de contexto. Isso NÃO indica o atributo e o namespace.
- Segue: Isso indica todos os nós que aparecem depois de o nó de contexto na estrutura HTML DOM. Isso NÃO indica descendente, atributo e namespace.
- seguinte irmão: Este indica todos os nós irmãos (mesmo pai do nó de contexto) que aparecer após o nó de contexto na estrutura HTML DOM. Isso NÃO indica descendente, atributo e namespace.
- namespace: Isso indica todos os nós de namespace do nó de contexto.
- pai: Isso indica o pai do nó de contexto.
- precedente: Isso indica todos os nós que aparecem antes o nó de contexto na estrutura HTML DOM. Isso NÃO indica descendente, atributo e namespace.
- irmão anterior: Este indica todos os nós irmãos (mesmo pai do nó de contexto) que aparecem antes o nó de contexto na estrutura HTML DOM. Isso NÃO indica descendente, atributo e namespace.
- auto: Este indica o nó de contexto.
Estrutura de eixos XPath
Considere a hierarquia abaixo para entender como os eixos XPath funcionam.
Consulte abaixo um código HTML simples para o exemplo acima. Copie e cole o código abaixo no editor do bloco de notas e salve-o como um arquivo .html.
Animal
Vertebrate
Fish
Mammal
Herbivore
Carnivore
Lion
Tiger
Other
Invertebrate
Insect
Crustacean
A página será semelhante a abaixo. Nossa missão é fazer uso dos eixos XPath para encontrar os elementos de maneira única. Vamos tentar identificar os elementos que estão marcados no gráfico acima. O nó de contexto é 'Mamífero'
# 1) Ancestral
Diário: Para identificar o elemento ancestral do nó de contexto.
XPath # 1: // div [@ class = ’Mammal’] / ancestor :: div
O XPath “// div [@ class =’ Mammal ’] / ancestor :: div” lança dois nós correspondentes:
- Vertebrado, por ser o pai do “Mamífero”, por isso também é considerado o ancestral.
- Animal, pois é o pai do pai de “Mamífero”, portanto, é considerado um ancestral.
Agora, só precisamos identificar um elemento que é a classe “Animal”. Podemos usar o XPath conforme mencionado abaixo.
XPath#2: //div[@class='Mammal']/ancestor::div[@class='Animal']
Se quiser chegar ao texto “Animal”, pode-se usar XPath abaixo.
# 2) Antepassado ou eu
Diário: Para identificar o nó de contexto e o elemento ancestral do nó de contexto.
XPath # 1: // div [@ class = ’Mammal’] / ancestor-or-self :: div
O XPath # 1 acima apresenta três nós correspondentes:
- Animal (ancestral)
- Vertebrado
- Mamífero (próprio)
# 3) Criança
Diário: Para identificar o filho do nó de contexto “Mamífero”.
XPath # 1: // div [@ class = ’Mammal’] / child :: div
XPath # 1 ajuda a identificar todos os filhos do nó de contexto “Mamífero”. Se você deseja obter o elemento filho específico, use XPath # 2.
XPath # 2: // div [@ class = ’Mammal’] / child :: div [@ class = ’Herbivore’] / h5
# 4) Descendente
Diário: Para identificar os filhos e netos do nó de contexto (por exemplo: ‘Animal’).
XPath # 1: // div [@ class = ’Animal’] / descendant :: div
Como Animal é o membro superior na hierarquia, todos os elementos filhos e descendentes estão sendo destacados. Também podemos alterar o nó de contexto para nossa referência e usar qualquer elemento que quisermos como o nó.
# 5) Descendente ou eu
Diário: Para encontrar o próprio elemento e seus descendentes.
XPath1: // div [@ class = ’Animal’] / descendant-or-self :: div
A única diferença entre descendente e descendente-ou-eu é que ele se destaca além de destacar os descendentes.
# 6) Seguindo
Diário: Para localizar todos os nós que seguem o nó de contexto. Aqui, o nó de contexto é o div que contém o elemento Mammal.
XPath: // div [@ class = ’Mammal’] / following :: div
Nos eixos seguintes, todos os nós que seguem o nó de contexto, seja filho ou descendente, estão sendo destacados.
# 7) Irmão seguidor
Diário: Para localizar todos os nós após o nó de contexto que compartilham o mesmo pai e são irmãos do nó de contexto.
XPath: // div [@ class = ’Mammal’] / following-sibling :: div
A principal diferença entre o irmão seguinte e o irmão seguinte é que o irmão seguinte pega todos os nós irmãos após o contexto, mas também compartilhará o mesmo pai.
# 8) Precedente
Diário: Leva todos os nós que vêm antes do nó de contexto. Pode ser o nó pai ou avô.
Aqui, o nó de contexto é Invertebrado e as linhas destacadas na imagem acima são todos os nós que vêm antes do nó Invertebrado.
# 9) Irmão precedente
Diário: Para encontrar o irmão que compartilha o mesmo pai que o nó de contexto e que vem antes do nó de contexto.
qual dos seguintes não está no estado de teste do sistema?
Como o nó de contexto é o Invertebrado, o único elemento que está sendo destacado é o Vertebrado, pois esses dois são irmãos e compartilham o mesmo pai 'Animal'.
# 10) Pai
Diário: Para encontrar o elemento pai do nó de contexto. Se o próprio nó de contexto for um ancestral, ele não terá um nó pai e não buscará nenhum nó correspondente.
Nó de contexto 1: Mamífero
XPath: // div [@ class = ’Mammal’] / parent :: div
Como o nó de contexto é Mamífero, o elemento com Vertebrado está sendo destacado por ser o pai do Mamífero.
Nó de contexto 2: Animal
XPath: // div [@ class = ’Animal’] / parent :: div
Como o nó animal em si é o ancestral, ele não destacará nenhum nó e, portanto, nenhum nó correspondente foi encontrado.
# 11) Próprio
Diário: Para encontrar o nó de contexto, o self é usado.
Nó de contexto: Mamífero
XPath: // div [@ class = ’Mammal’] / self :: div
Como podemos ver acima, o objeto Mammal foi identificado exclusivamente. Também podemos selecionar o texto “Mamífero usando o XPath abaixo.
XPath: // div [@ class = ’Mammal’] / self :: div / h4
Usos de eixos precedentes e posteriores
Suponha que você saiba que seu elemento de destino é quantas tags à frente ou atrás do nó de contexto, você pode destacar diretamente esse elemento e não todos os elementos.
Exemplo: precedente (com índice)
Vamos supor que nosso nó de contexto seja 'Outro' e queremos alcançar o elemento 'Mamífero', usaríamos a abordagem abaixo para fazer isso.
Primeiro passo: Simplesmente use precedente sem fornecer nenhum valor de índice.
XPath: // div [@ class = ’Other’] / precedente :: div
Isso nos dá 6 nós correspondentes, e queremos apenas um nó-alvo “Mamífero”.
Segundo passo: Dê o valor do índice [5] ao elemento div (contando para cima a partir do nó de contexto).
XPath: // div [@ class = ’Other’] / precedente :: div [5]
Desta forma, o elemento “Mamífero” foi identificado com sucesso.
Exemplo: a seguir (com índice)
Vamos supor que nosso nó de contexto seja 'Mamífero' e queremos atingir o elemento 'Crustáceo', usaremos a abordagem abaixo para fazer isso.
Primeiro passo: Simplesmente use o seguinte sem fornecer nenhum valor de índice.
XPath: // div [@ class = ’Mammal’] / following :: div
Isso nos dá 4 nós correspondentes, e queremos apenas um nó alvo “Crustáceo”
Segundo passo: Forneça o valor do índice [4] ao elemento div (conte adiante a partir do nó de contexto).
XPath: // div [@ class = ’Other’] / following :: div [4]
Desta forma, o elemento “Crustáceo” foi identificado com sucesso.
O cenário acima também pode ser recriado com irmão anterior e irmão seguinte aplicando a abordagem acima.
Conclusão
Identificação de objetos é a etapa mais crucial na automação de qualquer site. Se você conseguir adquirir a habilidade de aprender o objeto com precisão, 50% da sua automação estará concluída. Embora existam localizadores disponíveis para identificar o elemento, há alguns casos em que mesmo os localizadores falham em identificar o objeto. Nesses casos, devemos aplicar abordagens diferentes.
Aqui, usamos funções XPath e eixos XPath para identificar exclusivamente o elemento.
Concluímos este artigo anotando alguns pontos a serem lembrados:
- Você não deve aplicar eixos 'ancestrais' no nó de contexto do próprio nó de contexto é o ancestral.
- Você não deve aplicar eixos 'pais' no nó de contexto do nó de contexto em si é o ancestral.
- Você não deve aplicar eixos 'filhos' no nó de contexto do próprio nó de contexto é o descendente.
- Você não deve aplicar eixos “descendentes” no nó de contexto do próprio nó de contexto que é o ancestral.
- Você não deve aplicar eixos de 'seguimento' no nó de contexto, é o último nó na estrutura do documento HTML.
- Você não deve aplicar eixos 'precedentes' no nó de contexto, é o primeiro nó na estrutura do documento HTML.
Aprendizagem feliz !!!
=> Visite aqui para a série exclusiva de tutoriais de treinamento do Selenium.
Leitura recomendada
- Funções XPath para XPath dinâmico no Selenium
- Tutorial Cucumber Selenium: Cucumber Java Selenium WebDriver Integration
- Localizadores de selênio: identificar elementos da web usando XPath no selênio (exemplos)
- Introdução ao Selenium WebDriver - Selenium Tutorial # 8
- Tutorial do ChromeDriver Selenium: testes do Selenium Webdriver no Chrome
- Implementação do nosso primeiro script WebDriver - Selenium WebDriver Tutorial # 10
- 30+ Melhores Tutoriais de Selênio: Aprenda Selênio com Exemplos Reais
- Manipulando tabelas, frames e elementos dinâmicos da Web no Selenium Script - Selenium Tutorial # 18