Glossario · Automazione della UI
Selettore CSS
In inglese: CSS selector
Detto anche: selettori CSS, CSS selectors, locator CSS, CSS locator
Definizione
Un pattern del linguaggio CSS che trova elementi per tag, id, classe, attributo o posizione, molto usato come locator veloce e leggibile nei test di UI.
Un selettore CSS è lo stesso pattern che un foglio di stile usa per decidere a quali elementi si applica una regola. Gli strumenti di test lo riutilizzano per trovare gli elementi: Selenium tramite By.cssSelector, Playwright tramite page.locator(), Cypress tramite cy.get(). I selettori sono valutati nativamente dal browser, di solito sono più corti dell’XPath equivalente e la maggior parte degli sviluppatori front-end sa leggerli.
Esempio
#email id
.alert.alert-error element with both classes
button[type="submit"] tag plus attribute
[data-testid="checkout"] dedicated test attribute
form.login > button direct child
ul.results li:nth-child(2) second list item
a[href^="/invoices/"] attribute starts with
input:not([disabled]) negation
driver.findElement(By.cssSelector("[data-testid='checkout']")).click();
await page.locator('[data-testid="checkout"]').click();
Differenze rispetto a XPath
- Ricerca per testo. Il CSS standard non può selezionare in base al contenuto testuale. XPath sì, e Playwright aggiunge i propri motori di testo (
getByTexte la pseudo-classe:has-text()dentropage.locator()), ma sono estensioni di Playwright, non CSS. - Direzione. Per anni il CSS poteva muoversi solo verso il basso. La pseudo-classe
:has(), ora supportata dai browser attuali, permette di trovare un genitore in base ai suoi figli (tr:has(td.overdue)), colmando gran parte del divario. - Leggibilità. Per la ricerca per id, classe e attributo, il CSS è più corto e più chiaro.
Errori comuni
- Usare classi di stile come locator.
.btn-bluecambia quando cambia il design. I framework a utility class peggiorano la situazione. - Lunghe catene strutturali.
div > div > div:nth-child(3) spancodifica il layout e si rompe appena viene aggiunto un contenitore. - Confondere
:nth-childcon:nth-of-type.li:nth-child(2)significa “unliche è il secondo figlio del proprio genitore”, non “il secondoli”.
Quando controlli il markup, un attributo data-testid concordato con gli sviluppatori è il locator CSS più stabile. Quando non lo controlli, preferisci i locator basati sui ruoli, se il framework li offre.