Pular para o conteúdo
SDETRole
SDETRole

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) > span quebram 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.

Digite para buscar em todo o SDETRole.

Busca de texto completo com Pagefind · roda no seu navegador Abrir página de busca →