testeiya 0.10.1 → 0.10.2

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 (225) hide show
  1. package/README.md +7 -19
  2. package/dist/prompt/clis.d.ts +7 -0
  3. package/dist/prompt/pipeline-report.d.ts +1 -0
  4. package/dist/prompt/report.d.ts +10 -0
  5. package/dist/prompt/system-prompt.d.ts +22 -0
  6. package/dist/prompt/testomat.io.d.ts +19 -0
  7. package/dist/prompt/thread.d.ts +73 -0
  8. package/dist/src/args.d.ts +39 -0
  9. package/dist/src/attribution-extension.d.ts +3 -0
  10. package/dist/src/checkpoint.d.ts +30 -0
  11. package/dist/src/cli.d.ts +2 -0
  12. package/dist/src/cli.js +27 -32
  13. package/dist/src/cli.js.map +1 -1
  14. package/dist/src/doctor.d.ts +11 -0
  15. package/dist/src/env.d.ts +30 -0
  16. package/dist/src/exec.d.ts +11 -0
  17. package/dist/src/git.d.ts +41 -0
  18. package/dist/src/langfuse-extension.d.ts +7 -0
  19. package/dist/src/langfuse.d.ts +67 -0
  20. package/dist/src/mcp.d.ts +19 -0
  21. package/dist/src/model.d.ts +20 -0
  22. package/dist/src/models.d.ts +1 -0
  23. package/dist/src/output.d.ts +84 -0
  24. package/dist/src/pipeline/command-stage.d.ts +12 -0
  25. package/dist/src/pipeline/crash-guard.d.ts +12 -0
  26. package/dist/src/pipeline/crash-guard.js +21 -0
  27. package/dist/src/pipeline/crash-guard.js.map +1 -0
  28. package/dist/src/pipeline/diagram.d.ts +24 -0
  29. package/dist/src/pipeline/gate.d.ts +21 -0
  30. package/dist/src/pipeline/launcher.d.ts +33 -0
  31. package/dist/src/pipeline/launcher.js +16 -3
  32. package/dist/src/pipeline/launcher.js.map +1 -1
  33. package/dist/src/pipeline/log.d.ts +29 -0
  34. package/dist/src/pipeline/log.js +9 -0
  35. package/dist/src/pipeline/log.js.map +1 -1
  36. package/dist/src/pipeline/overlay.d.ts +29 -0
  37. package/dist/src/pipeline/pipeline-file.d.ts +44 -0
  38. package/dist/src/pipeline/pipeline.d.ts +78 -0
  39. package/dist/src/pipeline/pipeline.js +22 -0
  40. package/dist/src/pipeline/pipeline.js.map +1 -1
  41. package/dist/src/pipeline/report.d.ts +26 -0
  42. package/dist/src/pipeline/report.js +13 -0
  43. package/dist/src/pipeline/report.js.map +1 -1
  44. package/dist/src/pipeline/spec.d.ts +63 -0
  45. package/dist/src/pipeline/stage-env.d.ts +13 -0
  46. package/dist/src/pipeline/stage-env.js +31 -0
  47. package/dist/src/pipeline/stage-env.js.map +1 -0
  48. package/dist/src/pipeline/stage.d.ts +71 -0
  49. package/dist/src/pipeline/stage.js.map +1 -1
  50. package/dist/src/pipeline/state.d.ts +63 -0
  51. package/dist/src/pipeline/summary-stage.d.ts +24 -0
  52. package/dist/src/pipeline/task-stage.d.ts +24 -0
  53. package/dist/src/pipeline/task-stage.js +86 -2
  54. package/dist/src/pipeline/task-stage.js.map +1 -1
  55. package/dist/src/pipeline/variables.d.ts +20 -0
  56. package/dist/src/result.d.ts +6 -0
  57. package/dist/src/run.d.ts +69 -0
  58. package/dist/src/run.js +116 -60
  59. package/dist/src/run.js.map +1 -1
  60. package/dist/src/session.d.ts +43 -0
  61. package/dist/src/sessions.d.ts +23 -0
  62. package/dist/src/skills.d.ts +29 -0
  63. package/package.json +11 -2
  64. package/pipelines/api-testing.yml +1 -1
  65. package/scripts/vendor-skills.js +62 -0
  66. package/skills/codeceptjs/ci-fix-tests/SKILL.md +0 -119
  67. package/skills/codeceptjs/codeceptjs-auth/SKILL.md +0 -141
  68. package/skills/codeceptjs/codeceptjs-exploration/SKILL.md +0 -100
  69. package/skills/codeceptjs/codeceptjs-fundamentals/SKILL.md +0 -196
  70. package/skills/codeceptjs/codeceptjs-run-analysis/SKILL.md +0 -83
  71. package/skills/codeceptjs/debugging-codeceptjs-tests/SKILL.md +0 -126
  72. package/skills/codeceptjs/lint-codeceptjs-tests/SKILL.md +0 -104
  73. package/skills/codeceptjs/migrate-codeceptjs-4/SKILL.md +0 -109
  74. package/skills/codeceptjs/migrate-cypress-to-codeceptjs/SKILL.md +0 -295
  75. package/skills/codeceptjs/migrate-protractor-to-codeceptjs/SKILL.md +0 -339
  76. package/skills/codeceptjs/migrate-selenium-java-to-codeceptjs/SKILL.md +0 -459
  77. package/skills/codeceptjs/migrate-testcafe-to-codeceptjs/SKILL.md +0 -338
  78. package/skills/codeceptjs/refactoring-codeceptjs-tests/SKILL.md +0 -78
  79. package/skills/codeceptjs/writing-codeceptjs-tests/SKILL.md +0 -102
  80. package/skills/playwright/playwright-best-practices/SKILL.md +0 -303
  81. package/skills/playwright/playwright-best-practices/advanced/authentication-flows.md +0 -360
  82. package/skills/playwright/playwright-best-practices/advanced/authentication.md +0 -871
  83. package/skills/playwright/playwright-best-practices/advanced/clock-mocking.md +0 -364
  84. package/skills/playwright/playwright-best-practices/advanced/mobile-testing.md +0 -409
  85. package/skills/playwright/playwright-best-practices/advanced/multi-context.md +0 -288
  86. package/skills/playwright/playwright-best-practices/advanced/multi-user.md +0 -393
  87. package/skills/playwright/playwright-best-practices/advanced/network-advanced.md +0 -452
  88. package/skills/playwright/playwright-best-practices/advanced/third-party.md +0 -464
  89. package/skills/playwright/playwright-best-practices/architecture/pom-vs-fixtures.md +0 -363
  90. package/skills/playwright/playwright-best-practices/architecture/test-architecture.md +0 -369
  91. package/skills/playwright/playwright-best-practices/architecture/when-to-mock.md +0 -383
  92. package/skills/playwright/playwright-best-practices/browser-apis/browser-apis.md +0 -391
  93. package/skills/playwright/playwright-best-practices/browser-apis/iframes.md +0 -403
  94. package/skills/playwright/playwright-best-practices/browser-apis/service-workers.md +0 -504
  95. package/skills/playwright/playwright-best-practices/browser-apis/websockets.md +0 -403
  96. package/skills/playwright/playwright-best-practices/core/annotations.md +0 -424
  97. package/skills/playwright/playwright-best-practices/core/assertions-waiting.md +0 -361
  98. package/skills/playwright/playwright-best-practices/core/configuration.md +0 -452
  99. package/skills/playwright/playwright-best-practices/core/fixtures-hooks.md +0 -417
  100. package/skills/playwright/playwright-best-practices/core/global-setup.md +0 -434
  101. package/skills/playwright/playwright-best-practices/core/locators.md +0 -242
  102. package/skills/playwright/playwright-best-practices/core/page-object-model.md +0 -315
  103. package/skills/playwright/playwright-best-practices/core/projects-dependencies.md +0 -453
  104. package/skills/playwright/playwright-best-practices/core/test-data.md +0 -492
  105. package/skills/playwright/playwright-best-practices/core/test-suite-structure.md +0 -361
  106. package/skills/playwright/playwright-best-practices/core/test-tags.md +0 -298
  107. package/skills/playwright/playwright-best-practices/debugging/console-errors.md +0 -420
  108. package/skills/playwright/playwright-best-practices/debugging/debugging.md +0 -504
  109. package/skills/playwright/playwright-best-practices/debugging/error-testing.md +0 -360
  110. package/skills/playwright/playwright-best-practices/debugging/flaky-tests.md +0 -496
  111. package/skills/playwright/playwright-best-practices/frameworks/angular.md +0 -530
  112. package/skills/playwright/playwright-best-practices/frameworks/nextjs.md +0 -469
  113. package/skills/playwright/playwright-best-practices/frameworks/react.md +0 -531
  114. package/skills/playwright/playwright-best-practices/frameworks/vue.md +0 -574
  115. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/ci-cd.md +0 -468
  116. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/docker.md +0 -283
  117. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/github-actions.md +0 -546
  118. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/gitlab.md +0 -397
  119. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/other-providers.md +0 -521
  120. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/parallel-sharding.md +0 -371
  121. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/performance.md +0 -453
  122. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/reporting.md +0 -424
  123. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/test-coverage.md +0 -497
  124. package/skills/playwright/playwright-best-practices/testing-patterns/accessibility.md +0 -359
  125. package/skills/playwright/playwright-best-practices/testing-patterns/api-testing.md +0 -719
  126. package/skills/playwright/playwright-best-practices/testing-patterns/browser-extensions.md +0 -506
  127. package/skills/playwright/playwright-best-practices/testing-patterns/canvas-webgl.md +0 -493
  128. package/skills/playwright/playwright-best-practices/testing-patterns/component-testing.md +0 -500
  129. package/skills/playwright/playwright-best-practices/testing-patterns/drag-drop.md +0 -576
  130. package/skills/playwright/playwright-best-practices/testing-patterns/electron.md +0 -509
  131. package/skills/playwright/playwright-best-practices/testing-patterns/file-operations.md +0 -377
  132. package/skills/playwright/playwright-best-practices/testing-patterns/file-upload-download.md +0 -562
  133. package/skills/playwright/playwright-best-practices/testing-patterns/forms-validation.md +0 -561
  134. package/skills/playwright/playwright-best-practices/testing-patterns/graphql-testing.md +0 -331
  135. package/skills/playwright/playwright-best-practices/testing-patterns/i18n.md +0 -508
  136. package/skills/playwright/playwright-best-practices/testing-patterns/performance-testing.md +0 -476
  137. package/skills/playwright/playwright-best-practices/testing-patterns/security-testing.md +0 -430
  138. package/skills/playwright/playwright-best-practices/testing-patterns/visual-regression.md +0 -634
  139. package/skills/playwright/playwright-cli/SKILL.md +0 -489
  140. package/skills/playwright/playwright-cli/references/element-attributes.md +0 -23
  141. package/skills/playwright/playwright-cli/references/playwright-tests.md +0 -39
  142. package/skills/playwright/playwright-cli/references/pr-attachments.md +0 -60
  143. package/skills/playwright/playwright-cli/references/request-mocking.md +0 -87
  144. package/skills/playwright/playwright-cli/references/running-code.md +0 -245
  145. package/skills/playwright/playwright-cli/references/session-management.md +0 -227
  146. package/skills/playwright/playwright-cli/references/storage-state.md +0 -275
  147. package/skills/playwright/playwright-cli/references/test-generation.md +0 -433
  148. package/skills/playwright/playwright-cli/references/tracing.md +0 -139
  149. package/skills/playwright/playwright-cli/references/video-recording.md +0 -216
  150. package/skills/skills.lock.json +0 -89
  151. package/skills/skills.yaml +0 -35
  152. /package/skills/{testomatio/explorbot → explorbot}/explorbot-fundamentals/SKILL.md +0 -0
  153. /package/skills/{testomatio/explorbot → explorbot}/explorbot-fundamentals/references/no-install.md +0 -0
  154. /package/skills/{testomatio/explorbot → explorbot}/explorbot-plan/SKILL.md +0 -0
  155. /package/skills/{testomatio/explorbot → explorbot}/explorbot-setup/SKILL.md +0 -0
  156. /package/skills/{testomatio/explorbot → explorbot}/prima/SKILL.md +0 -0
  157. /package/skills/{testomatio/qa-process → qa-process}/qa-lead-strategy-advisor/SKILL.md +0 -0
  158. /package/skills/{testomatio/qa-process → qa-process}/qa-lead-strategy-advisor/references/output-format.md +0 -0
  159. /package/skills/{testomatio/qa-process → qa-process}/qa-review-pr/SKILL.md +0 -0
  160. /package/skills/{testomatio/qa-process → qa-process}/testing-workflow/SKILL.md +0 -0
  161. /package/skills/{testomatio/requirements → requirements}/catalog-features/SKILL.md +0 -0
  162. /package/skills/{testomatio/requirements → requirements}/catalog-features/references/layout.md +0 -0
  163. /package/skills/{testomatio/requirements → requirements}/detect-product-mismatches/SKILL.md +0 -0
  164. /package/skills/{testomatio/requirements → requirements}/detect-product-mismatches/references/features.md +0 -0
  165. /package/skills/{testomatio/requirements → requirements}/detect-product-mismatches/references/layout.md +0 -0
  166. /package/skills/{testomatio/requirements → requirements}/pull-request-diff-analyzer/SKILL.md +0 -0
  167. /package/skills/{testomatio/requirements → requirements}/qa-explain-behavior/SKILL.md +0 -0
  168. /package/skills/{testomatio/requirements → requirements}/qa-explain-behavior/references/answer-shapes.md +0 -0
  169. /package/skills/{testomatio/requirements → requirements}/qa-explain-behavior/references/examples.md +0 -0
  170. /package/skills/{testomatio/requirements → requirements}/qa-pr-requirements-analyzer/SKILL.md +0 -0
  171. /package/skills/{testomatio/requirements → requirements}/qa-pr-requirements-analyzer/references/summary-example.md +0 -0
  172. /package/skills/{testomatio/requirements → requirements}/qa-requirement-reviewer/SKILL.md +0 -0
  173. /package/skills/{testomatio/requirements → requirements}/qa-requirement-reviewer/references/requirements_reviewer_examples.md +0 -0
  174. /package/skills/{testomatio/requirements → requirements}/qa-thinking/SKILL.md +0 -0
  175. /package/skills/{testomatio/requirements → requirements}/wiki-from-code/SKILL.md +0 -0
  176. /package/skills/{testomatio/requirements → requirements}/wiki-from-code/references/behaviors.md +0 -0
  177. /package/skills/{testomatio/requirements → requirements}/wiki-from-code/references/layout.md +0 -0
  178. /package/skills/{testomatio/requirements → requirements}/write-user-story/SKILL.md +0 -0
  179. /package/skills/{testomatio/test-automation → test-automation}/automate-manual-test-cases/CLAUDE.md +0 -0
  180. /package/skills/{testomatio/test-automation → test-automation}/automate-manual-test-cases/SKILL.md +0 -0
  181. /package/skills/{testomatio/test-automation → test-automation}/automate-manual-test-cases/references/CODECEPTJS_BEST_PRACTICES.md +0 -0
  182. /package/skills/{testomatio/test-automation → test-automation}/automate-manual-test-cases/references/FINAL_SUMMARY_TEMPLATE.md +0 -0
  183. /package/skills/{testomatio/test-automation → test-automation}/automate-manual-test-cases/references/PLAYWRIGHT_BEST_PRACTICES.md +0 -0
  184. /package/skills/{testomatio/test-automation → test-automation}/automate-manual-test-cases/references/POM_BEST_PRACTICES.md +0 -0
  185. /package/skills/{testomatio/test-automation → test-automation}/automate-manual-test-cases/references/TEST_DATA_MANAGEMENT.md +0 -0
  186. /package/skills/{testomatio/test-automation → test-automation}/debug-fix-failed-flaky-autotests/SKILL.md +0 -0
  187. /package/skills/{testomatio/test-automation → test-automation}/debug-fix-failed-flaky-autotests/references/DEBUGGING_QUICK_REFERENCE.md +0 -0
  188. /package/skills/{testomatio/test-automation → test-automation}/epic-requirements-specification/SKILL.md +0 -0
  189. /package/skills/{testomatio/test-automation → test-automation}/qa-automation-test-consolidation/SKILL.md +0 -0
  190. /package/skills/{testomatio/test-automation → test-automation}/qa-data-seeder/SKILL.md +0 -0
  191. /package/skills/{testomatio/test-automation → test-automation}/run-tests-with-testomatio-reporter/SKILL.md +0 -0
  192. /package/skills/{testomatio/test-automation → test-automation}/setup-change-aware-pr-testing/SKILL.md +0 -0
  193. /package/skills/{testomatio/test-automation → test-automation}/setup-ci-automation/SKILL.md +0 -0
  194. /package/skills/{testomatio/test-automation → test-automation}/testomat-allure-adapter/SKILL.md +0 -0
  195. /package/skills/{testomatio/test-management → test-management}/detect-duplicate-test-cases/SKILL.md +0 -0
  196. /package/skills/{testomatio/test-management → test-management}/detect-duplicate-test-cases/references/DUPLICATE_INSTRUCTIONS.md +0 -0
  197. /package/skills/{testomatio/test-management → test-management}/detect-useless-tests/SKILL.md +0 -0
  198. /package/skills/{testomatio/test-management → test-management}/improve-test-cases/SKILL.md +0 -0
  199. /package/skills/{testomatio/test-management → test-management}/improve-test-cases/references/TESTOMAT_MARKDOWN_EXAMPLE.md +0 -0
  200. /package/skills/{testomatio/test-management → test-management}/migrate-to-testomatio/SKILL.md +0 -0
  201. /package/skills/{testomatio/test-management → test-management}/migrate-to-testomatio/references/CSV_MIGRATION.md +0 -0
  202. /package/skills/{testomatio/test-management → test-management}/migrate-to-testomatio/references/CUSTOM_MIGRATION.md +0 -0
  203. /package/skills/{testomatio/test-management → test-management}/migrate-to-testomatio/references/TESTMO_MIGRATION.md +0 -0
  204. /package/skills/{testomatio/test-management → test-management}/migrate-to-testomatio/references/TESTRAIL_MIGRATION.md +0 -0
  205. /package/skills/{testomatio/test-management → test-management}/migrate-to-testomatio/references/XRAY_MIGRATION.md +0 -0
  206. /package/skills/{testomatio/test-management → test-management}/qa-e2e-tests-reporting/SKILL.md +0 -0
  207. /package/skills/{testomatio/test-management → test-management}/qa-e2e-tests-reporting/references/TESTOMATIO_ARTIFACTS.md +0 -0
  208. /package/skills/{testomatio/test-management → test-management}/qa-e2e-tests-reporting/references/TESTOMATIO_HTML_REPORT.md +0 -0
  209. /package/skills/{testomatio/test-management → test-management}/qa-e2e-tests-reporting/references/TESTOMATIO_REPORTERS_CONFIG.md +0 -0
  210. /package/skills/{testomatio/test-management → test-management}/qa-split-testing-levels-pyramid/SKILL.md +0 -0
  211. /package/skills/{testomatio/test-management → test-management}/qa-sprint-report-by-testomatio/SKILL.md +0 -0
  212. /package/skills/{testomatio/test-management → test-management}/qa-sprint-report-by-testomatio/references/qa-sprint-report.md +0 -0
  213. /package/skills/{testomatio/test-management → test-management}/qa-test-code-coverage/SKILL.md +0 -0
  214. /package/skills/{testomatio/test-management → test-management}/qa-test-code-coverage/references/COVERAGE_FILE_FORMAT.md +0 -0
  215. /package/skills/{testomatio/test-management → test-management}/qa-test-code-coverage/references/E2E_FRAMEWORKS.md +0 -0
  216. /package/skills/{testomatio/test-management → test-management}/qa-test-code-coverage/scripts/check-coverage.mjs +0 -0
  217. /package/skills/{testomatio/test-management → test-management}/qa-write-test-cases/SKILL.md +0 -0
  218. /package/skills/{testomatio/test-management → test-management}/qa-write-test-cases/references/test-case-format.md +0 -0
  219. /package/skills/{testomatio/test-management → test-management}/qa-write-test-cases/references/testomat-tms-guide.md +0 -0
  220. /package/skills/{testomatio/test-management → test-management}/qa-write-test-cases/references/writing-rule.md +0 -0
  221. /package/skills/{testomatio/test-management → test-management}/scan-automation-project/SKILL.md +0 -0
  222. /package/skills/{testomatio/test-management → test-management}/sync-test-cases-with-tms/SKILL.md +0 -0
  223. /package/skills/{testomatio/test-management → test-management}/sync-test-cases-with-tms/references/TESTOMATIO_CLI.md +0 -0
  224. /package/skills/{testomatio/test-management → test-management}/testomatio-mcp/SKILL.md +0 -0
  225. /package/skills/{testomatio/test-management → test-management}/testomatio-mcp/references/MCP_SETUP.md +0 -0
@@ -1,424 +0,0 @@
1
- # Test Annotations & Organization
2
-
3
- ## Table of Contents
4
-
5
- 1. [Skip Annotations](#skip-annotations)
6
- 2. [Fixme & Fail Annotations](#fixme--fail-annotations)
7
- 3. [Slow Tests](#slow-tests)
8
- 4. [Test Steps](#test-steps)
9
- 5. [Custom Annotations](#custom-annotations)
10
- 6. [Conditional Annotations](#conditional-annotations)
11
-
12
- ## Skip Annotations
13
-
14
- ### Basic Skip
15
-
16
- ```typescript
17
- // Skip unconditionally
18
- test.skip("feature not implemented", async ({ page }) => {
19
- // This test won't run
20
- });
21
-
22
- // Skip with reason
23
- test("payment flow", async ({ page }) => {
24
- test.skip(true, "Payment gateway in maintenance");
25
- // Test body won't execute
26
- });
27
- ```
28
-
29
- ### Conditional Skip
30
-
31
- ```typescript
32
- test("webkit-specific feature", async ({ page, browserName }) => {
33
- test.skip(browserName !== "webkit", "This feature only works in WebKit");
34
-
35
- await page.goto("/webkit-feature");
36
- });
37
-
38
- test("production only", async ({ page }) => {
39
- test.skip(process.env.ENV !== "production", "Only runs against production");
40
-
41
- await page.goto("/prod-feature");
42
- });
43
- ```
44
-
45
- ### Skip by Platform
46
-
47
- ```typescript
48
- test("windows-specific", async ({ page }) => {
49
- test.skip(process.platform !== "win32", "Windows only");
50
- });
51
-
52
- test("not on CI", async ({ page }) => {
53
- test.skip(!!process.env.CI, "Skipped in CI environment");
54
- });
55
- ```
56
-
57
- ### Skip Describe Block
58
-
59
- ```typescript
60
- test.describe("Admin features", () => {
61
- test.skip(
62
- ({ browserName }) => browserName === "firefox",
63
- "Firefox admin bug",
64
- );
65
-
66
- test("admin dashboard", async ({ page }) => {
67
- // Skipped in Firefox
68
- });
69
-
70
- test("admin settings", async ({ page }) => {
71
- // Skipped in Firefox
72
- });
73
- });
74
- ```
75
-
76
- ## Fixme & Fail Annotations
77
-
78
- ### Fixme - Known Issues
79
-
80
- ```typescript
81
- // Mark test as needing fix (skips the test)
82
- test.fixme("broken after refactor", async ({ page }) => {
83
- // Test won't run but is tracked
84
- });
85
-
86
- // Conditional fixme
87
- test("flaky on CI", async ({ page }) => {
88
- test.fixme(!!process.env.CI, "Investigate CI flakiness - ticket #123");
89
-
90
- await page.goto("/flaky-feature");
91
- });
92
- ```
93
-
94
- ### Fail - Expected Failures
95
-
96
- ```typescript
97
- // Test is expected to fail (runs but expects failure)
98
- test("known bug", async ({ page }) => {
99
- test.fail();
100
-
101
- await page.goto("/buggy-page");
102
- // If this passes, the test fails (bug was fixed!)
103
- await expect(page.getByText("Working")).toBeVisible();
104
- });
105
-
106
- // Conditional fail
107
- test("fails on webkit", async ({ page, browserName }) => {
108
- test.fail(browserName === "webkit", "WebKit rendering bug #456");
109
-
110
- await page.goto("/render-test");
111
- await expect(page.getByTestId("element")).toHaveCSS("width", "100px");
112
- });
113
- ```
114
-
115
- ### Difference Between Skip, Fixme, Fail
116
-
117
- | Annotation | Runs? | Use Case |
118
- | -------------- | ----- | -------------------------------- |
119
- | `test.skip()` | No | Feature not applicable |
120
- | `test.fixme()` | No | Known bug, needs investigation |
121
- | `test.fail()` | Yes | Expected to fail, tracking a bug |
122
-
123
- ## Slow Tests
124
-
125
- ### Mark Slow Tests
126
-
127
- ```typescript
128
- // Triple the default timeout
129
- test("large data import", async ({ page }) => {
130
- test.slow();
131
-
132
- await page.goto("/import");
133
- await page.setInputFiles("#file", "large-file.csv");
134
- await page.getByRole("button", { name: "Import" }).click();
135
-
136
- await expect(page.getByText("Import complete")).toBeVisible();
137
- });
138
-
139
- // Conditional slow
140
- test("video processing", async ({ page, browserName }) => {
141
- test.slow(browserName === "webkit", "WebKit video processing is slow");
142
-
143
- await page.goto("/video-editor");
144
- });
145
- ```
146
-
147
- ### Custom Timeout
148
-
149
- ```typescript
150
- test("very long operation", async ({ page }) => {
151
- // Set specific timeout (in milliseconds)
152
- test.setTimeout(120000); // 2 minutes
153
-
154
- await page.goto("/long-operation");
155
- });
156
-
157
- // Timeout for describe block
158
- test.describe("Integration tests", () => {
159
- test.describe.configure({ timeout: 60000 });
160
-
161
- test("test 1", async ({ page }) => {
162
- // Has 60 second timeout
163
- });
164
- });
165
- ```
166
-
167
- ## Test Steps
168
-
169
- ### Basic Steps
170
-
171
- ```typescript
172
- test("checkout flow", async ({ page }) => {
173
- await test.step("Add item to cart", async () => {
174
- await page.goto("/products");
175
- await page.getByRole("button", { name: "Add to Cart" }).click();
176
- });
177
-
178
- await test.step("Go to checkout", async () => {
179
- await page.getByRole("link", { name: "Cart" }).click();
180
- await page.getByRole("button", { name: "Checkout" }).click();
181
- });
182
-
183
- await test.step("Fill shipping info", async () => {
184
- await page.getByLabel("Address").fill("123 Test St");
185
- await page.getByLabel("City").fill("Test City");
186
- });
187
-
188
- await test.step("Complete payment", async () => {
189
- await page.getByLabel("Card").fill("4242424242424242");
190
- await page.getByRole("button", { name: "Pay" }).click();
191
- });
192
-
193
- await expect(page.getByText("Order confirmed")).toBeVisible();
194
- });
195
- ```
196
-
197
- ### Nested Steps
198
-
199
- ```typescript
200
- test("user registration", async ({ page }) => {
201
- await test.step("Fill registration form", async () => {
202
- await page.goto("/register");
203
-
204
- await test.step("Personal info", async () => {
205
- await page.getByLabel("Name").fill("John Doe");
206
- await page.getByLabel("Email").fill("john@example.com");
207
- });
208
-
209
- await test.step("Security", async () => {
210
- await page.getByLabel("Password").fill("SecurePass123");
211
- await page.getByLabel("Confirm Password").fill("SecurePass123");
212
- });
213
- });
214
-
215
- await test.step("Submit and verify", async () => {
216
- await page.getByRole("button", { name: "Register" }).click();
217
- await expect(page.getByText("Welcome")).toBeVisible();
218
- });
219
- });
220
- ```
221
-
222
- ### Steps with Return Values
223
-
224
- ```typescript
225
- test("verify order", async ({ page }) => {
226
- const orderId = await test.step("Create order", async () => {
227
- await page.goto("/checkout");
228
- await page.getByRole("button", { name: "Place Order" }).click();
229
-
230
- // Return value from step
231
- return await page.getByTestId("order-id").textContent();
232
- });
233
-
234
- await test.step("Verify order details", async () => {
235
- await page.goto(`/orders/${orderId}`);
236
- await expect(page.getByText(`Order #${orderId}`)).toBeVisible();
237
- });
238
- });
239
- ```
240
-
241
- ### Step in Page Object
242
-
243
- ```typescript
244
- // pages/checkout.page.ts
245
- export class CheckoutPage {
246
- async fillShippingInfo(address: string, city: string) {
247
- await test.step("Fill shipping information", async () => {
248
- await this.page.getByLabel("Address").fill(address);
249
- await this.page.getByLabel("City").fill(city);
250
- });
251
- }
252
-
253
- async completePayment(cardNumber: string) {
254
- await test.step("Complete payment", async () => {
255
- await this.page.getByLabel("Card").fill(cardNumber);
256
- await this.page.getByRole("button", { name: "Pay" }).click();
257
- });
258
- }
259
- }
260
- ```
261
-
262
- ## Custom Annotations
263
-
264
- ### Add Annotations
265
-
266
- ```typescript
267
- test("important feature", async ({ page }, testInfo) => {
268
- // Add custom annotation
269
- testInfo.annotations.push({
270
- type: "priority",
271
- description: "high",
272
- });
273
-
274
- testInfo.annotations.push({
275
- type: "ticket",
276
- description: "JIRA-123",
277
- });
278
-
279
- await page.goto("/feature");
280
- });
281
- ```
282
-
283
- ### Annotation Fixture
284
-
285
- ```typescript
286
- // fixtures/annotations.fixture.ts
287
- import { test as base, TestInfo } from "@playwright/test";
288
-
289
- type AnnotationFixtures = {
290
- annotate: {
291
- ticket: (id: string) => void;
292
- priority: (level: "low" | "medium" | "high") => void;
293
- owner: (name: string) => void;
294
- };
295
- };
296
-
297
- export const test = base.extend<AnnotationFixtures>({
298
- annotate: async ({}, use, testInfo) => {
299
- await use({
300
- ticket: (id) => {
301
- testInfo.annotations.push({ type: "ticket", description: id });
302
- },
303
- priority: (level) => {
304
- testInfo.annotations.push({ type: "priority", description: level });
305
- },
306
- owner: (name) => {
307
- testInfo.annotations.push({ type: "owner", description: name });
308
- },
309
- });
310
- },
311
- });
312
-
313
- // Usage
314
- test("critical feature", async ({ page, annotate }) => {
315
- annotate.ticket("JIRA-456");
316
- annotate.priority("high");
317
- annotate.owner("Alice");
318
-
319
- await page.goto("/critical");
320
- });
321
- ```
322
-
323
- ### Read Annotations in Reporter
324
-
325
- ```typescript
326
- // reporters/annotation-reporter.ts
327
- import { Reporter, TestCase, TestResult } from "@playwright/test/reporter";
328
-
329
- class AnnotationReporter implements Reporter {
330
- onTestEnd(test: TestCase, result: TestResult) {
331
- const ticket = test.annotations.find((a) => a.type === "ticket");
332
- const priority = test.annotations.find((a) => a.type === "priority");
333
-
334
- if (ticket) {
335
- console.log(`Test linked to: ${ticket.description}`);
336
- }
337
-
338
- if (priority?.description === "high" && result.status === "failed") {
339
- console.log(`HIGH PRIORITY FAILURE: ${test.title}`);
340
- }
341
- }
342
- }
343
-
344
- export default AnnotationReporter;
345
- ```
346
-
347
- ## Conditional Annotations
348
-
349
- ### Annotation Helper
350
-
351
- ```typescript
352
- // helpers/test-annotations.ts
353
- import { test } from "@playwright/test";
354
-
355
- export function skipInCI(reason = "Skipped in CI") {
356
- test.skip(!!process.env.CI, reason);
357
- }
358
-
359
- export function skipInBrowser(browser: string, reason: string) {
360
- test.beforeEach(({ browserName }) => {
361
- test.skip(browserName === browser, reason);
362
- });
363
- }
364
-
365
- export function onlyInEnv(env: string) {
366
- test.skip(process.env.ENV !== env, `Only runs in ${env}`);
367
- }
368
- ```
369
-
370
- ```typescript
371
- // tests/feature.spec.ts
372
- import { skipInCI, onlyInEnv } from "../helpers/test-annotations";
373
-
374
- test("local only feature", async ({ page }) => {
375
- skipInCI("Uses local resources");
376
-
377
- await page.goto("/local-feature");
378
- });
379
-
380
- test("production check", async ({ page }) => {
381
- onlyInEnv("production");
382
-
383
- await page.goto("/prod-only");
384
- });
385
- ```
386
-
387
- ### Describe-Level Conditions
388
-
389
- ```typescript
390
- test.describe("Mobile features", () => {
391
- test.beforeEach(({ isMobile }) => {
392
- test.skip(!isMobile, "Mobile only tests");
393
- });
394
-
395
- test("touch gestures", async ({ page }) => {
396
- // Only runs on mobile
397
- });
398
- });
399
-
400
- test.describe("Desktop features", () => {
401
- test.beforeEach(({ isMobile }) => {
402
- test.skip(isMobile, "Desktop only tests");
403
- });
404
-
405
- test("hover interactions", async ({ page }) => {
406
- // Only runs on desktop
407
- });
408
- });
409
- ```
410
-
411
- ## Anti-Patterns to Avoid
412
-
413
- | Anti-Pattern | Problem | Solution |
414
- | --------------------------- | ---------------------- | -------------------------------- |
415
- | Skipping without reason | Hard to track why | Always provide description |
416
- | Too many skipped tests | Test debt accumulates | Review and clean up regularly |
417
- | Using skip instead of fixme | Loses intent | Use fixme for bugs, skip for N/A |
418
- | Not using steps | Hard to debug failures | Group logical actions in steps |
419
-
420
- ## Related References
421
-
422
- - **Test Tags**: See [test-tags.md](test-tags.md) for tagging and filtering tests with `--grep`
423
- - **Test Organization**: See [test-suite-structure.md](test-suite-structure.md) for structuring tests
424
- - **Debugging**: See [debugging.md](../debugging/debugging.md) for troubleshooting