QANode Logo

Nó Smart Locators

O nó Smart Locators permite automatizar interações com páginas web usando localizadores semânticos do Playwright — baseados em roles ARIA, labels, placeholders e outros atributos de acessibilidade. Esta abordagem é mais resiliente que seletores CSS, pois reflete como os usuários realmente encontram elementos na página.

Dica: Se preferir seletores CSS e XPath tradicionais, use o nó Web Flow.


Visão Geral

PropriedadeValor
Tiposmart-locators
CategoriaWeb
Cor🔵 Azul (#3b82f6)
Entradain
Saídaout

Configuração Geral

Idêntica ao nó Web Flow:

CampoTipoPadrãoDescrição
Modo de Sessãonew / reusenewNova sessão ou reutilizar existente
Session IDstringID da sessão para reutilizar
HeadlessbooleantrueExecutar sem interface gráfica visível
Estratégia de StorageinMemory / persistedinMemoryPersistir cookies/localStorage
Chave de StoragestringIdentificador do storage persistido

Sistema de Localizadores

Métodos de Localização

Em vez de seletores CSS, o Smart Locators usa métodos semânticos do Playwright:

MétodoDescriçãoExemplo
getByRoleLocaliza por ARIA roleBotão "Entrar", Link "Home"
getByTextLocaliza por texto visívelTexto "Bem-vindo"
getByLabelLocaliza por label associadaCampo com label "E-mail"
getByPlaceholderLocaliza por placeholderCampo com placeholder "Digite seu nome"
getByAltTextLocaliza por alt textImagem com alt "Logo"
getByTitleLocaliza por titleElemento com title "Fechar"
getByTestIdLocaliza por data-testiddata-testid="submit-btn"

Configuração do Localizador

CampoTipoDescrição
MétodostringMétodo de localização
ValorstringTexto/valor a ser buscado
NomestringNome do role (somente para getByRole)
ExatobooleanCorrespondência exata (false = contém)
NthnumberÍndice do elemento (quando há múltiplos)

ARIA Roles Disponíveis

Para o método getByRole, os seguintes roles estão disponíveis:

Roles de InteraçãoRoles de EstruturaRoles de Feedback
buttonheadingalert
checkboxlistalertdialog
comboboxlistitemdialog
linknavigationprogressbar
listboxregionstatus
menurowtooltip
menuitemcell
optiongrid
radiotab
searchboxtablist
slidertabpanel
spinbuttontoolbar
switchtree
textboxtreeitem

Exemplo de uso:

Método: getByRole
Valor: button
Nome: Entrar

Equivale ao Playwright: page.getByRole('button', { name: 'Entrar' })


Ações Disponíveis

AçãoCorDescrição
navigate🔵Navegar para URL
click🟡Clicar em elemento
dblclick🟡Duplo clique
fill🟢Preencher campo (instantâneo)
type🟢Digitar caractere por caractere
check🟢Marcar checkbox/radio
uncheck🟢Desmarcar checkbox
selectOption🟣Selecionar opção de dropdown
hover🔵 CianoPassar mouse sobre elemento
focus🔵 ClaroFocar em elemento
press🟢Pressionar tecla
assert🔴Verificar condição
extract🔵 CianoExtrair dados
wait🟣Aguardar condição
scroll🟡Rolar página
refresh🟠Recarregar página
frameCinzaAlternar frame
rightClick🟡Clique com botão direito
upload🔵Upload de arquivos
dialog🟣Tratar dialogs (alert/confirm)
dragDrop🔵Arrastar e soltar
evaluateExecutar JavaScript na página
screenshot🔵Capturar screenshot

Detalhes das Ações

navigate

Navega para uma URL.

CampoTipoDescrição
URLstringURL de destino (suporta {{ }})

click

Clica em um elemento localizado semanticamente.

CampoTipoDescrição
LocalizadorlocatorConfiguração do localizador
TentativasnumberNúmero de tentativas (padrão: 3)

O click aguarda o elemento ficar visível, rola até ele se necessário, e então clica. Se falhar, tenta novamente.

Exemplo:

Método: getByRole
Valor: button
Nome: Enviar
Tentativas: 3

dblclick

Duplo clique em um elemento.

CampoTipoDescrição
LocalizadorlocatorConfiguração do localizador
TentativasnumberNúmero de tentativas

fill

Preenche um campo de entrada instantaneamente (substitui o valor).

CampoTipoDescrição
LocalizadorlocatorConfiguração do localizador
TextostringTexto a ser preenchido (suporta {{ }})
Limpar PrimeirobooleanLimpa o campo antes

Usa locator.fill() do Playwright — ideal para campos simples.


type

Digita texto caractere por caractere, simulando digitação real.

CampoTipoDescrição
LocalizadorlocatorConfiguração do localizador
TextostringTexto a ser digitado
Delay (ms)numberIntervalo entre teclas (padrão: 50ms)
Limpar PrimeirobooleanLimpa o campo antes

Usa locator.pressSequentially() do Playwright — ideal para campos com:

  • Autocomplete (sugestões aparecem enquanto digita)
  • Máscaras (CPF, telefone, CEP)
  • Validação on-keypress (verifica cada tecla)

Exemplo:

Localizador: getByPlaceholder → "CPF"
Texto: 123.456.789-00
Delay: 100ms

check / uncheck

Marca ou desmarca um checkbox/radio button.

CampoTipoDescrição
LocalizadorlocatorConfiguração do localizador

Exemplo:

Método: getByLabel
Valor: Aceito os termos de uso

selectOption

Seleciona uma opção de um dropdown (<select>).

CampoTipoDescrição
LocalizadorlocatorConfiguração do dropdown
Selecionar Porstringvalue, label ou index
ValorstringValor correspondente

hover

Passa o mouse sobre um elemento.

CampoTipoDescrição
LocalizadorlocatorConfiguração do localizador
TentativasnumberNúmero de tentativas
Espera Após (ms)numberTempo de espera após hover

focus

Define o foco em um elemento.

CampoTipoDescrição
LocalizadorlocatorConfiguração do localizador

press

Pressiona uma tecla do teclado no contexto de um elemento.

CampoTipoDescrição
LocalizadorlocatorElemento que receberá a tecla
TeclastringNome da tecla (Enter, Tab, Escape, etc.)
Espera Após (ms)numberTempo de espera após pressionar

assert

Verifica condições na página. Oferece múltiplos modos de verificação:

CampoTipoDescrição
NomestringIdentificador da asserção
LocalizadorlocatorElemento alvo (quando aplicável)
ModostringTipo de verificação
Texto EsperadostringValor esperado
Continuar em FalhabooleanNão falhar o nó inteiro

Modos de Assert:

ModoDescriçãoRequer Localizador
visibleElemento está visívelSim
hiddenElemento está ocultoSim
textContainsTexto contém valorSim
textEqualsTexto é exatamente o valorSim
hasCountContagem de elementosSim
enabledElemento está habilitadoSim
disabledElemento está desabilitadoSim
checkedCheckbox/radio está marcadoSim
hasValueInput tem valor específicoSim
hasAttributeElemento tem atributo com valorSim
hasURLURL da página contém/é igual aNão
hasTitleTítulo da página contém/é igual aNão

Exemplos:

// Verificar que botão "Enviar" está visível
Modo: visible, Localizador: getByRole("button", "Enviar")

// Verificar que mensagem contém "Sucesso"
Modo: textContains, Localizador: getByText("Sucesso"), Esperado: "Sucesso"

// Verificar URL após login
Modo: hasURL, Esperado: "/dashboard"

// Verificar que campo está desabilitado
Modo: disabled, Localizador: getByLabel("E-mail")

extract

Extrai dados de um elemento.

CampoTipoDescrição
NomestringNome da extração
LocalizadorlocatorConfiguração do localizador
AtributostringO que extrair

Atributos disponíveis:

AtributoDescrição
textTexto visível (textContent)
innerTextTexto interno
innerHTMLHTML interno
inputValueValor de campos de input
hrefURL de links
srcURL de imagens
valueValor genérico

wait

Aguarda uma condição.

ModoDescrição
timeoutAguarda tempo fixo
visibleAguarda elemento ficar visível
hiddenAguarda elemento desaparecer
networkIdleAguarda requisições de rede terminarem

scroll

Rola a página.

ModoDescrição
toLocatorRola até o elemento
byRola quantidade fixa de pixels
toBottomRola até o fim da página

refresh

Recarrega a página. Mesma configuração do Web Flow.


frame

Alterna para iframe. Suporta modos name e main (voltar ao principal).


Evidências (Screenshots por Passo)

Idêntico ao Web Flow — cada passo pode ter configuração individual de captura de screenshot.


Outputs

OutputTipoDescrição
sessionIdstringID da sessão do navegador
extractsobjectDados extraídos (chave → valor)
assertsobjectResultados das asserções (chave → boolean)

Exemplo Completo: Login com Smart Locators

Passo 1: navigate → https://meusite.com/login
Passo 2: fill → getByLabel("E-mail") → "{{ variables.EMAIL }}"
Passo 3: fill → getByLabel("Senha") → "{{ variables.SENHA }}"
Passo 4: click → getByRole("button", { name: "Entrar" })
Passo 5: wait → networkIdle
Passo 6: assert → "loginOk" → textContains → getByText("Bem-vindo")
Passo 7: extract → "userName" → getByRole("heading") → text

Quando Usar Smart Locators vs Web Flow

CenárioRecomendação
Site com boas práticas de acessibilidadeSmart Locators
Site com data-testid em todos os elementosWeb Flow
Formulários com labelsSmart Locators
Elementos sem texto nem roleWeb Flow (CSS/XPath)
Teste de acessibilidadeSmart Locators
Legacy / sites sem semânticaWeb Flow

Dicas

  • Prefira getByRole — é o mais resiliente e reflete como assistive technologies encontram elementos
  • Use getByLabel para campos de formulário — é mais estável que CSS
  • getByTestId é ótimo para elementos sem role/label claro
  • Use a ação type (em vez de fill) para campos com máscaras ou autocomplete
  • O campo Nth permite selecionar um elemento específico quando múltiplos correspondem ao localizador