.claude/skills/workflow/browser-testing/SKILL.md
# Browser Testing with Playwright MCP ## Objetivo Esta skill define padrões para testes automatizados em navegador usando o **Playwright MCP** (Model Context Protocol). Quando o usuário solicitar testes ou validações de funcionalidades que abrem no navegador, os agentes **DEVEM** usar o Playwright MCP para: - Abrir a aplicação no navegador - Verificar console do navegador (erros JavaScript) - Verificar logs de rede (network requests) - Capturar screenshots para validação visual - Verificar el
npx skillsauth add LucasBiason/engineering-knowledge-base .claude/skills/workflow/browser-testingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Esta skill define padrões para testes automatizados em navegador usando o Playwright MCP (Model Context Protocol). Quando o usuário solicitar testes ou validações de funcionalidades que abrem no navegador, os agentes DEVEM usar o Playwright MCP para:
SEMPRE usar Playwright MCP quando:
NÃO usar Playwright MCP quando:
O Playwright MCP está disponível através do servidor MCP cursor-browser-extension. As principais ferramentas são:
browser_navigate - Navegar para uma URLbrowser_navigate_back - Voltar para página anteriorbrowser_resize - Redimensionar janela do navegadorbrowser_snapshot - Capturar snapshot de acessibilidade (melhor que screenshot)browser_take_screenshot - Capturar screenshot da página ou elementobrowser_console_messages - Obter mensagens do consolebrowser_network_requests - Obter requisições de redebrowser_click - Clicar em elementobrowser_type - Digitar texto em campobrowser_select_option - Selecionar opção em dropdownbrowser_drag - Arrastar e soltarbrowser_hover - Passar mouse sobre elementobrowser_press_key - Pressionar teclabrowser_wait_for - Aguardar texto aparecer/desaparecer ou tempo passarbrowser_evaluate - Executar JavaScript na páginabrowser_fill_form - Preencher múltiplos campos de formuláriobrowser_handle_dialog - Lidar com diálogos (alert, confirm, prompt)browser_tabs - Gerenciar abas do navegador# 1. Navegar para a URL da aplicação
browser_navigate(url="http://localhost:3000")
# 2. Aguardar página carregar
browser_wait_for(text="Loading...", textGone="Loading...")
# 3. Verificar console para erros JavaScript
console_messages = browser_console_messages()
# Filtrar apenas erros
errors = [msg for msg in console_messages if msg.get("level") == "error"]
if errors:
# Reportar erros encontrados
print(f"❌ Erros no console: {len(errors)}")
for error in errors:
print(f" - {error.get('text')}")
else:
print("✅ Console sem erros")
# 4. Verificar requisições de rede
network_requests = browser_network_requests()
# Filtrar requisições com erro
failed_requests = [
req for req in network_requests
if req.get("status") and req.get("status") >= 400
]
if failed_requests:
print(f"❌ Requisições com erro: {len(failed_requests)}")
for req in failed_requests:
print(f" - {req.get('url')}: {req.get('status')}")
else:
print("✅ Todas as requisições bem-sucedidas")
# 5. Capturar screenshot para validação
browser_take_screenshot(
filename="test-result.png",
fullPage=True
)
# 6. Capturar snapshot de acessibilidade (melhor para análise)
snapshot = browser_snapshot()
# 7. Testar interações
# Exemplo: Clicar em botão
browser_click(
element="Login button",
ref="button[type='submit']"
)
# 8. Aguardar resultado
browser_wait_for(text="Welcome")
# 9. Verificar resultado
snapshot = browser_snapshot()
if "Welcome" in snapshot:
print("✅ Login bem-sucedido")
else:
print("❌ Login falhou")
SEMPRE verificar console após carregar página:
console_messages = browser_console_messages()
errors = [msg for msg in console_messages if msg.get("level") == "error"]
if errors:
# Reportar TODOS os erros encontrados
for error in errors:
print(f"❌ Console Error: {error.get('text')}")
print(f" Source: {error.get('source')}")
print(f" Line: {error.get('line')}")
SEMPRE verificar requisições de rede após ações:
network_requests = browser_network_requests()
# Verificar requisições falhadas
failed = [r for r in network_requests if r.get("status") >= 400]
# Verificar requisições lentas (> 2s)
slow = [r for r in network_requests if r.get("duration", 0) > 2000]
SEMPRE capturar screenshot quando:
# Screenshot completo da página
browser_take_screenshot(
filename="dashboard-complete.png",
fullPage=True
)
# Screenshot de elemento específico
browser_take_screenshot(
element="KPI Chart",
ref="[data-testid='kpi-chart']",
filename="kpi-chart.png"
)
# 1. Navegar para página de login
browser_navigate(url="http://localhost:3000/login")
# 2. Aguardar página carregar
browser_wait_for(text="Login")
# 3. Verificar console
console = browser_console_messages()
errors = [m for m in console if m.get("level") == "error"]
assert len(errors) == 0, f"Erros no console: {errors}"
# 4. Preencher formulário
browser_fill_form(fields=[
{"name": "Email", "ref": "input[name='email']", "type": "textbox", "value": "[email protected]"},
{"name": "Password", "ref": "input[name='password']", "type": "textbox", "value": "password123"}
])
# 5. Clicar em submit
browser_click(element="Login button", ref="button[type='submit']")
# 6. Aguardar redirecionamento
browser_wait_for(text="Dashboard")
# 7. Verificar resultado
snapshot = browser_snapshot()
assert "Dashboard" in snapshot, "Login falhou"
# 8. Capturar screenshot
browser_take_screenshot(filename="login-success.png")
# 1. Navegar para dashboard
browser_navigate(url="http://localhost:3000/dashboard")
# 2. Aguardar carregamento
browser_wait_for(textGone="Loading...")
# 3. Verificar console
console = browser_console_messages()
errors = [m for m in console if m.get("level") == "error"]
if errors:
print(f"❌ Erros encontrados: {len(errors)}")
for error in errors:
print(f" - {error.get('text')}")
# 4. Verificar requisições de rede
network = browser_network_requests()
failed = [r for r in network if r.get("status") >= 400]
if failed:
print(f"❌ Requisições falhadas: {len(failed)}")
# 5. Verificar elementos na tela
snapshot = browser_snapshot()
assert "KPIs" in snapshot, "Seção de KPIs não encontrada"
assert "Charts" in snapshot, "Gráficos não encontrados"
# 6. Capturar screenshot completo
browser_take_screenshot(filename="dashboard-validation.png", fullPage=True)
# 1. Navegar para formulário
browser_navigate(url="http://localhost:3000/form")
# 2. Preencher campos
browser_fill_form(fields=[
{"name": "Name", "ref": "input[name='name']", "type": "textbox", "value": "Test User"},
{"name": "Email", "ref": "input[name='email']", "type": "textbox", "value": "[email protected]"},
{"name": "Agree", "ref": "input[name='agree']", "type": "checkbox", "value": "true"}
])
# 3. Selecionar dropdown
browser_select_option(
element="Country dropdown",
ref="select[name='country']",
values=["Brazil"]
)
# 4. Submeter
browser_click(element="Submit button", ref="button[type='submit']")
# 5. Aguardar sucesso
browser_wait_for(text="Success")
# 6. Verificar resultado
snapshot = browser_snapshot()
assert "Success" in snapshot
Ao realizar testes no navegador, SEMPRE verificar:
Screenshots devem ser salvos em:
Projetos/Estudos/.playwright-mcp/Projetos/Trabalho/[PROJETO]/.playwright-mcp/Projetos/Projetos/[PROJETO]/.playwright-mcp/Nomenclatura:
test-[funcionalidade]-[status].png (ex: test-login-success.png)[página]-[descrição].png (ex: dashboard-kpis-complete.png)[correção]-[descrição].png (ex: fix-chart-rendering.png)cursor-browser-extensionlist_mcp_resourcesProjetos/Estudos/.playwright-mcp/browser_wait_for antes de interagirbrowser_snapshot é melhor que screenshot para análise programáticaAgentes de programação DEVEM:
Exemplo de resposta do agente:
✅ Teste de login realizado com sucesso!
📊 Validações:
- Console: ✅ Sem erros
- Rede: ✅ Todas as requisições bem-sucedidas
- Visual: ✅ Login funcionando corretamente
📸 Screenshot salvo em: .playwright-mcp/test-login-success.png
testing
Execução e análise de testes automatizados
development
Gera resumos didáticos extensos e estruturados de aulas/cursos para cards do Notion. Use ao resumir aulas, apostilas, transcrições ou materiais de estudo para incluir no corpo do card (não apenas no campo Descrição), com flashcards, exemplos de código, diagramas Mermaid, mapa conceitual e perguntas de reforço.
development
Padroniza documentação existente no formato canônico Spec-Driven. Remove duplicação e melhora rastreabilidade.
development
Processo universal e repetível para criar especificações a partir de qualquer input (texto, docs, código). Usado em Plan mode.