Vai al contenuto
SDETRole
SDETRole

Glossario · Automazione della UI

Locator

Detto anche: localizzatore, localizzatori, element locator, selettore di elementi

Definizione

La query con cui un test UI trova un elemento nella pagina, ad esempio ruolo e nome, un test id, un selettore CSS o un'espressione XPath.

Un locator (localizzatore) è il modo in cui un test indica al driver del browser su quale elemento agire. Può essere un selettore CSS, un’espressione XPath, l’id di un elemento o una query di livello più alto come “il pulsante il cui nome accessibile è Sign in”. Scegliere bene i locator è il fattore singolo più importante per capire se una suite UI sopravvivrà a un redesign.

Esempio

Lo stesso pulsante localizzato in tre modi:

// Playwright: user-facing, preferred
page.getByRole('button', { name: 'Sign in' });

// Playwright: dedicated test attribute
page.getByTestId('login-submit');

// Playwright: CSS, tied to markup structure
page.locator('form.login > button.btn-primary');
// Selenium 4
driver.findElement(By.id("login-submit"));
driver.findElement(By.cssSelector("[data-testid='login-submit']"));

Cosa rende buono un locator

  • Descrive ciò che vede l’utente. Ruolo, label e testo visibile cambiano solo quando cambia il comportamento visibile all’utente, cioè esattamente quando il test andrebbe aggiornato comunque.
  • È univoco. I locator di Playwright sono strict: un’azione su un locator che corrisponde a due elementi lancia un errore invece di scegliere silenziosamente il primo.
  • Non dipende dal layout. Percorsi lunghi come div > div:nth-child(3) > span si rompono appena viene aggiunto un wrapper.
  • È stabile tra una build e l’altra. I nomi di classe generati dagli strumenti CSS-in-JS e gli id auto-incrementali cambiano da un deploy all’altro.

Un ordine di priorità comune è: ruolo e nome accessibile, poi label o placeholder, poi un data-testid concordato con gli sviluppatori, poi CSS e infine XPath come ultima risorsa.

Lazy contro eager

Un Locator di Playwright è lazy: memorizza la query e la risolve di nuovo ogni volta che esegui un’azione o un’asserzione, ed è per questo che non può diventare stale. Il findElement di Selenium invece è eager: restituisce un riferimento WebElement al nodo che esisteva in quel momento. Se il DOM viene ri-renderizzato, quel riferimento può diventare stale, quindi il codice Selenium di solito memorizza oggetti By e trova l’elemento solo quando serve.

Scrivi per cercare in tutto SDETRole.

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