@maestro-ai/cli 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.
Files changed (252) hide show
  1. package/README.md +59 -0
  2. package/content/guides/Cat/303/241logo de Stacks para Cloud Moderna.md" +119 -0
  3. package/content/guides/Cat/303/241logo de Stacks para Hospedagem Compartilhada.md" +147 -0
  4. package/content/guides/Checklist Mestre de Entrega.md +68 -0
  5. package/content/guides/Gates de Qualidade.md +209 -0
  6. package/content/guides/Guia de Adi/303/247/303/243o de Novas Funcionalidades.md" +355 -0
  7. package/content/guides/Guia de Chaos Engineering.md +267 -0
  8. package/content/guides/Guia de Debugging com IA.md +135 -0
  9. package/content/guides/Guia de Estrat/303/251gias de Cache.md" +352 -0
  10. package/content/guides/Guia de Migrations Zero-Downtime.md +311 -0
  11. package/content/guides/Guia de Multi-tenancy.md +368 -0
  12. package/content/guides/Guia de Otimiza/303/247/303/243o de Custos Cloud.md" +195 -0
  13. package/content/guides/Guia de Refatora/303/247/303/243o de C/303/263digo Legado com IA.md" +162 -0
  14. package/content/guides/Guia de SLOs e Error Budgets.md +315 -0
  15. package/content/guides/M/303/251tricas de Efici/303/252ncia do Desenvolvimento com IA.md" +93 -0
  16. package/content/guides/Rules base.md +90 -0
  17. package/content/prompts/README.md +203 -0
  18. package/content/prompts/acessibilidade/analise-acessibilidade.md +257 -0
  19. package/content/prompts/apis/design-api-rest.md +303 -0
  20. package/content/prompts/apis/idempotencia.md +254 -0
  21. package/content/prompts/apis/versionamento.md +313 -0
  22. package/content/prompts/arquitetura/arquitetura-c4-completo.md +190 -0
  23. package/content/prompts/arquitetura/clean-architecture.md +151 -0
  24. package/content/prompts/arquitetura/ddd-bounded-contexts.md +183 -0
  25. package/content/prompts/arquitetura/ddd-cqrs.md +176 -0
  26. package/content/prompts/arquitetura/modelo-dominio.md +207 -0
  27. package/content/prompts/arquitetura/multi-tenancy.md +235 -0
  28. package/content/prompts/database/migrations-zero-downtime.md +192 -0
  29. package/content/prompts/database/otimizacao-queries.md +296 -0
  30. package/content/prompts/desenvolvimento/code-review.md +301 -0
  31. package/content/prompts/desenvolvimento/gerar-servico.md +271 -0
  32. package/content/prompts/devops/docker-compose.md +336 -0
  33. package/content/prompts/devops/feature-flags.md +374 -0
  34. package/content/prompts/devops/kubernetes-deploy.md +460 -0
  35. package/content/prompts/devops/pipeline-cicd.md +358 -0
  36. package/content/prompts/devops/terraform-iac.md +502 -0
  37. package/content/prompts/escalabilidade/analise-performance.md +240 -0
  38. package/content/prompts/escalabilidade/analise-performance.txt +94 -0
  39. package/content/prompts/escalabilidade/caching.md +255 -0
  40. package/content/prompts/observabilidade/chaos-testing.md +237 -0
  41. package/content/prompts/observabilidade/estrategia-observabilidade.md +263 -0
  42. package/content/prompts/observabilidade/estrategia-observabilidade.txt +134 -0
  43. package/content/prompts/observabilidade/slos.md +215 -0
  44. package/content/prompts/produto/discovery-inicial.md +203 -0
  45. package/content/prompts/produto/discovery-inicial.txt +33 -0
  46. package/content/prompts/requisitos/refinar-requisitos.md +232 -0
  47. package/content/prompts/requisitos/refinar-requisitos.txt +40 -0
  48. package/content/prompts/seguranca/analise-seguranca.md +243 -0
  49. package/content/prompts/seguranca/pentest-checklist.md +333 -0
  50. package/content/prompts/seguranca/rate-limiting.md +356 -0
  51. package/content/prompts/seguranca/revisao-lgpd.md +227 -0
  52. package/content/prompts/seguranca/threat-modeling.md +224 -0
  53. package/content/prompts/testes/contract-testing.md +340 -0
  54. package/content/prompts/testes/gerar-testes-unitarios.md +474 -0
  55. package/content/prompts/testes/testes-e2e.md +460 -0
  56. package/content/prompts/testes/testes-integracao.md +418 -0
  57. package/content/prompts/testes/testes-performance.md +458 -0
  58. package/content/prompts/ux/gerar-ui-stitch.md +151 -0
  59. package/content/skills/api-patterns/SKILL.md +81 -0
  60. package/content/skills/api-patterns/api-style.md +42 -0
  61. package/content/skills/api-patterns/auth.md +24 -0
  62. package/content/skills/api-patterns/documentation.md +26 -0
  63. package/content/skills/api-patterns/graphql.md +41 -0
  64. package/content/skills/api-patterns/rate-limiting.md +31 -0
  65. package/content/skills/api-patterns/response.md +37 -0
  66. package/content/skills/api-patterns/rest.md +40 -0
  67. package/content/skills/api-patterns/scripts/api_validator.py +211 -0
  68. package/content/skills/api-patterns/security-testing.md +122 -0
  69. package/content/skills/api-patterns/trpc.md +41 -0
  70. package/content/skills/api-patterns/versioning.md +22 -0
  71. package/content/skills/app-builder/SKILL.md +75 -0
  72. package/content/skills/app-builder/agent-coordination.md +71 -0
  73. package/content/skills/app-builder/feature-building.md +53 -0
  74. package/content/skills/app-builder/project-detection.md +34 -0
  75. package/content/skills/app-builder/scaffolding.md +118 -0
  76. package/content/skills/app-builder/tech-stack.md +40 -0
  77. package/content/skills/app-builder/templates/SKILL.md +39 -0
  78. package/content/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
  79. package/content/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
  80. package/content/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
  81. package/content/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
  82. package/content/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
  83. package/content/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
  84. package/content/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
  85. package/content/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +82 -0
  86. package/content/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +100 -0
  87. package/content/skills/app-builder/templates/nextjs-static/TEMPLATE.md +106 -0
  88. package/content/skills/app-builder/templates/nuxt-app/TEMPLATE.md +101 -0
  89. package/content/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
  90. package/content/skills/app-builder/templates/react-native-app/TEMPLATE.md +93 -0
  91. package/content/skills/architecture/SKILL.md +55 -0
  92. package/content/skills/architecture/context-discovery.md +43 -0
  93. package/content/skills/architecture/examples.md +94 -0
  94. package/content/skills/architecture/pattern-selection.md +68 -0
  95. package/content/skills/architecture/patterns-reference.md +50 -0
  96. package/content/skills/architecture/trade-off-analysis.md +77 -0
  97. package/content/skills/bash-linux/SKILL.md +199 -0
  98. package/content/skills/behavioral-modes/SKILL.md +242 -0
  99. package/content/skills/brainstorming/SKILL.md +163 -0
  100. package/content/skills/brainstorming/dynamic-questioning.md +350 -0
  101. package/content/skills/clean-code/SKILL.md +201 -0
  102. package/content/skills/code-review-checklist/SKILL.md +109 -0
  103. package/content/skills/database-design/SKILL.md +52 -0
  104. package/content/skills/database-design/database-selection.md +43 -0
  105. package/content/skills/database-design/indexing.md +39 -0
  106. package/content/skills/database-design/migrations.md +48 -0
  107. package/content/skills/database-design/optimization.md +36 -0
  108. package/content/skills/database-design/orm-selection.md +30 -0
  109. package/content/skills/database-design/schema-design.md +56 -0
  110. package/content/skills/database-design/scripts/schema_validator.py +172 -0
  111. package/content/skills/deployment-procedures/SKILL.md +241 -0
  112. package/content/skills/doc.md +177 -0
  113. package/content/skills/documentation-templates/SKILL.md +194 -0
  114. package/content/skills/frontend-design/SKILL.md +396 -0
  115. package/content/skills/frontend-design/animation-guide.md +331 -0
  116. package/content/skills/frontend-design/color-system.md +311 -0
  117. package/content/skills/frontend-design/decision-trees.md +418 -0
  118. package/content/skills/frontend-design/motion-graphics.md +306 -0
  119. package/content/skills/frontend-design/scripts/accessibility_checker.py +183 -0
  120. package/content/skills/frontend-design/scripts/ux_audit.py +722 -0
  121. package/content/skills/frontend-design/typography-system.md +345 -0
  122. package/content/skills/frontend-design/ux-psychology.md +541 -0
  123. package/content/skills/frontend-design/visual-effects.md +383 -0
  124. package/content/skills/game-development/2d-games/SKILL.md +119 -0
  125. package/content/skills/game-development/3d-games/SKILL.md +135 -0
  126. package/content/skills/game-development/SKILL.md +167 -0
  127. package/content/skills/game-development/game-art/SKILL.md +185 -0
  128. package/content/skills/game-development/game-audio/SKILL.md +190 -0
  129. package/content/skills/game-development/game-design/SKILL.md +129 -0
  130. package/content/skills/game-development/mobile-games/SKILL.md +108 -0
  131. package/content/skills/game-development/multiplayer/SKILL.md +132 -0
  132. package/content/skills/game-development/pc-games/SKILL.md +144 -0
  133. package/content/skills/game-development/vr-ar/SKILL.md +123 -0
  134. package/content/skills/game-development/web-games/SKILL.md +150 -0
  135. package/content/skills/geo-fundamentals/SKILL.md +156 -0
  136. package/content/skills/geo-fundamentals/scripts/geo_checker.py +289 -0
  137. package/content/skills/i18n-localization/SKILL.md +154 -0
  138. package/content/skills/i18n-localization/scripts/i18n_checker.py +241 -0
  139. package/content/skills/intelligent-routing/SKILL.md +334 -0
  140. package/content/skills/lint-and-validate/SKILL.md +45 -0
  141. package/content/skills/lint-and-validate/scripts/lint_runner.py +172 -0
  142. package/content/skills/lint-and-validate/scripts/type_coverage.py +173 -0
  143. package/content/skills/mcp-builder/SKILL.md +176 -0
  144. package/content/skills/mobile-design/SKILL.md +394 -0
  145. package/content/skills/mobile-design/decision-trees.md +516 -0
  146. package/content/skills/mobile-design/mobile-backend.md +491 -0
  147. package/content/skills/mobile-design/mobile-color-system.md +420 -0
  148. package/content/skills/mobile-design/mobile-debugging.md +122 -0
  149. package/content/skills/mobile-design/mobile-design-thinking.md +357 -0
  150. package/content/skills/mobile-design/mobile-navigation.md +458 -0
  151. package/content/skills/mobile-design/mobile-performance.md +767 -0
  152. package/content/skills/mobile-design/mobile-testing.md +356 -0
  153. package/content/skills/mobile-design/mobile-typography.md +433 -0
  154. package/content/skills/mobile-design/platform-android.md +666 -0
  155. package/content/skills/mobile-design/platform-ios.md +561 -0
  156. package/content/skills/mobile-design/scripts/mobile_audit.py +670 -0
  157. package/content/skills/mobile-design/touch-psychology.md +537 -0
  158. package/content/skills/nextjs-best-practices/SKILL.md +203 -0
  159. package/content/skills/nodejs-best-practices/SKILL.md +333 -0
  160. package/content/skills/parallel-agents/SKILL.md +175 -0
  161. package/content/skills/performance-profiling/SKILL.md +143 -0
  162. package/content/skills/performance-profiling/scripts/lighthouse_audit.py +76 -0
  163. package/content/skills/plan-writing/SKILL.md +152 -0
  164. package/content/skills/powershell-windows/SKILL.md +167 -0
  165. package/content/skills/python-patterns/SKILL.md +441 -0
  166. package/content/skills/react-patterns/SKILL.md +198 -0
  167. package/content/skills/red-team-tactics/SKILL.md +199 -0
  168. package/content/skills/seo-fundamentals/SKILL.md +129 -0
  169. package/content/skills/seo-fundamentals/scripts/seo_checker.py +219 -0
  170. package/content/skills/server-management/SKILL.md +161 -0
  171. package/content/skills/systematic-debugging/SKILL.md +109 -0
  172. package/content/skills/tailwind-patterns/SKILL.md +269 -0
  173. package/content/skills/tdd-workflow/SKILL.md +149 -0
  174. package/content/skills/testing-patterns/SKILL.md +178 -0
  175. package/content/skills/testing-patterns/scripts/test_runner.py +219 -0
  176. package/content/skills/vulnerability-scanner/SKILL.md +276 -0
  177. package/content/skills/vulnerability-scanner/checklists.md +121 -0
  178. package/content/skills/vulnerability-scanner/scripts/security_scan.py +458 -0
  179. package/content/skills/webapp-testing/SKILL.md +187 -0
  180. package/content/skills/webapp-testing/scripts/playwright_runner.py +173 -0
  181. package/content/specialists/Especialista em Acessibilidade.md +266 -0
  182. package/content/specialists/Especialista em An/303/241lise de Testes.md" +434 -0
  183. package/content/specialists/Especialista em Arquitetura Avan/303/247ada.md" +358 -0
  184. package/content/specialists/Especialista em Arquitetura de Software.md +177 -0
  185. package/content/specialists/Especialista em Banco de Dados.md +260 -0
  186. package/content/specialists/Especialista em Contrato de API.md +172 -0
  187. package/content/specialists/Especialista em Dados e Analytics com IA.md +246 -0
  188. package/content/specialists/Especialista em Debugging e Troubleshooting.md +191 -0
  189. package/content/specialists/Especialista em Desenvolvimento Frontend.md +477 -0
  190. package/content/specialists/Especialista em Desenvolvimento Mobile.md +241 -0
  191. package/content/specialists/Especialista em Desenvolvimento e Vibe Coding Estruturado.md +417 -0
  192. package/content/specialists/Especialista em DevOps e Infraestrutura.md +294 -0
  193. package/content/specialists/Especialista em Documenta/303/247/303/243o T/303/251cnica.md" +227 -0
  194. package/content/specialists/Especialista em Engenharia de Requisitos com IA.md +299 -0
  195. package/content/specialists/Especialista em Explora/303/247/303/243o de Codebase.md" +179 -0
  196. package/content/specialists/Especialista em Gest/303/243o de Produto.md" +179 -0
  197. package/content/specialists/Especialista em Migra/303/247/303/243o e Moderniza/303/247/303/243o.md" +410 -0
  198. package/content/specialists/Especialista em Modelagem e Arquitetura de Dom/303/255nio com IA.md" +248 -0
  199. package/content/specialists/Especialista em Observabilidade.md +415 -0
  200. package/content/specialists/Especialista em Performance e Escalabilidade.md +373 -0
  201. package/content/specialists/Especialista em Plano de Execu/303/247/303/243o com IA.md" +341 -0
  202. package/content/specialists/Especialista em Prototipagem R/303/241pida com Google Stitch.md" +419 -0
  203. package/content/specialists/Especialista em Seguran/303/247a da Informa/303/247/303/243o.md" +508 -0
  204. package/content/specialists/Especialista em UX Design.md +453 -0
  205. package/content/specialists/INDEX.md +43 -0
  206. package/content/templates/PRD.md +165 -0
  207. package/content/templates/README.md +65 -0
  208. package/content/templates/adr.md +103 -0
  209. package/content/templates/arquitetura.md +279 -0
  210. package/content/templates/backlog.md +185 -0
  211. package/content/templates/checklist-seguranca.md +180 -0
  212. package/content/templates/contexto.md +120 -0
  213. package/content/templates/criterios-aceite.md +99 -0
  214. package/content/templates/design-banco.md +270 -0
  215. package/content/templates/design-doc.md +240 -0
  216. package/content/templates/feature.md +88 -0
  217. package/content/templates/historia-backend.md +84 -0
  218. package/content/templates/historia-frontend.md +75 -0
  219. package/content/templates/historia-usuario.md +125 -0
  220. package/content/templates/mapa-navegacao.md +133 -0
  221. package/content/templates/matriz-rastreabilidade.md +121 -0
  222. package/content/templates/modelo-dominio.md +219 -0
  223. package/content/templates/plano-testes.md +199 -0
  224. package/content/templates/prototipo-stitch.md +138 -0
  225. package/content/templates/requisitos.md +162 -0
  226. package/content/templates/slo-sli.md +197 -0
  227. package/content/workflows/README-MCP.md +363 -0
  228. package/content/workflows/brainstorm.md +113 -0
  229. package/content/workflows/create.md +59 -0
  230. package/content/workflows/debug.md +103 -0
  231. package/content/workflows/deploy.md +176 -0
  232. package/content/workflows/enhance.md +63 -0
  233. package/content/workflows/mcp-debug.md +506 -0
  234. package/content/workflows/mcp-feature.md +385 -0
  235. package/content/workflows/mcp-gate.md +413 -0
  236. package/content/workflows/mcp-next.md +388 -0
  237. package/content/workflows/mcp-refactor.md +600 -0
  238. package/content/workflows/mcp-start.md +304 -0
  239. package/content/workflows/mcp-status.md +400 -0
  240. package/content/workflows/orchestrate.md +237 -0
  241. package/content/workflows/plan.md +89 -0
  242. package/content/workflows/preview.md +81 -0
  243. package/content/workflows/status.md +86 -0
  244. package/content/workflows/test.md +144 -0
  245. package/content/workflows/ui-ux-pro-max.md +296 -0
  246. package/dist/commands/init.d.ts +6 -0
  247. package/dist/commands/init.js +138 -0
  248. package/dist/commands/update.d.ts +5 -0
  249. package/dist/commands/update.js +50 -0
  250. package/dist/index.d.ts +2 -0
  251. package/dist/index.js +21 -0
  252. package/package.json +48 -0
@@ -0,0 +1,460 @@
1
+ # Prompt: Testes End-to-End (E2E)
2
+
3
+ > **Quando usar**: Validar fluxos completos do usuário, do início ao fim
4
+ > **Especialista**: [Análise de Testes](../../02-especialistas/Especialista%20em%20Análise%20de%20Testes.md)
5
+ > **Nível**: Médio a Complexo
6
+
7
+ ---
8
+
9
+ ## Fluxo de Contexto
10
+
11
+ Antes de usar este prompt, tenha em mãos:
12
+ - `docs/CONTEXTO.md` - Entendimento do projeto
13
+ - `docs/03-ux/design-doc.md` - Fluxos de usuário
14
+ - URL do ambiente de staging/desenvolvimento
15
+
16
+ Após gerar, salve os testes em:
17
+ - `tests/e2e/` ou `e2e/` na raiz do projeto
18
+
19
+ ---
20
+
21
+ ## Prompt Completo
22
+
23
+ ```text
24
+ Atue como especialista em testes end-to-end (E2E) e automação de browser.
25
+
26
+ ## Contexto do Projeto
27
+
28
+ [COLE O CONTEÚDO DE docs/CONTEXTO.md]
29
+
30
+ ## Stack Frontend
31
+
32
+ - Framework: [React/Vue/Angular/Next.js]
33
+ - Componentes: [Component library usada]
34
+ - Autenticação: [Como funciona o login]
35
+
36
+ ## Ferramenta de E2E
37
+
38
+ - [ ] Cypress
39
+ - [ ] Playwright
40
+ - [ ] Selenium
41
+ - [ ] TestCafe
42
+
43
+ ## Fluxos Críticos a Testar
44
+
45
+ 1. [Fluxo 1 - ex: Cadastro de usuário]
46
+ 2. [Fluxo 2 - ex: Login e acesso ao dashboard]
47
+ 3. [Fluxo 3 - ex: Checkout completo]
48
+ 4. [Fluxo 4 - ex: ...]
49
+
50
+ ## URLs e Ambientes
51
+
52
+ - Desenvolvimento: [http://localhost:3000]
53
+ - Staging: [https://staging.example.com]
54
+
55
+ ---
56
+
57
+ ## Sua Missão
58
+
59
+ Gere testes E2E completos usando a ferramenta escolhida:
60
+
61
+ ### 1. Estrutura do Projeto
62
+
63
+ ```
64
+ e2e/
65
+ ├── fixtures/
66
+ │ ├── users.json
67
+ │ └── products.json
68
+ ├── pages/
69
+ │ ├── LoginPage.ts
70
+ │ ├── DashboardPage.ts
71
+ │ └── CheckoutPage.ts
72
+ ├── support/
73
+ │ ├── commands.ts
74
+ │ └── helpers.ts
75
+ ├── specs/
76
+ │ ├── auth/
77
+ │ │ ├── login.spec.ts
78
+ │ │ └── register.spec.ts
79
+ │ ├── checkout/
80
+ │ │ └── purchase.spec.ts
81
+ │ └── smoke.spec.ts
82
+ ├── playwright.config.ts
83
+ └── package.json
84
+ ```
85
+
86
+ ### 2. Configuração (Playwright)
87
+
88
+ ```typescript
89
+ // playwright.config.ts
90
+ import { defineConfig, devices } from '@playwright/test';
91
+
92
+ export default defineConfig({
93
+ testDir: './specs',
94
+ timeout: 30000,
95
+ expect: {
96
+ timeout: 5000,
97
+ },
98
+ fullyParallel: true,
99
+ forbidOnly: !!process.env.CI,
100
+ retries: process.env.CI ? 2 : 0,
101
+ workers: process.env.CI ? 1 : undefined,
102
+ reporter: [
103
+ ['html'],
104
+ ['junit', { outputFile: 'results/junit.xml' }],
105
+ ],
106
+ use: {
107
+ baseURL: process.env.BASE_URL || 'http://localhost:3000',
108
+ trace: 'on-first-retry',
109
+ screenshot: 'only-on-failure',
110
+ video: 'retain-on-failure',
111
+ },
112
+ projects: [
113
+ {
114
+ name: 'chromium',
115
+ use: { ...devices['Desktop Chrome'] },
116
+ },
117
+ {
118
+ name: 'firefox',
119
+ use: { ...devices['Desktop Firefox'] },
120
+ },
121
+ {
122
+ name: 'mobile',
123
+ use: { ...devices['iPhone 13'] },
124
+ },
125
+ ],
126
+ webServer: {
127
+ command: 'npm run dev',
128
+ url: 'http://localhost:3000',
129
+ reuseExistingServer: !process.env.CI,
130
+ },
131
+ });
132
+ ```
133
+
134
+ ### 3. Page Object Model
135
+
136
+ ```typescript
137
+ // pages/LoginPage.ts
138
+ import { Page, Locator } from '@playwright/test';
139
+
140
+ export class LoginPage {
141
+ readonly page: Page;
142
+ readonly emailInput: Locator;
143
+ readonly passwordInput: Locator;
144
+ readonly submitButton: Locator;
145
+ readonly errorMessage: Locator;
146
+ readonly forgotPasswordLink: Locator;
147
+
148
+ constructor(page: Page) {
149
+ this.page = page;
150
+ this.emailInput = page.getByLabel('Email');
151
+ this.passwordInput = page.getByLabel('Senha');
152
+ this.submitButton = page.getByRole('button', { name: 'Entrar' });
153
+ this.errorMessage = page.getByRole('alert');
154
+ this.forgotPasswordLink = page.getByRole('link', { name: 'Esqueci minha senha' });
155
+ }
156
+
157
+ async goto() {
158
+ await this.page.goto('/login');
159
+ }
160
+
161
+ async login(email: string, password: string) {
162
+ await this.emailInput.fill(email);
163
+ await this.passwordInput.fill(password);
164
+ await this.submitButton.click();
165
+ }
166
+
167
+ async expectErrorMessage(message: string) {
168
+ await expect(this.errorMessage).toContainText(message);
169
+ }
170
+ }
171
+
172
+ // pages/DashboardPage.ts
173
+ export class DashboardPage {
174
+ readonly page: Page;
175
+ readonly welcomeMessage: Locator;
176
+ readonly userMenu: Locator;
177
+ readonly logoutButton: Locator;
178
+
179
+ constructor(page: Page) {
180
+ this.page = page;
181
+ this.welcomeMessage = page.getByTestId('welcome-message');
182
+ this.userMenu = page.getByRole('button', { name: /menu do usuário/i });
183
+ this.logoutButton = page.getByRole('menuitem', { name: 'Sair' });
184
+ }
185
+
186
+ async expectWelcome(name: string) {
187
+ await expect(this.welcomeMessage).toContainText(`Olá, ${name}`);
188
+ }
189
+
190
+ async logout() {
191
+ await this.userMenu.click();
192
+ await this.logoutButton.click();
193
+ }
194
+ }
195
+ ```
196
+
197
+ ### 4. Fixtures e Helpers
198
+
199
+ ```typescript
200
+ // support/helpers.ts
201
+ import { Page } from '@playwright/test';
202
+
203
+ export async function loginAsUser(page: Page, email: string, password: string) {
204
+ await page.goto('/login');
205
+ await page.getByLabel('Email').fill(email);
206
+ await page.getByLabel('Senha').fill(password);
207
+ await page.getByRole('button', { name: 'Entrar' }).click();
208
+ await page.waitForURL('/dashboard');
209
+ }
210
+
211
+ export async function createTestUser(page: Page) {
212
+ // Criar usuário via API para evitar depender de UI
213
+ const response = await page.request.post('/api/test/users', {
214
+ data: {
215
+ email: `test-${Date.now()}@example.com`,
216
+ password: 'Test123!',
217
+ name: 'Test User',
218
+ },
219
+ });
220
+ return response.json();
221
+ }
222
+
223
+ // fixtures/users.json
224
+ {
225
+ "validUser": {
226
+ "email": "user@example.com",
227
+ "password": "SecurePass123!"
228
+ },
229
+ "adminUser": {
230
+ "email": "admin@example.com",
231
+ "password": "AdminPass123!"
232
+ }
233
+ }
234
+ ```
235
+
236
+ ### 5. Testes de Autenticação
237
+
238
+ ```typescript
239
+ // specs/auth/login.spec.ts
240
+ import { test, expect } from '@playwright/test';
241
+ import { LoginPage } from '../../pages/LoginPage';
242
+ import { DashboardPage } from '../../pages/DashboardPage';
243
+ import users from '../../fixtures/users.json';
244
+
245
+ test.describe('Login', () => {
246
+ test.beforeEach(async ({ page }) => {
247
+ await page.goto('/login');
248
+ });
249
+
250
+ test('should login with valid credentials', async ({ page }) => {
251
+ const loginPage = new LoginPage(page);
252
+ const dashboardPage = new DashboardPage(page);
253
+
254
+ await loginPage.login(users.validUser.email, users.validUser.password);
255
+
256
+ // Verificar redirecionamento
257
+ await expect(page).toHaveURL('/dashboard');
258
+ await dashboardPage.expectWelcome('Test User');
259
+ });
260
+
261
+ test('should show error for invalid credentials', async ({ page }) => {
262
+ const loginPage = new LoginPage(page);
263
+
264
+ await loginPage.login('invalid@example.com', 'wrongpassword');
265
+
266
+ await loginPage.expectErrorMessage('Email ou senha inválidos');
267
+ await expect(page).toHaveURL('/login');
268
+ });
269
+
270
+ test('should persist session after page reload', async ({ page }) => {
271
+ const loginPage = new LoginPage(page);
272
+
273
+ await loginPage.login(users.validUser.email, users.validUser.password);
274
+ await expect(page).toHaveURL('/dashboard');
275
+
276
+ // Recarregar página
277
+ await page.reload();
278
+
279
+ // Deve continuar logado
280
+ await expect(page).toHaveURL('/dashboard');
281
+ });
282
+
283
+ test('should logout successfully', async ({ page }) => {
284
+ const loginPage = new LoginPage(page);
285
+ const dashboardPage = new DashboardPage(page);
286
+
287
+ await loginPage.login(users.validUser.email, users.validUser.password);
288
+ await dashboardPage.logout();
289
+
290
+ await expect(page).toHaveURL('/login');
291
+ });
292
+ });
293
+
294
+ // specs/auth/register.spec.ts
295
+ test.describe('Registro', () => {
296
+ test('should register new user successfully', async ({ page }) => {
297
+ const uniqueEmail = `user-${Date.now()}@example.com`;
298
+
299
+ await page.goto('/register');
300
+ await page.getByLabel('Nome').fill('Novo Usuario');
301
+ await page.getByLabel('Email').fill(uniqueEmail);
302
+ await page.getByLabel('Senha').fill('SecurePass123!');
303
+ await page.getByLabel('Confirmar senha').fill('SecurePass123!');
304
+ await page.getByRole('checkbox', { name: /termos/i }).check();
305
+ await page.getByRole('button', { name: 'Criar conta' }).click();
306
+
307
+ // Verificar sucesso
308
+ await expect(page).toHaveURL('/dashboard');
309
+ await expect(page.getByText('Conta criada com sucesso')).toBeVisible();
310
+ });
311
+
312
+ test('should validate password requirements', async ({ page }) => {
313
+ await page.goto('/register');
314
+ await page.getByLabel('Senha').fill('weak');
315
+ await page.getByLabel('Senha').blur();
316
+
317
+ await expect(page.getByText(/mínimo 8 caracteres/i)).toBeVisible();
318
+ });
319
+ });
320
+ ```
321
+
322
+ ### 6. Testes de Fluxo de Compra
323
+
324
+ ```typescript
325
+ // specs/checkout/purchase.spec.ts
326
+ import { test, expect } from '@playwright/test';
327
+ import { loginAsUser } from '../../support/helpers';
328
+
329
+ test.describe('Checkout', () => {
330
+ test.beforeEach(async ({ page }) => {
331
+ await loginAsUser(page, 'user@example.com', 'Test123!');
332
+ });
333
+
334
+ test('should complete full purchase flow', async ({ page }) => {
335
+ // 1. Navegar para produtos
336
+ await page.getByRole('link', { name: 'Produtos' }).click();
337
+
338
+ // 2. Adicionar produto ao carrinho
339
+ await page.getByTestId('product-card').first().click();
340
+ await page.getByRole('button', { name: 'Adicionar ao carrinho' }).click();
341
+ await expect(page.getByText('Produto adicionado')).toBeVisible();
342
+
343
+ // 3. Ir para carrinho
344
+ await page.getByRole('link', { name: /carrinho/i }).click();
345
+ await expect(page.getByTestId('cart-item')).toHaveCount(1);
346
+
347
+ // 4. Prosseguir para checkout
348
+ await page.getByRole('button', { name: 'Finalizar compra' }).click();
349
+
350
+ // 5. Preencher endereço
351
+ await page.getByLabel('CEP').fill('01310-100');
352
+ await page.waitForResponse('**/api/address/**'); // Aguardar busca de CEP
353
+ await page.getByLabel('Número').fill('100');
354
+ await page.getByRole('button', { name: 'Continuar' }).click();
355
+
356
+ // 6. Selecionar pagamento
357
+ await page.getByLabel('Cartão de crédito').check();
358
+ await page.getByLabel('Número do cartão').fill('4242424242424242');
359
+ await page.getByLabel('Validade').fill('12/28');
360
+ await page.getByLabel('CVV').fill('123');
361
+ await page.getByRole('button', { name: 'Pagar' }).click();
362
+
363
+ // 7. Verificar confirmação
364
+ await expect(page.getByText('Pedido confirmado')).toBeVisible({ timeout: 10000 });
365
+ await expect(page.getByTestId('order-number')).toBeVisible();
366
+ });
367
+
368
+ test('should handle payment failure gracefully', async ({ page }) => {
369
+ // ... adicionar produto e ir para checkout
370
+
371
+ // Usar cartão que falha
372
+ await page.getByLabel('Número do cartão').fill('4000000000000002');
373
+ await page.getByRole('button', { name: 'Pagar' }).click();
374
+
375
+ await expect(page.getByRole('alert')).toContainText('Pagamento recusado');
376
+ // Usuário deve poder tentar novamente
377
+ await expect(page.getByRole('button', { name: 'Pagar' })).toBeEnabled();
378
+ });
379
+ });
380
+ ```
381
+
382
+ ### 7. Testes de Smoke (Críticos)
383
+
384
+ ```typescript
385
+ // specs/smoke.spec.ts
386
+ import { test, expect } from '@playwright/test';
387
+
388
+ test.describe('Smoke Tests', () => {
389
+ test('homepage loads correctly', async ({ page }) => {
390
+ await page.goto('/');
391
+ await expect(page).toHaveTitle(/Nome do App/);
392
+ await expect(page.getByRole('navigation')).toBeVisible();
393
+ });
394
+
395
+ test('login page is accessible', async ({ page }) => {
396
+ await page.goto('/login');
397
+ await expect(page.getByRole('heading', { name: 'Entrar' })).toBeVisible();
398
+ });
399
+
400
+ test('API health check', async ({ request }) => {
401
+ const response = await request.get('/api/health');
402
+ expect(response.ok()).toBeTruthy();
403
+ });
404
+ });
405
+ ```
406
+
407
+ ### 8. Scripts e CI
408
+
409
+ ```json
410
+ // package.json
411
+ {
412
+ "scripts": {
413
+ "test:e2e": "playwright test",
414
+ "test:e2e:ui": "playwright test --ui",
415
+ "test:e2e:headed": "playwright test --headed",
416
+ "test:e2e:smoke": "playwright test --grep @smoke",
417
+ "test:e2e:report": "playwright show-report"
418
+ }
419
+ }
420
+ ```
421
+
422
+ ```yaml
423
+ # .github/workflows/e2e.yml
424
+ name: E2E Tests
425
+
426
+ on: [push, pull_request]
427
+
428
+ jobs:
429
+ e2e:
430
+ runs-on: ubuntu-latest
431
+ steps:
432
+ - uses: actions/checkout@v4
433
+ - uses: actions/setup-node@v4
434
+ with:
435
+ node-version: 20
436
+ - run: npm ci
437
+ - run: npx playwright install --with-deps
438
+ - run: npm run test:e2e
439
+ - uses: actions/upload-artifact@v4
440
+ if: failure()
441
+ with:
442
+ name: playwright-report
443
+ path: playwright-report/
444
+ ```
445
+ ```
446
+
447
+ ---
448
+
449
+ ## Checklist Pós-Geração
450
+
451
+ - [ ] Page Objects criados para páginas principais
452
+ - [ ] Fixtures de dados configurados
453
+ - [ ] Testes de autenticação (login, registro, logout)
454
+ - [ ] Testes de fluxos críticos de negócio
455
+ - [ ] Smoke tests para verificação rápida
456
+ - [ ] Configuração multi-browser
457
+ - [ ] Screenshots e vídeos em falha
458
+ - [ ] CI configurado com artefatos
459
+ - [ ] Seletores resilientes (role, label, testid)
460
+ - [ ] Timeouts apropriados