La Guía Definitiva de Referencia Rápida de XPath 2025

Esta guía completa te enseñará todo sobre XPath, desde sintaxis básica hasta técnicas avanzadas, para crear expresiones XPath robustas y eficientes.

Daniel Costa

Daniel Costa

15 April 2025

La Guía Definitiva de Referencia Rápida de XPath 2025

XPath (XML Path Language) es un potente lenguaje de consulta utilizado para navegar a través del Modelo de Objetos del Documento (DOM) de documentos HTML y XML. Para los desarrolladores web, testers e ingenieros de automatización, dominar XPath es esencial para localizar e interactuar con precisión con los elementos de las páginas web. Ya sea que estés desarrollando pruebas automatizadas con Selenium, Playwright u otros frameworks de testing, o extrayendo datos de sitios web, XPath proporciona la flexibilidad y precisión necesarias para navegar incluso por las estructuras DOM más complejas.

Esta guía completa te llevará a través de todo lo que necesitas saber sobre XPath, desde la sintaxis básica hasta las técnicas avanzadas, ayudándote a ser competente en la creación de expresiones XPath robustas y eficientes.

Antes de profundizar en XPath, tomemos un momento para presentar Apidog, la mejor alternativa a Postman disponible en la actualidad. Apidog combina documentación de API, diseño, depuración, pruebas y mocking en una plataforma unificada.

button

A diferencia de Postman, Apidog ofrece una interfaz más intuitiva, mejores funciones de colaboración en equipo y una integración perfecta entre el diseño y las pruebas de API. Con sus potentes capacidades de testing, Apidog facilita la validación de las APIs.

button

Si estás trabajando con APIs y pruebas web, el conjunto de herramientas integral de Apidog puede optimizar significativamente tu flujo de trabajo y mejorar la productividad.

¿Qué es XPath?

XPath es un lenguaje de consulta diseñado para seleccionar nodos en documentos XML. Dado que HTML puede considerarse una forma especializada de XML, XPath puede aplicarse eficazmente también a documentos HTML. Fue introducido por primera vez por el World Wide Web Consortium (W3C) como parte de la especificación XSLT 1.0 y desde entonces se ha convertido en una herramienta esencial para la automatización web y la extracción de datos.

XPath sirve como un lenguaje de navegación, que te permite recorrer la jerarquía de un documento HTML definiendo rutas a los elementos de forma muy parecida a como navegas por las carpetas de un sistema de archivos. Lo que hace que XPath sea particularmente potente es su capacidad para:

Localizadores XPath en la automatización web

En frameworks de automatización web como Selenium WebDriver, los localizadores XPath sirven como un método primario para identificar elementos en una página web. Si bien otros localizadores como los selectores CSS, ID o nombres de clase a menudo se prefieren por su simplicidad y rendimiento, XPath ofrece una flexibilidad inigualable en escenarios complejos.

Aquí hay algunas ventajas clave de usar XPath en la automatización web:

  1. Flexibilidad: XPath puede localizar elementos basados en el contenido del texto, las relaciones padre-hijo y las relaciones entre hermanos, lo que otros localizadores no pueden hacer fácilmente.
  2. Selección basada en texto: XPath te permite encontrar elementos que contienen texto específico, lo que lo hace invaluable para contenido dinámico.
  3. Capacidades de recorrido: Puedes navegar hacia arriba (a los elementos padre), hacia abajo (a los elementos hijo) o lateralmente (a los elementos hermanos) en el árbol DOM.
  4. Operaciones lógicas: XPath admite operadores lógicos como and, or y not, lo que permite condiciones de selección complejas.

Esenciales de XPath

Para usar XPath de manera efectiva, es importante comprender sus componentes y estructura fundamentales.

1. Sintaxis y estructura

Las expresiones XPath se escriben como una serie de pasos, separados por barras diagonales (/), que navegan a través de la jerarquía de nodos del documento. Cada paso consta de:

La sintaxis básica sigue este patrón:

axisname::nodetest[predicate]

Donde:

2. Ejes clave y tipos de nodo

XPath proporciona varios ejes para definir las relaciones entre los nodos:

Los tipos de nodo que se pueden seleccionar incluyen:

3. Funciones comunes

XPath incluye numerosas funciones que mejoran sus capacidades:

Tipos de XPath

Existen dos enfoques principales para construir expresiones XPath: absoluto y relativo.

Expresión XPath absoluta

XPath absoluto proporciona la ruta completa desde la raíz del documento hasta el elemento de destino. Comienza con una sola barra diagonal (/) e incluye cada elemento en la jerarquía.

Ejemplo:

/html/body/div[2]/form/input[3]

Pros:

Contras:

XPath relativo

XPath relativo comienza desde cualquier punto del documento y utiliza una doble barra diagonal (//) para indicar que la ruta puede comenzar desde cualquier lugar. Este enfoque es más flexible y resistente a los cambios en la estructura del documento.

Ejemplo:

//input[@id='email']

Pros:

Contras:

Sintaxis de XPath

Comprender los elementos de sintaxis centrales es crucial para construir expresiones XPath efectivas:

Elementos de sintaxis básicos:

Predicados

Los predicados son condiciones encerradas entre corchetes que filtran la selección de nodos:

//div[@class='container']        // Selecciona elementos div con la clase 'container'
//button[text()='Submit']        // Selecciona elementos button con el texto 'Submit'
//li[position()=3]               // Selecciona el tercer elemento li
//input[@type='text' and @required]  // Selecciona elementos de entrada de texto requeridos

Selectores XPath

Los selectores XPath definen los criterios para seleccionar nodos en el documento. Aquí hay algunos patrones de selector comunes:

Selectores de elementos:

//div                           // Selecciona todos los elementos div
//div/p                         // Selecciona todos los elementos p que son hijos directos de div
//div//p                        // Selecciona todos los elementos p en cualquier lugar dentro de div

Selectores de atributos:

//*[@id='username']             // Selecciona el elemento con id 'username'
//input[@name='password']       // Selecciona la entrada con el nombre 'password'
//a[@href]                      // Selecciona todos los enlaces con el atributo href
//img[@src='logo.png']          // Selecciona la imagen con src específico

Selectores de posición:

//tr[1]                         // Selecciona el primer elemento tr
//tr[last()]                    // Selecciona el último elemento tr
//tr[position()>1]              // Selecciona todos los elementos tr excepto el primero
//ul/li[position() mod 2 = 0]   // Selecciona elementos li en posición par

Selectores de contenido de texto:

//h1[text()='Welcome']          // Selecciona h1 con el texto exacto 'Welcome'
//p[contains(text(),'important')]  // Selecciona p que contiene la palabra 'important'
//label[starts-with(text(),'User')] // Selecciona etiquetas que comienzan con 'User'

Expresiones XPath

Las expresiones XPath pueden variar de simples a complejas, dependiendo de los elementos que necesites localizar. Aquí hay algunos ejemplos de expresiones cada vez más complejas:

Expresiones simples:

//h1                            // Todos los elementos h1
//div[@class='header']          // Todos los elementos div con la clase 'header'
//input[@type='submit']         // Todos los botones de envío

Expresiones intermedias:

//div[contains(@class,'product')]//span[@class='price']  // Spans de precio dentro de divs de producto
//table//tr[position() > 1]     // Todas las filas de la tabla excepto los encabezados
//form[.//input[@required]]     // Formularios que contienen entradas requeridas

Expresiones avanzadas:

//div[not(@class='hidden') and contains(@id,'section')]  // Secciones visibles con un patrón de ID específico
//ul[count(./li) > 5]           // Listas con más de 5 elementos
//a[contains(@href,'https') and not(contains(@class,'external'))]  // Enlaces HTTPS internos

Ejes XPath

Los ejes definen la dirección de la navegación desde el nodo actual. Comprender los ejes permite una selección de elementos más sofisticada:

Ejes hijo y descendiente:

child::div                      // Lo mismo que ./div
descendant::p                   // Lo mismo que .//p

Ejes padre y ancestro:

parent::div                     // Div padre del nodo actual
ancestor::form                  // Cualquier formulario ancestro del nodo actual
ancestor-or-self::div           // Cualquier div ancestro o el nodo actual si es un div

Ejes hermanos:

following-sibling::li           // Todos los hermanos li que siguen al nodo actual
preceding-sibling::div          // Todos los hermanos div que preceden al nodo actual

Otros ejes útiles:

following::h2                   // Todos los elementos h2 que aparecen después del nodo actual en el documento
preceding::input                // Todos los elementos de entrada que aparecen antes del nodo actual
self::p                         // Selecciona el nodo actual si es un párrafo

Operadores XPath

XPath admite varios operadores para crear condiciones complejas:

Operadores de comparación:

Operadores lógicos:

Operadores aritméticos:

Ejemplos:

//input[@value > 100]           // Entradas con valor mayor que 100
//div[@class='item' and @id]    // Divs con la clase 'item' que también tienen un ID
//product[price > 50 and price < 100]  // Productos con precio entre 50 y 100
//li[position() mod 2 = 1]      // Elementos de lista con número impar

Funciones XPath

XPath proporciona numerosas funciones integradas para la manipulación de datos:

Funciones de cadena:

//a[contains(text(), 'Sign up')]  // Enlaces que contienen el texto "Sign up"
//label[starts-with(@for, 'user')]  // Etiquetas con el atributo 'for' que comienza con 'user'
//p[string-length(text()) > 100]  // Párrafos con texto de más de 100 caracteres
//div[normalize-space(text())='Hello World']  // Divs con texto exacto (ignorando espacios en blanco adicionales)

Funciones numéricas:

//ul[count(li) > 5]             // Listas con más de 5 elementos
//div[round(number(@data-value)) = 42]  // Divs con data-value que redondea a 42
//product[floor(price) = 99]    // Productos con precio que se redondea al entero inferior 99

Funciones de conjunto de nodos:

//tr[position() = last()]       // Última fila de la tabla
//div[count(child::*) = 0]      // Elementos div vacíos (sin elementos secundarios)
//div[not(descendant::a)]       // Divs que no contienen ningún enlace

Consola de depuración para XPath

Una de las formas más efectivas de desarrollar y probar expresiones XPath es utilizar las herramientas de desarrollador de tu navegador:

En Chrome:

  1. Presiona F12 o Ctrl+Shift+I para abrir DevTools
  2. Ve a la pestaña Consola
  3. Usa $x("tu-xpath-aquí") para evaluar expresiones XPath
  4. Los resultados aparecerán como una matriz de elementos coincidentes

En Firefox:

  1. Presiona F12 o Ctrl+Shift+I para abrir DevTools
  2. Ve a la pestaña Consola
  3. Usa $x("tu-xpath-aquí") para evaluar expresiones XPath
  4. Los resultados aparecerán como una matriz de elementos coincidentes

En Edge:

  1. Presiona F12 o Ctrl+Shift+I para abrir DevTools
  2. Ve a la pestaña Consola
  3. Usa $x("tu-xpath-aquí") para evaluar expresiones XPath
  4. Los resultados aparecerán como una matriz de elementos coincidentes

Este bucle de retroalimentación directa te permite refinar rápidamente tus expresiones XPath hasta que identifiquen correctamente los elementos de destino.

Consejos y mejores prácticas

1. Evita errores comunes

Mantenlo simple: Las expresiones XPath más simples son más fáciles de mantener y menos propensas a romperse cuando cambia la estructura de la página. Apunta a expresiones concisas que apunten directamente a tu elemento utilizando atributos únicos.

Evita rutas absolutas: Las rutas absolutas son extremadamente frágiles. Si cambia algún elemento en la ruta, el XPath se rompe. Utiliza rutas relativas que se centren en identificadores únicos siempre que sea posible.

Sé específico: Haz que tus expresiones sean tan específicas como sea necesario, pero no más. La sobreespecificidad puede hacer que las expresiones sean frágiles, mientras que la subespecificidad podría coincidir con elementos no deseados.

Utiliza los predicados con prudencia: Los predicados son poderosos para filtrar elementos, pero demasiados predicados anidados pueden hacer que las expresiones sean difíciles de leer y mantener.

Considera la compatibilidad entre navegadores: Algunas características de XPath pueden funcionar de manera diferente en los navegadores. Prueba tus expresiones en todos los navegadores de destino para garantizar la coherencia.

2. Optimiza para el rendimiento

Utiliza selectores eficientes: Cuando sea posible, utiliza IDs u otros identificadores únicos. La expresión //*[@id='username'] es generalmente más rápida que los selectores jerárquicos complejos.

Limita el uso de //: El operador de doble barra (//) busca en todo el documento, lo que puede ser lento. Cuando conozcas la ubicación general de un elemento, comienza con una ruta más específica.

Almacena elementos en caché: Si necesitas interactuar con el mismo elemento varias veces, almacena la referencia en lugar de localizarla repetidamente con XPath.

Minimiza las llamadas XPath: Cada evaluación de XPath lleva tiempo. Agrupa las operaciones cuando sea posible para reducir el número de búsquedas.

Prueba el rendimiento: Si notas ralentizaciones en tus pruebas automatizadas, perfílalas para identificar si las consultas XPath son el cuello de botella. Considera selectores alternativos si es necesario.

3. Depura eficazmente

Utiliza las DevTools del navegador: La mayoría de los navegadores modernos te permiten probar expresiones XPath directamente en la consola. Esto proporciona retroalimentación inmediata sobre si tu expresión funciona.

Resultados de salida: Durante el desarrollo y la depuración, registra los resultados de tus consultas XPath para verificar que estás seleccionando los elementos previstos.

Paso a paso a través del código: Utiliza puntos de interrupción y depuración paso a paso en tu framework de testing para inspeccionar el estado de tu aplicación y los resultados de XPath.

Comenta tu XPath: Agrega comentarios para explicar expresiones XPath complejas, especialmente cuando utilices características avanzadas o abordes casos extremos.

Revisa y refactoriza regularmente: A medida que tu aplicación evoluciona, revisa periódicamente tus expresiones XPath para asegurarte de que sigan siendo confiables y eficientes.

Hoja de trucos de XPath

Aquí hay una guía de referencia completa para las expresiones XPath:

Sintaxis básica de XPath:

/                               // Selecciona desde el nodo raíz
//                              // Selecciona nodos en cualquier lugar del documento
.                               // Representa el nodo actual
..                              // Representa el padre del nodo actual

Selectores:

element                         // Selecciona todos los elementos con el nombre dado
@attribute                      // Selecciona el valor del atributo especificado
*                               // Selecciona todos los elementos secundarios
text()                          // Selecciona el texto dentro de un elemento
[predicate]                     // Agrega una condición para filtrar nodos

Predicados:

[name='value']                  // Selecciona nodos con el valor de atributo especificado
[position()]                    // Selecciona nodos basados en su posición
[last()]                        // Selecciona el último nodo de un tipo dado
[contains(@attribute, 'value')] // Selecciona nodos con valores de atributo que contienen 'value'
[not(predicate)]                // Niega una condición

Ejes:

ancestor::                      // Selecciona todos los ancestros
ancestor-or-self::              // Selecciona los ancestros y el nodo actual
child::                         // Selecciona todos los hijos
descendant::                    // Selecciona todos los descendientes
descendant-or-self::            // Selecciona los descendientes y el nodo actual
following::                     // Selecciona todos los nodos siguientes
following-sibling::             // Selecciona los hermanos siguientes
parent::                        // Selecciona el nodo padre
preceding::                     // Selecciona todos los nodos precedentes
preceding-sibling::             // Selecciona los hermanos precedentes
self::                          // Selecciona el nodo actual

Operadores:

=                               // Igual a
!=                              // No es igual a
<                               // Menor que
<=                              // Menor o igual que
>                               // Mayor que
>=                              // Mayor o igual que
and                             // Y lógico
or                              // O lógico
not                             // NO lógico

Funciones (Ejemplos):

name()                          // Devuelve el nombre del nodo actual
count(nodes)                    // Devuelve el número de nodos en el conjunto de nodos
concat(string1, string2)        // Concatena dos cadenas
substring(string, start, length) // Devuelve una subcadena
contains(string, substr)        // Comprueba si una cadena contiene una subcadena
normalize-space(string)         // Elimina los espacios en blanco iniciales/finales y contrae los espacios

Ejemplos:

/bookstore/book                 // Selecciona todos los elementos book en la raíz bookstore
//title[text()='XPath']         // Selecciona elementos title con el texto 'XPath' en cualquier lugar del documento
//*[@id='myId']                 // Selecciona elementos con el atributo id igual a 'myId'
/bookstore/book[position()=1]   // Selecciona el primer elemento book
//div[@class='highlight']//p    // Selecciona elementos p dentro de div con la clase 'highlight'
//a[contains(@href, 'example.com')] // Selecciona elementos a con 'example.com' en el atributo href

Técnicas avanzadas de XPath

Trabajar con IDs y clases dinámicas

Los frameworks web modernos a menudo generan IDs y clases dinámicas que cambian en cada carga de página. Aquí hay técnicas para manejar estos escenarios:

// Usando coincidencia parcial de atributos
//div[contains(@id, 'main-content')]
//button[starts-with(@id, 'submit-')]
//input[ends-with(@id, '-input')] // Nota: Esto es XPath 2.0 y no es compatible con todos los navegadores

// Usando patrones de nombre de clase
//div[contains(@class, 'btn') and contains(@class, 'primary')]

Manejo de Iframes

Seleccionar elementos dentro de iframes requiere un manejo especial:

// Primero, localiza el iframe
//iframe[@id='content-frame']

// Luego, en Selenium, cambiarías al contexto del iframe antes de usar XPath para encontrar elementos dentro de él
// driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@id='content-frame']")));

// Después de cambiar, puedes usar XPath normalmente dentro del contexto del iframe
//button[@id='submit']

Detectar la visibilidad del elemento

XPath en sí mismo no puede determinar directamente si un elemento es visible, pero puedes verificar las propiedades que a menudo indican visibilidad:

// Los elementos con display:none a menudo tienen estilo en línea
//div[not(contains(@style, 'display: none'))]

// Los elementos podrían estar ocultos a través de clases
//div[not(contains(@class, 'hidden'))]

// Los elementos podrían tener el atributo aria-hidden
//div[not(@aria-hidden='true')]

Manejo de múltiples elementos con las mismas propiedades

Cuando varios elementos comparten los mismos atributos o propiedades, puedes usar la indexación o atributos más específicos:

// Selecciona el segundo botón con la clase 'action'
(//button[@class='action'])[2]

// Selecciona basado en el contenido del texto y la clase
//button[@class='action' and contains(text(), 'Save')]

// Selecciona basado en los elementos circundantes
//div[@class='card']//button[contains(text(), 'View details')]

XPath en diferentes frameworks de testing

Selenium WebDriver

Selenium proporciona soporte directo para los localizadores XPath:

// Ejemplo de Java
WebElement element = driver.findElement(By.xpath("//button[@id='submit']"));

# Ejemplo de Python
element = driver.find_element(By.XPATH, "//button[@id='submit']")

// Ejemplo de JavaScript
const element = await driver.findElement(By.xpath("//button[@id='submit']"));

Playwright

Playwright admite selectores XPath, aunque se recomiendan los selectores CSS para un mejor rendimiento:

// Ejemplo de JavaScript
const element = await page.locator('xpath=//button[@id="submit"]');
await element.click();

# Ejemplo de Python
element = page.locator('xpath=//button[@id="submit"]')
element.click()

Cypress

Cypress admite XPath con un plugin:

// Primero instala el plugin: npm install -D cypress-xpath

// Agrega a cypress/support/e2e.js:
// require('cypress-xpath')

// Luego usa en las pruebas
cy.xpath('//button[@id="submit"]').click()

Ejemplos de XPath del mundo real

Ejemplos de sitios web de comercio electrónico:

// Encuentra todos los productos con un descuento
//div[@class='product'][.//span[@class='discount']]

// Encuentra productos con precio en un rango específico
//div[@class='product'][.//span[@class='price' and number(translate(text(), '$', '')) < 100]]

// Encuentra productos con calificación de 4+ estrellas
//div[@class='product'][.//div[@class='rating' and @data-stars >= 4]]

Ejemplos de validación de formularios:

// Encuentra todos los campos requeridos
//input[@required]

// Encuentra campos con errores de validación
//input[../span[@class='error']]

// Encuentra etiquetas de campos requeridos
//label[./following-sibling::input[@required] or ./input[@required]]

Ejemplos de datos de tabla:

// Encuentra filas de tabla con contenido específico
//table[@id='data']//tr[td[contains(text(), 'Completed')]]

// Encuentra la celda de encabezado para una columna específica
//table//th[contains(text(), 'Status')]

// Encuentra celdas en la misma columna que un encabezado específico
//table//th[contains(text(), 'Status')]/following-sibling::td

Conclusión

Dominar XPath es una habilidad fundamental para cualquier persona involucrada en la automatización de pruebas web o la extracción de datos. Esta guía te ha equipado con una comprensión profunda de los elementos esenciales de XPath, la sintaxis, los selectores y las mejores prácticas. Al implementar estas estrategias, puedes optimizar tus procesos de pruebas automatizadas, mejorar la confiabilidad de las pruebas y navegar con confianza incluso por las estructuras DOM más complejas.

La flexibilidad y el poder de XPath lo convierten en una herramienta indispensable en tu conjunto de herramientas de testing, especialmente cuando se trata de aplicaciones web complejas donde los localizadores más simples pueden no ser suficientes. Si bien los selectores CSS a menudo se prefieren por su rendimiento, existen muchos escenarios en los que las capacidades únicas de XPath, como seleccionar elementos basados en el contenido del texto o recorrer la jerarquía DOM, lo convierten en la mejor opción.

Recuerda comenzar con expresiones más simples y solo agregar complejidad según sea necesario. Revisa y refactoriza regularmente tus expresiones XPath para asegurarte de que sigan siendo eficientes y mantenibles a medida que tu aplicación evoluciona. Con la práctica y la aplicación de estas técnicas, desarrollarás la experiencia para crear expresiones XPath precisas y robustas que resistan el paso del tiempo.

¡Felices pruebas!

Explore more

Cómo usar Ollama: Guía Completa para Principiantes sobre LLMs Locales con Ollama

Cómo usar Ollama: Guía Completa para Principiantes sobre LLMs Locales con Ollama

El panorama de la inteligencia artificial evoluciona constantemente, y los Grandes Modelos de Lenguaje (LLM) se vuelven cada vez más potentes y accesibles. Aunque muchos interactúan con estos modelos a través de servicios basados en la nube, existe un movimiento creciente enfocado en ejecutarlos directamente en computadoras personales. Aquí es donde entra Ollama. Ollama es una herramienta potente pero fácil de usar, diseñada para simplificar drásticamente el complejo proceso de descargar, config

28 April 2025

¿Dónde Descargar Swagger UI en Español Gratis?

¿Dónde Descargar Swagger UI en Español Gratis?

¿Necesitas Swagger UI en español? Este artículo explica por qué no existe una descarga oficial gratuita y cómo habilitar la traducción. Explora las características de Swagger y por qué Apidog es la alternativa superior para diseño, pruebas y documentación API integrados.

23 April 2025

¿Dónde Descargar Postman en Español Gratis?

¿Dónde Descargar Postman en Español Gratis?

¿Puedes descargar Postman en español gratis? Aunque Postman carece de soporte nativo en español, existen soluciones. Explóralas y descubre Apidog, una potente alternativa unificada a Postman diseñada para optimizar todo tu flujo de trabajo de API, sin importar el idioma.

22 April 2025

Practica el diseño de API en Apidog

Descubre una forma más fácil de construir y usar APIs