Saltar al contenido
SDETRole
SDETRole

Glosario · Automatización de UI

XPath

También llamado: expresión XPath, expresiones XPath, XPath expression, localizador XPath

Definición

Lenguaje de consulta para seleccionar nodos en un documento XML o HTML, que se usa en la automatización de UI para localizar elementos por estructura, atributos o texto.

XPath (XML Path Language) describe un camino a través del árbol de un documento hasta los nodos que quieres. En automatización de pruebas es una de las formas de escribir un locator, y su principal ventaja sobre CSS es que puede filtrar por el contenido de texto y moverse en cualquier dirección: hacia arriba hasta un padre, de lado hasta un hermano o hacia abajo hasta un descendiente. Los navegadores implementan XPath 1.0, así que las funciones de versiones posteriores, como matches() o lower-case(), no están disponibles.

Ejemplo

//button[normalize-space()='Sign in']
//input[@name='email']
//label[text()='Password']/following-sibling::input
//tr[td[normalize-space()='Order 1042']]//button[@aria-label='Cancel']
//a[contains(@href, '/invoices/')]

La cuarta línea muestra por qué se recurre a XPath: encontrar la fila de la tabla que contiene una celda concreta y, después, el botón dentro de esa fila.

WebElement cancel = driver.findElement(
    By.xpath("//tr[td[normalize-space()='Order 1042']]//button[@aria-label='Cancel']"));

Absoluto frente a relativo

Un XPath absoluto empieza en la raíz (/html/body/div[2]/form/button) y se rompe en cuanto cambia cualquier contenedor. Un XPath relativo empieza con // y se ancla en algo con significado. Copiar el “full XPath” desde las DevTools te da la forma absoluta, que casi nunca es lo que quieres en un test.

Errores comunes

  • Rutas basadas en índices como (//div)[7]. Codifican el layout, no el significado.
  • text() en elementos con marcado anidado. //button[text()='Save'] falla si la etiqueta está dentro de un <span> hijo. normalize-space() (o .) usa en su lugar el valor de texto completo.
  • Filtrar una clase con @class='btn'. Eso solo coincide cuando btn es el atributo completo. Usa contains(concat(' ', normalize-space(@class), ' '), ' btn '), o pasa a CSS con .btn.
  • Usar XPath por costumbre. En Playwright, getByRole y getByText cubren la mayoría de los casos basados en texto y se leen mejor.

Escribe para buscar en todo SDETRole.

Búsqueda de texto completo con Pagefind · se ejecuta en tu navegador Abrir la página de búsqueda →