jarvis-ai-framework 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +416 -0
- package/LICENSE +21 -0
- package/README.md +190 -0
- package/agents/AGENTS.md +234 -0
- package/agents/README.md +309 -0
- package/agents/engineering/data/eng.data-engineer.agent.md +309 -0
- package/agents/engineering/eng.agent.md +303 -0
- package/agents/engineering/eng.bug-hunter.md +386 -0
- package/agents/engineering/eng.cybersecurity.agent.md +503 -0
- package/agents/engineering/eng.dev-code-reviewer.md +148 -0
- package/agents/engineering/eng.docs-writer.md +152 -0
- package/agents/engineering/eng.frontend.agent.md +117 -0
- package/agents/engineering/eng.rpa.agent.md +215 -0
- package/agents/engineering/eng.tech-analyst.agent.md +102 -0
- package/agents/engineering/eng.ux-designer.agent.md +193 -0
- package/agents/engineering/qa/eng.qa.cypress-specialist.md +109 -0
- package/agents/engineering/qa/eng.qa.quality-champion-task-agent.md +85 -0
- package/agents/engineering/qa/eng.qa.quality-strategist.md +111 -0
- package/agents/engineering/qa/eng.qa.test-architect.md +400 -0
- package/agents/engineering/qa/eng.qa.test-planner.md +477 -0
- package/agents/engineering/qa/eng.qa.testing-engineer.md +339 -0
- package/agents/product/prod.pm-checker.md +52 -0
- package/bin/commands/docs-publish.js +184 -0
- package/bin/commands/docs-sync.js +139 -0
- package/bin/commands/info.js +87 -0
- package/bin/commands/init.js +237 -0
- package/bin/commands/install-rtk.js +90 -0
- package/bin/commands/list.js +48 -0
- package/bin/commands/qa-signoff.js +112 -0
- package/bin/commands/whoami.js +43 -0
- package/bin/jarvis.js +159 -0
- package/bin/lib/auth/session.js +56 -0
- package/bin/lib/config/constants.js +123 -0
- package/bin/lib/config/ide-config.js +233 -0
- package/bin/lib/core/scanner.js +124 -0
- package/bin/lib/core/sync-engine.js +551 -0
- package/bin/lib/docs/fetch-file.sh +41 -0
- package/bin/lib/docs/publish-file.sh +284 -0
- package/bin/lib/docs/validate-frontmatter.js +157 -0
- package/bin/lib/env-loader.js +198 -0
- package/bin/lib/tasks/comment.js +131 -0
- package/bin/lib/utils/git-parser.js +145 -0
- package/bin/lib/utils/logger.js +104 -0
- package/bin/lib/utils/npmrc-parser.js +106 -0
- package/bin/lib/utils/paths.js +55 -0
- package/bin/lib/utils/ui.js +59 -0
- package/bin/lib/vcs/api.js +312 -0
- package/bin/lib/vcs/create-issue.js +43 -0
- package/bin/lib/vcs/create-merge.js +43 -0
- package/bin/lib/vcs/fetch-raw.js +30 -0
- package/bin/postinstall.js +41 -0
- package/members.md +25 -0
- package/package.json +55 -0
- package/rules/AGENTS.md +205 -0
- package/rules/engineering/data/data-rules.md +200 -0
- package/rules/engineering/eng-rules.md +243 -0
- package/rules/engineering/eng-security-rules.md +186 -0
- package/rules/engineering/eng.breakdown-subtasks-rules.md +585 -0
- package/rules/engineering/eng.bump-rules.md +27 -0
- package/rules/engineering/eng.docs-scraping-rules.md +64 -0
- package/rules/engineering/eng.downstream-flow-rules.md +297 -0
- package/rules/engineering/eng.integrations-rules.md +73 -0
- package/rules/engineering/eng.plan-rules.md +333 -0
- package/rules/engineering/eng.pr-rules.md +359 -0
- package/rules/engineering/eng.pre-pr-rules.md +103 -0
- package/rules/engineering/eng.start-rules.md +246 -0
- package/rules/engineering/eng.tech-spec-rules.md +968 -0
- package/rules/engineering/eng.work-rules.md +312 -0
- package/rules/engineering/frontend/eng.frontend-rules.md +147 -0
- package/rules/engineering/qa/eng.qa.cypress-standards-rules.md +259 -0
- package/rules/engineering/qa/eng.qa.exploratory-session-rules.md +137 -0
- package/rules/engineering/qa/eng.qa.quality-gate-scoring-rules.md +181 -0
- package/rules/engineering/qa/eng.qa.tech-spec-validation-criteria-rules.md +120 -0
- package/rules/engineering/rpa/eng.rpa-rules.md +230 -0
- package/rules/product/README.md +24 -0
- package/rules/product/prod-rules.md +151 -0
- package/rules/rtk-rules.md +68 -0
- package/skills/AGENTS.md +290 -0
- package/skills/SKILLS-ROADMAP.md +333 -0
- package/skills/churn-audit/SKILL.md +385 -0
- package/skills/context-detect/SKILL.md +399 -0
- package/skills/context-detect/assets/context-profile-template.md +127 -0
- package/skills/docs-central/README.md +310 -0
- package/skills/docs-central/SKILL.md +423 -0
- package/skills/docs-index/SKILL.md +377 -0
- package/skills/eng-ai-engineer/SKILL.md +296 -0
- package/skills/eng-arch-c4/SKILL.md +358 -0
- package/skills/eng-arch-c4/assets/example-code.md +189 -0
- package/skills/eng-arch-c4/assets/example-component.md +105 -0
- package/skills/eng-arch-c4/assets/example-container.md +104 -0
- package/skills/eng-arch-c4/assets/example-context.md +81 -0
- package/skills/eng-backend/SKILL.md +776 -0
- package/skills/eng-browser-extension-builder/SKILL.md +385 -0
- package/skills/eng-cybersecurity/SKILL.md +645 -0
- package/skills/eng-data-bi/SKILL.md +199 -0
- package/skills/eng-data-debug/SKILL.md +307 -0
- package/skills/eng-data-engineer/SKILL.md +256 -0
- package/skills/eng-data-onboard/SKILL.md +310 -0
- package/skills/eng-data-orchestrator/SKILL.md +426 -0
- package/skills/eng-design-system/SKILL.md +619 -0
- package/skills/eng-docs-write/SKILL.md +312 -0
- package/skills/eng-frontend/SKILL.md +913 -0
- package/skills/eng-jira-comment/SKILL.md +17 -0
- package/skills/eng-microfrontend/SKILL.md +602 -0
- package/skills/eng-ms-trace/SKILL.md +469 -0
- package/skills/eng-nestjs/SKILL.md +791 -0
- package/skills/eng-performance-engineer/SKILL.md +312 -0
- package/skills/eng-pr/SKILL.md +339 -0
- package/skills/eng-qa-a11y-audit/SKILL.md +269 -0
- package/skills/eng-qa-bug-report/SKILL.md +1088 -0
- package/skills/eng-qa-bug-report/TASK_MANAGERS.md +138 -0
- package/skills/eng-qa-cypress-e2e/SKILL.md +177 -0
- package/skills/eng-qa-dev-guide/SKILL.md +164 -0
- package/skills/eng-qa-e2e/SKILL.md +400 -0
- package/skills/eng-qa-e2e-spec-writer/SKILL.md +322 -0
- package/skills/eng-qa-exploratory/SKILL.md +188 -0
- package/skills/eng-qa-gate/SKILL.md +370 -0
- package/skills/eng-qa-gate/assets/checklist-validacao.md +291 -0
- package/skills/eng-qa-graphql-contract/SKILL.md +256 -0
- package/skills/eng-qa-quality-report/SKILL.md +412 -0
- package/skills/eng-qa-test-plan/SKILL.md +466 -0
- package/skills/eng-qa-test-plan/assets/test-coverage-template.md +92 -0
- package/skills/eng-qa-test-plan/assets/test-patterns.md +178 -0
- package/skills/eng-qa-testsprite/SKILL.md +325 -0
- package/skills/eng-qa-testsprite/references/testsprite-mcp.md +224 -0
- package/skills/eng-qa-unit-test/SKILL.md +471 -0
- package/skills/eng-rabbitmq/SKILL.md +661 -0
- package/skills/eng-scraper/SKILL.md +683 -0
- package/skills/eng-scraper-robot-builder/SKILL.md +370 -0
- package/skills/eng-security-patch/SKILL.md +378 -0
- package/skills/eng-security-triage/SKILL.md +266 -0
- package/skills/eng-task-comment/SKILL.md +60 -0
- package/skills/eng-tech-analyst/SKILL.md +529 -0
- package/skills/eng-threat-model/SKILL.md +161 -0
- package/skills/init-jarvis/SKILL.md +1304 -0
- package/skills/init-jarvis/assets/mcp-configs.md +389 -0
- package/skills/init-jarvis/assets/onboarding-checklist.md +104 -0
- package/skills/init-jarvis/assets/setup-guide.md +360 -0
- package/skills/lovable-prompt-generator/SKILL.md +304 -0
- package/skills/prod-roadmap-report/README.md +303 -0
- package/skills/prod-roadmap-report/SKILL.md +198 -0
- package/skills/prod-roadmap-report/commands/status.compiled.single.team.md +23 -0
- package/skills/prod-roadmap-report/commands/status.list.projects.md +17 -0
- package/skills/prod-roadmap-report/commands/status.memory.md +192 -0
- package/skills/prod-roadmap-report/commands/status.roadmap.preview.md +94 -0
- package/skills/prod-roadmap-report/references/detailed-guide.md +236 -0
- package/skills/prod-roadmap-report/rules/detailed-guide.md +237 -0
- package/skills/prod-roadmap-report/rules/status-report-rules.md +44 -0
- package/skills/prod-roadmap-report/templates/template-multiple-teams-compiled-status.md +53 -0
- package/skills/prod-roadmap-report/templates/template-projects-list.md +23 -0
- package/skills/prod-roadmap-report/templates/template-single-team-compiled-status.md +60 -0
- package/skills/prod-roadmap-report/templates/template-single-team-status.md +49 -0
- package/skills/prod-specs/SKILL.md +108 -0
- package/skills/prod-specs/references/prod.spec.clarify.md +176 -0
- package/skills/prod-specs/references/prod.spec.epic.md +107 -0
- package/skills/prod-specs/references/prod.spec.frd.md +135 -0
- package/skills/prod-specs/references/prod.spec.issue.md +145 -0
- package/skills/prod-specs/references/prod.spec.prd.md +118 -0
- package/skills/prod-specs/rules/prod-spec-rules.md +186 -0
- package/skills/prod-specs/templates/prod-breakdown-template.md +136 -0
- package/skills/prod-specs/templates/prod-epic-template.md +76 -0
- package/skills/prod-specs/templates/prod-frd-template.md +172 -0
- package/skills/prod-specs/templates/prod-issue-template.md +68 -0
- package/skills/prod-specs/templates/prod-prd-full-template.md +159 -0
- package/skills/prod-specs/templates/prod-prd-template.md +173 -0
- package/skills/prod-specs-update/SKILL.md +272 -0
- package/skills/report-issue/SKILL.md +156 -0
- package/taxonomy.md +270 -0
- package/templates/AGENTS.md +189 -0
- package/templates/CDD aplicado a Prompts.md +182 -0
- package/templates/ENV-template.md +187 -0
- package/templates/engineering/AGENTS-template.md +71 -0
- package/templates/engineering/ARD-template.md +193 -0
- package/templates/engineering/CONTACTS-template.md +135 -0
- package/templates/engineering/PR-template.md +40 -0
- package/templates/engineering/RFC-Playbook.md +325 -0
- package/templates/engineering/RFC-template.md +199 -0
- package/templates/engineering/architecture-template.md +277 -0
- package/templates/engineering/breakdown-subtasks-template.md +582 -0
- package/templates/engineering/c4-model-template.md +516 -0
- package/templates/engineering/data-contract-template.md +135 -0
- package/templates/engineering/data-pipeline-template.md +163 -0
- package/templates/engineering/plan-template.md +255 -0
- package/templates/engineering/qa/eng.qa.quality-gate-examples-template.md +311 -0
- package/templates/engineering/qa/eng.qa.quality-gate-report-template.md +249 -0
- package/templates/engineering/qa/qa.cypress-test-template.md +172 -0
- package/templates/engineering/qa/qa.exploratory-session-template.md +148 -0
- package/templates/engineering/qa/qa.quality-report-template.md +130 -0
- package/templates/engineering/qa/qa.release-signoff-template.md +54 -0
- package/templates/engineering/qa/qa.sprint-plan-template.md +49 -0
- package/templates/engineering/swagger-template.md +145 -0
- package/templates/engineering/tech-spec-template.md +497 -0
- package/templates/engineering/work-progress-template.md +155 -0
- package/workflows/AGENTS.md +240 -0
- package/workflows/README.md +160 -0
- package/workflows/all-tools.md +11 -0
- package/workflows/engineering/data/data.contract.md +202 -0
- package/workflows/engineering/data/data.new-pipeline.md +234 -0
- package/workflows/engineering/eng.breakdown-subtasks.md +420 -0
- package/workflows/engineering/eng.bug-audit.md +591 -0
- package/workflows/engineering/eng.build-tech-spec.md +1116 -0
- package/workflows/engineering/eng.create-ard-from-code.md +259 -0
- package/workflows/engineering/eng.create-ard.md +382 -0
- package/workflows/engineering/eng.create-rfc.md +245 -0
- package/workflows/engineering/eng.debug.md +479 -0
- package/workflows/engineering/eng.docs.md +40 -0
- package/workflows/engineering/eng.light-arch.md +84 -0
- package/workflows/engineering/eng.plan.md +213 -0
- package/workflows/engineering/eng.pr.md +466 -0
- package/workflows/engineering/eng.pre-pr.md +167 -0
- package/workflows/engineering/eng.review.md +185 -0
- package/workflows/engineering/eng.rpa.robot.md +342 -0
- package/workflows/engineering/eng.security-audit.md +312 -0
- package/workflows/engineering/eng.security-incident.md +275 -0
- package/workflows/engineering/eng.security-pipeline.md +210 -0
- package/workflows/engineering/eng.security-review.md +235 -0
- package/workflows/engineering/eng.start.md +494 -0
- package/workflows/engineering/eng.work.md +558 -0
- package/workflows/engineering/frontend/eng.frontend-component.md +190 -0
- package/workflows/engineering/frontend/eng.frontend-perf-audit.md +375 -0
- package/workflows/engineering/frontend/eng.frontend-review.md +185 -0
- package/workflows/engineering/qa/eng.qa-dev-quality-guide.md +51 -0
- package/workflows/engineering/qa/eng.qa-e2e-test-generation.md +51 -0
- package/workflows/engineering/qa/eng.qa-exploratory-session.md +60 -0
- package/workflows/engineering/qa/eng.qa-quality-gate-validation.md +202 -0
- package/workflows/engineering/qa/eng.qa-quality-report.md +83 -0
- package/workflows/engineering/qa/eng.qa-refinement-entry.md +83 -0
- package/workflows/engineering/qa/eng.qa-release-signoff.md +170 -0
- package/workflows/engineering/qa/eng.qa-sprint-planning.md +100 -0
- package/workflows/engineering/ta/eng.ta.atendimento.md +93 -0
- package/workflows/product/prod.roadmap.preview.md +110 -0
- package/workflows/product/prod.spec.breakdown.md +163 -0
- package/workflows/product/prod.spec.clarify.md +178 -0
- package/workflows/product/prod.spec.epic.md +154 -0
- package/workflows/product/prod.spec.frd.md +96 -0
- package/workflows/product/prod.spec.issue.md +145 -0
- package/workflows/product/prod.spec.md +60 -0
- package/workflows/product/prod.spec.prd.md +100 -0
- package/workflows/taxonomy.md +92 -0
- package/workflows/warm-up.md +574 -0
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: eng-qa-e2e
|
|
3
|
+
description: >
|
|
4
|
+
Especialista em testes E2E (End-to-End) escritos em linguagem natural para QA.
|
|
5
|
+
Usa Stagehand para criar testes resilientes a mudanças de UI, sem seletores hardcoded.
|
|
6
|
+
Suporta exportação para Cypress quando necessário para produção/CI.
|
|
7
|
+
Trigger: Use quando o QA precisar criar testes de sistema E2E em linguagem natural,
|
|
8
|
+
validar fluxos de usuário completos, ou converter cenários de teste em código executável.
|
|
9
|
+
license: AGPL-3.0
|
|
10
|
+
compatibility: Designed for Claude Code (or similar products)
|
|
11
|
+
allowed-tools: Read Write Edit Grep Glob Bash
|
|
12
|
+
metadata:
|
|
13
|
+
author: jarvis-team
|
|
14
|
+
version: "1.0"
|
|
15
|
+
# Campos Claude Code-specific (não fazem parte da spec oficial agentskills.io):
|
|
16
|
+
argument-hint: "[cenário ou caminho do arquivo de cenários]"
|
|
17
|
+
disable-model-invocation: false
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# QA E2E - Testes End-to-End em Linguagem Natural
|
|
21
|
+
|
|
22
|
+
Você é um **especialista em testes E2E** que ajuda o QA a criar testes de sistema resilientes usando linguagem natural com Stagehand — sem precisar conhecer seletores CSS, XPath ou a estrutura interna do HTML.
|
|
23
|
+
|
|
24
|
+
## Objetivo
|
|
25
|
+
|
|
26
|
+
Transformar cenários de teste descritos em linguagem natural (português ou inglês) em testes E2E executáveis, resilientes a mudanças de UI. Quando necessário para CI/CD ou produção, exportar para Cypress.
|
|
27
|
+
|
|
28
|
+
## Entrada
|
|
29
|
+
|
|
30
|
+
- `$ARGUMENTS` - Cenário de teste em linguagem natural ou caminho para arquivo `.feature` / `.md` com cenários
|
|
31
|
+
- Exemplo direto: `"usuário faz login, adiciona produto ao carrinho, finaliza compra e recebe confirmação"`
|
|
32
|
+
- Exemplo arquivo: `tests/e2e/checkout.feature`
|
|
33
|
+
|
|
34
|
+
## Recursos
|
|
35
|
+
|
|
36
|
+
- **Referência**: https://docs.stagehand.dev
|
|
37
|
+
- **Saída**: `tests/e2e/{nome-do-cenario}.spec.ts`
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Pré-requisito
|
|
42
|
+
|
|
43
|
+
### Dependências
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npm install @browserbasehq/stagehand playwright zod dotenv --save-dev
|
|
47
|
+
# Para exportação Cypress (opcional):
|
|
48
|
+
npm install cypress --save-dev
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Variáveis de ambiente
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# .env
|
|
55
|
+
BROWSERBASE_API_KEY=... # Opcional — usar env: "LOCAL" sem conta
|
|
56
|
+
BROWSERBASE_PROJECT_ID=...
|
|
57
|
+
OPENAI_API_KEY=... # ou ANTHROPIC_API_KEY
|
|
58
|
+
APP_URL=https://app.exemplo.com # URL base da aplicação
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Quando Usar
|
|
64
|
+
|
|
65
|
+
Use este skill quando:
|
|
66
|
+
- QA precisa criar testes E2E sem conhecer seletores ou estrutura do HTML
|
|
67
|
+
- Quiser testar fluxos completos de usuário (login → ação → validação)
|
|
68
|
+
- Precisar de testes de regressão que sobrevivam a redesigns de UI
|
|
69
|
+
- Smoke tests pós-deploy descritos em linguagem natural
|
|
70
|
+
- Cenários de aceitação do produto precisam virar testes executáveis
|
|
71
|
+
|
|
72
|
+
**NÃO usar quando:**
|
|
73
|
+
- Testes unitários ou de integração → usar `qa-unit-test`
|
|
74
|
+
- Testes com TestSprite MCP → usar `qa-testsprite`
|
|
75
|
+
- O projeto já tem Cypress configurado com boa cobertura → manter Cypress
|
|
76
|
+
- Ambiente sem Node.js ou sem acesso a browser headless
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Validação de Entrada
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
Se $ARGUMENTS está vazio:
|
|
84
|
+
→ Solicitar ao QA: "Descreva o cenário de teste. Exemplo:
|
|
85
|
+
'Usuário acessa a home, clica em login, preenche email e senha,
|
|
86
|
+
navega para o dashboard e vê seus pedidos recentes.'"
|
|
87
|
+
|
|
88
|
+
Se $ARGUMENTS é um caminho de arquivo:
|
|
89
|
+
→ Ler o arquivo e extrair os cenários listados
|
|
90
|
+
→ Cada cenário vira um describe/it separado no teste
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Padrões Críticos
|
|
96
|
+
|
|
97
|
+
### Padrão 1: Linguagem natural → estrutura de teste
|
|
98
|
+
|
|
99
|
+
Cada cenário descrito pelo QA deve virar um `it()` com steps claros:
|
|
100
|
+
|
|
101
|
+
```typescript
|
|
102
|
+
// QA descreveu: "usuário faz login com credenciais válidas e vê o dashboard"
|
|
103
|
+
it("deve fazer login e exibir o dashboard", async () => {
|
|
104
|
+
// Arrange
|
|
105
|
+
await page.goto(process.env.APP_URL!);
|
|
106
|
+
|
|
107
|
+
// Act — linguagem natural, resiliente a mudanças de UI
|
|
108
|
+
await stagehand.act("preencha o campo de email com o usuário de teste");
|
|
109
|
+
await stagehand.act("preencha o campo de senha com a senha de teste");
|
|
110
|
+
await stagehand.act("clique no botão de entrar");
|
|
111
|
+
|
|
112
|
+
// Assert — extract() para validar o estado da página
|
|
113
|
+
const dashboard = await stagehand.extract(
|
|
114
|
+
"verifique se o dashboard do usuário está visível com seus dados",
|
|
115
|
+
z.object({
|
|
116
|
+
visible: z.boolean(),
|
|
117
|
+
userName: z.string().optional(),
|
|
118
|
+
})
|
|
119
|
+
);
|
|
120
|
+
expect(dashboard.visible).toBe(true);
|
|
121
|
+
});
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Padrão 2: Separar execução de asserção
|
|
125
|
+
|
|
126
|
+
Sempre separar o `act()` (executar) do `extract()` (validar):
|
|
127
|
+
|
|
128
|
+
```typescript
|
|
129
|
+
// Executar a ação
|
|
130
|
+
await stagehand.act("clique no botão de confirmar pedido");
|
|
131
|
+
|
|
132
|
+
// Aguardar estado estável
|
|
133
|
+
await page.waitForLoadState("networkidle");
|
|
134
|
+
|
|
135
|
+
// Validar resultado com extract() + Zod
|
|
136
|
+
const resultado = await stagehand.extract(
|
|
137
|
+
"qual é o status do pedido exibido na tela?",
|
|
138
|
+
z.object({
|
|
139
|
+
status: z.enum(["confirmado", "pendente", "erro"]),
|
|
140
|
+
numeroPedido: z.string().optional(),
|
|
141
|
+
})
|
|
142
|
+
);
|
|
143
|
+
expect(resultado.status).toBe("confirmado");
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Padrão 3: Usar observe() para diagnóstico em falhas
|
|
147
|
+
|
|
148
|
+
Quando um teste falha, `observe()` ajuda a entender o estado atual da página:
|
|
149
|
+
|
|
150
|
+
```typescript
|
|
151
|
+
// Diagnóstico — útil em desenvolvimento do teste
|
|
152
|
+
const elementosDisponiveis = await stagehand.observe(
|
|
153
|
+
"quais botões e links estão disponíveis nesta página?"
|
|
154
|
+
);
|
|
155
|
+
console.log("Estado atual:", elementosDisponiveis);
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Estrutura do Arquivo de Teste
|
|
161
|
+
|
|
162
|
+
```typescript
|
|
163
|
+
import "dotenv/config";
|
|
164
|
+
import { Stagehand } from "@browserbasehq/stagehand";
|
|
165
|
+
import { z } from "zod";
|
|
166
|
+
import { expect } from "@playwright/test";
|
|
167
|
+
|
|
168
|
+
// ──────────────────────────────────────────────────────
|
|
169
|
+
// Cenário: {nome do cenário descrito pelo QA}
|
|
170
|
+
// Autor: QA - gerado via qa-e2e skill
|
|
171
|
+
// ──────────────────────────────────────────────────────
|
|
172
|
+
|
|
173
|
+
describe("{Funcionalidade}", () => {
|
|
174
|
+
let stagehand: Stagehand;
|
|
175
|
+
let page: any;
|
|
176
|
+
|
|
177
|
+
beforeEach(async () => {
|
|
178
|
+
stagehand = new Stagehand({
|
|
179
|
+
env: "LOCAL", // trocar por "BROWSERBASE" para execução em nuvem
|
|
180
|
+
verbose: 0, // 0 = silencioso, 1 = básico, 2 = detalhado
|
|
181
|
+
});
|
|
182
|
+
await stagehand.init();
|
|
183
|
+
page = stagehand.context.pages()[0];
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
afterEach(async () => {
|
|
187
|
+
await stagehand.close();
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
it("{descrição do cenário 1}", async () => {
|
|
191
|
+
// Arrange
|
|
192
|
+
await page.goto(process.env.APP_URL!);
|
|
193
|
+
|
|
194
|
+
// Act
|
|
195
|
+
await stagehand.act("{passo 1 em linguagem natural}");
|
|
196
|
+
await stagehand.act("{passo 2 em linguagem natural}");
|
|
197
|
+
|
|
198
|
+
// Assert
|
|
199
|
+
const resultado = await stagehand.extract(
|
|
200
|
+
"{o que validar}",
|
|
201
|
+
z.object({ {campo}: z.{tipo}() })
|
|
202
|
+
);
|
|
203
|
+
expect(resultado.{campo}).toBe({valor esperado});
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
it("{descrição do cenário 2}", async () => {
|
|
207
|
+
// ...
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## Fluxo de Trabalho
|
|
215
|
+
|
|
216
|
+
### 1. Coletar cenários do QA
|
|
217
|
+
|
|
218
|
+
Se `$ARGUMENTS` não contém cenários suficientes, perguntar:
|
|
219
|
+
|
|
220
|
+
```
|
|
221
|
+
Descreva os cenários de teste. Para cada cenário, informe:
|
|
222
|
+
1. Pré-condição (o que precisa estar pronto antes)
|
|
223
|
+
2. Passo a passo da ação do usuário
|
|
224
|
+
3. O que deve acontecer (critério de aceitação)
|
|
225
|
+
|
|
226
|
+
Exemplo:
|
|
227
|
+
─ Cenário: Checkout com cartão válido
|
|
228
|
+
Pré-condição: usuário logado com produto no carrinho
|
|
229
|
+
Passos: ir para o carrinho → finalizar compra → preencher dados do cartão → confirmar
|
|
230
|
+
Resultado esperado: página de confirmação com número do pedido
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### 2. Estruturar cenários em describes/its
|
|
234
|
+
|
|
235
|
+
Agrupar por funcionalidade:
|
|
236
|
+
- 1 `describe` por funcionalidade (ex: "Checkout", "Login", "Dashboard")
|
|
237
|
+
- 1 `it` por cenário/caminho de usuário
|
|
238
|
+
|
|
239
|
+
### 3. Gerar arquivo de teste Stagehand
|
|
240
|
+
|
|
241
|
+
Criar `tests/e2e/{funcionalidade}.spec.ts` seguindo o template da seção acima.
|
|
242
|
+
|
|
243
|
+
### 4. Executar e validar
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
# Rodar com tsx (desenvolvimento)
|
|
247
|
+
npx tsx tests/e2e/{funcionalidade}.spec.ts
|
|
248
|
+
|
|
249
|
+
# Rodar com Playwright test runner
|
|
250
|
+
npx playwright test tests/e2e/{funcionalidade}.spec.ts
|
|
251
|
+
|
|
252
|
+
# Rodar com verbose para debug
|
|
253
|
+
STAGEHAND_VERBOSE=2 npx playwright test tests/e2e/{funcionalidade}.spec.ts
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
### 5. Exportar para Cypress (quando solicitado)
|
|
257
|
+
|
|
258
|
+
Se o projeto usa Cypress em CI/CD, converter o teste gerado:
|
|
259
|
+
|
|
260
|
+
#### Processo de conversão Stagehand → Cypress
|
|
261
|
+
|
|
262
|
+
**Regra**: Usar `observe()` do Stagehand para descobrir os seletores reais, depois substituir por comandos Cypress determinísticos.
|
|
263
|
+
|
|
264
|
+
```bash
|
|
265
|
+
# 1. Rodar o teste Stagehand com verbose para coletar seletores
|
|
266
|
+
STAGEHAND_VERBOSE=2 npx tsx tests/e2e/{funcionalidade}.spec.ts 2>&1 | grep "selector"
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
Gerar `cypress/e2e/{funcionalidade}.cy.ts`:
|
|
270
|
+
|
|
271
|
+
```typescript
|
|
272
|
+
// Cypress — gerado a partir de teste Stagehand
|
|
273
|
+
// Seletores descobertos via Stagehand observe() em {data}
|
|
274
|
+
|
|
275
|
+
describe("{Funcionalidade}", () => {
|
|
276
|
+
beforeEach(() => {
|
|
277
|
+
cy.visit(Cypress.env("APP_URL"));
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
it("{descrição do cenário}", () => {
|
|
281
|
+
// Passo 1: {descrição original do QA}
|
|
282
|
+
cy.get("{seletor-descoberto-stagehand}").type("{valor}");
|
|
283
|
+
|
|
284
|
+
// Passo 2: {descrição}
|
|
285
|
+
cy.contains("button", "{texto-do-botão}").click();
|
|
286
|
+
|
|
287
|
+
// Assert
|
|
288
|
+
cy.get("{seletor-resultado}").should("contain.text", "{valor esperado}");
|
|
289
|
+
});
|
|
290
|
+
});
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
## Árvore de Decisão
|
|
296
|
+
|
|
297
|
+
```
|
|
298
|
+
Projeto tem CI/CD com Cypress? → Gerar Stagehand + exportar para Cypress
|
|
299
|
+
Apenas ambiente de desenvolvimento? → Gerar só Stagehand (mais rápido de manter)
|
|
300
|
+
QA quer manter testes sem seletores? → Manter Stagehand (resiliente a redesign)
|
|
301
|
+
Cenário envolve upload de arquivo? → Usar page.setInputFiles() após act()
|
|
302
|
+
Cenário precisa de usuário autenticado? → Usar storageState para reaproveitar sessão
|
|
303
|
+
Site tem muitos redirects/popups? → Adicionar waitForLoadState() entre passos
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
## Regras
|
|
309
|
+
|
|
310
|
+
### Nunca
|
|
311
|
+
- Hardcodar URLs, emails, senhas ou dados de teste no arquivo de teste — usar `.env`
|
|
312
|
+
- Usar `observe()` em produção para encontrar elementos — apenas para diagnóstico/dev
|
|
313
|
+
- Criar testes sem asserção (`act()` sem `extract()` de validação)
|
|
314
|
+
- Misturar lógica de negócio com lógica de teste
|
|
315
|
+
- Deixar `verbose: 2` ativo em testes de CI — gera muito ruído nos logs
|
|
316
|
+
|
|
317
|
+
### Sempre
|
|
318
|
+
- Um `describe` por funcionalidade, um `it` por cenário
|
|
319
|
+
- `beforeEach`/`afterEach` para setup e teardown do Stagehand
|
|
320
|
+
- Validar resultados com `extract()` + Zod schema tipado
|
|
321
|
+
- Comentar o cenário original do QA acima de cada `it`
|
|
322
|
+
- Usar variáveis de ambiente para dados sensíveis e URL base
|
|
323
|
+
- Adicionar `waitForLoadState("networkidle")` após navegações longas
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
## Tratamento de Erros
|
|
328
|
+
|
|
329
|
+
### act() não encontra o elemento
|
|
330
|
+
- Reformular a instrução — ser mais específico: "clique no botão azul 'Enviar' no formulário de cadastro"
|
|
331
|
+
- Usar `observe()` para ver o que está disponível: `stagehand.observe("quais botões existem aqui?")`
|
|
332
|
+
- Verificar se a página carregou: adicionar `waitForLoadState` antes do `act()`
|
|
333
|
+
|
|
334
|
+
### extract() retorna dados inesperados
|
|
335
|
+
- Revisar o Zod schema — tipos podem estar incorretos
|
|
336
|
+
- Tornar a pergunta mais específica para o LLM
|
|
337
|
+
- Verificar se o conteúdo está visível (não oculto por CSS)
|
|
338
|
+
|
|
339
|
+
### Teste não reproduzível (passa às vezes, falha outras)
|
|
340
|
+
- Adicionar `waitForLoadState("networkidle")` após ações que disparam navegação
|
|
341
|
+
- Aumentar timeout: `stagehand.act("...", { timeout: 15_000 })`
|
|
342
|
+
- Verificar se o dado de teste muda entre execuções
|
|
343
|
+
|
|
344
|
+
### Exportação Cypress com seletores frágeis
|
|
345
|
+
- Preferir `cy.contains()`, `cy.getByRole()` sobre seletores XPath absolutos
|
|
346
|
+
- Verificar se o app tem `data-testid` — mais estável que classes CSS
|
|
347
|
+
- Combinar seletor semântico + fallback: `cy.get('[data-testid="btn-submit"]').or('button:contains("Enviar")')`
|
|
348
|
+
|
|
349
|
+
---
|
|
350
|
+
|
|
351
|
+
## Checklist de Conclusão
|
|
352
|
+
|
|
353
|
+
- [ ] Cenários coletados e estruturados (describe/it)
|
|
354
|
+
- [ ] Arquivo `tests/e2e/{funcionalidade}.spec.ts` criado
|
|
355
|
+
- [ ] `beforeEach`/`afterEach` com init/close do Stagehand
|
|
356
|
+
- [ ] Dados sensíveis em variáveis de ambiente
|
|
357
|
+
- [ ] Cada `it` tem asserção via `extract()` + Zod
|
|
358
|
+
- [ ] Cenário original do QA comentado acima de cada `it`
|
|
359
|
+
- [ ] Teste executado e passando localmente
|
|
360
|
+
- [ ] Se solicitado: `cypress/e2e/{funcionalidade}.cy.ts` gerado com seletores descobertos
|
|
361
|
+
|
|
362
|
+
---
|
|
363
|
+
|
|
364
|
+
## Output
|
|
365
|
+
|
|
366
|
+
| Artefato | Descrição |
|
|
367
|
+
|----------|-----------|
|
|
368
|
+
| `tests/e2e/{funcionalidade}.spec.ts` | Teste Stagehand com linguagem natural — principal entregável |
|
|
369
|
+
| `cypress/e2e/{funcionalidade}.cy.ts` | Exportação Cypress com seletores reais (opcional, para CI/CD) |
|
|
370
|
+
|
|
371
|
+
---
|
|
372
|
+
|
|
373
|
+
## Mensagem de Conclusão
|
|
374
|
+
|
|
375
|
+
```
|
|
376
|
+
Testes E2E gerados!
|
|
377
|
+
|
|
378
|
+
Funcionalidade: {nome}
|
|
379
|
+
Cenários cobertos: {N}
|
|
380
|
+
Engine: Stagehand (linguagem natural, resiliente a mudanças de UI)
|
|
381
|
+
|
|
382
|
+
Arquivos:
|
|
383
|
+
- tests/e2e/{funcionalidade}.spec.ts ← teste principal
|
|
384
|
+
|
|
385
|
+
{se exportação Cypress solicitada:}
|
|
386
|
+
- cypress/e2e/{funcionalidade}.cy.ts ← versão Cypress para CI/CD
|
|
387
|
+
|
|
388
|
+
Para rodar:
|
|
389
|
+
npx playwright test tests/e2e/{funcionalidade}.spec.ts
|
|
390
|
+
|
|
391
|
+
Próximo passo: revisar os cenários e adicionar dados de teste no .env
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
---
|
|
395
|
+
|
|
396
|
+
## Recursos Adicionais
|
|
397
|
+
|
|
398
|
+
- **Stagehand docs**: https://docs.stagehand.dev
|
|
399
|
+
- **Skill relacionado**: `$IDE/skills/qa-testsprite/SKILL.md` — para testes unitários/integração com TestSprite
|
|
400
|
+
- **Skill relacionado**: `$IDE/skills/eng-scraper-robot-builder/SKILL.md` — para gerar robôs Playwright
|