---
nome: Testar o site
descricao: testar um site ou app web num navegador de verdade — sobe o servidor, olha antes de agir, clica, digita e lê os erros
quando: testa, testa o site, testar o site, teste o site, testa a página, testar a página, testa o app, testar o app, teste no navegador, testar no navegador, clica em tudo, no navegador, o que quebrou, quebrou, se funciona, e2e, ponta a ponta, playwright
autor: adaptado de "webapp-testing" (Anthropic, anthropics/skills, Apache-2.0 — ver LICENSE.txt); refeito para as ferramentas browser_* do PrimoCode
---
Teste com o navegador que o PrimoCode controla (`browser_*`), não com um script
de Playwright: ele já está aqui, sem instalar nada.

**1. Qual é o caso?**
- **HTML solto** (sem servidor): leia o arquivo para achar os seletores e abra
  com `browser_open` passando o caminho do arquivo.
- **App com servidor** (`npm run dev`, Vite, Next): está rodando? Teste com
  `curl -sI http://localhost:5173`. Não está → suba com `run_in_new_terminal`
  (servidor fica de pé; `run_shell` travaria esperando) e repita o `curl` até
  responder. Front e back separados: suba os dois.

**2. Olhe ANTES de agir** (o erro mais comum é procurar o botão antes de a
página terminar de montar):
1. `browser_open` na página e leia o que ele devolve: erro de JavaScript,
   recurso que não carregou.
2. `browser_wait` por um elemento que só existe com a página pronta.
3. `browser_screenshot` e `browser_read` para ver o que a pessoa vê.
4. Não sabe os seletores? Descubra com `browser_eval`:
   `[...document.querySelectorAll('button,a,input,select')].map(e =>
   e.tagName + ' ' + (e.innerText || e.name || e.id)).join('\n')`

**3. Aja com o que descobriu.** `browser_click` pelo texto visível (mais
estável) ou pelo seletor; `browser_type` com `selector` nos campos;
`browser_key` para Enter e Tab. Depois de cada ação que muda a tela, espere
(`browser_wait`) e CONFIRA o resultado com `browser_read` — clicar não prova que
funcionou.

**4. O que testar, nesta ordem**
- o caminho principal inteiro, como a pessoa faria (cadastro → login → a ação
  principal);
- o erro: campo vazio, e-mail inválido, senha errada — aparece uma mensagem?
- a volta: recarregar a página e usar o voltar do navegador não perdem o estado;
- o celular: `browser_eval` com `window.innerWidth` diz a largura; confira que
  nada sai da tela.

**5. Relate** o que foi testado, o que passou e o que quebrou, cada falha com o
passo para reproduzir e o print (`browser_screenshot`). Erro no console é
falha, mesmo com a tela parecendo certa.

No fim, desligue o servidor que VOCÊ subiu, e só ele.
