XPath en Selenium: ¿Cómo buscar y escribir? (Texto, Contiene y)

¿Qué es XPath en Selenium?

XPath en Selenium es una ruta XML utilizada para navegar a través de la estructura HTML de la página. Es una sintaxis o lenguaje para buscar cualquier elemento en una página web utilizando una expresión de ruta XML. XPath se puede utilizar tanto para documentos HTML como XML para encontrar la ubicación de cualquier elemento en una página web utilizando la estructura HTML DOM.

In Selenium automatización, si los localizadores generales como identificación, clase, nombre, etc. no encuentran los elementos, entonces se utiliza XPath para encontrar un elemento en la página web.

En este tutorial, aprenderemos sobre Xpath y diferentes expresiones XPath para encontrar elementos complejos o dinámicos, cuyos atributos cambian dinámicamente al actualizar o cualquier operación.

Sintaxis XPath

XPath contiene la ruta del elemento situado en la página web. La sintaxis XPath estándar para crear XPath es.

Xpath=//tagname[@attribute='value']

A continuación se explica el formato básico de XPath en Selenium con una captura de pantalla.

Sintaxis XPath
Formato básico de XPath
  • // : Seleccione el nodo actual.
  • Nombre de etiqueta: Nombre de etiqueta del nodo en particular.
  • @: Seleccionar atributo.
  • Atributo: Nombre del atributo del nodo.
  • Valor: Valor del atributo.

Para encontrar el elemento en las páginas web con precisión existen diferentes tipos de localizadores:

Localizadores XPath Encuentra diferentes elementos en la página web
ID Para encontrar el elemento por ID del elemento
Nombre de la clase Para encontrar el elemento por nombre de clase del elemento
Nombre Para encontrar el elemento por nombre del elemento
Texto del enlace Para encontrar el elemento por texto del enlace
XPath Se requiere XPath para encontrar el elemento dinámico y recorrer entre varios elementos de la página web.
ruta CSS La ruta CSS también localiza elementos que no tienen nombre, clase o ID.

Tipos de ruta X

Hay dos tipos de XPath:

1) XPath absoluto

2) XPath relativo

XPath absoluto

Es la forma directa de encontrar el elemento, pero la desventaja del XPath absoluto es que si se realizan cambios en la ruta del elemento, ese XPath falla.

La característica clave de XPath es que comienza con una sola barra diagonal (/), lo que significa que puede seleccionar el elemento del nodo raíz.

A continuación se muestra el ejemplo de una expresión XPath absoluta del elemento que se muestra en la siguiente pantalla.

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

Haga clic en aquí si el video no es accesible

XPath absoluto:

/html/body/div[2]/div[1]/div/h4[1]/b/html[1]/body[1]/div[2]/div[1]/div[1]/h4[1]/b[1]

XPath absoluto

XPath absoluto

Xpath relativo

Xpath relativo Comienza desde el medio de la estructura DOM de HTML. Comienza con una barra diagonal doble (//). Puede buscar elementos en cualquier parte de la página web, lo que significa que no es necesario escribir un xpath largo y puede comenzar desde el medio de la estructura DOM de HTML. Siempre se prefiere el Xpath relativo, ya que no es una ruta completa desde el elemento raíz.

A continuación se muestra el ejemplo de una expresión XPath relativa del mismo elemento que se muestra en la siguiente pantalla. Este es el formato común utilizado para buscar elementos mediante XPath.

Haga clic en aquí si el video no es accesible

Relative XPath: //div[@class='featured-box cloumnsize1']//h4[1]//b[1]

XPath relativo

XPath relativo

¿Qué son los ejes XPath?

Los ejes XPath buscan distintos nodos en un documento XML a partir del nodo de contexto actual. Los ejes XPath son los métodos que se utilizan para buscar elementos dinámicos, algo que de otro modo no sería posible con un método XPath normal que no tuviera ID, nombre de clase, nombre, etc.

Los métodos de ejes se utilizan para encontrar aquellos elementos que cambian dinámicamente al actualizar o cualquier otra operación. Hay pocos métodos de ejes comúnmente utilizados en Selenium controlador web como hijo, padre, antepasado, hermano, precedente, yo, etc.

Cómo escribir XPath dinámico en Selenium Controlador web

1) XPath básico

La expresión XPath selecciona nodos o lista de nodos en función de atributos como ID, nombre, nombre de clase, etc. del documento XML como se ilustra a continuación.

Xpath=//input[@name='uid']

Aquí te dejo un enlace para acceder a la página. http://demo.guru99.com/test/selenium-xpath.html

XPath básico

XPath básico

Algunas expresiones XPath más básicas:

Xpath=//input[@type='text']
Xpath=//label[@id='message23']
Xpath=//input[@value='RESET']
Xpath=//*[@class='barone']
Xpath=//a[@href='http://demo.guru99.com/']
Xpath=//img[@src='//guru99.com/images/home/java.png']

2) Contiene()

Contiene() es un método utilizado en la expresión XPath. Se utiliza cuando el valor de cualquier atributo cambia dinámicamente, por ejemplo, la información de inicio de sesión.

La función de contener tiene la capacidad de encontrar el elemento con texto parcial como se muestra en el siguiente ejemplo de XPath.

En este ejemplo, intentamos identificar el elemento simplemente usando el valor de texto parcial del atributo. En la siguiente expresión XPath, se utiliza el valor parcial "sub" en lugar del botón de envío. Se puede observar que el elemento se encuentra exitosamente.

El valor completo de 'Tipo' es 'enviar' pero usando solo el valor parcial 'sub'.

Xpath=//*[contains(@type,'sub')]

El valor completo de 'nombre' es 'btnLogin' pero usando solo el valor parcial 'btn'.

Xpath=//*[contains(@name,'btn')]

En la expresión anterior, hemos tomado el "nombre" como atributo y "btn" como valor parcial, como se muestra en la siguiente captura de pantalla. Esto encontrará 2 elementos (INICIAR SESIÓN Y RESET), ya que su atributo "nombre" comienza con "btn".

Contiene ()

De manera similar, en la siguiente expresión, hemos tomado "id" como atributo y "mensaje" como valor parcial. Esto encontrará 2 elementos (“La ID de usuario no debe estar en blanco” y “La contraseña no debe estar en blanco”) ya que su atributo “id” comienza con “mensaje”.

Xpath=//*[contains(@id,'message')]

Contiene ()

En la siguiente expresión, hemos tomado el "texto" del enlace como un atributo y "aquí" como un valor parcial, como se muestra en la siguiente captura de pantalla. Esto encontrará el enlace ("aquí"), ya que muestra el texto "aquí".

Xpath=//*[contains(text(),'here')]
Xpath=//*[contains(@href,'guru99.com')]

Contiene ()

3) Usando O Y Y

En la expresión OR, se utilizan dos condiciones, ya sea que la primera condición o la segunda condición sean verdaderas. También es aplicable si alguna de las condiciones es verdadera o tal vez ambas. Significa que cualquier condición debe ser verdadera para encontrar el elemento.

En la siguiente expresión XPath, identifica los elementos cuyas condiciones únicas o ambas son verdaderas.

Xpath=//*[@type='submit' or @name='btnReset']

Resaltando ambos elementos como elemento "INICIAR SESIÓN" que tiene el atributo "tipo" y elemento "RESET" que tiene el atributo "nombre".

Usando O y Y

En la expresión AND, se utilizan dos condiciones, ambas condiciones deben ser verdaderas para encontrar el elemento. No puede encontrar el elemento si alguna de las condiciones es falsa.

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

En la siguiente expresión, se resalta el elemento "INICIAR SESIÓN" ya que tiene el atributo "tipo" y "nombre".

Usando O y Y

4) XPath comienza con

XPath comienza con() es una función utilizada para encontrar el elemento web cuyo valor de atributo cambia al actualizar o mediante otras operaciones dinámicas en la página web. En este método, el texto inicial del atributo coincide para encontrar el elemento cuyo valor de atributo cambia dinámicamente. También puede encontrar elementos cuyo valor de atributo sea estático (no cambie).

Por ejemplo: supongamos que el ID de un elemento en particular cambia dinámicamente como:

Id = "mensaje12"

Id = "mensaje345"

Id = "mensaje8769"

y así sucesivamente... pero el texto inicial es el mismo. En este caso, utilizamos la expresión Comenzar con.

En la siguiente expresión, hay dos elementos con una identificación que comienza con "mensaje" (es decir, "La identificación de usuario no debe estar en blanco" y "La contraseña no debe estar en blanco"). En el siguiente ejemplo, XPath encuentra aquellos elementos cuyo "ID" comienza con "mensaje".

Xpath=//label[starts-with(@id,'message')]

XPath comienza con

5) Función Texto XPath()

Los Función de texto XPath() es una función integrada de Selenium WebDriver que se utiliza para localizar elementos según el texto de un elemento web. Ayuda a encontrar los elementos de texto exactos y los ubica dentro del conjunto de nodos de texto. Los elementos que se deben localizar deben estar en formato de cadena.

En esta expresión, con la función de texto, encontramos el elemento con coincidencia exacta de texto como se muestra a continuación. En nuestro caso, encontramos el elemento con texto “UserID”.

Xpath=//td[text()='UserID']

Función XPath Texto()

Métodos de ejes XPath

Estos métodos de ejes XPath se utilizan para encontrar elementos complejos o dinámicos. A continuación veremos algunos de estos métodos.

Para ilustrar este método de ejes XPath, utilizaremos el sitio de demostración del banco Guru99.

1) Siguiendo

Selecciona todos los elementos en el documento del nodo actual () [el cuadro de entrada de ID de usuario es el nodo actual] como se muestra en la siguiente pantalla.

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

Siguiendo

Hay 3 nodos de “entrada” que coinciden mediante el uso de los ejes “siguientes”: contraseña, inicio de sesión y botón de reinicio. Si desea centrarse en algún elemento en particular, puede utilizar el siguiente método XPath:

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

Puede cambiar el XPath según los requisitos poniendo [1],[2]…………y así sucesivamente.

Con la entrada como '1', la siguiente captura de pantalla busca el nodo particular que es el elemento del cuadro de entrada 'Contraseña'.

Siguiendo

2) Ancestro

El eje ancestro selecciona todos los elementos ancestros (abuelo, padre, etc.) del nodo actual como se muestra en la siguiente pantalla.

En la siguiente expresión, encontramos el elemento ancestro del nodo actual (nodo “PRUEBAS EMPRESARIALES”).

Xpath=//*[text()='Enterprise Testing']//ancestor::div

Antepasado

Hay 13 nodos "div" que coinciden mediante el uso del eje "ancestro". Si desea centrarse en algún elemento en particular, puede utilizar el siguiente XPath, donde cambia el número 1, 2 según sus necesidades:

Xpath=//*[text()='Enterprise Testing']//ancestor::div[1]

Puede cambiar el XPath según los requisitos poniendo [1], [2]…………y así sucesivamente.

3) niño

Selecciona todos los elementos secundarios del nodo actual (Java) como se muestra en la siguiente pantalla.

Xpath=//*[@id='java_technologies']//child::li

Niño

Hay 71 nodos "li" que coinciden mediante el uso del eje "secundario". Si desea centrarse en algún elemento en particular, puede utilizar la siguiente ruta XPath:

Xpath=//*[@id='java_technologies']//child::li[1]

Puede cambiar el xpath según los requisitos poniendo [1],[2]…………y así sucesivamente.

4) Precedente

Seleccione todos los nodos que vienen antes del nodo actual como se muestra en la siguiente pantalla.

En la siguiente expresión, identifica todos los elementos de entrada antes del botón "INICIAR SESIÓN" que está ID de usuario y la contraseña elemento de entrada.

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

Anterior

Hay 2 nodos de "entrada" que coinciden mediante el uso del eje "precedente". Si desea centrarse en algún elemento en particular, puede utilizar el siguiente XPath:

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

Puede cambiar el xpath según los requisitos poniendo [1],[2]…………y así sucesivamente.

5) Hermano siguiente

Seleccione los siguientes elementos hermanos del nodo de contexto. Los elementos hermanos están en el mismo nivel del nodo actual, como se muestra en la siguiente pantalla. Encontrará el elemento después del nodo actual.

xpath=//*[@type='submit']//following-sibling::input

Hermano siguiente

Un nodo de entrada coincide mediante el eje “siguiente hermano”.

6) Padre

Selecciona el padre del nodo actual como se muestra en la siguiente pantalla.

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

Padre

Hay 65 nodos "div" que coinciden mediante el eje "principal". Si desea centrarse en algún elemento en particular, puede utilizar el siguiente XPath:

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

Puede cambiar el XPath según los requisitos poniendo [1],[2]…………y así sucesivamente.

7) yo

Selecciona el nodo actual o "auto", significa que indica el nodo en sí como se muestra en la siguiente pantalla.

Propia

Un nodo coincide mediante el uso del eje "propio". Siempre encuentra un solo nodo, ya que representa el elemento propio.

Xpath =//*[@type='password']//self::input

8) Descendiente

Selecciona los descendientes del nodo actual como se muestra en la siguiente pantalla.

En la siguiente expresión, identifica todos los elementos descendientes del elemento actual (elemento de marco "entorno del cuerpo principal"), lo que significa debajo del nodo (nodo hijo, nodo nieto, etc.).

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

descendiente

Hay 12 nodos de "enlace" que coinciden mediante el uso del eje "descendiente". Si desea centrarse en algún elemento en particular, puede utilizar el siguiente XPath:

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

Puede cambiar el XPath según los requisitos poniendo [1],[2]…………y así sucesivamente.

Resum

Se requiere XPath para encontrar un elemento en la página web y realizar una operación en ese elemento en particular.

  • Hay dos tipos de XPath de selenio:
    • XPath absoluto
    • XPath relativo
  • Los ejes XPath son los métodos utilizados para encontrar elementos dinámicos, que de otra manera no sería posible encontrar mediante el método XPath normal.
  • La expresión XPath selecciona nodos o lista de nodos en función de atributos como ID, nombre, nombre de clase, etc. del documento XML.

También verifique: Selenium Tutorial para principiantes: aprenda WebDriver en 7 días