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 elementos na tela
- •Testar interações (cliques, formulários, etc.)
Quando Usar
SEMPRE usar Playwright MCP quando:
- •✅ O usuário solicitar testes de funcionalidades frontend
- •✅ O usuário pedir para "verificar se está funcionando no navegador"
- •✅ O usuário pedir para "testar a interface"
- •✅ O usuário pedir para "verificar erros no console"
- •✅ O usuário pedir para "validar visualmente"
- •✅ O usuário pedir para "verificar logs de rede"
- •✅ O usuário pedir para "testar interações" (cliques, formulários, etc.)
NÃO usar Playwright MCP quando:
- •❌ Testes unitários de código backend
- •❌ Testes de API (usar ferramentas como Postman, curl, etc.)
- •❌ Validações que não requerem navegador
Ferramentas Disponíveis
O Playwright MCP está disponível através do servidor MCP cursor-browser-extension. As principais ferramentas são:
Navegação
- •
browser_navigate- Navegar para uma URL - •
browser_navigate_back- Voltar para página anterior - •
browser_resize- Redimensionar janela do navegador
Inspeção
- •
browser_snapshot- Capturar snapshot de acessibilidade (melhor que screenshot) - •
browser_take_screenshot- Capturar screenshot da página ou elemento - •
browser_console_messages- Obter mensagens do console - •
browser_network_requests- Obter requisições de rede
Interação
- •
browser_click- Clicar em elemento - •
browser_type- Digitar texto em campo - •
browser_select_option- Selecionar opção em dropdown - •
browser_drag- Arrastar e soltar - •
browser_hover- Passar mouse sobre elemento - •
browser_press_key- Pressionar tecla
Utilitários
- •
browser_wait_for- Aguardar texto aparecer/desaparecer ou tempo passar - •
browser_evaluate- Executar JavaScript na página - •
browser_fill_form- Preencher múltiplos campos de formulário - •
browser_handle_dialog- Lidar com diálogos (alert, confirm, prompt) - •
browser_tabs- Gerenciar abas do navegador
Fluxo de Teste Padrão
1. Preparação
python
# 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...")
2. Verificação de Console
python
# 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")
3. Verificação de Rede
python
# 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")
4. Validação Visual
python
# 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()
5. Interação e Teste
python
# 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")
Padrões de Validação
Validação de Console
SEMPRE verificar console após carregar página:
python
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')}")
Validação de Rede
SEMPRE verificar requisições de rede após ações:
python
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]
Validação Visual
SEMPRE capturar screenshot quando:
- •Página carrega pela primeira vez
- •Após interações importantes
- •Quando o usuário solicitar validação visual
python
# 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"
)
Exemplos de Uso
Exemplo 1: Teste de Login
python
# 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": "user@example.com"},
{"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")
Exemplo 2: Validação de Dashboard
python
# 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)
Exemplo 3: Teste de Formulário
python
# 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": "test@example.com"},
{"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
Checklist de Validação
Ao realizar testes no navegador, SEMPRE verificar:
- • Console sem erros JavaScript
- • Requisições de rede bem-sucedidas (status < 400)
- • Elementos esperados presentes na tela
- • Interações funcionando corretamente
- • Screenshots capturados para documentação
- • Performance aceitável (requisições < 2s)
Armazenamento de Screenshots
Screenshots devem ser salvos em:
- •Projetos de estudo:
Projetos/Estudos/.playwright-mcp/ - •Projetos de trabalho:
Projetos/Trabalho/[PROJETO]/.playwright-mcp/ - •Projetos pessoais:
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)
Referências
- •MCP Server:
cursor-browser-extension - •Documentação: Ver ferramentas disponíveis via
list_mcp_resources - •Exemplos: Ver screenshots em
Projetos/Estudos/.playwright-mcp/
Notas Importantes
- •Sempre aguardar carregamento: Use
browser_wait_forantes de interagir - •Verificar console primeiro: Erros JavaScript podem indicar problemas sérios
- •Capturar screenshots: Facilita validação visual e documentação
- •Usar snapshot para análise:
browser_snapshoté melhor que screenshot para análise programática - •Verificar rede: Requisições falhadas podem indicar problemas de backend
Integração com Agentes
Agentes de programação DEVEM:
- •Reconhecer quando o usuário solicita testes no navegador
- •Usar Playwright MCP automaticamente
- •Reportar erros encontrados no console e rede
- •Capturar screenshots para validação
- •Documentar resultados dos testes
Exemplo de resposta do agente:
code
✅ 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