@vardot/varbase-e2e 2.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 (301) hide show
  1. package/AGENTS.md +148 -0
  2. package/CLAUDE.md +544 -0
  3. package/README.md +22 -0
  4. package/bin/generate-reports.js +363 -0
  5. package/bin/init-varbase-e2e.js +330 -0
  6. package/bin/postinstall.js +26 -0
  7. package/cucumber.js +125 -0
  8. package/docs/00-quick-start.md +102 -0
  9. package/docs/01-getting-started.md +102 -0
  10. package/docs/02-bbr-smart-waits.md +77 -0
  11. package/docs/03-selector-registry.md +95 -0
  12. package/docs/04-step-reference.md +801 -0
  13. package/docs/05-web-first-assertions.md +91 -0
  14. package/docs/06-network-and-dialogs.md +83 -0
  15. package/docs/07-auth-state.md +75 -0
  16. package/docs/08-clock-mocking.md +59 -0
  17. package/docs/09-api-testing.md +114 -0
  18. package/docs/10-accessibility.md +167 -0
  19. package/docs/11-debugging.md +129 -0
  20. package/docs/12-ai-agent-guide.md +338 -0
  21. package/docs/13-faq.md +236 -0
  22. package/docs/14-recipes-cookbook.md +255 -0
  23. package/docs/15-tag-conventions.md +76 -0
  24. package/docs/16-ci-cd.md +90 -0
  25. package/docs/README.md +125 -0
  26. package/docs/advanced-screenshots/then-i-save-fullscreen-screenshot.md +36 -0
  27. package/docs/advanced-screenshots/then-i-save-width-x-height-screenshot.md +34 -0
  28. package/docs/advanced-screenshots/when-i-save-screenshot-name-filename.md +45 -0
  29. package/docs/advanced-screenshots.md +52 -0
  30. package/docs/advanced-selectors.md +18 -0
  31. package/docs/api-step-definitions.md +45 -0
  32. package/docs/global-settings.md +267 -0
  33. package/docs/install-varbase-e2e/ddev-varbase-e2e.md +52 -0
  34. package/docs/install-varbase-e2e.md +34 -0
  35. package/docs/overview.md +40 -0
  36. package/docs/step-definitions/given-i-am-anonymous-user.md +67 -0
  37. package/docs/step-definitions/given-i-am-homepage.md +68 -0
  38. package/docs/step-definitions/given-i-am-specific-page.md +72 -0
  39. package/docs/step-definitions/then-i-should-be.md +56 -0
  40. package/docs/step-definitions/then-i-should-see.md +62 -0
  41. package/docs/step-definitions/then-item-checkbox.md +54 -0
  42. package/docs/step-definitions/then-item-link-should-contain-url.md +84 -0
  43. package/docs/step-definitions/then-item-should-contain.md +67 -0
  44. package/docs/step-definitions/then-radio-button-value-should-be-selected.md +68 -0
  45. package/docs/step-definitions/then-response-status-code-should-be-number.md +69 -0
  46. package/docs/step-definitions/then-value-radio-button-selected.md +62 -0
  47. package/docs/step-definitions/when-i-attach-file-file-name-element.md +71 -0
  48. package/docs/step-definitions/when-i-check-checkbox.md +60 -0
  49. package/docs/step-definitions/when-i-click-link.md +51 -0
  50. package/docs/step-definitions/when-i-click-operation-text-row.md +71 -0
  51. package/docs/step-definitions/when-i-fill.md +59 -0
  52. package/docs/step-definitions/when-i-go-homepage.md +60 -0
  53. package/docs/step-definitions/when-i-go-specific-page.md +67 -0
  54. package/docs/step-definitions/when-i-move-backward-one-page.md +49 -0
  55. package/docs/step-definitions/when-i-move-forward-one-page.md +58 -0
  56. package/docs/step-definitions/when-i-press-button.md +58 -0
  57. package/docs/step-definitions/when-i-reload-page.md +51 -0
  58. package/docs/step-definitions/when-i-scroll.md +73 -0
  59. package/docs/step-definitions/when-i-select-option-select-list.md +53 -0
  60. package/docs/step-definitions/when-i-select-radio-button-value.md +62 -0
  61. package/docs/step-definitions/when-i-uncheck-checkbox.md +57 -0
  62. package/docs/step-definitions/when-i-wait-ajax-finish.md +64 -0
  63. package/docs/step-definitions/when-i-wait.md +62 -0
  64. package/docs/step-definitions.md +82 -0
  65. package/docs/steps/README.md +137 -0
  66. package/docs/steps/a11y.md +731 -0
  67. package/docs/steps/action.md +181 -0
  68. package/docs/steps/api.md +679 -0
  69. package/docs/steps/assertion.md +328 -0
  70. package/docs/steps/auth.md +108 -0
  71. package/docs/steps/clock.md +171 -0
  72. package/docs/steps/cookie.md +293 -0
  73. package/docs/steps/debug.md +52 -0
  74. package/docs/steps/dialog.md +226 -0
  75. package/docs/steps/drupal-canvas.md +414 -0
  76. package/docs/steps/drupal-ckeditor.md +118 -0
  77. package/docs/steps/drupal-core.md +688 -0
  78. package/docs/steps/drupal-layout-builder.md +437 -0
  79. package/docs/steps/drupal-media.md +107 -0
  80. package/docs/steps/drupal-moderation.md +81 -0
  81. package/docs/steps/drupal-paragraphs.md +36 -0
  82. package/docs/steps/element.md +455 -0
  83. package/docs/steps/field.md +648 -0
  84. package/docs/steps/file-download.md +235 -0
  85. package/docs/steps/form.md +344 -0
  86. package/docs/steps/iframe.md +248 -0
  87. package/docs/steps/input.md +220 -0
  88. package/docs/steps/javascript.md +111 -0
  89. package/docs/steps/keyboard.md +107 -0
  90. package/docs/steps/link.md +217 -0
  91. package/docs/steps/metatag.md +99 -0
  92. package/docs/steps/modal.md +232 -0
  93. package/docs/steps/navigation.md +275 -0
  94. package/docs/steps/network.md +284 -0
  95. package/docs/steps/path.md +203 -0
  96. package/docs/steps/response.md +102 -0
  97. package/docs/steps/responsive.md +139 -0
  98. package/docs/steps/rest.md +140 -0
  99. package/docs/steps/screenshot.md +211 -0
  100. package/docs/steps/scroll.md +266 -0
  101. package/docs/steps/selectors.md +848 -0
  102. package/docs/steps/storage.md +254 -0
  103. package/docs/steps/table.md +216 -0
  104. package/docs/steps/varbase.md +391 -0
  105. package/docs/steps/video.md +111 -0
  106. package/docs/steps/wait.md +553 -0
  107. package/docs/steps/web-first.md +289 -0
  108. package/docs/steps/xml.md +505 -0
  109. package/docs/steps/yaml.md +951 -0
  110. package/examples/a11y.html +31 -0
  111. package/examples/about-us.html +11 -0
  112. package/examples/account.html +32 -0
  113. package/examples/ajax-wait-examples.html +147 -0
  114. package/examples/contact-us.html +10 -0
  115. package/examples/cookies.html +10 -0
  116. package/examples/date.html +12 -0
  117. package/examples/dynamic-examples.html +498 -0
  118. package/examples/element.html +11 -0
  119. package/examples/example-api.json +28 -0
  120. package/examples/existing-page.html +11 -0
  121. package/examples/field.html +24 -0
  122. package/examples/index.html +37 -0
  123. package/examples/keyboard.html +11 -0
  124. package/examples/links.html +9 -0
  125. package/examples/modal.html +14 -0
  126. package/examples/path.html +3 -0
  127. package/examples/table.html +13 -0
  128. package/examples/test--modal-dialogs.html +252 -0
  129. package/examples/test--then--i-should--not--see-text-in-element.html +48 -0
  130. package/examples/test--then--i-should--see-text-in-element.html +48 -0
  131. package/examples/test--then--i-should--see-text-matching-pattern.html +31 -0
  132. package/examples/test--then--i-should-see-text-in-table-row.html +232 -0
  133. package/examples/test--then--the-checkbox-checked.html +68 -0
  134. package/examples/test--then--the-element-should_not-contain-cssproperty.html +47 -0
  135. package/examples/test--then--the-link-should-contain.html +21 -0
  136. package/examples/test--when--i-additionally-select.html +27 -0
  137. package/examples/test--when--i-attach-file-to-feild.html +50 -0
  138. package/examples/test--when--i-check-uncheck-checkbox.html +47 -0
  139. package/examples/test--when--i-click-link.html +18 -0
  140. package/examples/test--when--i-click-text-in-table-row.html +178 -0
  141. package/examples/test--when--i-fill-in.html +48 -0
  142. package/examples/test--when--i-press-button.html +31 -0
  143. package/examples/test--when--i-reload-page.html +27 -0
  144. package/examples/test--when--i-scroll-functionality.html +177 -0
  145. package/examples/test--when--i-scroll-left-right-functionality.html +149 -0
  146. package/examples/test--when--i-select-option-from-dropdownlist.html +35 -0
  147. package/examples/test--when--i-select-radio-button.html +95 -0
  148. package/examples/test--when-i-wait-max-of-time.html +39 -0
  149. package/examples/test--when-i-wait-page-until-is-loaded.html +47 -0
  150. package/examples/test--when-i-wait-specific-time.html +39 -0
  151. package/examples/test-acceptable-url-path.html +11 -0
  152. package/examples/video-demo.html +43 -0
  153. package/package.json +56 -0
  154. package/playwright.config.ts +39 -0
  155. package/tests/assets/test-document.pdf +14 -0
  156. package/tests/assets/vardot.png +0 -0
  157. package/tests/features/a11y.feature +39 -0
  158. package/tests/features/ajax-wait-examples.feature +24 -0
  159. package/tests/features/api-step-definitions-individual.feature +185 -0
  160. package/tests/features/complete-api-testing-examples.feature +205 -0
  161. package/tests/features/cookie.feature +13 -0
  162. package/tests/features/date.feature +11 -0
  163. package/tests/features/dynamic-content-examples.feature +156 -0
  164. package/tests/features/element.feature +16 -0
  165. package/tests/features/field.feature +25 -0
  166. package/tests/features/keyboard.feature +10 -0
  167. package/tests/features/link.feature +11 -0
  168. package/tests/features/modal-advanced-example.feature +54 -0
  169. package/tests/features/modal-basic-example.feature +42 -0
  170. package/tests/features/modal-error-handling-example.feature +37 -0
  171. package/tests/features/modal.feature +11 -0
  172. package/tests/features/path.feature +16 -0
  173. package/tests/features/response.feature +8 -0
  174. package/tests/features/responsive.feature +10 -0
  175. package/tests/features/table.feature +18 -0
  176. package/tests/features/test--given--i-am-an-anonymous-user.feature +10 -0
  177. package/tests/features/test--given--i-am-on-homepage.feature +16 -0
  178. package/tests/features/test--then--i-save-screenshot.feature +33 -0
  179. package/tests/features/test--then--i-see-locator.feature +320 -0
  180. package/tests/features/test--then--i-should--not--see-text-in-element.feature +13 -0
  181. package/tests/features/test--then--i-should--see-text-in-element-by-attr.feature +10 -0
  182. package/tests/features/test--then--i-should--see-text-in-element.feature +10 -0
  183. package/tests/features/test--then--i-should--see-text-matching-pattern-in-element.feature +13 -0
  184. package/tests/features/test--then--i-should--see-text-matching-pattern.feature +18 -0
  185. package/tests/features/test--then--i-should-be-on-page.feature +10 -0
  186. package/tests/features/test--then--i-should-be-on-the-homepage.feature +10 -0
  187. package/tests/features/test--then--i-should-not-see-an-element-by-attr.feature +8 -0
  188. package/tests/features/test--then--i-should-not-see-an-element.feature +8 -0
  189. package/tests/features/test--then--i-should-see-an-element-by-attr.feature +8 -0
  190. package/tests/features/test--then--i-should-see-an-element.feature +8 -0
  191. package/tests/features/test--then--i-should-see-n-elements.feature +24 -0
  192. package/tests/features/test--then--i-should-see-text-in-table-row.feature +96 -0
  193. package/tests/features/test--then--print-current-url-and-response.feature +21 -0
  194. package/tests/features/test--then--the-checkbox-is-checked.feature +18 -0
  195. package/tests/features/test--then--the-checkbox-should-be-checked.feature +16 -0
  196. package/tests/features/test--then--the-element-should-contain-cssproperty.feature +9 -0
  197. package/tests/features/test--then--the-element-should-not-contain-cssproperty.feature +10 -0
  198. package/tests/features/test--then--the-field-should-contain-value.feature +11 -0
  199. package/tests/features/test--then--the-response-should-contain.feature +11 -0
  200. package/tests/features/test--then--the-response-status-code-should-be.feature +31 -0
  201. package/tests/features/test--then--the-url-should-match.feature +7 -0
  202. package/tests/features/test--then-the-link-should-contain-by-attribute.feature +18 -0
  203. package/tests/features/test--then-the-link-should-contain.feature +7 -0
  204. package/tests/features/test--when--i-additionally-select.feature +30 -0
  205. package/tests/features/test--when--i-attach-file-to-feild.feature +9 -0
  206. package/tests/features/test--when--i-check-checkbox.feature +21 -0
  207. package/tests/features/test--when--i-click-link-by-attribute.feature +21 -0
  208. package/tests/features/test--when--i-click-link.feature +9 -0
  209. package/tests/features/test--when--i-click-text-in-table-row.feature +37 -0
  210. package/tests/features/test--when--i-fill-in-by-attr.feature +31 -0
  211. package/tests/features/test--when--i-fill-in-table-by-attr.feature +19 -0
  212. package/tests/features/test--when--i-fill-in.feature +32 -0
  213. package/tests/features/test--when--i-follow.feature +22 -0
  214. package/tests/features/test--when--i-go-to-homepage.feature +9 -0
  215. package/tests/features/test--when--i-move-forward-backward-one-page.feature +14 -0
  216. package/tests/features/test--when--i-press-button-by-attribute.feature +18 -0
  217. package/tests/features/test--when--i-press-button.feature +13 -0
  218. package/tests/features/test--when--i-reload-page.feature +11 -0
  219. package/tests/features/test--when--i-scroll-left-right.feature +48 -0
  220. package/tests/features/test--when--i-scroll.feature +48 -0
  221. package/tests/features/test--when--i-select-option-from-dropdownlist.feature +21 -0
  222. package/tests/features/test--when--i-select-radio-button.feature +37 -0
  223. package/tests/features/test--when--i-wait-page-is-loaded.feature +8 -0
  224. package/tests/features/test--when--i-wait-time.feature +21 -0
  225. package/tests/features/video.feature +18 -0
  226. package/tests/features/wait.feature +7 -0
  227. package/tests/features/yaml.feature +102 -0
  228. package/tests/selectors/_canonical-keys.json +113 -0
  229. package/tests/selectors/back-end-selectors.json +19 -0
  230. package/tests/selectors/cms-contentful-admin.json +35 -0
  231. package/tests/selectors/cms-craft-admin.json +39 -0
  232. package/tests/selectors/cms-drupal-cms-gin.json +56 -0
  233. package/tests/selectors/cms-drupal-core-claro.json +50 -0
  234. package/tests/selectors/cms-generic-admin.json +34 -0
  235. package/tests/selectors/cms-ghost-admin.json +34 -0
  236. package/tests/selectors/cms-joomla-admin.json +41 -0
  237. package/tests/selectors/cms-magento2-admin.json +32 -0
  238. package/tests/selectors/cms-prestashop-admin.json +38 -0
  239. package/tests/selectors/cms-shopify-admin.json +25 -0
  240. package/tests/selectors/cms-strapi-admin.json +42 -0
  241. package/tests/selectors/cms-typo3-admin.json +41 -0
  242. package/tests/selectors/cms-woocommerce-front.json +50 -0
  243. package/tests/selectors/cms-wordpress-admin.json +31 -0
  244. package/tests/selectors/framework-ant-design.json +80 -0
  245. package/tests/selectors/framework-bootstrap.json +86 -0
  246. package/tests/selectors/framework-bulma.json +74 -0
  247. package/tests/selectors/framework-chakra.json +58 -0
  248. package/tests/selectors/framework-foundation.json +51 -0
  249. package/tests/selectors/framework-material-ui.json +72 -0
  250. package/tests/selectors/framework-shadcn.json +51 -0
  251. package/tests/selectors/framework-tailwind.json +40 -0
  252. package/tests/selectors/framework-vuetify.json +61 -0
  253. package/tests/selectors/front-end-selectors.json +16 -0
  254. package/tests/selectors/homepage-selectors.json +13 -0
  255. package/tests/step-definitions/a11y.steps.js +800 -0
  256. package/tests/step-definitions/action.steps.js +167 -0
  257. package/tests/step-definitions/api.steps.js +732 -0
  258. package/tests/step-definitions/assertion.steps.js +352 -0
  259. package/tests/step-definitions/auth.steps.js +126 -0
  260. package/tests/step-definitions/clock.steps.js +128 -0
  261. package/tests/step-definitions/cookie.steps.js +216 -0
  262. package/tests/step-definitions/debug.steps.js +39 -0
  263. package/tests/step-definitions/dialog.steps.js +193 -0
  264. package/tests/step-definitions/drupal-canvas.steps.js +764 -0
  265. package/tests/step-definitions/drupal-ckeditor.steps.js +108 -0
  266. package/tests/step-definitions/drupal-core.steps.js +665 -0
  267. package/tests/step-definitions/drupal-helpers.js +371 -0
  268. package/tests/step-definitions/drupal-layout-builder.steps.js +466 -0
  269. package/tests/step-definitions/drupal-media.steps.js +99 -0
  270. package/tests/step-definitions/drupal-moderation.steps.js +71 -0
  271. package/tests/step-definitions/drupal-paragraphs.steps.js +50 -0
  272. package/tests/step-definitions/element.steps.js +356 -0
  273. package/tests/step-definitions/field.steps.js +653 -0
  274. package/tests/step-definitions/file-download.steps.js +211 -0
  275. package/tests/step-definitions/form.steps.js +333 -0
  276. package/tests/step-definitions/iframe.steps.js +228 -0
  277. package/tests/step-definitions/input.steps.js +202 -0
  278. package/tests/step-definitions/javascript.steps.js +232 -0
  279. package/tests/step-definitions/keyboard.steps.js +112 -0
  280. package/tests/step-definitions/link.steps.js +142 -0
  281. package/tests/step-definitions/metatag.steps.js +91 -0
  282. package/tests/step-definitions/modal.steps.js +244 -0
  283. package/tests/step-definitions/navigation.steps.js +218 -0
  284. package/tests/step-definitions/network.steps.js +280 -0
  285. package/tests/step-definitions/path.steps.js +141 -0
  286. package/tests/step-definitions/response.steps.js +98 -0
  287. package/tests/step-definitions/responsive.steps.js +125 -0
  288. package/tests/step-definitions/rest.steps.js +111 -0
  289. package/tests/step-definitions/screenshot.steps.js +423 -0
  290. package/tests/step-definitions/scroll.steps.js +189 -0
  291. package/tests/step-definitions/selectors.steps.js +1003 -0
  292. package/tests/step-definitions/storage.steps.js +194 -0
  293. package/tests/step-definitions/table.steps.js +181 -0
  294. package/tests/step-definitions/varbase-e2e.js +897 -0
  295. package/tests/step-definitions/varbase.steps.js +458 -0
  296. package/tests/step-definitions/video.steps.js +178 -0
  297. package/tests/step-definitions/wait.steps.js +400 -0
  298. package/tests/step-definitions/web-first.steps.js +298 -0
  299. package/tests/step-definitions/xml.steps.js +411 -0
  300. package/tests/step-definitions/yaml.steps.js +913 -0
  301. package/tsconfig.json +26 -0
@@ -0,0 +1,203 @@
1
+ # URL paths steps
2
+
3
+ 8 steps, defined in `tests/step-definitions/path.steps.js`.
4
+
5
+ Cucumber-js loads every `*.steps.js` in that directory automatically — you never `require()` a step file from a feature.
6
+
7
+ | # | Step |
8
+ | --- | --- |
9
+ | 1 | `Then the path should be "/dashboard"` |
10
+ | 2 | `Then the path should not be "/login"` |
11
+ | 3 | `Then current url should have the "lang" parameter` |
12
+ | 4 | `Then current url should have the "lang" parameter with the "en" value` |
13
+ | 5 | `Then current url should not have the "missing" parameter` |
14
+ | 6 | `Then current url should not have the "lang" parameter with the "fr" value` |
15
+ | 7 | `Given the basic authentication with the username "admin" and the password "secret"` |
16
+ | 8 | `When I go back` |
17
+
18
+ ---
19
+
20
+ ## 1. Then the path should be "/dashboard"
21
+
22
+ Assert the current URL pathname equals an expected string (no query/fragment).
23
+
24
+ **Keyword**: `Then`
25
+
26
+ **Pattern**
27
+
28
+ ```js
29
+ 'the path should be {string}'
30
+ ```
31
+
32
+ **Examples**
33
+
34
+ ```gherkin
35
+ Then the path should be "/dashboard"
36
+ Then the path should be "/about"
37
+ And the path should be "/checkout/step-2"
38
+ Then the path should be "/admin/users"
39
+ Then the path should be "/"
40
+ ```
41
+
42
+ ## 2. Then the path should not be "/login"
43
+
44
+ Assert the current URL pathname is NOT equal to an expected string.
45
+
46
+ **Keyword**: `Then`
47
+
48
+ **Pattern**
49
+
50
+ ```js
51
+ 'the path should not be {string}'
52
+ ```
53
+
54
+ **Examples**
55
+
56
+ ```gherkin
57
+ Then the path should not be "/login"
58
+ Then the path should not be "/error"
59
+ And the path should not be "/admin"
60
+ Then the path should not be "/maintenance"
61
+ Then the path should not be "/forbidden"
62
+ ```
63
+
64
+ ## 3. Then current url should have the "lang" parameter
65
+
66
+ Assert the current URL has the named query parameter (any value).
67
+
68
+ **Keyword**: `Then`
69
+
70
+ **Pattern**
71
+
72
+ ```js
73
+ 'current url should have the {string} parameter'
74
+ ```
75
+
76
+ **Examples**
77
+
78
+ ```gherkin
79
+ Then current url should have the "lang" parameter
80
+ Then current url should have the "page" parameter
81
+ And current url should have the "q" parameter
82
+ Then current url should have the "ref" parameter
83
+ Then current url should have the "sort" parameter
84
+ ```
85
+
86
+ ## 4. Then current url should have the "lang" parameter with the "en" value
87
+
88
+ Assert the current URL has the named query parameter with the exact value.
89
+
90
+ **Keyword**: `Then`
91
+
92
+ **Pattern**
93
+
94
+ ```js
95
+ 'current url should have the {string} parameter with the {string} value'
96
+ ```
97
+
98
+ **Examples**
99
+
100
+ ```gherkin
101
+ Then current url should have the "lang" parameter with the "en" value
102
+ Then current url should have the "page" parameter with the "2" value
103
+ And current url should have the "sort" parameter with the "price" value
104
+ Then current url should have the "ref" parameter with the "newsletter" value
105
+ Then current url should have the "q" parameter with the "laptops" value
106
+ ```
107
+
108
+ ## 5. Then current url should not have the "missing" parameter
109
+
110
+ Assert the current URL does NOT carry the named query parameter.
111
+
112
+ **Keyword**: `Then`
113
+
114
+ **Pattern**
115
+
116
+ ```js
117
+ 'current url should not have the {string} parameter'
118
+ ```
119
+
120
+ **Examples**
121
+
122
+ ```gherkin
123
+ Then current url should not have the "missing" parameter
124
+ Then current url should not have the "debug" parameter
125
+ And current url should not have the "preview" parameter
126
+ Then current url should not have the "force" parameter
127
+ Then current url should not have the "test" parameter
128
+ ```
129
+
130
+ ## 6. Then current url should not have the "lang" parameter with the "fr" value
131
+
132
+ Assert the current URL does NOT carry a parameter+value pair.
133
+
134
+ **Keyword**: `Then`
135
+
136
+ **Pattern**
137
+
138
+ ```js
139
+ 'current url should not have the {string} parameter with the {string} value'
140
+ ```
141
+
142
+ **Examples**
143
+
144
+ ```gherkin
145
+ Then current url should not have the "lang" parameter with the "fr" value
146
+ Then current url should not have the "page" parameter with the "100" value
147
+ And current url should not have the "sort" parameter with the "old" value
148
+ Then current url should not have the "preview" parameter with the "1" value
149
+ Then current url should not have the "debug" parameter with the "true" value
150
+ ```
151
+
152
+ ## 7. Given the basic authentication with the username "admin" and the password "secret"
153
+
154
+ Re-open the browser context with HTTP basic-auth credentials.
155
+
156
+ **Keyword**: `Given`
157
+
158
+ **Pattern**
159
+
160
+ ```js
161
+ 'the basic authentication with the username {string} and the password {string}'
162
+ ```
163
+
164
+ **Examples**
165
+
166
+ ```gherkin
167
+ Given the basic authentication with the username "admin" and the password "secret"
168
+ Given the basic authentication with the username "guest" and the password "guest"
169
+ And the basic authentication with the username "alice" and the password "s3cret"
170
+ Given the basic authentication with the username "ci" and the password "ci-token-123"
171
+ Given the basic authentication with the username "tester" and the password ""
172
+ ```
173
+
174
+ ## 8. When I go back
175
+
176
+ Navigate one step back in the browser history.
177
+
178
+ Equivalent to clicking the browser back button. Throws no error if there
179
+ is no history (returns null from `page.goBack()`).
180
+
181
+ **Keyword**: `When`
182
+
183
+ **Pattern**
184
+
185
+ ```js
186
+ /^(I |we )*go back$/
187
+ ```
188
+
189
+ **Examples**
190
+
191
+ ```gherkin
192
+ When I go back
193
+ When I follow "About"
194
+ And I go back
195
+ Then I should be on the homepage
196
+ And I go back
197
+ When I am on "/cart"
198
+ When I am on "/checkout"
199
+ And I go back
200
+ Then I should be on "/cart"
201
+ When I go back
202
+ And I wait until the URL contains "/products"
203
+ ```
@@ -0,0 +1,102 @@
1
+ # Response headers steps
2
+
3
+ 4 steps, defined in `tests/step-definitions/response.steps.js`.
4
+
5
+ Cucumber-js loads every `*.steps.js` in that directory automatically — you never `require()` a step file from a feature.
6
+
7
+ | # | Step |
8
+ | --- | --- |
9
+ | 1 | `Then the response should contain the header "content-type"` |
10
+ | 2 | `Then the response should not contain the header "x-fake-header"` |
11
+ | 3 | `Then the response header "content-type" should contain the value "html"` |
12
+ | 4 | `Then the response header "content-type" should not contain the value "application/json"` |
13
+
14
+ ---
15
+
16
+ ## 1. Then the response should contain the header "content-type"
17
+
18
+ Assert the most recent navigation response carried a header (case-insensitive).
19
+
20
+ **Keyword**: `Then`
21
+
22
+ **Pattern**
23
+
24
+ ```js
25
+ 'the response should contain the header {string}'
26
+ ```
27
+
28
+ **Examples**
29
+
30
+ ```gherkin
31
+ Then the response should contain the header "content-type"
32
+ Then the response should contain the header "cache-control"
33
+ And the response should contain the header "x-frame-options"
34
+ Then the response should contain the header "set-cookie"
35
+ Then the response should contain the header "etag"
36
+ ```
37
+
38
+ ## 2. Then the response should not contain the header "x-fake-header"
39
+
40
+ Assert the most recent navigation response did NOT carry a header.
41
+
42
+ **Keyword**: `Then`
43
+
44
+ **Pattern**
45
+
46
+ ```js
47
+ 'the response should not contain the header {string}'
48
+ ```
49
+
50
+ **Examples**
51
+
52
+ ```gherkin
53
+ Then the response should not contain the header "x-fake-header"
54
+ Then the response should not contain the header "x-powered-by"
55
+ And the response should not contain the header "server"
56
+ Then the response should not contain the header "x-aspnet-version"
57
+ Then the response should not contain the header "x-debug-token"
58
+ ```
59
+
60
+ ## 3. Then the response header "content-type" should contain the value "html"
61
+
62
+ Assert a header's value contains a substring.
63
+
64
+ **Keyword**: `Then`
65
+
66
+ **Pattern**
67
+
68
+ ```js
69
+ 'the response header {string} should contain the value {string}'
70
+ ```
71
+
72
+ **Examples**
73
+
74
+ ```gherkin
75
+ Then the response header "content-type" should contain the value "html"
76
+ Then the response header "cache-control" should contain the value "no-cache"
77
+ And the response header "content-type" should contain the value "charset=utf-8"
78
+ Then the response header "set-cookie" should contain the value "session="
79
+ Then the response header "x-frame-options" should contain the value "DENY"
80
+ ```
81
+
82
+ ## 4. Then the response header "content-type" should not contain the value "application/json"
83
+
84
+ Assert a header's value does NOT contain a substring (or the header is absent).
85
+
86
+ **Keyword**: `Then`
87
+
88
+ **Pattern**
89
+
90
+ ```js
91
+ 'the response header {string} should not contain the value {string}'
92
+ ```
93
+
94
+ **Examples**
95
+
96
+ ```gherkin
97
+ Then the response header "content-type" should not contain the value "application/json"
98
+ Then the response header "cache-control" should not contain the value "public"
99
+ And the response header "content-type" should not contain the value "xml"
100
+ Then the response header "set-cookie" should not contain the value "Domain=other"
101
+ Then the response header "x-frame-options" should not contain the value "ALLOW"
102
+ ```
@@ -0,0 +1,139 @@
1
+ # Responsive viewports steps
2
+
3
+ 5 steps, defined in `tests/step-definitions/responsive.steps.js`.
4
+
5
+ Cucumber-js loads every `*.steps.js` in that directory automatically — you never `require()` a step file from a feature.
6
+
7
+ | # | Step |
8
+ | --- | --- |
9
+ | 1 | `Given the following responsive breakpoints:` |
10
+ | 2 | `When I set the viewport to the "mobile" breakpoint` |
11
+ | 3 | `When I set the viewport width to 1200` |
12
+ | 4 | `When I set the viewport height to 800` |
13
+ | 5 | `When I set the viewport to 1200 by 800` |
14
+
15
+ ---
16
+
17
+ ## 1. Given the following responsive breakpoints:
18
+
19
+ Replace the breakpoint registry for the current scenario from a data table.
20
+
21
+ **Keyword**: `Given`
22
+
23
+ **Pattern**
24
+
25
+ ```js
26
+ 'the following responsive breakpoints:'
27
+ ```
28
+
29
+ **Examples**
30
+
31
+ ```gherkin
32
+ Given the following responsive breakpoints:
33
+ | mobile | 375 | 667 |
34
+ | tablet | 768 | 1024 |
35
+ | desktop | 1200 | 900 |
36
+ Given the following responsive breakpoints:
37
+ | watch | 280 | 280 |
38
+ | phablet | 414 | 896 |
39
+ And the following responsive breakpoints:
40
+ | xs | 320 | 480 |
41
+ | sm | 480 | 800 |
42
+ Given the following responsive breakpoints:
43
+ | hd | 1280 | 720 |
44
+ | full-hd | 1920 | 1080 |
45
+ Given the following responsive breakpoints:
46
+ | a11y | 320 | 480 |
47
+ | print | 794 | 1123 |
48
+ ```
49
+
50
+ ## 2. When I set the viewport to the "mobile" breakpoint
51
+
52
+ Resize the viewport to a registered named breakpoint.
53
+
54
+ Built-in names: `xs`, `sm`, `md`, `lg`, `xl`, `xxl`, `xxxl`, `mobile`,
55
+ `tablet`, `desktop`. Project-defined names override built-ins.
56
+
57
+ **Keyword**: `When`
58
+
59
+ **Pattern**
60
+
61
+ ```js
62
+ /^(I |we )*set the viewport to the "([^"]*)" breakpoint$/
63
+ ```
64
+
65
+ **Examples**
66
+
67
+ ```gherkin
68
+ When I set the viewport to the "mobile" breakpoint
69
+ When I set the viewport to the "tablet" breakpoint
70
+ And we set the viewport to the "desktop" breakpoint
71
+ When I set the viewport to the "xl" breakpoint
72
+ When I set the viewport to the "xxxl" breakpoint
73
+ ```
74
+
75
+ ## 3. When I set the viewport width to 1200
76
+
77
+ Resize the viewport width while keeping the current height.
78
+
79
+ **Keyword**: `When`
80
+
81
+ **Pattern**
82
+
83
+ ```js
84
+ /^(I |we )*set the viewport width to (\d+)$/
85
+ ```
86
+
87
+ **Examples**
88
+
89
+ ```gherkin
90
+ When I set the viewport width to 1200
91
+ When I set the viewport width to 375
92
+ And we set the viewport width to 1920
93
+ When I set the viewport width to 768
94
+ When I set the viewport width to 1024
95
+ ```
96
+
97
+ ## 4. When I set the viewport height to 800
98
+
99
+ Resize the viewport height while keeping the current width.
100
+
101
+ **Keyword**: `When`
102
+
103
+ **Pattern**
104
+
105
+ ```js
106
+ /^(I |we )*set the viewport height to (\d+)$/
107
+ ```
108
+
109
+ **Examples**
110
+
111
+ ```gherkin
112
+ When I set the viewport height to 800
113
+ When I set the viewport height to 1024
114
+ And we set the viewport height to 1080
115
+ When I set the viewport height to 667
116
+ When I set the viewport height to 900
117
+ ```
118
+
119
+ ## 5. When I set the viewport to 1200 by 800
120
+
121
+ Resize the viewport to an explicit width-by-height pair.
122
+
123
+ **Keyword**: `When`
124
+
125
+ **Pattern**
126
+
127
+ ```js
128
+ /^(I |we )*set the viewport to (\d+) by (\d+)$/
129
+ ```
130
+
131
+ **Examples**
132
+
133
+ ```gherkin
134
+ When I set the viewport to 1200 by 800
135
+ When I set the viewport to 375 by 667
136
+ And we set the viewport to 1920 by 1080
137
+ When I set the viewport to 768 by 1024
138
+ When I set the viewport to 1024 by 768
139
+ ```
@@ -0,0 +1,140 @@
1
+ # REST (short form) steps
2
+
3
+ 5 steps, defined in `tests/step-definitions/rest.steps.js`.
4
+
5
+ Cucumber-js loads every `*.steps.js` in that directory automatically — you never `require()` a step file from a feature.
6
+
7
+ | # | Step |
8
+ | --- | --- |
9
+ | 1 | `Given a REST header "Authorization" with value "Bearer abc123"` |
10
+ | 2 | `When I send a REST "GET" request to "/api/users"` |
11
+ | 3 | `When I send a REST "POST" request to "/api/users" with body:` |
12
+ | 4 | `Then the REST response status code should be 200` |
13
+ | 5 | `Then the REST response should contain "Alice"` |
14
+
15
+ ---
16
+
17
+ ## 1. Given a REST header "Authorization" with value "Bearer abc123"
18
+
19
+ Add an HTTP header to subsequent REST requests.
20
+
21
+ **Keyword**: `Given`
22
+
23
+ **Pattern**
24
+
25
+ ```js
26
+ 'a REST header {string} with value {string}'
27
+ ```
28
+
29
+ **Examples**
30
+
31
+ ```gherkin
32
+ Given a REST header "Authorization" with value "Bearer abc123"
33
+ Given a REST header "Accept" with value "application/json"
34
+ And a REST header "X-Request-ID" with value "req-001"
35
+ Given a REST header "Content-Type" with value "application/json"
36
+ Given a REST header "X-API-Key" with value "key-xyz"
37
+ ```
38
+
39
+ ## 2. When I send a REST "GET" request to "/api/users"
40
+
41
+ Send an HTTP request without a body.
42
+
43
+ **Keyword**: `When`
44
+
45
+ **Pattern**
46
+
47
+ ```js
48
+ /^(I |we )*send a REST "([^"]*)" request to "([^"]*)"$/
49
+ ```
50
+
51
+ **Examples**
52
+
53
+ ```gherkin
54
+ When I send a REST "GET" request to "/api/users"
55
+ When I send a REST "DELETE" request to "/api/orders/1"
56
+ And we send a REST "GET" request to "https://example.com/api/health"
57
+ When I send a REST "GET" request to "/api/me"
58
+ When I send a REST "DELETE" request to "/api/cart/items/42"
59
+ ```
60
+
61
+ ## 3. When I send a REST "POST" request to "/api/users" with body:
62
+
63
+ Send an HTTP request with a doc-string body (raw text, JSON, or form-encoded).
64
+
65
+ **Keyword**: `When`
66
+
67
+ **Pattern**
68
+
69
+ ```js
70
+ /^(I |we )*send a REST "([^"]*)" request to "([^"]*)" with body:$/
71
+ ```
72
+
73
+ **Examples**
74
+
75
+ ```gherkin
76
+ When I send a REST "POST" request to "/api/users" with body:
77
+ """
78
+ {"name": "Alice"}
79
+ """
80
+ When I send a REST "PUT" request to "/api/users/1" with body:
81
+ """
82
+ {"role": "admin"}
83
+ """
84
+ And we send a REST "PATCH" request to "/api/orders/1" with body:
85
+ """
86
+ {"status": "shipped"}
87
+ """
88
+ When I send a REST "POST" request to "/api/login" with body:
89
+ """
90
+ username=alice&password=s3cret
91
+ """
92
+ When I send a REST "POST" request to "/webhooks/event" with body:
93
+ """
94
+ {"event": "ping"}
95
+ """
96
+ ```
97
+
98
+ ## 4. Then the REST response status code should be 200
99
+
100
+ Assert the most recent REST response carried an expected status code.
101
+
102
+ **Keyword**: `Then`
103
+
104
+ **Pattern**
105
+
106
+ ```js
107
+ 'the REST response status code should be {int}'
108
+ ```
109
+
110
+ **Examples**
111
+
112
+ ```gherkin
113
+ Then the REST response status code should be 200
114
+ Then the REST response status code should be 201
115
+ And the REST response status code should be 401
116
+ Then the REST response status code should be 404
117
+ Then the REST response status code should be 500
118
+ ```
119
+
120
+ ## 5. Then the REST response should contain "Alice"
121
+
122
+ Assert the most recent REST response body contains a substring.
123
+
124
+ **Keyword**: `Then`
125
+
126
+ **Pattern**
127
+
128
+ ```js
129
+ 'the REST response should contain {string}'
130
+ ```
131
+
132
+ **Examples**
133
+
134
+ ```gherkin
135
+ Then the REST response should contain "Alice"
136
+ Then the REST response should contain "id"
137
+ And the REST response should contain "shipped"
138
+ Then the REST response should contain "ok"
139
+ Then the REST response should contain "Welcome"
140
+ ```