@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,50 @@
1
+ {
2
+ "css": {
3
+ "modal": ".ui-dialog, [role=\"dialog\"], .dialog-off-canvas-main-canvas",
4
+ "main nav": "#toolbar-bar, .toolbar-bar, .toolbar-menu, #toolbar-item-administration-tray",
5
+ "main nav item": ".toolbar-menu a",
6
+ "page title": "h1.page-title, .region-page-title h1, .page-header h1",
7
+ "save button": "#edit-submit, .button--primary, input[value=\"Save\"]",
8
+ "delete button": ".button--danger, a.button[href*='delete']",
9
+ "primary button": ".button--primary",
10
+ "notice success": ".messages--status, .messages[role=\"contentinfo\"]",
11
+ "notice error": ".messages--error, .messages[role=\"alert\"]",
12
+ "notice warning": ".messages--warning",
13
+ "breadcrumb": ".breadcrumb, nav[role=\"navigation\"].breadcrumb",
14
+ "breadcrumb list": ".breadcrumb__list",
15
+ "breadcrumb item": ".breadcrumb__item",
16
+ "local tasks": ".tabs--primary, [data-drupal-nav-tabs]",
17
+ "local task item": ".tabs--primary li, .tabs__tab",
18
+ "local actions": ".local-actions, .action-links",
19
+ "content area": ".layout-container main, main[role=\"main\"], .page-content",
20
+ "form": ".layout-container form, main form",
21
+ "form item": ".form-item",
22
+ "form input": ".form-element, input.form-text, input.form-email",
23
+ "form select": ".form-element--type-select, select.form-select",
24
+ "form textarea": "textarea.form-textarea",
25
+ "form actions": ".form-actions",
26
+ "details": ".claro-details, details",
27
+ "details summary": ".claro-details__summary, details > summary",
28
+ "vertical tabs": ".vertical-tabs",
29
+ "vertical tab item": ".vertical-tabs__item",
30
+ "exposed filters": ".views-exposed-form, .exposed-filters",
31
+ "data table": "table.views-table, table.responsive-enabled",
32
+ "table header": "thead tr",
33
+ "table row": "tbody tr",
34
+ "table first row": "tbody tr:first-child",
35
+ "pager": ".pager, nav[role=\"navigation\"].pager",
36
+ "pager next": ".pager__item--next a",
37
+ "dropbutton": ".dropbutton-wrapper",
38
+ "status report": ".system-status-report",
39
+ "user menu": ".toolbar-tab--toolbar-item-user",
40
+ "search input": "input[data-drupal-selector*='search'], input.form-search"
41
+ },
42
+ "xpath": {
43
+ "page main heading": "//h1[contains(@class,'page-title')]",
44
+ "admin toolbar first item": "//nav[contains(@class,'toolbar-menu')]//a[1]",
45
+ "first table row": "//table//tbody/tr[1]",
46
+ "messages block": "//div[contains(@class,'messages')]",
47
+ "primary tab item": "//ul[contains(@class,'tabs--primary')]//a",
48
+ "save button": "//input[@value='Save'] | //button[normalize-space()='Save']"
49
+ }
50
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "css": {
3
+ "modal": "[role=\"dialog\"], dialog, .modal.show, .modal.active, .modal.open",
4
+ "sidebar": "aside, nav.sidebar, .sidebar, #sidebar",
5
+ "main nav": "nav, .navbar, .navigation, header nav",
6
+ "page title": "h1, .page-title, .page-heading",
7
+ "save button": "button[type=\"submit\"], input[type=\"submit\"], .btn-save, .btn-primary",
8
+ "cancel button": "button.cancel, .btn-cancel, .btn-secondary",
9
+ "delete button": "button.delete, .btn-delete, .btn-danger",
10
+ "notice success": ".alert-success, .success, .notice-success, [role=\"alert\"].success",
11
+ "notice error": ".alert-danger, .alert-error, .error, .notice-error, [role=\"alert\"].error",
12
+ "notice warning": ".alert-warning, .warning, .notice-warning",
13
+ "notice info": ".alert-info, .info, .notice-info",
14
+ "data table": "table, .data-table, .list-table",
15
+ "table row": "tbody tr",
16
+ "table first row": "tbody tr:first-child",
17
+ "pagination": ".pagination, nav[aria-label*=\"page\"], [role=\"navigation\"].pagination",
18
+ "search input": "input[type=\"search\"], input[name=\"search\"], input[placeholder*=\"Search\"]",
19
+ "breadcrumb": ".breadcrumb, [aria-label=\"breadcrumb\"], nav.breadcrumb",
20
+ "dropdown menu": ".dropdown-menu, .dropdown-content",
21
+ "form": "form",
22
+ "form input": "input:not([type=\"hidden\"]):not([type=\"submit\"]):not([type=\"button\"])",
23
+ "loading spinner": ".spinner, .loader, .loading, [role=\"progressbar\"]",
24
+ "user avatar": ".avatar, .user-avatar",
25
+ "logout link": "a[href*=\"logout\"], a[href*=\"signout\"], button.logout"
26
+ },
27
+ "xpath": {
28
+ "page main heading": "//h1[1]",
29
+ "first table row": "//table//tbody/tr[1]",
30
+ "nav first item": "//nav//a[1]",
31
+ "any alert": "//div[contains(@class,'alert') or contains(@class,'notice') or contains(@class,'message')]",
32
+ "submit form": "//button[@type='submit' or @type='button'][contains(.,'Save') or contains(.,'Submit') or contains(.,'Update')]"
33
+ }
34
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "css": {
3
+ "modal": ".fullscreen-modal, .modal-content, [role=\"dialog\"]",
4
+ "main nav": ".gh-nav, nav.gh-nav",
5
+ "main nav item": ".gh-nav-list a",
6
+ "main content": ".gh-main, main.gh-main",
7
+ "page title": ".gh-canvas-header h1, .gh-canvas-header h2",
8
+ "canvas header": ".gh-canvas-header",
9
+ "save button": ".gh-publishmenu-trigger, button.gh-btn-primary",
10
+ "publish button": ".gh-publishmenu-button.gh-btn-black",
11
+ "preview button": ".gh-editor-preview-trigger",
12
+ "settings button": ".settings-menu-toggle",
13
+ "primary button": ".gh-btn-primary, .gh-btn.gh-btn-primary",
14
+ "danger button": ".gh-btn-red, .gh-btn-outline-red",
15
+ "notice success": ".gh-notification-success, .gh-alert-blue",
16
+ "notice error": ".gh-notification-error, .gh-alert-red",
17
+ "notice warning": ".gh-notification-warn, .gh-alert-yellow",
18
+ "data list": ".posts-list, .gh-list",
19
+ "table row": ".gh-posts-list-item, .gh-list-row",
20
+ "first list item": ".gh-list-row:first-of-type, .gh-posts-list-item:first-of-type",
21
+ "search input": ".gh-search-input, .gh-input-icon input",
22
+ "tag input": ".select-tags input",
23
+ "title input": ".gh-editor-title, textarea.gh-editor-title",
24
+ "editor": ".gh-koenig-editor, .koenig-editor",
25
+ "filter dropdown": ".gh-contentfilter",
26
+ "user menu": ".gh-user-avatar, .gh-user-list-action",
27
+ "settings panel": ".settings-menu-pane, .gh-settings-menu"
28
+ },
29
+ "xpath": {
30
+ "page main heading": "//header[contains(@class,'gh-canvas-header')]//h1",
31
+ "first post item": "//ol[contains(@class,'posts-list')]/li[1]",
32
+ "publish button": "//button[contains(@class,'gh-publishmenu-trigger')]"
33
+ }
34
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "css": {
3
+ "modal": ".modal.show, .modal.in, [role=\"dialog\"], #joomla-dialog",
4
+ "sidebar": "#sidebar-wrapper, #aside",
5
+ "main nav": "#sidebarmenu, .nav-sidebar",
6
+ "main nav item": "#sidebarmenu a, .nav-sidebar a",
7
+ "page title": ".page-title, h1.page-title, .subhead h1",
8
+ "subhead": ".subhead, #subhead",
9
+ "save button": "#toolbar-save button, button.button-save, joomla-toolbar-button[task='article.save']",
10
+ "save close button": "#toolbar-save-new button, button.button-save-new",
11
+ "cancel button": "#toolbar-cancel button, button.button-cancel",
12
+ "delete button": "#toolbar-delete button, button.button-delete",
13
+ "publish button": "#toolbar-publish button",
14
+ "unpublish button": "#toolbar-unpublish button",
15
+ "trash button": "#toolbar-trash button",
16
+ "notice success": ".alert-success, .alert.alert-message, joomla-alert[type='success']",
17
+ "notice error": ".alert-error, .alert-danger, joomla-alert[type='danger']",
18
+ "notice warning": ".alert-warning, joomla-alert[type='warning']",
19
+ "notice info": ".alert-info, joomla-alert[type='info']",
20
+ "data table": "table.table, table.adminlist, table.itemList",
21
+ "table row": "tbody tr",
22
+ "table first row": "tbody tr:first-child",
23
+ "table checkbox": "input[name='cid[]']",
24
+ "filter bar": ".js-stools, #filter-bar",
25
+ "filter search": "#filter_search",
26
+ "pagination": ".pagination, .pagination-toolbar",
27
+ "breadcrumb": "#breadcrumb, .breadcrumb",
28
+ "tabs": "joomla-tab, .nav-tabs",
29
+ "active tab": ".nav-tabs li.active, joomla-tab-element.active",
30
+ "form actions": ".form-actions, .control-group",
31
+ "form input": "input.form-control, .form-element",
32
+ "user menu": "#header-items .user, #user-menu",
33
+ "search input": "#filter-search-bar input"
34
+ },
35
+ "xpath": {
36
+ "page main heading": "//h1[contains(@class,'page-title')]",
37
+ "save button": "//button[contains(@class,'button-save') and not(contains(@class,'button-save-new'))]",
38
+ "first data row": "//table//tbody/tr[1]",
39
+ "alert message": "//*[self::div or self::joomla-alert][contains(@class,'alert')]"
40
+ }
41
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "css": {
3
+ "modal": "aside.modal-slide._show, .modal-popup._show, [role=\"dialog\"]",
4
+ "main nav": "#nav",
5
+ "main nav item": "#nav li a",
6
+ "page title": "h1.page-title, .page-header h1",
7
+ "save button": "button.save, #save, .action-save",
8
+ "primary button": "button.action-primary",
9
+ "notice success": ".message-success, .message.success",
10
+ "notice error": ".message-error, .message.error",
11
+ "notice warning": ".message-warning",
12
+ "loader": ".loading-mask",
13
+ "data table": ".admin__data-grid-wrap table",
14
+ "grid search": "#fulltext",
15
+ "grid filter": ".admin__data-grid-filters",
16
+ "pagination": ".admin__data-grid-pager",
17
+ "mass actions": ".action-select-wrap",
18
+ "breadcrumb": ".nav-breadcrumb",
19
+ "tabs": ".nav-tabs",
20
+ "active tab": ".nav-tabs li.ui-state-active",
21
+ "toolbar": ".page-toolbar",
22
+ "delete button": "button.action-delete",
23
+ "confirm dialog": "aside.confirm",
24
+ "confirm ok": "aside.confirm .action-primary"
25
+ },
26
+ "xpath": {
27
+ "admin first menu item": "//nav[@id='nav']//li[1]/a",
28
+ "page main heading": "//h1[contains(@class,'page-title')]",
29
+ "data grid first row": "//table[contains(@class,'data-grid')]//tbody/tr[1]",
30
+ "admin message": "//div[contains(@class,'message-')]"
31
+ }
32
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "css": {
3
+ "modal": ".modal.show, [role=\"dialog\"]",
4
+ "main nav": "#nav-sidebar, .nav-sidebar",
5
+ "main nav item": ".nav-sidebar li.link-levelone > a",
6
+ "submenu": ".submenu",
7
+ "page header": "#header_infos, .page-head",
8
+ "page title": ".page-title, h2.page-title, h1.page-title",
9
+ "save button": "button.btn-primary[name='submitAdd'], button#save-button",
10
+ "save stay button": "button[name='submitAddAndStay']",
11
+ "cancel button": "a.btn-default, button.btn-default[type='button']",
12
+ "delete button": "a.delete, .btn-danger",
13
+ "primary button": ".btn-primary",
14
+ "notice success": ".alert-success, .alert.alert-success",
15
+ "notice error": ".alert-danger, .alert.alert-danger",
16
+ "notice warning": ".alert-warning",
17
+ "notice info": ".alert-info",
18
+ "data table": "table.table",
19
+ "table row": "tbody tr",
20
+ "table first row": "tbody tr:first-child",
21
+ "filter input": "input.filter, .column-filters input",
22
+ "tabs": "ul.nav-tabs",
23
+ "active tab": "ul.nav-tabs li.active, .nav-tabs .active",
24
+ "form item": ".form-group",
25
+ "form label": ".form-control-label, .control-label",
26
+ "form input": ".form-control",
27
+ "form switch": ".switch-input, .ps-switch",
28
+ "search input": "input#bo_query, #shop_search input",
29
+ "user menu": "#employee_infos",
30
+ "breadcrumb": ".breadcrumb",
31
+ "page sidebar": "#main_page_aside, .page-sidebar"
32
+ },
33
+ "xpath": {
34
+ "page main heading": "//h2[contains(@class,'page-title')] | //h1[contains(@class,'page-title')]",
35
+ "save button": "//button[contains(@class,'btn-primary') and contains(@name,'submitAdd')]",
36
+ "first data row": "//table//tbody/tr[1]"
37
+ }
38
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "css": {
3
+ "modal": "[role=\"dialog\"], .Polaris-Modal-Dialog__Modal",
4
+ "main nav": ".Polaris-Navigation, #AppNavigation",
5
+ "page title": ".Polaris-Page__Title h1, .Polaris-DisplayText",
6
+ "save button": "button.Polaris-Button--primary, .Polaris-PageActions__PrimaryAction button",
7
+ "secondary button": "button.Polaris-Button--secondary",
8
+ "notice success": ".Polaris-Banner--statusSuccess, .Polaris-Toast",
9
+ "notice error": ".Polaris-Banner--statusCritical",
10
+ "notice warning": ".Polaris-Banner--statusWarning",
11
+ "data table": ".Polaris-DataTable, .Polaris-ResourceList",
12
+ "table row": ".Polaris-ResourceItem__ListItem, .Polaris-DataTable__TableRow",
13
+ "search input": ".Polaris-TextField__Input[type=\"text\"], .Polaris-Filters input",
14
+ "loading": ".Polaris-Spinner, .Polaris-SkeletonBodyText",
15
+ "breadcrumb": ".Polaris-Breadcrumbs",
16
+ "badge": ".Polaris-Badge",
17
+ "card": ".Polaris-Card",
18
+ "modal title": ".Polaris-Modal-Header__Title"
19
+ },
20
+ "xpath": {
21
+ "page main heading": "//h1[contains(@class,'Polaris-DisplayText') or contains(@class,'Title')]",
22
+ "first resource item": "//ul[contains(@class,'Polaris-ResourceList')]//li[1]",
23
+ "nav first item": "//nav[contains(@class,'Polaris-Navigation')]//a[1]"
24
+ }
25
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "css": {
3
+ "modal": "[role=\"dialog\"], [data-strapi-portal] [role=\"dialog\"]",
4
+ "main nav": "nav[aria-label=\"Main navigation\"]",
5
+ "main nav item": "nav[aria-label=\"Main navigation\"] a",
6
+ "secondary nav": "nav[aria-label*=\"Settings\"], nav[aria-label*=\"Content\"]",
7
+ "page title": "main h1, .main-content h1",
8
+ "header": "header[aria-label]",
9
+ "save button": "button[type=\"submit\"][name=\"submit\"], button[type=\"submit\"]",
10
+ "publish button": "button:has-text('Publish'), button[data-strapi-action='publish']",
11
+ "primary button": "button[data-variant=\"default\"], button.sc-primary",
12
+ "secondary button": "button[data-variant=\"secondary\"], button[data-variant=\"tertiary\"]",
13
+ "danger button": "button[data-variant=\"danger\"], button[data-variant=\"danger-light\"]",
14
+ "notice success": "[data-strapi-toast-type=\"success\"], [role=\"status\"]",
15
+ "notice error": "[data-strapi-toast-type=\"danger\"], [role=\"alert\"]",
16
+ "notice warning": "[data-strapi-toast-type=\"warning\"]",
17
+ "notice info": "[data-strapi-toast-type=\"info\"]",
18
+ "data table": "table[role=\"grid\"]",
19
+ "table row": "tbody tr",
20
+ "table first row": "tbody tr:first-child",
21
+ "table row cell": "td",
22
+ "row checkbox": "input[type=\"checkbox\"]",
23
+ "filter button": "button:has-text('Filters')",
24
+ "search input": "input[name=\"search\"], input[placeholder*=\"Search\"]",
25
+ "form label": "label",
26
+ "form input": "input[name], textarea[name]",
27
+ "select trigger": "[role=\"combobox\"]",
28
+ "switch": "[role=\"switch\"]",
29
+ "tabs": "[role=\"tablist\"]",
30
+ "tab item": "[role=\"tab\"]",
31
+ "active tab": "[role=\"tab\"][aria-selected=\"true\"]",
32
+ "tab content": "[role=\"tabpanel\"]",
33
+ "breadcrumb": "[aria-label*=\"breadcrumb\" i]",
34
+ "user menu": "header button[aria-label*=\"profile\" i]",
35
+ "pagination": "nav[aria-label*=\"Pagination\"]"
36
+ },
37
+ "xpath": {
38
+ "page main heading": "//main//h1[1]",
39
+ "save button": "//button[@type='submit'][.//span[normalize-space()='Save']] | //button[@name='submit']",
40
+ "first table row": "//table[@role='grid']//tbody/tr[1]"
41
+ }
42
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "css": {
3
+ "modal": ".modal.show, [role=\"dialog\"], typo3-backend-modal",
4
+ "main nav": "#typo3-module-menu, .modulemenu",
5
+ "main nav item": ".modulemenu-action",
6
+ "main content": "#typo3-contentBody, .module",
7
+ "page tree": "#typo3-pagetree, typo3-backend-navigation-component-pagetree",
8
+ "page tree node": ".node, .x-tree-node",
9
+ "page title": ".module-docheader-bar h1, .typo3-module-docheader-pagePath",
10
+ "doc header": ".module-docheader, typo3-backend-module-docheader",
11
+ "save button": "button[name='_savedok'], button[name='_saveandclosedok']",
12
+ "save close button": "button[name='_saveandclosedok']",
13
+ "close button": "button.t3js-editform-close, button[name='_closedok']",
14
+ "delete button": "button[name='_deletedok']",
15
+ "primary button": "button.btn-primary",
16
+ "secondary button": "button.btn-default",
17
+ "danger button": "button.btn-danger",
18
+ "notice success": ".callout-success, .alert-success",
19
+ "notice error": ".callout-danger, .alert-danger",
20
+ "notice warning": ".callout-warning, .alert-warning",
21
+ "notice info": ".callout-info, .alert-info, .typo3-messages, #typo3-messages",
22
+ "data table": "table.table",
23
+ "table row": "tbody tr",
24
+ "table first row": "tbody tr:first-child",
25
+ "tabs": ".nav-tabs, ul.tabs",
26
+ "active tab": ".nav-tabs .active, .nav-tabs .nav-link.active",
27
+ "tab content": ".tab-content",
28
+ "form item": ".form-group, .form-section",
29
+ "form input": ".form-control",
30
+ "checkbox": "input.checkbox, input[type='checkbox'].form-check-input",
31
+ "search input": "input.t3js-toolbar-search-field, #live-search-box",
32
+ "user menu": "#typo3-cms-backend-backend-toolbaritems-usertoolbaritem",
33
+ "context menu": "#contentMenu0, #contentMenu1"
34
+ },
35
+ "xpath": {
36
+ "page main heading": "//div[contains(@class,'module-docheader-bar')]//h1",
37
+ "save button": "//button[@name='_savedok']",
38
+ "first data row": "//table//tbody/tr[1]",
39
+ "flash message": "//*[contains(@class,'typo3-messages') or contains(@class,'callout')]"
40
+ }
41
+ }
@@ -0,0 +1,50 @@
1
+ {
2
+ "css": {
3
+ "modal": ".pswp.pswp--open, [role=\"dialog\"]",
4
+ "shop loop": "ul.products",
5
+ "product item": "ul.products li.product",
6
+ "product link": "ul.products li.product a",
7
+ "product title": "h2.woocommerce-loop-product__title, .product_title",
8
+ "product price": "span.price, .price",
9
+ "regular price": ".price del, .woocommerce-Price-amount.amount del",
10
+ "sale price": ".price ins, .woocommerce-Price-amount.amount ins",
11
+ "add to cart button": "a.add_to_cart_button, button.single_add_to_cart_button",
12
+ "added to cart": ".added_to_cart",
13
+ "view cart": ".woocommerce-message a.button.wc-forward",
14
+ "single product": ".single-product div.product",
15
+ "single product images": ".woocommerce-product-gallery",
16
+ "single product summary": ".summary.entry-summary",
17
+ "quantity": "input.qty, .quantity input",
18
+ "variations form": "form.variations_form",
19
+ "variation select": ".variations select",
20
+ "stock": "p.stock",
21
+ "in stock": "p.stock.in-stock",
22
+ "out of stock": "p.stock.out-of-stock",
23
+ "data table": "table.shop_table",
24
+ "cart item": "tr.cart_item",
25
+ "cart subtotal": ".cart-subtotal",
26
+ "cart total": ".order-total",
27
+ "checkout form": "form.checkout",
28
+ "checkout shipping": "#shipping_address_1, #ship-to-different-address",
29
+ "checkout payment": "#payment",
30
+ "place order button": "#place_order",
31
+ "notice success": ".woocommerce-message",
32
+ "notice error": ".woocommerce-error, .woocommerce-NoticeGroup-checkout",
33
+ "notice info": ".woocommerce-info",
34
+ "my account": ".woocommerce-MyAccount-content",
35
+ "my account nav": ".woocommerce-MyAccount-navigation",
36
+ "pagination": ".woocommerce-pagination",
37
+ "ordering": ".woocommerce-ordering select",
38
+ "result count": ".woocommerce-result-count",
39
+ "review": ".comment_container, .woocommerce-Reviews",
40
+ "rating": ".star-rating",
41
+ "tabs": ".woocommerce-tabs",
42
+ "tab list": ".tabs.wc-tabs",
43
+ "active tab": ".tabs.wc-tabs li.active"
44
+ },
45
+ "xpath": {
46
+ "first product": "(//ul[contains(@class,'products')]/li[contains(@class,'product')])[1]",
47
+ "add to cart": "//a[contains(@class,'add_to_cart_button')] | //button[contains(@class,'single_add_to_cart_button')]",
48
+ "place order": "//button[@id='place_order']"
49
+ }
50
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "css": {
3
+ "modal": "#TB_ajaxContent, .wp-dialog, [role=\"dialog\"]",
4
+ "main nav": "#adminmenu",
5
+ "main nav item": "#adminmenu a",
6
+ "admin bar": "#wpadminbar",
7
+ "page title": "#title, h1.wp-heading-inline, .edit-post-header__title",
8
+ "save button": "#publish, #save-post, .editor-post-publish-button",
9
+ "notice success": ".notice-success, #setting-error-settings_updated",
10
+ "notice error": ".notice-error",
11
+ "notice warning": ".notice-warning",
12
+ "toolbar": "#wp-toolbar",
13
+ "content editor": "#content, .wp-editor-area",
14
+ "media uploader": "#media-upload",
15
+ "post status": "#post-status-display",
16
+ "permalink": "#sample-permalink",
17
+ "submit button": "#submit",
18
+ "update button": "#publish",
19
+ "user menu": "#wp-admin-bar-user-info",
20
+ "search input": "#search-input, .wp-filter-search",
21
+ "table list": "#the-list",
22
+ "bulk actions": "#bulk-action-selector-top",
23
+ "screen options": "#screen-options-wrap"
24
+ },
25
+ "xpath": {
26
+ "admin first menu item": "//ul[@id='adminmenu']/li[1]/a",
27
+ "page main heading": "//h1[@class='wp-heading-inline']",
28
+ "posts table first row": "//table[@class='wp-list-table']//tbody/tr[1]",
29
+ "admin notice": "//div[contains(@class,'notice')]"
30
+ }
31
+ }
@@ -0,0 +1,80 @@
1
+ {
2
+ "css": {
3
+ "modal": ".ant-modal, [role=\"dialog\"].ant-modal-content",
4
+ "modal mask": ".ant-modal-mask",
5
+ "modal wrap": ".ant-modal-wrap",
6
+ "modal content": ".ant-modal-content",
7
+ "modal header": ".ant-modal-header",
8
+ "modal title": ".ant-modal-title",
9
+ "modal body": ".ant-modal-body",
10
+ "modal footer": ".ant-modal-footer",
11
+ "modal close": ".ant-modal-close",
12
+ "sidebar": ".ant-drawer",
13
+ "drawer content": ".ant-drawer-content",
14
+ "primary button": ".ant-btn-primary",
15
+ "secondary button": ".ant-btn-default, .ant-btn:not(.ant-btn-primary):not(.ant-btn-link):not(.ant-btn-text)",
16
+ "danger button": ".ant-btn-dangerous, .ant-btn-primary.ant-btn-dangerous",
17
+ "link button": ".ant-btn-link",
18
+ "text button": ".ant-btn-text",
19
+ "ghost button": ".ant-btn-background-ghost",
20
+ "icon button": ".ant-btn-icon-only",
21
+ "notice success": ".ant-alert-success, .ant-message-success, .ant-notification-notice-success",
22
+ "notice error": ".ant-alert-error, .ant-message-error, .ant-notification-notice-error",
23
+ "notice warning": ".ant-alert-warning",
24
+ "notice info": ".ant-alert-info, .ant-notification",
25
+ "message": ".ant-message",
26
+ "form": ".ant-form",
27
+ "form item": ".ant-form-item",
28
+ "form label": ".ant-form-item-label",
29
+ "form input": ".ant-form-item-control, .ant-input",
30
+ "form input error": ".ant-input-status-error",
31
+ "form error message": ".ant-form-item-explain-error",
32
+ "select": ".ant-select",
33
+ "select dropdown": ".ant-select-dropdown",
34
+ "select option": ".ant-select-item-option",
35
+ "select selected": ".ant-select-item-option-selected",
36
+ "checkbox": ".ant-checkbox",
37
+ "checkbox checked": ".ant-checkbox-checked",
38
+ "radio": ".ant-radio",
39
+ "radio checked": ".ant-radio-checked",
40
+ "switch": ".ant-switch",
41
+ "switch checked": ".ant-switch-checked",
42
+ "date picker": ".ant-picker",
43
+ "data table": ".ant-table",
44
+ "table header": ".ant-table-thead",
45
+ "table body": ".ant-table-tbody",
46
+ "table row": ".ant-table-row",
47
+ "table row cell": ".ant-table-cell",
48
+ "table selection": ".ant-table-selection-column",
49
+ "tabs": ".ant-tabs",
50
+ "tab item": ".ant-tabs-tab",
51
+ "active tab": ".ant-tabs-tab-active",
52
+ "card": ".ant-card",
53
+ "card content": ".ant-card-body",
54
+ "card head": ".ant-card-head",
55
+ "data list": ".ant-list",
56
+ "list item": ".ant-list-item",
57
+ "menu": ".ant-menu",
58
+ "main nav item": ".ant-menu-item",
59
+ "active menu item": ".ant-menu-item-selected",
60
+ "submenu": ".ant-menu-submenu",
61
+ "dropdown": ".ant-dropdown",
62
+ "dropdown menu": ".ant-dropdown-menu",
63
+ "tag": ".ant-tag",
64
+ "badge": ".ant-badge",
65
+ "tooltip": ".ant-tooltip",
66
+ "popover": ".ant-popover",
67
+ "popconfirm": ".ant-popover.ant-popconfirm",
68
+ "spinner": ".ant-spin",
69
+ "skeleton": ".ant-skeleton",
70
+ "progress": ".ant-progress",
71
+ "breadcrumb": ".ant-breadcrumb",
72
+ "pagination": ".ant-pagination",
73
+ "steps": ".ant-steps"
74
+ },
75
+ "xpath": {
76
+ "primary button": "//button[contains(@class,'ant-btn-primary')]",
77
+ "first table row": "(//tr[contains(@class,'ant-table-row')])[1]",
78
+ "active menu item": "//*[contains(@class,'ant-menu-item-selected')]"
79
+ }
80
+ }
@@ -0,0 +1,86 @@
1
+ {
2
+ "css": {
3
+ "modal": ".modal.show, [role=\"dialog\"]",
4
+ "modal dialog": ".modal-dialog",
5
+ "modal content": ".modal-content",
6
+ "modal header": ".modal-header",
7
+ "modal title": ".modal-title",
8
+ "modal body": ".modal-body",
9
+ "modal footer": ".modal-footer",
10
+ "modal close": ".modal-header .btn-close, .modal-header .close",
11
+ "main nav": "nav.navbar",
12
+ "navbar brand": ".navbar-brand",
13
+ "navbar toggler": ".navbar-toggler",
14
+ "navbar collapse": ".navbar-collapse",
15
+ "main nav item": ".nav-item",
16
+ "nav link": ".nav-link",
17
+ "active nav link": ".nav-link.active",
18
+ "primary button": ".btn-primary, .btn-success",
19
+ "secondary button": ".btn-secondary, .btn-outline-primary",
20
+ "danger button": ".btn-danger",
21
+ "warning button": ".btn-warning",
22
+ "info button": ".btn-info",
23
+ "link button": ".btn-link",
24
+ "notice success": ".alert-success",
25
+ "notice error": ".alert-danger",
26
+ "notice warning": ".alert-warning",
27
+ "notice info": ".alert-info",
28
+ "alert dismissible": ".alert-dismissible",
29
+ "toast": ".toast.show",
30
+ "toast container": ".toast-container",
31
+ "form item": ".mb-3, .form-group, .form-check",
32
+ "form label": ".form-label",
33
+ "form input": ".form-control",
34
+ "form select": ".form-select",
35
+ "form check input": ".form-check-input",
36
+ "form floating": ".form-floating",
37
+ "input group": ".input-group",
38
+ "is invalid": ".is-invalid",
39
+ "invalid feedback": ".invalid-feedback",
40
+ "card": ".card",
41
+ "card content": ".card-body",
42
+ "card title": ".card-title",
43
+ "card header": ".card-header",
44
+ "card footer": ".card-footer",
45
+ "list group": ".list-group",
46
+ "list group item": ".list-group-item",
47
+ "active list item": ".list-group-item.active",
48
+ "data table": "table.table",
49
+ "table striped": "table.table-striped",
50
+ "table hover": "table.table-hover",
51
+ "table responsive": ".table-responsive",
52
+ "tabs": ".nav-tabs",
53
+ "active tab": ".nav-tabs .nav-link.active, .nav-pills .nav-link.active",
54
+ "tab content": ".tab-content",
55
+ "tab pane active": ".tab-pane.active.show",
56
+ "accordion": ".accordion",
57
+ "accordion item": ".accordion-item",
58
+ "accordion button": ".accordion-button",
59
+ "accordion collapse": ".accordion-collapse.show",
60
+ "dropdown": ".dropdown",
61
+ "dropdown toggle": ".dropdown-toggle",
62
+ "dropdown menu": ".dropdown-menu.show",
63
+ "dropdown item": ".dropdown-item",
64
+ "breadcrumb": ".breadcrumb",
65
+ "breadcrumb item": ".breadcrumb-item",
66
+ "active breadcrumb": ".breadcrumb-item.active",
67
+ "pagination": ".pagination",
68
+ "page item": ".page-item",
69
+ "active page": ".page-item.active",
70
+ "badge": ".badge",
71
+ "spinner border": ".spinner-border",
72
+ "spinner grow": ".spinner-grow",
73
+ "progress": ".progress",
74
+ "progress bar": ".progress-bar",
75
+ "tooltip": ".tooltip.show",
76
+ "popover": ".popover.show",
77
+ "offcanvas": ".offcanvas.show",
78
+ "container": ".container, .container-fluid",
79
+ "row": ".row"
80
+ },
81
+ "xpath": {
82
+ "primary button": "//button[contains(@class,'btn-primary')]",
83
+ "first card": "(//div[contains(@class,'card')])[1]",
84
+ "active nav": "//*[contains(@class,'nav-link') and contains(@class,'active')]"
85
+ }
86
+ }