XPath contém, irmão seguinte, ancestral & Selênio E / OU

Índice:

Anonim

Se um XPath simples não puder encontrar um elemento da web complicado para nosso script de teste, precisamos usar as funções da biblioteca XPath 1.0. Com a combinação dessas funções, podemos criar XPath mais específico. Vamos discutir 3 dessas funções -

  1. Contém
  2. Irmão
  3. Antepassado
  4. E OU
  5. Pai
  6. Começa com
  7. Eixos XPath

Vamos estudá-los em detalhes -

O que contém () no selênio?

contains () no Selenium é uma função dentro da expressão Xpath que é usada para pesquisar os elementos da web que contêm um determinado texto. Podemos extrair todos os elementos que correspondem ao valor de texto fornecido usando a função XPath contains () em toda a página da web. Contém em XPath tem capacidade de localizar o elemento com texto parcial.

Ex. Aqui, estamos pesquisando uma âncora que contém texto como 'SAP M'.

"// h4 / a [contém (text (), 'SAP M')]"

NOTA: Você pode praticar o seguinte exercício XPath neste http://demo.guru99.com/test/selenium-xpath.html

O que é irmão no Selenium Webdriver?

Um irmão no Selenium Webdriver é uma função usada para buscar um elemento da web que é irmão do elemento pai. Se o elemento pai for conhecido, então o elemento web pode ser facilmente encontrado ou localizado, podendo usar o atributo sibling da expressão Xpath no selenium webdriver.

Exemplo de irmão em XPath: aqui, com base no elemento irmão de 'a', estamos encontrando 'h4'

"// div [@ class = 'canvas- graph'] // a [@href = '/ accounting.html'] [i [@ class = 'icon-usd']] / following-sibling :: h4"

Ancestral : Para encontrar um elemento com base no elemento pai, podemos usar o atributo ancestral do XPath.

Vamos entender essas 3 funções usando um exemplo -

Etapas de teste

Nota: Desde a data de criação do tutorial, a página inicial do Guru99 foi atualizada, então use o site de demonstração para executar testes

  1. Vá para http://demo.guru99.com/test/guru99home/
  2. Na seção 'Alguns de nossos cursos mais populares', pesquise todos os Web Elements que são irmãos de um WebElement cujo texto é 'SELENIUM'
  3. Encontraremos o elemento usando o texto XPath contém, ancestral e função de irmão.

USANDO Contém e irmão XPath

import java.util.List;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;public class SiblingAndParentInXpath {@Testepublic void testSiblingAndParentInXpath () {Driver WebDriver;String driverPath = "C: \\ geckodriver.exe";System.setProperty ("webdriver.gecko.driver", driverPath);driver = novo FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Pesquisar elemento dentro de 'Curso popular' que são irmãos do controle 'SELENIUM'. Aqui, primeiro encontraremos um h2 cujo texto é '' Alguns de nossos cursos mais populares ', então passamos para seu elemento pai que é um' div ', dentro deste div encontraremos um link cujo texto é' SELENIUM 'e, por fim, encontraremos todos os elementos irmãos deste link (' SELENIUM ')List  dateBox = driver.findElements (By.xpath ("// h2 [contains (text (), 'Alguns de nossos cursos mais populares')] / parent :: div // div [// a [text () = 'SELENIUM']] / following-sibling :: div [@ class = 'rt-grid-2 rt-omega'] "));// Imprime todos os que são irmãos do elemento nomeado como 'SELENIUM' em 'Curso popular'para (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}driver.close ();}}

O resultado será como:

Ancestral em Selenium Webdriver

Ancestral no Selenium Webdriver é uma função usada para encontrar o ancestral de um membro específico na camada especificada. O nível do ancestral a ser retornado ou o nível do ancestral em relação ao nível do membro pode ser especificado explicitamente. Ele retorna o número de etapas hierárquicas do ancestral, localizando o ancestral especificado que o usuário deseja.

Agora suponha que precisamos Pesquisar todos os elementos na seção 'Curso popular' com a ajuda do ancestral da âncora cujo texto é 'SELENIUM'

Aqui, nossa consulta xpath será como

"//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega '] / following-sibling :: div"

Código Completo

import java.util.List;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.Keys;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;public class AncestorInXpath {@Testepublic void testAncestorInXpath () {Driver WebDriver = novo FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Pesquisar todos os elementos na seção 'Curso popular'// com a ajuda do ancestral da âncora cujo texto é 'SELENIUM'List  dateBox = driver.findElements (By.xpath ("// div [.// a [text () = 'SELENIUM']] / ancestor :: div [@ class = 'rt-grid-2 rt- omega '] / seguinte-irmão :: div "));// Imprime todos os que são irmãos do elemento nomeado como 'SELENIUM' em 'Curso popular'para (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}driver.quit ();}}

A saída será semelhante a-

Usando AND e OR

Usando AND e OR, você pode colocar 2 condições em nossa expressão XPath.

  • No caso de AND, as duas condições devem ser verdadeiras, então apenas ele encontra o elemento.
  • No caso de OR, qualquer uma das 2 condições deve ser verdadeira, então apenas ela encontra o elemento.

Aqui, nossa consulta XPath será como

Xpath = // * [@ type = 'submit' OR @ name = 'btnReset']
Xpath = // input [@ type = 'submit' and @ name = 'btnLogin']

Etapas do teste:

  1. Vá para http://demo.guru99.com/v1/
  2. Na seção, usaremos o site de demonstração acima para pesquisar elementos com diferentes funções do XPath.

Você encontrará um elemento usando os eixos AND e OR, pai, começa com e XPath

AND OR Exemplo

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;classe pública AND_OR {public static void main (String [] args) {Driver WebDriver;WebElement w, x;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = novo ChromeDriver ();// Inicie o aplicativodriver.get ("https://www.guru99.com/");// Pesquisar elemento usando OR no xpathw = driver.findElement (By.xpath ("// * [@ type = 'submit' OR @ name = 'btnReset']"));// Imprime o texto do elementoSystem.out.println (w.getText ());// Pesquisar elemento usando AND no xpathx = driver.findElement (By.xpath ("// input [@ type = 'submit' and @ name = 'btnLogin']"));// Imprime o texto do elemento pesquisadoSystem.out.println (x.getText ());// Feche o navegadordriver.quit ();}}

O que é o pai no selênio?

Pai no Selenium é um método usado para recuperar o nó pai do nó atual selecionado na página da web. É muito útil na situação em que você seleciona um elemento e precisa obter o elemento pai usando o Xpath. Este método também é usado para obter o pai do pai.

Aqui, nossa consulta XPath será como

Xpath = // * [@ id = 'rt-feature'] // pai :: div

XPath usando pai

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;public class Parent {public static void main (String [] args) {Driver WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = novo ChromeDriver ();// Inicie o aplicativodriver.get ("https://www.guru99.com/");// Pesquise o elemento usando PARENTw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // pai :: div"));// Imprime o texto do elemento pesquisadoSystem.out.println (w.getText ());// Feche o navegadordriver.quit ();}}

Começa com

Usando a função Starts-with, você pode encontrar o elemento cujo atributo muda dinamicamente na atualização ou em outras operações como clicar, enviar, etc.

Aqui, nossa consulta XPath será como

Xpath = // rótulo [começa com (@ id, 'mensagem')]

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;public class StartsWith {public static void main (String [] args) {Driver WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = novo ChromeDriver ();// Inicie o aplicativodriver.get ("https://www.guru99.com/");// Pesquise o elemento usando começa comw = driver.findElement (By.xpath ("// rótulo [começa com (@ id, 'mensagem')]"));// Imprime o texto do elemento pesquisadoSystem.out.println (w.getText ());// Feche o navegadordriver.quit ();}}

Eixos Xpath

Usando eixos XPath, você pode encontrar os elementos dinâmicos e muito complexos em uma página da web. Os eixos XPath contêm vários métodos para localizar um elemento. Aqui, discutirei alguns métodos.

seguinte : Esta função retornará o elemento imediato do componente específico.

Aqui, nossa consulta XPath será como

Xpath = // * [@ type = 'text'] // seguindo :: input

XPath usando o seguinte

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;public class Seguindo {public static void main (String [] args) {Driver WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = novo ChromeDriver ();// Inicie o aplicativodriver.get ("https://www.guru99.com/");// Pesquise o elemento usando o método seguintew = driver.findElement (By.xpath ("// * [@ type = 'text'] // seguinte :: input"));// Imprime o texto do elemento pesquisadoSystem.out.println (w.getText ());// Feche o navegadordriver.quit ();}}

Precedente: esta função retornará o elemento anterior do elemento específico.

Aqui, nossa consulta XPath será como

Xpath = // * [@ type = 'submit'] // precedendo :: input

XPath usando precedente

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;public class Preceding {public static void main (String [] args) {Driver WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = novo ChromeDriver ();// Inicie o aplicativodriver.get ("https://www.guru99.com/");// Pesquise o elemento usando o método anteriorw = driver.findElement (By.xpath ("// * [@ type = 'submit'] // precedente :: input"));// Imprime o elemento pesquisadoSystem.out.println (w.getText ());// Feche o navegadordriver.quit ();}}

d) Descendente: Esta função retornará o elemento descendente do elemento particular.

Aqui, nossa consulta XPath será como

Xpath = // * [@ id = 'rt-feature'] // descendente :: a

XPath usando Descendant

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;public class Descendant {public static void main (String [] args) {Driver WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = novo ChromeDriver ();// Inicie o aplicativodriver.get ("https://www.guru99.com/");// Pesquise o elemento usando o método descendentew = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // descendente :: a"));// Imprime o elemento pesquisadoSystem.out.println (w.getText ());// Feche o navegadordriver.quit ();}}

Resumo

  • Existem algumas situações em que o XPath regular não pode ser usado para localizar um elemento. Em tal situação, precisamos de funções diferentes da consulta xpath.
  • Existem algumas funções XPath importantes, como XPath contém, pai, ancestrais, irmão seguinte, etc.
  • Com a ajuda dessas funções, você pode criar expressões XPath complexas.