Base: como os agentes usam um site hoje|INEMA.CLUB-PRO

Nesta aula você vai

  1. 1Papel e nome: as duas coisas que o agente procura
  2. 2A árvore da página impressa pelo kit
  3. 3Os buracos: controle sem nome, div que finge ser botão
  4. 4Árvore em texto × tela em pixels

Objetivo: ler a árvore de acessibilidade que o agente recebe e comparar com a captura de tela da mesma página.

01Da página ao clique

Clique em cada bloco.

Clique em cada bloco do diagrama para ver o que ele faz.

O que não está na árvore com papel e nome, o agente só acha adivinhando pela tela.

02Como ler uma árvore

Três perguntas para cada linha.

1. Qual o papel?

textbox é campo de texto, combobox é lista de opções, button é botão, link é link, heading é título, img é imagem. O papel vem do elemento HTML: input, select, button, a, h1, img.

Um div com onclick não vira button: aparece como texto solto.

03A árvore de antes.html, ao lado da tela

O arvore.mjs abre a página num Chromium headless, imprime a árvore com locator.ariaSnapshot() do Playwright 1.63.0 (o mesmo formato de snapshot que o Playwright MCP usa), salva a captura de tela e confere o que falta.

Terminal · árvore e tela
cd ~/projetos/formacao-webmcp-base-v72/kit
node arvore.mjs antes --tela ${TMPDIR:-/tmp}/tela-antes.png; echo "saída: $?"
Exemplo do repositório
## árvore de acessibilidade · 9 linhas · 182 bytes
- text: Agendar revisão
- img
- textbox "Seu nome"
- combobox:
  - option "Escolha" [selected]
  - option "Revisão básica"
  - option "Revisão completa"
- textbox
- text: Agendar
## tela · /tmp/tela-antes.png · 14536 bytes (o modelo teria de ler pixels)
## conferência · http://127.0.0.1:PORTA/antes.html
  - img sem nome acessível
  - combobox sem nome acessível
  - textbox sem nome acessível
  - <html> sem lang
  - sem <main>
  - sem <h1>
  - <div> clicável que não é botão ("Agendar")
  - campo #nome sem <label> (só placeholder)
  - campo #servico sem <label>
  - campo #data sem <label>
problemas: 10
saída: 1

Nove linhas de árvore contra 14.536 bytes de PNG. Na árvore, a lista de serviços (combobox), o campo de data e a imagem estão sem nome, e o botão "Agendar" virou text. A conferência lista 10 problemas e o script sai com 1.

04Prática

A árvore da página de exemplo e a do seu site.

E1 · Árvore × tela

10 min

Rode o bloco "árvore e tela". Abra /tmp/tela-antes.png e, para cada linha da árvore, ache o controle na imagem. Marque os que não têm nome.

Pronto quando: node arvore.mjs antes --tela /tmp/tela-antes.png → problemas: 10 e saída: 1, e o arquivo /tmp/tela-antes.png existe.

E2 · A árvore do seu site

10 min

Rode o arvore.mjs na mesma página do seu site que você usou na aula 1. Anote o número de problemas: ele volta na aula 3 e no plano.

Pronto quando: node arvore.mjs https://[seu-site]/[página] termina com problemas: N e saída: 0 (N = 0) ou saída: 1, com N anotado.

05Teste da aula

Pergunta 1 de 4

O que o Playwright MCP entrega ao modelo para ele decidir onde clicar?competência

06Em três frases

Árvore, não pixelO agente de navegador lê papéis e nomes, uma lista curta de texto.
Sem aspas, sem nomeControle sem nome é controle que o agente tem de adivinhar.
Placeholder enganaDá um nome na árvore, mas não é rótulo; use label.

Para ir além

Aula anteriorPróxima aula