@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,18 @@
1
+ Feature: An example of pressing a button using its attributes.
2
+ As a tester,
3
+ I want to be able to press a button using its attributes.
4
+
5
+ Scenario: Verify that you can click a button by specifying its ID with the '#' sign.
6
+ Given I am on "/test--when--i-press-button.html"
7
+ When I press "#btn-pressid" by attr
8
+ Then I should see "Button Pressed Successfully"
9
+
10
+ Scenario: Verify that you can click a button by specifying the 'ID' attribute without the '#' sign.
11
+ Given I am on "/test--when--i-press-button.html"
12
+ When I press "btn-pressid" by "id" attr
13
+ Then I should see "Button Pressed Successfully"
14
+
15
+ Scenario: Verify that you can click a button without specifying any attributes or signs, using only the value of one of its attributes.
16
+ Given I am on "/test--when--i-press-button.html"
17
+ When I press "btn-pressname" by attr
18
+ Then I should see "Button Pressed Successfully"
@@ -0,0 +1,13 @@
1
+ Feature: An example of pressing a button by its label.
2
+ As a tester,
3
+ I want to be able to press a button using its label.
4
+
5
+ Scenario: Check pressing a button using its label.
6
+ Given I am on "/test--when--i-press-button.html"
7
+ When I press "Submit"
8
+ Then I should see "Button Pressed Successfully"
9
+
10
+ Scenario: Check pressing a selected button with optional the and optional button.
11
+ Given I am on "/test--when--i-press-button.html"
12
+ When I press the "Submit" button
13
+ Then I should see "Button Pressed Successfully"
@@ -0,0 +1,11 @@
1
+ Feature: An example of reloading the page.
2
+ As a tester,
3
+ I want to be able to reload the page.
4
+
5
+ Scenario: Check reloading the page.
6
+ Given I am on "/test--when--i-reload-page.html"
7
+ When I press "Submit" by attr
8
+ Then I should see "Button Pressed Successfully"
9
+ When I reload the page
10
+ Then I should not see "Button Pressed Successfully"
11
+
@@ -0,0 +1,48 @@
1
+ Feature: Complete scrolling functionality test
2
+ As a tester,
3
+ I want to test all scrolling step definitions to ensure they work correctly.
4
+
5
+ Scenario: Test basic scroll down functionality
6
+ Given I am on "/test--when--i-scroll-left-right-functionality.html"
7
+ When I scroll down
8
+ Then I should see "Basic scroll down works"
9
+
10
+ Scenario: Test basic scroll up functionality
11
+ Given I am on "/test--when--i-scroll-left-right-functionality.html"
12
+ When I scroll to the bottom
13
+ And I scroll up
14
+ Then I should see "Basic scroll up works"
15
+
16
+ Scenario: Test scroll down with custom value
17
+ Given I am on "/test--when--i-scroll-left-right-functionality.html"
18
+ When I scroll down 500
19
+ Then I should see "Custom scroll down works"
20
+
21
+ Scenario: Test scroll up with custom value
22
+ Given I am on "/test--when--i-scroll-left-right-functionality.html"
23
+ When I scroll to the bottom
24
+ And I scroll up 300
25
+ Then I should see "Custom scroll up works"
26
+
27
+ Scenario: Test scroll to top functionality
28
+ Given I am on "/test--when--i-scroll-left-right-functionality.html"
29
+ When I scroll to the bottom
30
+ And I scroll to top
31
+ Then I should see "Scroll to top works"
32
+
33
+ Scenario: Test scroll to bottom functionality
34
+ Given I am on "/test--when--i-scroll-left-right-functionality.html"
35
+ When I scroll to the bottom
36
+ Then I should see "Scroll to bottom works"
37
+
38
+
39
+ Scenario: Test scroll to top of element
40
+ Given I am on "/test--when--i-scroll-left-right-functionality.html"
41
+ When I scroll to bottom of "#scrollable-container"
42
+ And I scroll to top of "#scrollable-container"
43
+ Then I should see "Element scroll to top works"
44
+
45
+ Scenario: Test scroll to bottom of element
46
+ Given I am on "/test--when--i-scroll-left-right-functionality.html"
47
+ When I scroll to bottom of "#scrollable-container"
48
+ Then I should see "Element scroll to bottom works"
@@ -0,0 +1,48 @@
1
+ Feature: Complete scrolling functionality test
2
+ As a tester,
3
+ I want to test all scrolling step definitions to ensure they work correctly.
4
+
5
+ Scenario: Test basic scroll down functionality
6
+ Given I am on "/test--when--i-scroll-functionality.html"
7
+ When I scroll down
8
+ Then I should see "Basic scroll down works"
9
+
10
+ Scenario: Test basic scroll up functionality
11
+ Given I am on "/test--when--i-scroll-functionality.html"
12
+ When I scroll to the bottom
13
+ And I scroll up
14
+ Then I should see "Basic scroll up works"
15
+
16
+ Scenario: Test scroll down with custom value
17
+ Given I am on "/test--when--i-scroll-functionality.html"
18
+ When I scroll down 500
19
+ Then I should see "Custom scroll down works"
20
+
21
+ Scenario: Test scroll up with custom value
22
+ Given I am on "/test--when--i-scroll-functionality.html"
23
+ When I scroll to the bottom
24
+ And I scroll up 300
25
+ Then I should see "Custom scroll up works"
26
+
27
+ Scenario: Test scroll to top functionality
28
+ Given I am on "/test--when--i-scroll-functionality.html"
29
+ When I scroll to the bottom
30
+ And I scroll to top
31
+ Then I should see "Scroll to top works"
32
+
33
+ Scenario: Test scroll to bottom functionality
34
+ Given I am on "/test--when--i-scroll-functionality.html"
35
+ When I scroll to the bottom
36
+ Then I should see "Scroll to bottom works"
37
+
38
+
39
+ Scenario: Test scroll to top of element
40
+ Given I am on "/test--when--i-scroll-functionality.html"
41
+ When I scroll to bottom of "#scrollable-container"
42
+ And I scroll to top of "#scrollable-container"
43
+ Then I should see "Element scroll to top works"
44
+
45
+ Scenario: Test scroll to bottom of element
46
+ Given I am on "/test--when--i-scroll-functionality.html"
47
+ When I scroll to bottom of "#scrollable-container"
48
+ Then I should see "Element scroll to bottom works"
@@ -0,0 +1,21 @@
1
+ Feature: An example of selecting an option from a dropdown list using its attributes.
2
+ As a tester,
3
+ I want to be able to test selecting an option from a dropdown list using its attributes.
4
+
5
+ Scenario: Check selecting an option from a dropdown list using its attributes.
6
+ Given I am on "/test--when--i-select-option-from-dropdownlist.html"
7
+ When I select "Saab" from "#cars"
8
+ When I press "Submit"
9
+ Then I should see "Option ( Saab ) has been selected successfully"
10
+
11
+ Scenario: Check selecting an option from a dropdown list.
12
+ Given I am on "/test--when--i-select-option-from-dropdownlist.html"
13
+ When I select "mercedes" from "cars"
14
+ When I press "Submit"
15
+ Then I should see "Option ( Mercedes ) has been selected successfully"
16
+
17
+ Scenario: Check selecting an option from a dropdown list by its text label.
18
+ Given I am on "/test--when--i-select-option-from-dropdownlist.html"
19
+ When I select "Saab" from "Choose a car:"
20
+ When I press "Submit"
21
+ Then I should see "Option ( Saab ) has been selected successfully"
@@ -0,0 +1,37 @@
1
+ Feature: An example of selecting radio buttons
2
+ As a tester,
3
+ I want to be able to select radio button options
4
+
5
+ Scenario: Implementing the ability to select radio buttons
6
+ Given I am on "/test--when--i-select-radio-button.html"
7
+ When I select radio button "Male"
8
+ And I press "Submit" by "value" attr
9
+ Then I should see "Selected: Male"
10
+ And the radio button "#gender-male" should be selected
11
+ And the radio button "#gender-female" should not be selected
12
+ When I select radio button "Female"
13
+ And I press "Submit" by "value" attr
14
+ Then I should see "Selected: Female"
15
+ And the "#gender-female" radio button is selected
16
+ And the "#gender-male" radio button is not selected
17
+
18
+ Scenario: Selecting radio buttons by value
19
+ Given I am on "/test--when--i-select-radio-button.html"
20
+ When I select radio button "red"
21
+ Then the radio button with value "red" should be selected
22
+ And the radio button with value "blue" should not be selected
23
+ When I select radio button "blue"
24
+ Then the radio button with value "blue" should be selected
25
+ And the radio button with value "red" should not be selected
26
+
27
+ Scenario: Selecting radio buttons by selector
28
+ Given I am on "/test--when--i-select-radio-button.html"
29
+ When I select radio button "#plan-basic"
30
+ And I press "Plan Submit" by "value" attr
31
+ Then I should see "Plan: Basic"
32
+ And the "#plan-basic" radio button is selected
33
+ When I select radio button "#plan-premium"
34
+ And I press "Plan Submit" by "value" attr
35
+ Then I should see "Plan: Premium"
36
+ And the "#plan-premium" radio button is selected
37
+ And the "#plan-basic" radio button is not selected
@@ -0,0 +1,8 @@
1
+ Feature: An example test to wait until the page is loaded.
2
+ As a tester,
3
+ I want to make sure that I can wait until a page is loaded.
4
+
5
+ Scenario: Check waiting for the page to load.
6
+ Given I am on "/test--when-i-wait-page-until-is-loaded.html"
7
+ And I wait until the page loaded
8
+ Then I should see "The waiting process was completed successfully."
@@ -0,0 +1,21 @@
1
+ Feature: An example test to wait for a specific maximum number of seconds/minutes for the page to load.
2
+ As a tester,
3
+ I want to make sure that I can wait for a page to load and for an element to become visible.
4
+
5
+ Scenario: Check waiting 6 seconds for the page content to load.
6
+ Given I am on the homepage
7
+ When I go to "/test--when-i-wait-specific-time.html"
8
+ And I wait 6 seconds
9
+ Then I should see "Welcome with waiting full time"
10
+
11
+ Scenario: Check waiting 3s for the page content to load.
12
+ Given I am on the homepage
13
+ When I go to "/test--when-i-wait-specific-time.html"
14
+ And I wait 3s
15
+ Then I should see "Welcome with waiting full time"
16
+
17
+ Scenario: Check waiting a maximum of 6 seconds for the page content to load.
18
+ Given I am on the homepage
19
+ When I go to "/test--when-i-wait-max-of-time.html"
20
+ And I wait max of 6 seconds
21
+ Then I should see "Welcome with waiting until page load"
@@ -0,0 +1,18 @@
1
+ @video
2
+ Feature: 🎬 Video recording
3
+
4
+ As a tester, I want to record a short browser video so that I can attach it
5
+ to a bug report and let reviewers replay what happened.
6
+
7
+ Scenario: 🎥 Record a tiny click flow with emojis
8
+ When I start video recording
9
+ Given I am on "/video-demo.html"
10
+ Then I should see "Varbase E2E Video Demo"
11
+ When I press "👋 Wave"
12
+ Then I should see "Hello, world"
13
+ When I press "🚀 Launch"
14
+ Then I should see "Liftoff!"
15
+ When I press "🎉 Celebrate"
16
+ Then I should see "Party time"
17
+ When I save the current video as "demo.webm"
18
+ When I stop video recording
@@ -0,0 +1,7 @@
1
+ Feature: Wait step definitions
2
+
3
+ Scenario: Wait helpers
4
+ Given I am on the homepage
5
+ When I wait for 1 second
6
+ And I wait for 1 seconds
7
+ And I wait for 1 second for AJAX to finish
@@ -0,0 +1,102 @@
1
+ Feature: YAML response assertions
2
+
3
+ Scenario: Existence, equality, contains, count
4
+ Given the YAML response content is the following:
5
+ """
6
+ apiVersion: apps/v1
7
+ kind: Deployment
8
+ metadata:
9
+ name: web
10
+ labels:
11
+ app: web
12
+ team: platform
13
+ spec:
14
+ replicas: 3
15
+ containers:
16
+ - name: nginx
17
+ image: nginx:1.25
18
+ - name: api
19
+ image: myapp:1.0
20
+ """
21
+ Then the response should be in YAML format
22
+ And the YAML should have no duplicate keys
23
+ And the YAML element "/kind" should exist
24
+ And the YAML element "/spec/replicas" should be equal to "3"
25
+ And the YAML element "/metadata/name" should contain "we"
26
+ And the YAML element "/spec/containers" should have 2 elements
27
+ And the YAML attribute "kind" on element "/" should exist
28
+ And the YAML attribute "kind" on element "/" should be equal to "Deployment"
29
+
30
+ Scenario: Type and emptiness assertions
31
+ Given the YAML response content is the following:
32
+ """
33
+ replicas: 3
34
+ name: web
35
+ paused: false
36
+ tags: []
37
+ meta: {}
38
+ notes: null
39
+ """
40
+ Then the YAML value at "/replicas" should be of type "integer"
41
+ And the YAML value at "/name" should be of type "string"
42
+ And the YAML value at "/paused" should be of type "boolean"
43
+ And the YAML value at "/tags" should be of type "array"
44
+ And the YAML value at "/meta" should be of type "object"
45
+ And the YAML value at "/notes" should be of type "null"
46
+ And the YAML value at "/tags" should be empty
47
+ And the YAML value at "/meta" should be empty
48
+ And the YAML value at "/name" should not be empty
49
+
50
+ Scenario: Numeric comparisons
51
+ Given the YAML response content is the following:
52
+ """
53
+ spec:
54
+ replicas: 5
55
+ timeout: 30
56
+ """
57
+ Then the YAML value at "/spec/replicas" should be greater than 0
58
+ And the YAML value at "/spec/replicas" should be greater than or equal to 5
59
+ And the YAML value at "/spec/replicas" should be less than 10
60
+ And the YAML value at "/spec/replicas" should be less than or equal to 5
61
+ And the YAML value at "/timeout" should be between 5 and 60
62
+
63
+ Scenario: Array operations
64
+ Given the YAML response content is the following:
65
+ """
66
+ spec:
67
+ containers:
68
+ - name: nginx
69
+ image: nginx:1.25
70
+ - name: api
71
+ image: myapp:1.0
72
+ """
73
+ Then the YAML array at "/spec/containers" should contain an item where "/name" is "nginx"
74
+ And the YAML array at "/spec/containers" should contain no item where "/image" is "alpine:latest"
75
+ And every item in "/spec/containers" should have key "image"
76
+
77
+ Scenario: Key-set assertions
78
+ Given the YAML response content is the following:
79
+ """
80
+ metadata:
81
+ name: web
82
+ namespace: default
83
+ labels:
84
+ app: web
85
+ """
86
+ Then the YAML keys at "/metadata" should be exactly "name, namespace, labels"
87
+ And the YAML at "/metadata" should have keys "name, namespace"
88
+
89
+ Scenario: Multi-document streams
90
+ Given the YAML response content is the following:
91
+ """
92
+ apiVersion: v1
93
+ kind: ConfigMap
94
+ ---
95
+ apiVersion: v1
96
+ kind: Service
97
+ """
98
+ Then the YAML response should have 2 documents
99
+ And the YAML element "/kind" should be equal to "ConfigMap"
100
+ Given the active YAML document is 2
101
+ Then the YAML element "/kind" should be equal to "Service"
102
+
@@ -0,0 +1,113 @@
1
+ {
2
+ "_description": "Canonical selector key index. CMS/framework JSON files should expose these names so steps work consistently across projects. Framework-specific extras may also be present.",
3
+ "categories": {
4
+ "layout": [
5
+ "main nav",
6
+ "main nav item",
7
+ "sidebar",
8
+ "header bar",
9
+ "main content",
10
+ "page title",
11
+ "page header",
12
+ "footer",
13
+ "breadcrumb",
14
+ "user menu",
15
+ "container"
16
+ ],
17
+ "modal": [
18
+ "modal",
19
+ "modal overlay",
20
+ "modal content",
21
+ "modal header",
22
+ "modal title",
23
+ "modal body",
24
+ "modal footer",
25
+ "modal close"
26
+ ],
27
+ "buttons": [
28
+ "primary button",
29
+ "secondary button",
30
+ "danger button",
31
+ "save button",
32
+ "cancel button",
33
+ "delete button",
34
+ "publish button",
35
+ "icon button",
36
+ "link button",
37
+ "ghost button"
38
+ ],
39
+ "notices": [
40
+ "notice success",
41
+ "notice error",
42
+ "notice warning",
43
+ "notice info",
44
+ "toast"
45
+ ],
46
+ "forms": [
47
+ "form",
48
+ "form item",
49
+ "form label",
50
+ "form input",
51
+ "form select",
52
+ "form textarea",
53
+ "form actions",
54
+ "form error",
55
+ "checkbox",
56
+ "checkbox checked",
57
+ "radio",
58
+ "radio checked",
59
+ "switch"
60
+ ],
61
+ "tables": [
62
+ "data table",
63
+ "table header",
64
+ "table row",
65
+ "table first row",
66
+ "table row cell"
67
+ ],
68
+ "lists": [
69
+ "data list",
70
+ "list item",
71
+ "first list item"
72
+ ],
73
+ "tabs": [
74
+ "tabs",
75
+ "tab item",
76
+ "active tab",
77
+ "tab content"
78
+ ],
79
+ "navigation": [
80
+ "menu",
81
+ "active menu item",
82
+ "dropdown",
83
+ "dropdown menu",
84
+ "dropdown item",
85
+ "pagination"
86
+ ],
87
+ "feedback": [
88
+ "tooltip",
89
+ "popover",
90
+ "spinner",
91
+ "skeleton",
92
+ "progress",
93
+ "badge",
94
+ "tag"
95
+ ],
96
+ "search": [
97
+ "search input"
98
+ ],
99
+ "card": [
100
+ "card",
101
+ "card content",
102
+ "card header",
103
+ "card footer"
104
+ ]
105
+ },
106
+ "naming_rules": {
107
+ "case": "kebab words separated by single space (e.g. \"primary button\", \"data table\")",
108
+ "modifiers": "place modifier first (e.g. \"active tab\", \"danger button\", \"first list item\")",
109
+ "no_synonyms": "use canonical name; do not add \"alert\"/\"notification\"/\"callout\" — always \"notice\"",
110
+ "tables_vs_lists": "\"data table\" for HTML tables; \"data list\" for ul/ol/list-of-cards collections",
111
+ "navigation": "site-wide nav = \"main nav\"; admin app sidebar = \"sidebar\"; collapsible inline menu = \"menu\""
112
+ }
113
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "css": {
3
+ "modal": "[role=\"dialog\"], dialog",
4
+ "admin heading": "h1",
5
+ "admin subline": "h3",
6
+ "admin list": "ul",
7
+ "admin body": "body",
8
+ "save button": "button[type=\"submit\"], input[type=\"submit\"]",
9
+ "notice success": ".alert-success, .notice-success",
10
+ "notice error": ".alert-danger, .notice-error",
11
+ "data table": "table",
12
+ "search input": "input[type=\"search\"], input[name=\"search\"]"
13
+ },
14
+ "xpath": {
15
+ "admin first heading": "//h1[1]",
16
+ "admin first subline": "//h3[1]",
17
+ "admin first list item": "//ul[1]/li[1]"
18
+ }
19
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "css": {
3
+ "modal": "[role=\"dialog\"], [data-test-id=\"cf-ui-modal\"]",
4
+ "main nav": "[data-test-id=\"main-nav\"], nav[aria-label*=\"main\" i]",
5
+ "page header": "[data-test-id=\"workbench-header\"]",
6
+ "page title": "[data-test-id=\"workbench-header\"] h1",
7
+ "sidebar": "[data-test-id=\"workbench-sidebar\"]",
8
+ "main content": "[data-test-id=\"workbench-main\"]",
9
+ "save button": "[data-test-id=\"workbench-header-actions\"] button:has-text('Save')",
10
+ "publish button": "[data-test-id=\"change-state-published\"], button:has-text('Publish')",
11
+ "archive button": "[data-test-id=\"change-state-archived\"]",
12
+ "primary button": "button.btn-primary, button[data-variant=\"primary\"]",
13
+ "secondary button": "button[data-variant=\"secondary\"]",
14
+ "danger button": "button[data-variant=\"negative\"]",
15
+ "notice success": "[data-test-id=\"cf-ui-notification\"][class*=\"success\"]",
16
+ "notice error": "[data-test-id=\"cf-ui-notification\"][class*=\"error\"]",
17
+ "notice warning": "[data-test-id=\"cf-ui-notification\"][class*=\"warning\"]",
18
+ "data table": "[data-test-id=\"entry-list\"]",
19
+ "table row": "[data-test-id=\"entry-row\"]",
20
+ "form input": "[data-test-id*=\"cf-ui-text-input\"], input.cf-form-input",
21
+ "form label": "[data-test-id*=\"cf-ui-form-label\"], label.cf-form-label",
22
+ "select trigger": "[data-test-id=\"cf-ui-select\"]",
23
+ "tabs": "[data-test-id=\"workbench-tabs\"], [role=\"tablist\"]",
24
+ "tab item": "[role=\"tab\"]",
25
+ "active tab": "[role=\"tab\"][aria-selected=\"true\"]",
26
+ "search input": "[data-test-id=\"search-input\"]",
27
+ "user menu": "[data-test-id=\"account-menu-trigger\"]",
28
+ "breadcrumb": "[data-test-id=\"breadcrumbs\"]"
29
+ },
30
+ "xpath": {
31
+ "page main heading": "//header[@data-test-id='workbench-header']//h1",
32
+ "save button": "//button[contains(.,'Save')]",
33
+ "first entry row": "//*[@data-test-id='entry-row'][1]"
34
+ }
35
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "css": {
3
+ "modal": ".modal.shown, [role=\"dialog\"], .hud",
4
+ "sidebar": "#global-sidebar, .global-sidebar",
5
+ "main nav": "#nav, nav#nav",
6
+ "main nav item": "#nav li a",
7
+ "page title": "#header h1, .header h1, h1.title",
8
+ "page header": "#page-title, #header",
9
+ "save button": "button.submit, .btn.submit, #save-btn",
10
+ "save and continue": "#action-menu .action-btn",
11
+ "primary button": "button.btn.submit, .btn.primary",
12
+ "secondary button": ".btn.secondary",
13
+ "delete button": ".btn.delete",
14
+ "notice success": ".notification.notice, .notice",
15
+ "notice error": ".notification.error, .errors",
16
+ "notice warning": ".notification.warning",
17
+ "data table": "table.data, table.fullwidth",
18
+ "table row": "tbody tr",
19
+ "table first row": "tbody tr:first-child",
20
+ "table checkbox": "td.checkbox-cell input",
21
+ "tabs": "#tabs, .tabs",
22
+ "active tab": "#tabs li.sel, .tabs li.sel",
23
+ "form item": ".field, .flex-fields .field",
24
+ "form input": ".field input.text, .field .nicetext",
25
+ "form label": ".field .heading label, .field label",
26
+ "lightswitch": ".lightswitch",
27
+ "search input": ".search input, #search-container input",
28
+ "filter button": ".btn.menubtn",
29
+ "site picker": "#site-crumb, .site-crumb-button",
30
+ "user menu": "#user-info, .user.menubtn",
31
+ "breadcrumb": ".crumbs, #crumbs"
32
+ },
33
+ "xpath": {
34
+ "page main heading": "//div[@id='header']//h1 | //h1[@class='title']",
35
+ "save button": "//button[contains(@class,'submit')]",
36
+ "first table row": "//table[contains(@class,'data')]//tbody/tr[1]",
37
+ "notification": "//div[contains(@class,'notification')]"
38
+ }
39
+ }
@@ -0,0 +1,56 @@
1
+ {
2
+ "css": {
3
+ "modal": ".ui-dialog, [role=\"dialog\"], .dialog-off-canvas-main-canvas",
4
+ "main nav": ".gin--navigation, #gin-sidebar, .gin-sidebar",
5
+ "main nav item": ".gin--navigation a, .gin-sidebar a",
6
+ "page title": "h1.page-title, .region-page-title h1",
7
+ "sticky header": ".region-sticky, .region.region-sticky",
8
+ "save button": "#edit-submit, .button--primary, .gin-sticky-form-actions .button--primary",
9
+ "delete button": ".button--danger, a.button[href*='delete']",
10
+ "primary button": ".button--primary",
11
+ "notice success": ".messages--status",
12
+ "notice error": ".messages--error",
13
+ "notice warning": ".messages--warning",
14
+ "breadcrumb": ".gin-breadcrumb, .breadcrumb, nav.breadcrumb",
15
+ "breadcrumb list": ".gin-breadcrumb__list, .breadcrumb__list",
16
+ "breadcrumb back": ".gin-back-to-admin",
17
+ "secondary toolbar": ".gin-secondary-toolbar",
18
+ "header bar": ".gin--navigation-top-bar, .top-bar--gin",
19
+ "local tasks": ".tabs--primary",
20
+ "local task item": ".tabs--primary li",
21
+ "local actions": ".local-actions, .action-links",
22
+ "content area": "main.page-content, .layout-container main",
23
+ "form": ".layout-container form, main form",
24
+ "form item": ".form-item",
25
+ "form input": ".form-element, input.form-text",
26
+ "form select": ".form-element--type-select, select",
27
+ "form textarea": "textarea",
28
+ "form actions": ".form-actions, .gin-sticky-form-actions",
29
+ "more actions": ".gin-more-actions",
30
+ "more actions menu": ".gin-more-actions__menu",
31
+ "sidebar toggle": ".gin-sidebar-toggle",
32
+ "sidebar": ".gin-sidebar",
33
+ "layout container": ".layout-container",
34
+ "data table": "table.views-table, table.responsive-enabled, .gin--table-sticky",
35
+ "table header": "thead tr",
36
+ "table row": "tbody tr",
37
+ "table first row": "tbody tr:first-child",
38
+ "pager": ".pager",
39
+ "pager next": ".pager__item--next a",
40
+ "dropbutton": ".dropbutton-wrapper",
41
+ "layer wrapper": ".gin-layer-wrapper",
42
+ "edit form": ".gin--edit-form",
43
+ "confirm form": ".gin-confirm-form",
44
+ "dark mode toggle": ".gin--dark-mode-toggle",
45
+ "user menu": ".toolbar-tab--toolbar-item-user, .toolbar-icon-user",
46
+ "search input": "input.form-search, input[placeholder*='Search']"
47
+ },
48
+ "xpath": {
49
+ "page main heading": "//h1[contains(@class,'page-title')]",
50
+ "gin nav first item": "//nav[contains(@class,'gin--navigation')]//a[1]",
51
+ "first table row": "//table//tbody/tr[1]",
52
+ "messages block": "//div[contains(@class,'messages')]",
53
+ "save button": "//input[@value='Save'] | //button[normalize-space()='Save']",
54
+ "breadcrumb link": "//nav[contains(@class,'gin-breadcrumb')]//a[1]"
55
+ }
56
+ }