xpath functions dynamic xpath selenium
Este tutorial explica o uso de funções XPath na identificação de elementos com exemplos:
Antes de automatizar qualquer site é necessário identificar o objeto corretamente antes de podermos realizar qualquer operação no mesmo. Como sabemos, a maneira mais fácil de identificar o elemento é por atributos como ID, Nome, Link, Classe ou qualquer outro atributo exclusivo disponível com a tag onde o elemento reside.
Isso só é possível quando esses atributos estão presentes e / ou são exclusivos para que o objeto seja identificado corretamente.
=> Dê uma olhada no Guia para Iniciantes do Selenium aqui.
O que você aprenderá:
Visão geral das funções XPath
Vamos discutir o cenário em que os atributos não estão prontamente disponíveis.
Declaração do Problema
Como identificamos o elemento se os localizadores como ID, Nome, Classe, Link, etc. não estão disponíveis na tag do elemento?
Isso pode ser entendido claramente com o exemplo dado:
Logar em Twitter
Como você pode ver na imagem acima, o cabeçalho “Log in to Twitter” não possui atributos anexados. Dito isso, não podemos usar qualquer um dos localizadores como ID, Classe, Link ou Nome para identificar este elemento.
como executar o arquivo .jar
O plugin Firepath da ferramenta Firefox gerou o seguinte XPath:
// * (@ id = ’page-container’) / div / div (1) / h1
Não recomendamos o uso do XPath acima como a estrutura da página ou o id, pois ele pode mudar dinamicamente. Se fizermos uso desse XPath instável, poderemos ter que mudar o XPath com mais freqüência, o que consome mais tempo de manutenção. Este é um caso em que não podemos usar a expressão XPath genérica com localizadores como id, classe, nome ou link.
Solução
Identificando o elemento usando as funções XPath por texto
Como temos o texto visível “Log in to Twitter” disponível conosco, faríamos uso do seguinte Funções XPath para identificar exclusivamente o elemento.
- contém () (por texto)
- começa com () (por texto)
- texto()
Funções XPath como contains (), starts-with () e text (), quando usadas com a ajuda do texto “Log in to Twitter”, nos ajudariam a identificar o elemento corretamente e outras operações podem ser realizadas no mesmo.
# 1) Método Contains ():
Sintaxe: Para localizar o elemento da web “Log in to Twitter”, use qualquer uma das seguintes expressões XPath que incluem o método contains ().
Por texto
- // h1 (contains (text (), 'Log in to'))
- // h1 (contains (text (), ’in to Twitter’))
Nota: 1 nó correspondente indica que o elemento da web foi identificado com sucesso.
A partir do exemplo acima, está claro que o método contains () não precisa do texto absoluto (completo) para identificar o elemento corretamente. O texto parcial é suficiente para identificá-lo corretamente. No entanto, o texto parcial selecionado deve ser exclusivo. O usuário pode identificar facilmente o elemento, mesmo se a orientação da página for alterada com a ajuda do método contains ().
Observe que, mesmo se você usar o texto absoluto “Log in to Twitter” com o método contains (), o elemento seria identificado corretamente.
# 2) Método Starts-with ():
Sintaxe: Para encontrar o elemento da web “Log in to Twitter’ ”, use as seguintes expressões XPath de exemplo que têm o método starts-with ().
Por texto
- // h1 (começa com (text (), 'Faça login'))
- // h1 (começa com (text (), 'Faça login em'))
A partir do exemplo acima, está claro que o método de funções XPath começa com () requer pelo menos a primeira palavra (“Log”) do texto visível para identificar exclusivamente o elemento. Também funciona no texto parcial e falhará se não incluirmos a primeira palavra do texto parcialmente visível.
Observe que, mesmo se você usar o texto absoluto “Log in to Twitter” com o método starts-with (), o elemento será identificado corretamente.
XPath inválido para começa com (): // h1 (começa com (text (), ’no Twitter’))
Nota: Nenhum nó correspondente indica que o elemento da web não foi identificado.
# 3) Método Text ():
Sintaxe: Para localizar o elemento da web “Log in to Twitter”, use a seguinte expressão XPath que possui o método text ().
Nesta expressão, usamos o texto absoluto que está presente entre a tag inicial. Se usarmos a função text () com Xpath parcial como fazemos em contains () e starts-with (), não seríamos capazes de encontrar o elemento.
Xpath inválido para texto ():
Identificando o elemento usando as funções XPath por atributo
Usamos as funções XPath (contém ou começa com) com atributo quando há alguns valores de atributo identificados exclusivamente disponíveis na tag do contêiner. Os atributos são acessados usando o símbolo “@”.
Isso pode ser entendido claramente com o dado exemplo:
Logar em Google
# 1) Método Contains ():
Sintaxe: Para identificar de forma exclusiva o elemento do botão 'Estou com sorte' com a ajuda da função XPath contains () com a ajuda de attribute.
(i) Por atributo de valor:
- // input (contains (@ value, ’Feeling’))
- // input (contains (@ value, ’Lucky’))
A partir das imagens acima, entende-se que usar o valor do atributo com o método “Feeling” ou “Lucky” com o método contains () identificará exclusivamente o elemento. No entanto, é importante notar que mesmo se usarmos o conteúdo completo do atributo Value, ele identificará o elemento corretamente.
(ii) Atributo Por Nome:
//input(contains(@name=’btnI’))
O caso inválido para a função XPath com o atributo:
Precisamos ter muito cuidado ao selecionar o atributo a ser usado com os métodos contains () e starts-with (). Se o valor do atributo não for único, não seremos capazes de identificar exclusivamente o elemento.
Suponha que, se pegarmos o atributo 'tipo' ao identificar o botão 'Estou com sorte', o XPath não funcionará.
2 nós correspondentes indicam que o elemento não foi identificado corretamente. Aqui, o valor do atributo type não é único.
# 2) Método Starts-with ():
O método starts-with () com o atributo é muito útil quando temos que encontrar os elementos cuja parte anterior do atributo permanece fixa enquanto a parte posterior continua mudando. Essa abordagem é muito útil quando os objetos estão alterando dinamicamente o valor de seus atributos. Isso também pode ser usado se quisermos capturar tipos semelhantes de elementos.
Vamos para entrar no Facebook
Inspecione a primeira caixa de texto “Nome” e a segunda caixa de texto “Sobrenome” do formulário de inscrição.
A primeira caixa de texto “Nome” é identificada.
A segunda caixa de texto “Sobrenome” é identificada.
Em ambas as caixas de texto identificadas para Sign up for Facebook, a parte inicial dos atributos de id permanece inalterada.
ID do primeiro nome = “u_0_2”
ID do sobrenome = ’u_0_4”
Este é o cenário onde podemos usar o atributo starts-with () para obter todos os elementos sob esse tipo de atributo id. Observe que estamos tomando esses dois campos apenas para nossa referência. No entanto, pode haver mais campos na tela com id's que começam com “u_0_”.
Começa com () (Por id de atributo)
//input(starts-with(@id,”u_0_”))
Nota importante: Aqui, usamos aspas duplas em vez de aspas simples. Mas as aspas simples também funcionarão com o método começa com.
11 nós correspondentes indicam que este XPath identificou todos os elementos cujos ids começam com “u_0_”. A última parte do id (2 para nome, 4 para sobrenome, etc.) determina como identificamos exclusivamente o elemento.
Podemos usar o atributo de função starts-with onde precisamos coletar o tipo semelhante de elementos em uma lista e escolher dinamicamente um deles, contornando o argumento em um método genérico para identificar exclusivamente o elemento.
Siga o exemplo abaixo para usar a função começa com a nosso favor.
Código de amostra:
/* Generic Method */ public void xpathLoc(String identifier){ //The below step identifies the element “First Name” uniquely when the argument is “2” WebElement E1=d1.findElement(By.xpath('//input(starts-with(@id,”u_0_”+identifier ))')); E1.sendKeys(“Test1”); /* This step enters the value of First Name as “Test 1” */ } /* Main Method */ public static void main(String() args) { xpathLoc(“2”); --- This step calls the xpathLoc() method to identify the first name. }
Nota: O Eclipse pode não permitir o uso de aspas duplas. Você pode ter que recorrer a códigos diferentes para tornar o XPath dinâmico.
O código de amostra é fornecido para referência. Você pode aprimorá-lo para caber em todos os elementos e operações que deseja realizar e os valores que deseja inserir (no caso de campos de texto) para tornar o código mais versátil.
Conclusão
Este artigo explicou como podemos usar as Funções XPath contains (), starts-with () e text () com atributo e texto para identificar exclusivamente os elementos na estrutura HTML DOM.
Abaixo estão algumas das observações que podemos desenhar para as funções XPath:
- Use o método “contains ()” no XPath se você souber o texto ou atributo visível da constante parcial.
- Use o método “starts-with ()” no XPath se você souber o texto ou atributo visível da constante parcial inicial.
- Você também pode usar o método contains () e starts-with () com texto absoluto ou atributo.
- Use o método “text ()” no XPath se estiver ciente do texto visível absoluto.
- Você não pode usar o método text () com o texto parcial.
- Você não pode usar o método starts-with () se o texto inicial não for usado no XPath ou se o texto inicial estiver mudando constantemente.
No próximo tutorial, aprenderemos como usar os eixos XPath com funções XPath para aprimorar ainda mais a localização dos elementos na página da Web disponível.
=> Leia a série de treinamento Easy Selenium.
Leitura recomendada
- Localizadores de selênio: identificar elementos da web usando XPath no selênio (exemplos)
- Manipulando tabelas, frames e elementos dinâmicos da Web no Selenium Script - Selenium Tutorial # 18
- Funções de string Python
- Xpath Extractor Post-Processor no JMeter
- Selenium Encontrar Elemento por Tutorial de Texto com Exemplos
- Tutorial Cucumber Selenium: Cucumber Java Selenium WebDriver Integration
- Um tutorial XPath abrangente - linguagem de caminho XML
- Introdução ao Selenium WebDriver - Selenium Tutorial # 8