XPath contiene, siguiente hermano, antepasado y amp; Selenio Y / O

Tabla de contenido:

Anonim

Si un XPath simple no puede encontrar un elemento web complicado para nuestro script de prueba, necesitamos usar las funciones de la biblioteca XPath 1.0. Con la combinación de estas funciones, podemos crear XPath más específicos. Analicemos 3 de estas funciones:

  1. Contiene
  2. Hermano
  3. Antepasado
  4. Y O
  5. Padre
  6. Comienza con
  7. Ejes XPath

Estudiémoslos en detalle -

¿Qué contiene () en selenio?

contiene () en Selenium es una función dentro de la expresión Xpath que se utiliza para buscar los elementos web que contienen un texto en particular. Podemos extraer todos los elementos que coincidan con el valor de texto dado usando la función XPath contains () en toda la página web. Contiene en XPath tiene la capacidad de encontrar el elemento con texto parcial.

Ex. Aquí estamos buscando un ancla .contiene texto como 'SAP M'.

"// h4 / a [contiene (texto (), 'SAP M')]"

NOTA: Puede practicar el siguiente ejercicio XPath en este http://demo.guru99.com/test/selenium-xpath.html

¿Qué es Sibling en Selenium Webdriver?

Un hermano en Selenium Webdriver es una función que se utiliza para buscar un elemento web que es hermano del elemento principal. Si se conoce el elemento principal, entonces el elemento web se puede encontrar o ubicar fácilmente y usar el atributo hermano de la expresión Xpath en selenium webdriver.

Hermano en XPath Ejemplo: Aquí, sobre la base del elemento hermano de 'a', estamos encontrando 'h4'

"// div [@ class = 'canvas- graph'] // a [@href = '/ Accounting.html'] [i [@ class = 'icon-usd']] / siguiente-hermano :: h4"

Ancestor : para encontrar un elemento sobre la base del elemento padre, podemos usar el atributo ancestor de XPath.

Entendamos estas 3 funciones usando un ejemplo:

Pasos de prueba

Nota: Desde la fecha de creación del tutorial, la página de inicio de Guru99 se ha actualizado, así que use el sitio de demostración para ejecutar pruebas.

  1. Vaya a http://demo.guru99.com/test/guru99home/
  2. En la sección 'Algunos de nuestros cursos más populares', busque todos los elementos web que sean hermanos de un elemento web cuyo texto sea 'SELENIUM'
  3. Encontraremos el elemento usando XPath text contains, ancestor y función de hermano.

USANDO Contiene y XPath Sibling

import java.util.List;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;importar org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;importar org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;public class SiblingAndParentInXpath {@Pruebapublic void testSiblingAndParentInXpath () {Controlador WebDriver;String driverPath = "C: \\ geckodriver.exe";System.setProperty ("webdriver.gecko.driver", ruta del controlador);controlador = nuevo FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Elemento de búsqueda dentro de 'Curso popular' que es hermano del control 'SELENIUM'. Aquí primero encontraremos un h2 cuyo texto es '' Algunos de nuestros cursos más populares ', luego pasamos a su elemento padre que es un' div ', dentro de este div encontraremos un enlace cuyo texto es' SELENIUM 'luego por fin encontraremos todos los elementos hermanos de este enlace (' SELENIUM ')List  dateBox = driver.findElements (By.xpath ("// h2 [contiene (text (), 'Algunos de nuestros cursos más populares')] / parent :: div // div [// a [text () = 'SELENIO']] / siguiente-hermano :: div [@ class = 'rt-grid-2 rt-omega'] "));// Imprime todos los que son hermanos del elemento llamado 'SELENIUM' en 'Curso popular'para (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}driver.close ();}}

La salida será como:

Ancestro en Selenium Webdriver

Ancestor en Selenium Webdriver es una función que se usa para encontrar el ancestro de un miembro específico en la capa especificada. Se puede especificar explícitamente el nivel de antepasado que se devolverá o el nivel del antepasado en relación con el nivel del miembro. Devuelve el número de pasos jerárquicos del antepasado, localizando el antepasado especificado que desea el usuario.

Ahora suponga que necesitamos buscar todos los elementos en la sección 'Curso popular' con la ayuda del ancestro del ancla cuyo texto es 'SELENIO'

Aquí nuestra consulta xpath será como

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

Código completo

import java.util.List;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;importar org.openqa.selenium.Keys;importar org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;importar org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;public class AncestorInXpath {@Pruebapublic void testAncestorInXpath () {Controlador WebDriver = nuevo FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Buscar todos los elementos en la sección 'Curso popular'// con la ayuda del ancestro del ancla cuyo texto es 'SELENIUM'List  dateBox = driver.findElements (By.xpath ("// div [.// a [text () = 'SELENIUM']] / ancestor :: div [@ class = 'rt-grid-2 rt- omega '] / siguiente-hermano :: div "));// Imprime todos los que son hermanos del elemento llamado 'SELENIUM' en 'Curso popular'para (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}driver.quit ();}}

La salida se verá como-

Usando AND y OR

Usando AND y OR puede poner 2 condiciones en nuestra expresión XPath.

  • En el caso de AND, ambas 2 condiciones deberían ser verdaderas, entonces solo se encuentra el elemento.
  • En el caso de OR, cualquiera de las 2 condiciones debería ser verdadera, entonces solo encuentra el elemento.

Aquí nuestra consulta XPath será como

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

Pasos de prueba:

  1. Vaya a http://demo.guru99.com/v1/
  2. En la sección, utilizará el sitio de demostración anterior para buscar elementos con diferentes funciones de XPath.

Encontrará un elemento usando los ejes AND y OR, parent, starts-with y XPath

Y O Ejemplo

import org.openqa.selenium.By;importar org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;importar org.openqa.selenium.chrome.ChromeDriver;clase pública AND_OR {public static void main (String [] args) {Controlador WebDriver;WebElement w, x;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");controlador = nuevo ChromeDriver ();// Iniciar la aplicaciondriver.get ("https://www.guru99.com/");// Buscar elemento usando OR en el xpathw = driver.findElement (By.xpath ("// * [@ type = 'submit' OR @ name = 'btnReset']"));// Imprime el texto del elementoSystem.out.println (w.getText ());// Buscar elemento usando AND en el xpathx = driver.findElement (By.xpath ("// input [@ type = 'submit' and @ name = 'btnLogin']"));// Imprime el texto del elemento buscadoSystem.out.println (x.getText ());// Cerrar el navegadordriver.quit ();}}

¿Qué es Parent in Selenium?

Padre en Selenium es un método utilizado para recuperar el nodo padre del nodo actual seleccionado en la página web. Es muy útil en la situación en la que selecciona un elemento y necesita obtener el elemento padre usando Xpath. Este método también se usa para obtener el padre del padre.

Aquí nuestra consulta XPath será como

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

XPath usando Parent

import org.openqa.selenium.By;importar org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;importar org.openqa.selenium.chrome.ChromeDriver;clase pública Parent {public static void main (String [] args) {Controlador WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");controlador = nuevo ChromeDriver ();// Iniciar la aplicaciondriver.get ("https://www.guru99.com/");// Busca el elemento usando PARENTw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // parent :: div"));// Imprime el texto del elemento buscadoSystem.out.println (w.getText ());// Cerrar el navegadordriver.quit ();}}

Comienza con

Usando la función Start-with, puede encontrar el elemento cuyo atributo cambia dinámicamente al actualizar u otras operaciones como hacer clic, enviar, etc.

Aquí nuestra consulta XPath será como

XPath = // etiqueta [empieza con (@ id, 'mensaje')]

import org.openqa.selenium.By;importar org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;importar org.openqa.selenium.chrome.ChromeDriver;public class StartsWith {public static void main (String [] args) {Controlador WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");controlador = nuevo ChromeDriver ();// Iniciar la aplicaciondriver.get ("https://www.guru99.com/");// Busca el elemento usando starts-withw = driver.findElement (By.xpath ("// etiqueta [empieza con (@ id, 'mensaje')]"));// Imprime el texto del elemento buscadoSystem.out.println (w.getText ());// Cerrar el navegadordriver.quit ();}}

Ejes Xpath

Mediante el uso de ejes XPath, puede encontrar los elementos dinámicos y muy complejos en una página web. Los ejes XPath contienen varios métodos para encontrar un elemento. Aquí, discutiremos algunos métodos.

siguiente : Esta función devolverá el elemento inmediato del componente en particular.

Aquí nuestra consulta XPath será como

Xpath = // * [@ type = 'text'] // siguiendo :: entrada

XPath usando lo siguiente

import org.openqa.selenium.By;importar org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;importar org.openqa.selenium.chrome.ChromeDriver;clase pública Siguiendo {public static void main (String [] args) {Controlador WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");controlador = nuevo ChromeDriver ();// Iniciar la aplicaciondriver.get ("https://www.guru99.com/");// Busca el elemento usando el método siguientew = driver.findElement (By.xpath ("// * [@ type = 'text'] // siguiendo :: entrada"));// Imprime el texto del elemento buscadoSystem.out.println (w.getText ());// Cerrar el navegadordriver.quit ();}}

Preceding: esta función devolverá el elemento anterior del elemento particular.

Aquí nuestra consulta XPath será como

Xpath = // * [@ type = 'enviar'] // precedente :: entrada

XPath usando Preceding

import org.openqa.selenium.By;importar org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;importar org.openqa.selenium.chrome.ChromeDriver;clase pública Precediendo {public static void main (String [] args) {Controlador WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");controlador = nuevo ChromeDriver ();// Iniciar la aplicaciondriver.get ("https://www.guru99.com/");// Busca el elemento usando el método anteriorw = driver.findElement (By.xpath ("// * [@ type = 'enviar'] // precedente :: entrada"));// Imprime el elemento buscadoSystem.out.println (w.getText ());// Cerrar el navegadordriver.quit ();}}

d) Descendente: esta función devolverá el elemento descendiente del elemento en particular.

Aquí nuestra consulta XPath será como

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

XPath usando Descendant

import org.openqa.selenium.By;importar org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;importar org.openqa.selenium.chrome.ChromeDriver;Descendiente de clase pública {public static void main (String [] args) {Controlador WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");controlador = nuevo ChromeDriver ();// Iniciar la aplicaciondriver.get ("https://www.guru99.com/");// Busca el elemento usando el método descendientew = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // descendiente :: a"));// Imprime el elemento buscadoSystem.out.println (w.getText ());// Cerrar el navegadordriver.quit ();}}

Resumen

  • Hay algunas situaciones en las que no se puede utilizar XPath normal para encontrar un elemento. En tal situación, necesitamos diferentes funciones de la consulta xpath.
  • Hay algunas funciones importantes de XPath como XPath contains, parent, ancestors, siguiente-hermano, etc.
  • Con la ayuda de estas funciones, puede crear expresiones XPath complejas.