@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,248 @@
1
+ # Iframes steps
2
+
3
+ 10 steps, defined in `tests/step-definitions/iframe.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 | `When I switch to iframe "iframe.payment"` |
10
+ | 2 | `When I switch to iframe with locator "iframe.payment"` |
11
+ | 3 | `When I switch to the root document` |
12
+ | 4 | `When I switch to the iframe with title "Payment"` |
13
+ | 5 | `When I switch to the iframe with name "payment"` |
14
+ | 6 | `When I click "Confirm" inside the iframe` |
15
+ | 7 | `When I click "submit-btn" by attr inside the iframe` |
16
+ | 8 | `When I fill in "card_number" with "4242 4242 4242 4242" inside the iframe` |
17
+ | 9 | `Then I should see "Payment received" inside the iframe` |
18
+ | 10 | `Then I should not see "Error" inside the iframe` |
19
+
20
+ ---
21
+
22
+ ## 1. When I switch to iframe "iframe.payment"
23
+
24
+ Switch the active scope to an iframe addressed by CSS selector.
25
+
26
+ **Keyword**: `When`
27
+
28
+ **Pattern**
29
+
30
+ ```js
31
+ /^(I |we )*switch to (the )?iframe "([^"]*)"$/
32
+ ```
33
+
34
+ **Examples**
35
+
36
+ ```gherkin
37
+ When I switch to iframe "iframe.payment"
38
+ When I switch to the iframe "#stripe-frame"
39
+ And we switch to iframe "iframe[name=widget]"
40
+ When I switch to iframe ".captcha-frame"
41
+ When I switch to the iframe "iframe[src*=embed]"
42
+ ```
43
+
44
+ ## 2. When I switch to iframe with locator "iframe.payment"
45
+
46
+ Switch the active scope to an iframe by Playwright frame-locator string.
47
+
48
+ **Keyword**: `When`
49
+
50
+ **Pattern**
51
+
52
+ ```js
53
+ /^(I |we )*switch to iframe with locator "([^"]*)"$/
54
+ ```
55
+
56
+ **Examples**
57
+
58
+ ```gherkin
59
+ When I switch to iframe with locator "iframe.payment"
60
+ When I switch to iframe with locator "#stripe-frame"
61
+ And I switch to iframe with locator "iframe[name=widget]"
62
+ When I switch to iframe with locator ".captcha-frame"
63
+ When I switch to iframe with locator "iframe[src*=embed]"
64
+ ```
65
+
66
+ ## 3. When I switch to the root document
67
+
68
+ Return the active scope to the top document (clear the iframe scope).
69
+
70
+ **Keyword**: `When`
71
+
72
+ **Pattern**
73
+
74
+ ```js
75
+ /^(I |we )*switch to the root document$/
76
+ ```
77
+
78
+ **Examples**
79
+
80
+ ```gherkin
81
+ When I switch to the root document
82
+ When I switch to iframe ".captcha"
83
+ And I click "I am not a robot" inside the iframe
84
+ And I switch to the root document
85
+ And we switch to the root document
86
+ When I switch to iframe "#payment"
87
+ And I press "Pay"
88
+ And I switch to the root document
89
+ Then I should see "Payment received"
90
+ When I switch to the root document
91
+ And I press "Refresh"
92
+ ```
93
+
94
+ ## 4. When I switch to the iframe with title "Payment"
95
+
96
+ Switch the active scope to an iframe by its `title` attribute.
97
+
98
+ **Keyword**: `When`
99
+
100
+ **Pattern**
101
+
102
+ ```js
103
+ /^(I |we )*switch to the iframe with title "([^"]*)"$/
104
+ ```
105
+
106
+ **Examples**
107
+
108
+ ```gherkin
109
+ When I switch to the iframe with title "Payment"
110
+ When I switch to the iframe with title "Captcha"
111
+ And we switch to the iframe with title "Widget"
112
+ When I switch to the iframe with title "Embedded video"
113
+ When I switch to the iframe with title "Stripe checkout"
114
+ ```
115
+
116
+ ## 5. When I switch to the iframe with name "payment"
117
+
118
+ Switch the active scope to an iframe by its `name` attribute.
119
+
120
+ **Keyword**: `When`
121
+
122
+ **Pattern**
123
+
124
+ ```js
125
+ /^(I |we )*switch to the iframe with name "([^"]*)"$/
126
+ ```
127
+
128
+ **Examples**
129
+
130
+ ```gherkin
131
+ When I switch to the iframe with name "payment"
132
+ When I switch to the iframe with name "captcha"
133
+ And we switch to the iframe with name "widget"
134
+ When I switch to the iframe with name "embed"
135
+ When I switch to the iframe with name "stripe"
136
+ ```
137
+
138
+ ## 6. When I click "Confirm" inside the iframe
139
+
140
+ Click visible text inside the active iframe.
141
+
142
+ **Keyword**: `When`
143
+
144
+ **Pattern**
145
+
146
+ ```js
147
+ /^(I |we )*click "([^"]*)" inside the iframe$/
148
+ ```
149
+
150
+ **Examples**
151
+
152
+ ```gherkin
153
+ When I click "Confirm" inside the iframe
154
+ When I click "Cancel" inside the iframe
155
+ And we click "Continue" inside the iframe
156
+ When I click "OK" inside the iframe
157
+ When I click "Close" inside the iframe
158
+ ```
159
+
160
+ ## 7. When I click "submit-btn" by attr inside the iframe
161
+
162
+ Click an attribute-addressed element inside the active iframe.
163
+
164
+ Tries id, class, name, and data-testid in that order.
165
+
166
+ **Keyword**: `When`
167
+
168
+ **Pattern**
169
+
170
+ ```js
171
+ /^(I |we )*click "([^"]*)" by attr inside the iframe$/
172
+ ```
173
+
174
+ **Examples**
175
+
176
+ ```gherkin
177
+ When I click "submit-btn" by attr inside the iframe
178
+ When I click "cancel" by attr inside the iframe
179
+ And we click "continue" by attr inside the iframe
180
+ When I click "close" by attr inside the iframe
181
+ When I click "primary-cta" by attr inside the iframe
182
+ ```
183
+
184
+ ## 8. When I fill in "card_number" with "4242 4242 4242 4242" inside the iframe
185
+
186
+ Fill a field inside the active iframe by `[name]` or id.
187
+
188
+ **Keyword**: `When`
189
+
190
+ **Pattern**
191
+
192
+ ```js
193
+ /^(I |we )*fill in "([^"]*)" with "([^"]*)" inside the iframe$/
194
+ ```
195
+
196
+ **Examples**
197
+
198
+ ```gherkin
199
+ When I fill in "card_number" with "4242 4242 4242 4242" inside the iframe
200
+ When I fill in "cvv" with "123" inside the iframe
201
+ And we fill in "exp_date" with "12/30" inside the iframe
202
+ When I fill in "email" with "alice@example.com" inside the iframe
203
+ When I fill in "name" with "Alice" inside the iframe
204
+ ```
205
+
206
+ ## 9. Then I should see "Payment received" inside the iframe
207
+
208
+ Assert visible text exists inside the active iframe.
209
+
210
+ **Keyword**: `Then`
211
+
212
+ **Pattern**
213
+
214
+ ```js
215
+ /^I should see "([^"]*)" inside the iframe$/
216
+ ```
217
+
218
+ **Examples**
219
+
220
+ ```gherkin
221
+ Then I should see "Payment received" inside the iframe
222
+ Then I should see "Welcome" inside the iframe
223
+ And I should see "Confirmed" inside the iframe
224
+ Then I should see "Email verified" inside the iframe
225
+ Then I should see "Subscribed" inside the iframe
226
+ ```
227
+
228
+ ## 10. Then I should not see "Error" inside the iframe
229
+
230
+ Assert visible text does NOT exist inside the active iframe.
231
+
232
+ **Keyword**: `Then`
233
+
234
+ **Pattern**
235
+
236
+ ```js
237
+ /^I should not see "([^"]*)" inside the iframe$/
238
+ ```
239
+
240
+ **Examples**
241
+
242
+ ```gherkin
243
+ Then I should not see "Error" inside the iframe
244
+ Then I should not see "Declined" inside the iframe
245
+ And I should not see "Loading" inside the iframe
246
+ Then I should not see "Pending" inside the iframe
247
+ Then I should not see "Try again" inside the iframe
248
+ ```
@@ -0,0 +1,220 @@
1
+ # Pointer input steps
2
+
3
+ 9 steps, defined in `tests/step-definitions/input.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 | `When I hover over "#nav-products"` |
10
+ | 2 | `When I move the pointer to "#cta"` |
11
+ | 3 | `When I double-click on "#row-1"` |
12
+ | 4 | `When I right-click on "#row-1"` |
13
+ | 5 | `When I middle-click on "a.external"` |
14
+ | 6 | `When I click on "#row-1" while holding "Shift"` |
15
+ | 7 | `When I drag "#card-1" to "#column-done"` |
16
+ | 8 | `When I set the viewport size to 1280x720` |
17
+ | 9 | `When I tap on "#cta"` |
18
+
19
+ ---
20
+
21
+ ## 1. When I hover over "#nav-products"
22
+
23
+ Hover the mouse pointer over a CSS-addressed element.
24
+
25
+ **Keyword**: `When`
26
+
27
+ **Pattern**
28
+
29
+ ```js
30
+ /^(I |we )*hover over "([^"]*)"$/
31
+ ```
32
+
33
+ **Examples**
34
+
35
+ ```gherkin
36
+ When I hover over "#nav-products"
37
+ When I hover over ".tooltip-trigger"
38
+ And we hover over "[data-testid=user-menu]"
39
+ When I hover over "button.help"
40
+ When I hover over ".chart-bar:nth-child(3)"
41
+ ```
42
+
43
+ ## 2. When I move the pointer to "#cta"
44
+
45
+ Move the mouse pointer over a CSS-addressed element (alias for hover).
46
+
47
+ **Keyword**: `When`
48
+
49
+ **Pattern**
50
+
51
+ ```js
52
+ /^(I |we )*move the pointer to "([^"]*)"$/
53
+ ```
54
+
55
+ **Examples**
56
+
57
+ ```gherkin
58
+ When I move the pointer to "#cta"
59
+ When we move the pointer to ".dropdown-trigger"
60
+ And I move the pointer to "[data-testid=avatar]"
61
+ When I move the pointer to "img.gallery-thumb"
62
+ When I move the pointer to ".legend-item"
63
+ ```
64
+
65
+ ## 3. When I double-click on "#row-1"
66
+
67
+ Double-click on a CSS-addressed element.
68
+
69
+ **Keyword**: `When`
70
+
71
+ **Pattern**
72
+
73
+ ```js
74
+ /^(I |we )*double[- ]click on "([^"]*)"$/
75
+ ```
76
+
77
+ **Examples**
78
+
79
+ ```gherkin
80
+ When I double-click on "#row-1"
81
+ When I double click on ".file-tile"
82
+ And we double-click on "[data-testid=cell-A1]"
83
+ When I double-click on "img.editable"
84
+ When I double click on "td.editable-cell"
85
+ ```
86
+
87
+ ## 4. When I right-click on "#row-1"
88
+
89
+ Right-click (context menu) on a CSS-addressed element.
90
+
91
+ **Keyword**: `When`
92
+
93
+ **Pattern**
94
+
95
+ ```js
96
+ /^(I |we )*right[- ]click on "([^"]*)"$/
97
+ ```
98
+
99
+ **Examples**
100
+
101
+ ```gherkin
102
+ When I right-click on "#row-1"
103
+ When I right click on ".tree-node"
104
+ And we right-click on "[data-testid=image]"
105
+ When I right-click on "li.contact"
106
+ When I right click on "td.cell"
107
+ ```
108
+
109
+ ## 5. When I middle-click on "a.external"
110
+
111
+ Middle-click on a CSS-addressed element.
112
+
113
+ **Keyword**: `When`
114
+
115
+ **Pattern**
116
+
117
+ ```js
118
+ /^(I |we )*middle[- ]click on "([^"]*)"$/
119
+ ```
120
+
121
+ **Examples**
122
+
123
+ ```gherkin
124
+ When I middle-click on "a.external"
125
+ When I middle click on "#tab-2"
126
+ And we middle-click on "[data-testid=link]"
127
+ When I middle-click on "li.bookmark"
128
+ When I middle click on "a.product-link"
129
+ ```
130
+
131
+ ## 6. When I click on "#row-1" while holding "Shift"
132
+
133
+ Click on a CSS-addressed element while holding a modifier key.
134
+
135
+ Modifier names follow Playwright: `Shift`, `Control`, `Alt`, `Meta`.
136
+
137
+ **Keyword**: `When`
138
+
139
+ **Pattern**
140
+
141
+ ```js
142
+ /^(I |we )*click on "([^"]*)" while holding "([^"]*)"$/
143
+ ```
144
+
145
+ **Examples**
146
+
147
+ ```gherkin
148
+ When I click on "#row-1" while holding "Shift"
149
+ When I click on ".checkbox" while holding "Control"
150
+ And we click on "a.external" while holding "Meta"
151
+ When I click on ".item" while holding "Alt"
152
+ When I click on "#tab-2" while holding "Shift"
153
+ ```
154
+
155
+ ## 7. When I drag "#card-1" to "#column-done"
156
+
157
+ Drag a source element onto a target element.
158
+
159
+ **Keyword**: `When`
160
+
161
+ **Pattern**
162
+
163
+ ```js
164
+ /^(I |we )*drag "([^"]*)" to "([^"]*)"$/
165
+ ```
166
+
167
+ **Examples**
168
+
169
+ ```gherkin
170
+ When I drag "#card-1" to "#column-done"
171
+ When I drag ".file-tile" to "#trash"
172
+ And we drag "[data-testid=task-1]" to "[data-testid=in-progress]"
173
+ When I drag "#image" to "#canvas"
174
+ When I drag "li.draggable" to "ul.dropzone"
175
+ ```
176
+
177
+ ## 8. When I set the viewport size to 1280x720
178
+
179
+ Resize the browser viewport to a specific WxH.
180
+
181
+ **Keyword**: `When`
182
+
183
+ **Pattern**
184
+
185
+ ```js
186
+ /^(I |we )*set the viewport size to (\d+)x(\d+)$/
187
+ ```
188
+
189
+ **Examples**
190
+
191
+ ```gherkin
192
+ When I set the viewport size to 1280x720
193
+ When I set the viewport size to 375x667
194
+ And we set the viewport size to 768x1024
195
+ When I set the viewport size to 1920x1080
196
+ When I set the viewport size to 320x568
197
+ ```
198
+
199
+ ## 9. When I tap on "#cta"
200
+
201
+ Touch-tap a CSS-addressed element. Falls back to a regular click if the
202
+ browser context was not opened with `hasTouch: true`.
203
+
204
+ **Keyword**: `When`
205
+
206
+ **Pattern**
207
+
208
+ ```js
209
+ /^(I |we )*tap on "([^"]*)"$/
210
+ ```
211
+
212
+ **Examples**
213
+
214
+ ```gherkin
215
+ When I tap on "#cta"
216
+ When I tap on ".bottom-nav-item"
217
+ And we tap on "[data-testid=fab]"
218
+ When I tap on "button.menu"
219
+ When I tap on ".swipe-card"
220
+ ```
@@ -0,0 +1,111 @@
1
+ # JavaScript errors steps
2
+
3
+ 4 steps, defined in `tests/step-definitions/javascript.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 there should be no JavaScript errors` |
10
+ | 2 | `Then there should be no JavaScript warnings` |
11
+ | 3 | `Then JavaScript errors should not match "TypeError"` |
12
+ | 4 | `Then print JavaScript errors` |
13
+
14
+ ---
15
+
16
+ ## 1. Then there should be no JavaScript errors
17
+
18
+ Assert that no JavaScript errors have been collected so far.
19
+
20
+ Always fails on error (ignoring the active mode) — this is the explicit
21
+ "hard check" step. Calling it also prevents the auto-report at scenario
22
+ end so a single error is not reported twice.
23
+
24
+ **Keyword**: `Then`
25
+
26
+ **Pattern**
27
+
28
+ ```js
29
+ /^there should be no JavaScript errors$/
30
+ ```
31
+
32
+ **Examples**
33
+
34
+ ```gherkin
35
+ Then there should be no JavaScript errors
36
+ And there should be no JavaScript errors
37
+ But there should be no JavaScript errors
38
+ Then there should be no JavaScript errors
39
+ Then there should be no JavaScript errors
40
+ ```
41
+
42
+ ## 2. Then there should be no JavaScript warnings
43
+
44
+ Assert that no JavaScript console warnings were collected. Requires
45
+ 'warning' to be in the captured console levels (see worldParameters or
46
+ VARBASE_E2E_JS_ERROR_LEVELS).
47
+
48
+ **Keyword**: `Then`
49
+
50
+ **Pattern**
51
+
52
+ ```js
53
+ /^there should be no JavaScript warnings$/
54
+ ```
55
+
56
+ **Examples**
57
+
58
+ ```gherkin
59
+ Then there should be no JavaScript warnings
60
+ And there should be no JavaScript warnings
61
+ But there should be no JavaScript warnings
62
+ Then there should be no JavaScript warnings
63
+ Then there should be no JavaScript warnings
64
+ ```
65
+
66
+ ## 3. Then JavaScript errors should not match "TypeError"
67
+
68
+ Assert that no collected JavaScript error message matches a regular
69
+ expression. Useful when some noise is unavoidable but a specific bug
70
+ pattern must never appear.
71
+
72
+ **Keyword**: `Then`
73
+
74
+ **Pattern**
75
+
76
+ ```js
77
+ /^JavaScript errors should not match "([^"]*)"$/
78
+ ```
79
+
80
+ **Examples**
81
+
82
+ ```gherkin
83
+ Then JavaScript errors should not match "TypeError"
84
+ Then JavaScript errors should not match "is not a function"
85
+ And JavaScript errors should not match "Cannot read property"
86
+ Then JavaScript errors should not match "ReferenceError: .* is not defined"
87
+ Then JavaScript errors should not match "Uncaught"
88
+ ```
89
+
90
+ ## 4. Then print JavaScript errors
91
+
92
+ Print the JavaScript errors collected so far. Diagnostic only — never
93
+ asserts, never fails. Useful inside a scenario being debugged.
94
+
95
+ **Keyword**: `Then`
96
+
97
+ **Pattern**
98
+
99
+ ```js
100
+ /^print JavaScript errors$/
101
+ ```
102
+
103
+ **Examples**
104
+
105
+ ```gherkin
106
+ Then print JavaScript errors
107
+ And print JavaScript errors
108
+ But print JavaScript errors
109
+ Then print JavaScript errors
110
+ Then print JavaScript errors
111
+ ```
@@ -0,0 +1,107 @@
1
+ # Keyboard steps
2
+
3
+ 4 steps, defined in `tests/step-definitions/keyboard.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 | `When I press the key "Enter"` |
10
+ | 2 | `When I press the key "Enter" on the element "#search"` |
11
+ | 3 | `When I press the keys "Control+a"` |
12
+ | 4 | `When I press the keys "Control+a" on the element "#editor"` |
13
+
14
+ ---
15
+
16
+ ## 1. When I press the key "Enter"
17
+
18
+ Press a single key against the page (whatever element is currently focused).
19
+
20
+ Common aliases (`enter`, `tab`, `esc`, `space`, `up/down/left/right`) are
21
+ normalised to Playwright's canonical key names.
22
+
23
+ **Keyword**: `When`
24
+
25
+ **Pattern**
26
+
27
+ ```js
28
+ /^(I |we )*press the key "([^"]*)"$/
29
+ ```
30
+
31
+ **Examples**
32
+
33
+ ```gherkin
34
+ When I press the key "Enter"
35
+ When I press the key "Escape"
36
+ And I press the key "Tab"
37
+ When I press the key "ArrowDown"
38
+ When I focus on the element "#search"
39
+ And I press the key "Enter"
40
+ ```
41
+
42
+ ## 2. When I press the key "Enter" on the element "#search"
43
+
44
+ Press a single key while a specific element is focused.
45
+
46
+ **Keyword**: `When`
47
+
48
+ **Pattern**
49
+
50
+ ```js
51
+ /^(I |we )*press the key "([^"]*)" on the element "([^"]*)"$/
52
+ ```
53
+
54
+ **Examples**
55
+
56
+ ```gherkin
57
+ When I press the key "Enter" on the element "#search"
58
+ When I press the key "Tab" on the element "input[type=email]"
59
+ And I press the key "ArrowDown" on the element ".combobox"
60
+ When I press the key "Backspace" on the element "#name"
61
+ When I press the key "Escape" on the element "[role=dialog]"
62
+ ```
63
+
64
+ ## 3. When I press the keys "Control+a"
65
+
66
+ Press a key combination against the page. Combos use `+` between modifiers
67
+ and the final key (e.g. `Control+a`, `Meta+s`, `Shift+Tab`).
68
+
69
+ **Keyword**: `When`
70
+
71
+ **Pattern**
72
+
73
+ ```js
74
+ /^(I |we )*press the keys "([^"]*)"$/
75
+ ```
76
+
77
+ **Examples**
78
+
79
+ ```gherkin
80
+ When I press the keys "Control+a"
81
+ When I press the keys "Meta+s"
82
+ And I press the keys "Shift+Tab"
83
+ When I press the keys "Alt+ArrowLeft"
84
+ When I press the keys "Control+Shift+P"
85
+ ```
86
+
87
+ ## 4. When I press the keys "Control+a" on the element "#editor"
88
+
89
+ Press a key combination while a specific element is focused.
90
+
91
+ **Keyword**: `When`
92
+
93
+ **Pattern**
94
+
95
+ ```js
96
+ /^(I |we )*press the keys "([^"]*)" on the element "([^"]*)"$/
97
+ ```
98
+
99
+ **Examples**
100
+
101
+ ```gherkin
102
+ When I press the keys "Control+a" on the element "#editor"
103
+ When I press the keys "Meta+s" on the element "form"
104
+ And I press the keys "Shift+Tab" on the element "#email"
105
+ When I press the keys "Control+Enter" on the element "#message"
106
+ When I press the keys "Alt+Down" on the element ".combobox"
107
+ ```