Vai al contenuto
SDETRole
SDETRole

Glossario · Automazione della UI

XPath

Detto anche: espressione XPath, espressioni XPath, XPath locator, locator XPath

Definizione

Linguaggio di query per selezionare nodi in un documento XML o HTML, usato nell'automazione UI per localizzare elementi in base a struttura, attributi o testo.

XPath (XML Path Language) descrive un percorso nell’albero di un documento fino ai nodi che ti interessano. Nell’automazione dei test è uno dei modi per scrivere un locator, e il suo vantaggio principale rispetto ai CSS è che può fare match sul contenuto testuale e muoversi in qualsiasi direzione: in su verso un genitore, di lato verso un fratello o in giù verso un discendente. I browser implementano XPath 1.0, quindi le funzioni delle versioni successive, come matches() o lower-case(), non sono disponibili.

Esempio

//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 quarta riga mostra perché si ricorre a XPath: trovare la riga della tabella che contiene una certa cella, poi il pulsante all’interno di quella riga.

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

Assoluto e relativo

Un XPath assoluto parte dalla radice (/html/body/div[2]/form/button) e si rompe non appena cambia un qualsiasi wrapper. Un XPath relativo inizia con // e si ancora a qualcosa di significativo. Copiare il “full XPath” dai DevTools ti dà la forma assoluta, che in un test non è quasi mai ciò che vuoi.

Errori comuni

  • Percorsi basati sugli indici come (//div)[7]. Codificano il layout, non il significato.
  • text() su elementi con markup annidato. //button[text()='Save'] fallisce se l’etichetta si trova in uno <span> figlio. normalize-space() (o .) usa invece l’intero valore testuale.
  • Fare match su una classe con @class='btn'. Funziona solo quando btn è l’intero valore dell’attributo. Usa contains(concat(' ', normalize-space(@class), ' '), ' btn '), oppure passa al CSS .btn.
  • Usare XPath per abitudine. In Playwright, getByRole e getByText coprono la maggior parte dei casi basati sul testo e si leggono meglio.

Scrivi per cercare in tutto SDETRole.

Ricerca full-text con Pagefind · funziona nel tuo browser Apri la pagina di ricerca →