@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,437 @@
1
+ # Layout Builder steps
2
+
3
+ 17 steps, defined in `tests/step-definitions/drupal-layout-builder.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 add a basic "4 Cols" section at the end of layout` |
10
+ | 2 | `When I save the section` |
11
+ | 3 | `When I add section gutters` |
12
+ | 4 | `When I select the "Edge to Edge" container type` |
13
+ | 5 | `When I select the "md" "33% 67%" section breakpoint` |
14
+ | 6 | `When I select the "Primary" section background color` |
15
+ | 7 | `When I select the "Dark" section text color` |
16
+ | 8 | `When I set the alignment to "End"` |
17
+ | 9 | `When I uncheck the Edge to Edge Background` |
18
+ | 10 | `And I select "Site branding" from the "Block" dropdown` |
19
+ | 11 | `When I check the box "Editor"` |
20
+ | 12 | `When I uncheck the box "Editor"` |
21
+ | 13 | `When I select the "Male" radio button` |
22
+ | 14 | `When I select the radio button "Published"` |
23
+ | 15 | `And I expand the field "edit-menu"` |
24
+ | 16 | `When I press the confirm button in modal` |
25
+ | 17 | `When I click the delete button` |
26
+
27
+ ---
28
+
29
+ ## 1. When I add a basic "4 Cols" section at the end of layout
30
+
31
+ Add a basic section (with an optional layout, default "1 Col") at the end of
32
+ the Layout Builder layout.
33
+
34
+ Ports VarbaseContext::iAddABasicSectionAtTheEndOfLayout.
35
+
36
+ **Keyword**: `When`
37
+
38
+ **Pattern**
39
+
40
+ ```js
41
+ /^(?:I |we )*add a basic(?: "([^"]*)")? section at the end of layout$/
42
+ ```
43
+
44
+ **Examples**
45
+
46
+ ```gherkin
47
+ When I add a basic "4 Cols" section at the end of layout
48
+ And I add a basic section at the end of layout
49
+ When I add a basic "2 Cols" section at the end of layout
50
+ And we add a basic section at the end of layout
51
+ When I add a basic "3 Cols" section at the end of layout
52
+ ```
53
+
54
+ ## 2. When I save the section
55
+
56
+ Save (add) the currently configured Layout Builder section.
57
+
58
+ Ports VarbaseContext::iSaveTheSection (clicks the "Add section" submit).
59
+
60
+ **Keyword**: `When`
61
+
62
+ **Pattern**
63
+
64
+ ```js
65
+ /^(?:I |we )*save the section$/
66
+ ```
67
+
68
+ **Examples**
69
+
70
+ ```gherkin
71
+ When I save the section
72
+ And I save the section
73
+ When we save the section
74
+ Given I save the section
75
+ And we save the section
76
+ ```
77
+
78
+ ## 3. When I add section gutters
79
+
80
+ Add gutters to the section being configured (checks "With Gutters").
81
+
82
+ Ports VarbaseContext::iAddSectionGutters.
83
+
84
+ **Keyword**: `When`
85
+
86
+ **Pattern**
87
+
88
+ ```js
89
+ /^(?:I |we )*add section gutters$/
90
+ ```
91
+
92
+ **Examples**
93
+
94
+ ```gherkin
95
+ When I add section gutters
96
+ And I add section gutters
97
+ When we add section gutters
98
+ Given I add section gutters
99
+ And we add section gutters
100
+ ```
101
+
102
+ ## 4. When I select the "Edge to Edge" container type
103
+
104
+ Select a section container type (and optional Boxed width).
105
+
106
+ Ports VarbaseContext::iSelectTheContainerType / iSelectTheContainerWidth.
107
+
108
+ **Keyword**: `When`
109
+
110
+ **Pattern**
111
+
112
+ ```js
113
+ /^(?:I |we )*select the "([^"]*)" container type(?: with a "([^"]*)" width)?$/
114
+ ```
115
+
116
+ **Examples**
117
+
118
+ ```gherkin
119
+ When I select the "Edge to Edge" container type
120
+ And I select the "Boxed" container type with a "Tiny" width
121
+ When I select the "Full" container type
122
+ And I select the "Boxed" container type with a "Narrow" width
123
+ When we select the "Edge to Edge" container type
124
+ ```
125
+
126
+ ## 5. When I select the "md" "33% 67%" section breakpoint
127
+
128
+ Select a section breakpoint column ratio for a given screen size.
129
+
130
+ Ports VarbaseContext::iSelectTheSectionBreakpoint.
131
+
132
+ **Keyword**: `When`
133
+
134
+ **Pattern**
135
+
136
+ ```js
137
+ /^(?:I |we )*select the "([^"]*)" "([^"]*)" section breakpoint$/
138
+ ```
139
+
140
+ **Examples**
141
+
142
+ ```gherkin
143
+ When I select the "md" "33% 67%" section breakpoint
144
+ And I select the "xs" "75% 25%" section breakpoint
145
+ When I select the "lg" "50% 50%" section breakpoint
146
+ And I select the "sm" "100%" section breakpoint
147
+ When we select the "md" "67% 33%" section breakpoint
148
+ ```
149
+
150
+ ## 6. When I select the "Primary" section background color
151
+
152
+ Select a section background color.
153
+
154
+ Ports VarbaseContext::iSelectTheSectionBackgroundColor (opens Background,
155
+ switches to the color tab, clicks the color label).
156
+
157
+ **Keyword**: `When`
158
+
159
+ **Pattern**
160
+
161
+ ```js
162
+ /^(?:I |we )*select the "([^"]*)" section background color$/
163
+ ```
164
+
165
+ **Examples**
166
+
167
+ ```gherkin
168
+ When I select the "Primary" section background color
169
+ And I select the "Light" section background color
170
+ When I select the "Dark" section background color
171
+ And we select the "Info" section background color
172
+ When I select the "White" section background color
173
+ ```
174
+
175
+ ## 7. When I select the "Dark" section text color
176
+
177
+ Select a section text color.
178
+
179
+ Ports VarbaseContext::iSelectTheSectionTextColor.
180
+
181
+ **Keyword**: `When`
182
+
183
+ **Pattern**
184
+
185
+ ```js
186
+ /^(?:I |we )*select the "([^"]*)" section text color$/
187
+ ```
188
+
189
+ **Examples**
190
+
191
+ ```gherkin
192
+ When I select the "Dark" section text color
193
+ And I select the "White" section text color
194
+ When I select the "Primary" section text color
195
+ And we select the "Light" section text color
196
+ When I select the "Muted" section text color
197
+ ```
198
+
199
+ ## 8. When I set the alignment to "End"
200
+
201
+ Set the section text alignment.
202
+
203
+ Ports VarbaseContext::iSetTheAlignmentTo.
204
+
205
+ **Keyword**: `When`
206
+
207
+ **Pattern**
208
+
209
+ ```js
210
+ /^(?:I |we )*set the alignment to "([^"]*)"$/
211
+ ```
212
+
213
+ **Examples**
214
+
215
+ ```gherkin
216
+ When I set the alignment to "End"
217
+ And I set the alignment to "Start"
218
+ When I set the alignment to "Center"
219
+ And we set the alignment to "Justify"
220
+ When I set the alignment to "End"
221
+ ```
222
+
223
+ ## 9. When I uncheck the Edge to Edge Background
224
+
225
+ Uncheck the section "Edge to Edge Background" option.
226
+
227
+ Ports VarbaseContext::iUncheckTheEdgeToEdgeBackground.
228
+
229
+ **Keyword**: `When`
230
+
231
+ **Pattern**
232
+
233
+ ```js
234
+ /^(?:I |we )*uncheck the Edge to Edge Background$/
235
+ ```
236
+
237
+ **Examples**
238
+
239
+ ```gherkin
240
+ When I uncheck the Edge to Edge Background
241
+ And I uncheck the Edge to Edge Background
242
+ When we uncheck the Edge to Edge Background
243
+ Given I uncheck the Edge to Edge Background
244
+ And we uncheck the Edge to Edge Background
245
+ ```
246
+
247
+ ## 10. And I select "Site branding" from the "Block" dropdown
248
+
249
+ Select an option (by its visible option text, falling back to value) from a
250
+ <select> resolved by its visible label, or a partial name / id when the label
251
+ is ambiguous. Needed for paragraph subform selects whose label is a single
252
+ word (e.g. "Block", "Webform") — the Varbase E2E core "select from" step treats a
253
+ single-word target as a name/id, never a label, and the subform select's DOM
254
+ id carries a random "--XXXX" suffix so it cannot be addressed by a fixed #id.
255
+
256
+ **Keyword**: `When`
257
+
258
+ **Pattern**
259
+
260
+ ```js
261
+ /^(?:I |we )*select "([^"]*)" from the "([^"]*)" dropdown$/
262
+ ```
263
+
264
+ **Examples**
265
+
266
+ ```gherkin
267
+ And I select "Site branding" from the "Block" dropdown
268
+ And I select "Contact" from the "Webform" dropdown
269
+ ```
270
+
271
+ ## 11. When I check the box "Editor"
272
+
273
+ Check a checkbox by its visible label (or id / name / css selector).
274
+
275
+ Ports the Varbase suite's `I check the box "..."`. Varbase E2E core only
276
+ offers `I check "..."`; the profile features use "check the box", so this
277
+ matches that phrasing. Resolves the control by label text first (Drupal
278
+ renders role permission / field labels), then falls back to id / name / css.
279
+
280
+ **Keyword**: `When`
281
+
282
+ **Pattern**
283
+
284
+ ```js
285
+ /^(?:I |we )*check the box "([^"]*)"$/
286
+ ```
287
+
288
+ **Examples**
289
+
290
+ ```gherkin
291
+ When I check the box "Editor"
292
+ And I check the box "Site Admin"
293
+ When we check the box "Content Admin"
294
+ And I check the box "Super Admin"
295
+ Given I check the box "SEO Admin"
296
+ ```
297
+
298
+ ## 12. When I uncheck the box "Editor"
299
+
300
+ Uncheck a checkbox by its visible label (or id / name / css selector).
301
+
302
+ Ports the Varbase suite's `I uncheck the box "..."`.
303
+
304
+ **Keyword**: `When`
305
+
306
+ **Pattern**
307
+
308
+ ```js
309
+ /^(?:I |we )*uncheck the box "([^"]*)"$/
310
+ ```
311
+
312
+ **Examples**
313
+
314
+ ```gherkin
315
+ When I uncheck the box "Editor"
316
+ And I uncheck the box "Subscribe"
317
+ When we uncheck the box "Site Admin"
318
+ And I uncheck the box "Enable"
319
+ Given I uncheck the box "Published"
320
+ ```
321
+
322
+ ## 13. When I select the "Male" radio button
323
+
324
+ Select a radio button by its visible label text.
325
+
326
+ Ports VarbaseContext::iSelectTheRadioButton (`@When /^I select the "..."
327
+ radio button$/`): finds the <label> whose text matches, follows its `for`
328
+ attribute to the input, and selects it.
329
+
330
+ **Keyword**: `When`
331
+
332
+ **Pattern**
333
+
334
+ ```js
335
+ /^(?:I |we )*select the "([^"]*)" radio button$/
336
+ ```
337
+
338
+ **Examples**
339
+
340
+ ```gherkin
341
+ When I select the "Male" radio button
342
+ And I select the "Female" radio button
343
+ When we select the "Yes" radio button
344
+ And I select the "Unpublished" radio button
345
+ Given I select the "Published" radio button
346
+ ```
347
+
348
+ ## 14. When I select the radio button "Published"
349
+
350
+ Select a radio button by its visible label text (alternate phrasing).
351
+
352
+ **Keyword**: `When`
353
+
354
+ **Pattern**
355
+
356
+ ```js
357
+ /^(?:I |we )*select the radio button "([^"]*)"$/
358
+ ```
359
+
360
+ **Examples**
361
+
362
+ ```gherkin
363
+ When I select the radio button "Published"
364
+ And I select the radio button "Draft"
365
+ When we select the radio button "Needs Review"
366
+ And I select the radio button "Archived"
367
+ Given I select the radio button "Yes"
368
+ ```
369
+
370
+ ## 15. And I expand the field "edit-menu"
371
+
372
+ Open a collapsed <details>/fieldset by its element id so its inner fields
373
+ become interactable (e.g. the node form "Menu settings", the entityqueue
374
+ form widget).
375
+
376
+ **Keyword**: `When`
377
+
378
+ **Pattern**
379
+
380
+ ```js
381
+ /^(?:I |we )*expand the field "([^"]*)"$/
382
+ ```
383
+
384
+ **Examples**
385
+
386
+ ```gherkin
387
+ And I expand the field "edit-menu"
388
+ And I expand the field "edit-entityqueue-form-widget"
389
+ ```
390
+
391
+ ## 16. When I press the confirm button in modal
392
+
393
+ Press the confirm (Restore / OK / primary) button in a jQuery UI modal.
394
+
395
+ Ports VarbaseContext::iPressTheConfirmButton (used by trash restore).
396
+
397
+ **Keyword**: `When`
398
+
399
+ **Pattern**
400
+
401
+ ```js
402
+ /^(?:I |we )*press the confirm button in modal$/
403
+ ```
404
+
405
+ **Examples**
406
+
407
+ ```gherkin
408
+ When I press the confirm button in modal
409
+ And I press the confirm button in modal
410
+ When we press the confirm button in modal
411
+ Given I press the confirm button in modal
412
+ And we press the confirm button in modal
413
+ ```
414
+
415
+ ## 17. When I click the delete button
416
+
417
+ Click the first "Delete" button on the page (action link or submit).
418
+
419
+ Ports VarbaseContext::iClickTheDeleteButton.
420
+
421
+ **Keyword**: `When`
422
+
423
+ **Pattern**
424
+
425
+ ```js
426
+ /^(?:I |we )*click the delete button$/
427
+ ```
428
+
429
+ **Examples**
430
+
431
+ ```gherkin
432
+ When I click the delete button
433
+ And I click the delete button
434
+ When we click the delete button
435
+ Given I click the delete button
436
+ And we click the delete button
437
+ ```
@@ -0,0 +1,107 @@
1
+ # Media library steps
2
+
3
+ 4 steps, defined in `tests/step-definitions/drupal-media.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 submit the media library dialog` |
10
+ | 2 | `And I open the "field_image" media library` |
11
+ | 3 | `And I select the media "Embed Flag Earth"` |
12
+ | 4 | `And I insert the selected media` |
13
+
14
+ ---
15
+
16
+ ## 1. When I submit the media library dialog
17
+
18
+ Submit the Media Library dialog (the "Insert selected" action).
19
+
20
+ Ports VarbaseContext::iSubmitMediaLibraryDialog.
21
+
22
+ **Keyword**: `When`
23
+
24
+ **Pattern**
25
+
26
+ ```js
27
+ /^(?:I |we )*submit (?:the )?media library dialog$/
28
+ ```
29
+
30
+ **Examples**
31
+
32
+ ```gherkin
33
+ When I submit the media library dialog
34
+ And I submit the media library dialog
35
+ When we submit the media library dialog
36
+ Given I submit the media library dialog
37
+ And we submit media library dialog
38
+ ```
39
+
40
+ ## 2. And I open the "field_image" media library
41
+
42
+ Open the Media Library widget of a specific field by its machine name.
43
+
44
+ On Drupal 11.4 the media-library "Add media" open button renders with a
45
+ random "--XXXX" id suffix, and a single paragraph subform can contain several
46
+ "Add media" buttons (e.g. the text_and_image bundle has both field_image and
47
+ a bp_image field), so neither the old fixed id nor the "Add media" label is
48
+ unique. Match the visible open button whose id contains "<field>-open-button".
49
+
50
+ **Keyword**: `When`
51
+
52
+ **Pattern**
53
+
54
+ ```js
55
+ /^(?:I |we )*open the "([^"]*)" media library$/
56
+ ```
57
+
58
+ **Examples**
59
+
60
+ ```gherkin
61
+ And I open the "field_image" media library
62
+ And I open the "field_media_single" media library
63
+ ```
64
+
65
+ ## 3. And I select the media "Embed Flag Earth"
66
+
67
+ Select a Media Library grid item by its "Select <name>" checkbox, tolerating
68
+ duplicate items. A retried upload scenario (cucumber `retry: 1`) can leave two
69
+ media with the same name, so Varbase E2E's built-in "I check" would strict-fail on
70
+ two identically labelled checkboxes — pick the first.
71
+
72
+ **Keyword**: `When`
73
+
74
+ **Pattern**
75
+
76
+ ```js
77
+ /^(?:I |we )*select the media "([^"]*)"$/
78
+ ```
79
+
80
+ **Examples**
81
+
82
+ ```gherkin
83
+ And I select the media "Embed Flag Earth"
84
+ And I select the media "Flag Earth"
85
+ ```
86
+
87
+ ## 4. And I insert the selected media
88
+
89
+ Insert the currently selected item(s) in the open Media Library dialog.
90
+ The dialog submit ("Insert selected") is cloned by jQuery UI into the dialog
91
+ button pane, so the original form button is hidden; target the visible one.
92
+ Replaces the old `press "dialog-submit" by its "id"` which no longer resolves
93
+ on Drupal 11.4 (the media dialog button has no "dialog-submit" id).
94
+
95
+ **Keyword**: `When`
96
+
97
+ **Pattern**
98
+
99
+ ```js
100
+ /^(?:I |we )*insert the selected media$/
101
+ ```
102
+
103
+ **Examples**
104
+
105
+ ```gherkin
106
+ And I insert the selected media
107
+ ```
@@ -0,0 +1,81 @@
1
+ # Content moderation steps
2
+
3
+ 3 steps, defined in `tests/step-definitions/drupal-moderation.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 open the moderation sidebar` |
10
+ | 2 | `Then the moderation sidebar should show "Draft"` |
11
+ | 3 | `Then the moderation sidebar should not show "Archived"` |
12
+
13
+ ---
14
+
15
+ ## 1. When I open the moderation sidebar
16
+
17
+ Open the moderation sidebar from the administration toolbar / tasks.
18
+
19
+ Ports VarbaseContext::iOpenTheModerationSidebar.
20
+
21
+ **Keyword**: `When`
22
+
23
+ **Pattern**
24
+
25
+ ```js
26
+ /^(?:I |we )*(?:open (?:the )?moderation sidebar|click on tasks in the toolbar)$/
27
+ ```
28
+
29
+ **Examples**
30
+
31
+ ```gherkin
32
+ When I open the moderation sidebar
33
+ And I open moderation sidebar
34
+ When I click on tasks in the toolbar
35
+ And click on tasks in the toolbar
36
+ When we open the moderation sidebar
37
+ ```
38
+
39
+ ## 2. Then the moderation sidebar should show "Draft"
40
+
41
+ Assert the moderation sidebar shows the given text for the current revision.
42
+
43
+ **Keyword**: `Then`
44
+
45
+ **Pattern**
46
+
47
+ ```js
48
+ /^(?:the )?moderation sidebar should show "([^"]*)"$/
49
+ ```
50
+
51
+ **Examples**
52
+
53
+ ```gherkin
54
+ Then the moderation sidebar should show "Draft"
55
+ And moderation sidebar should show "Published"
56
+ Then the moderation sidebar should show "Needs Review"
57
+ And the moderation sidebar should show "Archived"
58
+ Then moderation sidebar should show "Latest version"
59
+ ```
60
+
61
+ ## 3. Then the moderation sidebar should not show "Archived"
62
+
63
+ Assert the moderation sidebar does not show the given text for the current revision.
64
+
65
+ **Keyword**: `Then`
66
+
67
+ **Pattern**
68
+
69
+ ```js
70
+ /^(?:the )?moderation sidebar should not show "([^"]*)"$/
71
+ ```
72
+
73
+ **Examples**
74
+
75
+ ```gherkin
76
+ Then the moderation sidebar should not show "Archived"
77
+ And moderation sidebar should not show "Delete"
78
+ Then the moderation sidebar should not show "Published"
79
+ And the moderation sidebar should not show "Unpublish"
80
+ Then moderation sidebar should not show "Needs Review"
81
+ ```
@@ -0,0 +1,36 @@
1
+ # Paragraphs steps
2
+
3
+ 1 step, defined in `tests/step-definitions/drupal-paragraphs.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 select the "Text" paragraph component` |
10
+
11
+ ---
12
+
13
+ ## 1. When I select the "Text" paragraph component
14
+
15
+ Select a paragraph component in the "Add component" dialog.
16
+
17
+ Ports VarbaseContext::iSelectTheParagraphComponent: clicks the add button in
18
+ the paragraphs-add-dialog whose name matches the component.
19
+
20
+ **Keyword**: `When`
21
+
22
+ **Pattern**
23
+
24
+ ```js
25
+ /^(?:I |we )*select the "([^"]*)" paragraph component$/
26
+ ```
27
+
28
+ **Examples**
29
+
30
+ ```gherkin
31
+ When I select the "Text" paragraph component
32
+ And I select the "Modal" paragraph component
33
+ When we select the "Drupal block" paragraph component
34
+ And I select the "Rich Text" paragraph component
35
+ Given I select the "Accordion" paragraph component
36
+ ```