Glossário · Automação de UI
Locator
Também chamado de: locators, localizador, localizadores, localizador de elementos
Definição
A consulta que um teste de UI usa para encontrar um elemento na página, como role e nome, test id, seletor CSS ou expressão XPath.
Um locator (localizador) é a forma como o teste diz ao driver do navegador sobre qual elemento agir. Pode ser um seletor CSS, uma expressão XPath, o id de um elemento ou uma consulta de nível mais alto, como “o botão cujo nome acessível é Sign in”. Escolher bem os locators é o fator que mais pesa para uma suíte de UI sobreviver a um redesign.
Exemplo
O mesmo botão localizado de três formas:
// 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']"));
O que faz um bom locator
- Ele descreve o que o usuário vê. Role, label e texto visível só mudam quando o comportamento visível ao usuário muda, que é exatamente quando o teste deveria ser atualizado de qualquer forma.
- Ele é único. Os locators do Playwright são estritos: uma ação sobre um locator que encontra dois elementos lança um erro, em vez de escolher o primeiro silenciosamente.
- Ele não depende do layout. Caminhos longos como
div > div:nth-child(3) > spanquebram quando alguém adiciona um wrapper. - Ele é estável entre builds. Nomes de classe gerados por ferramentas de CSS-in-JS e ids autoincrementais mudam entre deploys.
Uma ordem de prioridade comum é: role e nome acessível, depois label ou placeholder, depois um data-testid combinado com os desenvolvedores, depois CSS e, como último recurso, XPath.
Lazy versus eager
Um Locator do Playwright é lazy (preguiçoso). Ele guarda a consulta e a resolve de novo toda vez que você executa uma ação ou assertion, e é por isso que não pode ficar stale. Já o findElement do Selenium é eager (ansioso): ele retorna uma referência WebElement para o nó que existia naquele momento. Se o DOM for renderizado novamente, essa referência pode ficar obsoleta, por isso o código Selenium costuma guardar objetos By e buscar o elemento só quando precisa dele.