O Playwright usa Locators — objetos que representam como encontrar elementos na página. Ao contrário de seletores simples, locators têm auto-retry e suportam asserções automáticas.
É o seletor mais recomendado. Alinhado com como usuários e leitores de tela percebem a página:
// Botão pelo nome
page.getByRole('button', { name: 'Entrar' })
page.getByRole('button', { name: /entrar/i }) // regex, case-insensitive
// Link
page.getByRole('link', { name: 'Saiba mais' })
// Heading
page.getByRole('heading', { name: 'Dashboard', level: 1 })
// Checkbox
page.getByRole('checkbox', { name: 'Lembrar-me' })
// Textbox (campo de texto)
page.getByRole('textbox', { name: 'Nome completo' })
// Combobox (select)
page.getByRole('combobox', { name: 'País' })// Encontra o campo associado ao label "E-mail"
page.getByLabel('E-mail')
page.getByLabel('Senha')page.getByPlaceholder('Digite seu e-mail')
page.getByPlaceholder('Ex: joao@email.com')page.getByText('Bem-vindo de volta!')
page.getByText('Bem-vindo', { exact: false }) // contém o texto
page.getByText(/^\d+ itens$/) // regexpage.getByAltText('Logo da empresa')
page.getByAltText('Foto do produto')Para quando nenhum dos anteriores funcionar, adicione data-testid no HTML:
<button data-testid="btn-confirmar">Confirmar</button>page.getByTestId('btn-confirmar')Use como último recurso:
// CSS
page.locator('#meu-id')
page.locator('.minha-classe')
page.locator('input[type="email"]')
// XPath
page.locator('//button[@type="submit"]')// Dentro de um container específico
const form = page.locator('form#login');
const email = form.getByLabel('E-mail');
// Filtrar por texto
page.getByRole('listitem').filter({ hasText: 'Produto A' })
// Filtrar por locator filho
page.getByRole('listitem').filter({ has: page.getByRole('img') })
// Nth — pegar o N-ésimo elemento (base 0)
page.getByRole('row').nth(2)
// First / Last
page.getByRole('listitem').first()
page.getByRole('listitem').last()| Prioridade | Seletor | Por que usar |
|---|---|---|
| 1 | getByRole |
Reflete acessibilidade real |
| 2 | getByLabel |
Natural para formulários |
| 3 | getByPlaceholder |
Para campos sem label |
| 4 | getByText |
Para elementos de conteúdo |
| 5 | getByAltText |
Para imagens |
| 6 | getByTestId |
Quando nada mais funciona |
| 7 | locator(css/xpath) |
Último recurso |
Ir para: Comandos Básicos