@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.
- package/AGENTS.md +148 -0
- package/CLAUDE.md +544 -0
- package/README.md +22 -0
- package/bin/generate-reports.js +363 -0
- package/bin/init-varbase-e2e.js +330 -0
- package/bin/postinstall.js +26 -0
- package/cucumber.js +125 -0
- package/docs/00-quick-start.md +102 -0
- package/docs/01-getting-started.md +102 -0
- package/docs/02-bbr-smart-waits.md +77 -0
- package/docs/03-selector-registry.md +95 -0
- package/docs/04-step-reference.md +801 -0
- package/docs/05-web-first-assertions.md +91 -0
- package/docs/06-network-and-dialogs.md +83 -0
- package/docs/07-auth-state.md +75 -0
- package/docs/08-clock-mocking.md +59 -0
- package/docs/09-api-testing.md +114 -0
- package/docs/10-accessibility.md +167 -0
- package/docs/11-debugging.md +129 -0
- package/docs/12-ai-agent-guide.md +338 -0
- package/docs/13-faq.md +236 -0
- package/docs/14-recipes-cookbook.md +255 -0
- package/docs/15-tag-conventions.md +76 -0
- package/docs/16-ci-cd.md +90 -0
- package/docs/README.md +125 -0
- package/docs/advanced-screenshots/then-i-save-fullscreen-screenshot.md +36 -0
- package/docs/advanced-screenshots/then-i-save-width-x-height-screenshot.md +34 -0
- package/docs/advanced-screenshots/when-i-save-screenshot-name-filename.md +45 -0
- package/docs/advanced-screenshots.md +52 -0
- package/docs/advanced-selectors.md +18 -0
- package/docs/api-step-definitions.md +45 -0
- package/docs/global-settings.md +267 -0
- package/docs/install-varbase-e2e/ddev-varbase-e2e.md +52 -0
- package/docs/install-varbase-e2e.md +34 -0
- package/docs/overview.md +40 -0
- package/docs/step-definitions/given-i-am-anonymous-user.md +67 -0
- package/docs/step-definitions/given-i-am-homepage.md +68 -0
- package/docs/step-definitions/given-i-am-specific-page.md +72 -0
- package/docs/step-definitions/then-i-should-be.md +56 -0
- package/docs/step-definitions/then-i-should-see.md +62 -0
- package/docs/step-definitions/then-item-checkbox.md +54 -0
- package/docs/step-definitions/then-item-link-should-contain-url.md +84 -0
- package/docs/step-definitions/then-item-should-contain.md +67 -0
- package/docs/step-definitions/then-radio-button-value-should-be-selected.md +68 -0
- package/docs/step-definitions/then-response-status-code-should-be-number.md +69 -0
- package/docs/step-definitions/then-value-radio-button-selected.md +62 -0
- package/docs/step-definitions/when-i-attach-file-file-name-element.md +71 -0
- package/docs/step-definitions/when-i-check-checkbox.md +60 -0
- package/docs/step-definitions/when-i-click-link.md +51 -0
- package/docs/step-definitions/when-i-click-operation-text-row.md +71 -0
- package/docs/step-definitions/when-i-fill.md +59 -0
- package/docs/step-definitions/when-i-go-homepage.md +60 -0
- package/docs/step-definitions/when-i-go-specific-page.md +67 -0
- package/docs/step-definitions/when-i-move-backward-one-page.md +49 -0
- package/docs/step-definitions/when-i-move-forward-one-page.md +58 -0
- package/docs/step-definitions/when-i-press-button.md +58 -0
- package/docs/step-definitions/when-i-reload-page.md +51 -0
- package/docs/step-definitions/when-i-scroll.md +73 -0
- package/docs/step-definitions/when-i-select-option-select-list.md +53 -0
- package/docs/step-definitions/when-i-select-radio-button-value.md +62 -0
- package/docs/step-definitions/when-i-uncheck-checkbox.md +57 -0
- package/docs/step-definitions/when-i-wait-ajax-finish.md +64 -0
- package/docs/step-definitions/when-i-wait.md +62 -0
- package/docs/step-definitions.md +82 -0
- package/docs/steps/README.md +137 -0
- package/docs/steps/a11y.md +731 -0
- package/docs/steps/action.md +181 -0
- package/docs/steps/api.md +679 -0
- package/docs/steps/assertion.md +328 -0
- package/docs/steps/auth.md +108 -0
- package/docs/steps/clock.md +171 -0
- package/docs/steps/cookie.md +293 -0
- package/docs/steps/debug.md +52 -0
- package/docs/steps/dialog.md +226 -0
- package/docs/steps/drupal-canvas.md +414 -0
- package/docs/steps/drupal-ckeditor.md +118 -0
- package/docs/steps/drupal-core.md +688 -0
- package/docs/steps/drupal-layout-builder.md +437 -0
- package/docs/steps/drupal-media.md +107 -0
- package/docs/steps/drupal-moderation.md +81 -0
- package/docs/steps/drupal-paragraphs.md +36 -0
- package/docs/steps/element.md +455 -0
- package/docs/steps/field.md +648 -0
- package/docs/steps/file-download.md +235 -0
- package/docs/steps/form.md +344 -0
- package/docs/steps/iframe.md +248 -0
- package/docs/steps/input.md +220 -0
- package/docs/steps/javascript.md +111 -0
- package/docs/steps/keyboard.md +107 -0
- package/docs/steps/link.md +217 -0
- package/docs/steps/metatag.md +99 -0
- package/docs/steps/modal.md +232 -0
- package/docs/steps/navigation.md +275 -0
- package/docs/steps/network.md +284 -0
- package/docs/steps/path.md +203 -0
- package/docs/steps/response.md +102 -0
- package/docs/steps/responsive.md +139 -0
- package/docs/steps/rest.md +140 -0
- package/docs/steps/screenshot.md +211 -0
- package/docs/steps/scroll.md +266 -0
- package/docs/steps/selectors.md +848 -0
- package/docs/steps/storage.md +254 -0
- package/docs/steps/table.md +216 -0
- package/docs/steps/varbase.md +391 -0
- package/docs/steps/video.md +111 -0
- package/docs/steps/wait.md +553 -0
- package/docs/steps/web-first.md +289 -0
- package/docs/steps/xml.md +505 -0
- package/docs/steps/yaml.md +951 -0
- package/examples/a11y.html +31 -0
- package/examples/about-us.html +11 -0
- package/examples/account.html +32 -0
- package/examples/ajax-wait-examples.html +147 -0
- package/examples/contact-us.html +10 -0
- package/examples/cookies.html +10 -0
- package/examples/date.html +12 -0
- package/examples/dynamic-examples.html +498 -0
- package/examples/element.html +11 -0
- package/examples/example-api.json +28 -0
- package/examples/existing-page.html +11 -0
- package/examples/field.html +24 -0
- package/examples/index.html +37 -0
- package/examples/keyboard.html +11 -0
- package/examples/links.html +9 -0
- package/examples/modal.html +14 -0
- package/examples/path.html +3 -0
- package/examples/table.html +13 -0
- package/examples/test--modal-dialogs.html +252 -0
- package/examples/test--then--i-should--not--see-text-in-element.html +48 -0
- package/examples/test--then--i-should--see-text-in-element.html +48 -0
- package/examples/test--then--i-should--see-text-matching-pattern.html +31 -0
- package/examples/test--then--i-should-see-text-in-table-row.html +232 -0
- package/examples/test--then--the-checkbox-checked.html +68 -0
- package/examples/test--then--the-element-should_not-contain-cssproperty.html +47 -0
- package/examples/test--then--the-link-should-contain.html +21 -0
- package/examples/test--when--i-additionally-select.html +27 -0
- package/examples/test--when--i-attach-file-to-feild.html +50 -0
- package/examples/test--when--i-check-uncheck-checkbox.html +47 -0
- package/examples/test--when--i-click-link.html +18 -0
- package/examples/test--when--i-click-text-in-table-row.html +178 -0
- package/examples/test--when--i-fill-in.html +48 -0
- package/examples/test--when--i-press-button.html +31 -0
- package/examples/test--when--i-reload-page.html +27 -0
- package/examples/test--when--i-scroll-functionality.html +177 -0
- package/examples/test--when--i-scroll-left-right-functionality.html +149 -0
- package/examples/test--when--i-select-option-from-dropdownlist.html +35 -0
- package/examples/test--when--i-select-radio-button.html +95 -0
- package/examples/test--when-i-wait-max-of-time.html +39 -0
- package/examples/test--when-i-wait-page-until-is-loaded.html +47 -0
- package/examples/test--when-i-wait-specific-time.html +39 -0
- package/examples/test-acceptable-url-path.html +11 -0
- package/examples/video-demo.html +43 -0
- package/package.json +56 -0
- package/playwright.config.ts +39 -0
- package/tests/assets/test-document.pdf +14 -0
- package/tests/assets/vardot.png +0 -0
- package/tests/features/a11y.feature +39 -0
- package/tests/features/ajax-wait-examples.feature +24 -0
- package/tests/features/api-step-definitions-individual.feature +185 -0
- package/tests/features/complete-api-testing-examples.feature +205 -0
- package/tests/features/cookie.feature +13 -0
- package/tests/features/date.feature +11 -0
- package/tests/features/dynamic-content-examples.feature +156 -0
- package/tests/features/element.feature +16 -0
- package/tests/features/field.feature +25 -0
- package/tests/features/keyboard.feature +10 -0
- package/tests/features/link.feature +11 -0
- package/tests/features/modal-advanced-example.feature +54 -0
- package/tests/features/modal-basic-example.feature +42 -0
- package/tests/features/modal-error-handling-example.feature +37 -0
- package/tests/features/modal.feature +11 -0
- package/tests/features/path.feature +16 -0
- package/tests/features/response.feature +8 -0
- package/tests/features/responsive.feature +10 -0
- package/tests/features/table.feature +18 -0
- package/tests/features/test--given--i-am-an-anonymous-user.feature +10 -0
- package/tests/features/test--given--i-am-on-homepage.feature +16 -0
- package/tests/features/test--then--i-save-screenshot.feature +33 -0
- package/tests/features/test--then--i-see-locator.feature +320 -0
- package/tests/features/test--then--i-should--not--see-text-in-element.feature +13 -0
- package/tests/features/test--then--i-should--see-text-in-element-by-attr.feature +10 -0
- package/tests/features/test--then--i-should--see-text-in-element.feature +10 -0
- package/tests/features/test--then--i-should--see-text-matching-pattern-in-element.feature +13 -0
- package/tests/features/test--then--i-should--see-text-matching-pattern.feature +18 -0
- package/tests/features/test--then--i-should-be-on-page.feature +10 -0
- package/tests/features/test--then--i-should-be-on-the-homepage.feature +10 -0
- package/tests/features/test--then--i-should-not-see-an-element-by-attr.feature +8 -0
- package/tests/features/test--then--i-should-not-see-an-element.feature +8 -0
- package/tests/features/test--then--i-should-see-an-element-by-attr.feature +8 -0
- package/tests/features/test--then--i-should-see-an-element.feature +8 -0
- package/tests/features/test--then--i-should-see-n-elements.feature +24 -0
- package/tests/features/test--then--i-should-see-text-in-table-row.feature +96 -0
- package/tests/features/test--then--print-current-url-and-response.feature +21 -0
- package/tests/features/test--then--the-checkbox-is-checked.feature +18 -0
- package/tests/features/test--then--the-checkbox-should-be-checked.feature +16 -0
- package/tests/features/test--then--the-element-should-contain-cssproperty.feature +9 -0
- package/tests/features/test--then--the-element-should-not-contain-cssproperty.feature +10 -0
- package/tests/features/test--then--the-field-should-contain-value.feature +11 -0
- package/tests/features/test--then--the-response-should-contain.feature +11 -0
- package/tests/features/test--then--the-response-status-code-should-be.feature +31 -0
- package/tests/features/test--then--the-url-should-match.feature +7 -0
- package/tests/features/test--then-the-link-should-contain-by-attribute.feature +18 -0
- package/tests/features/test--then-the-link-should-contain.feature +7 -0
- package/tests/features/test--when--i-additionally-select.feature +30 -0
- package/tests/features/test--when--i-attach-file-to-feild.feature +9 -0
- package/tests/features/test--when--i-check-checkbox.feature +21 -0
- package/tests/features/test--when--i-click-link-by-attribute.feature +21 -0
- package/tests/features/test--when--i-click-link.feature +9 -0
- package/tests/features/test--when--i-click-text-in-table-row.feature +37 -0
- package/tests/features/test--when--i-fill-in-by-attr.feature +31 -0
- package/tests/features/test--when--i-fill-in-table-by-attr.feature +19 -0
- package/tests/features/test--when--i-fill-in.feature +32 -0
- package/tests/features/test--when--i-follow.feature +22 -0
- package/tests/features/test--when--i-go-to-homepage.feature +9 -0
- package/tests/features/test--when--i-move-forward-backward-one-page.feature +14 -0
- package/tests/features/test--when--i-press-button-by-attribute.feature +18 -0
- package/tests/features/test--when--i-press-button.feature +13 -0
- package/tests/features/test--when--i-reload-page.feature +11 -0
- package/tests/features/test--when--i-scroll-left-right.feature +48 -0
- package/tests/features/test--when--i-scroll.feature +48 -0
- package/tests/features/test--when--i-select-option-from-dropdownlist.feature +21 -0
- package/tests/features/test--when--i-select-radio-button.feature +37 -0
- package/tests/features/test--when--i-wait-page-is-loaded.feature +8 -0
- package/tests/features/test--when--i-wait-time.feature +21 -0
- package/tests/features/video.feature +18 -0
- package/tests/features/wait.feature +7 -0
- package/tests/features/yaml.feature +102 -0
- package/tests/selectors/_canonical-keys.json +113 -0
- package/tests/selectors/back-end-selectors.json +19 -0
- package/tests/selectors/cms-contentful-admin.json +35 -0
- package/tests/selectors/cms-craft-admin.json +39 -0
- package/tests/selectors/cms-drupal-cms-gin.json +56 -0
- package/tests/selectors/cms-drupal-core-claro.json +50 -0
- package/tests/selectors/cms-generic-admin.json +34 -0
- package/tests/selectors/cms-ghost-admin.json +34 -0
- package/tests/selectors/cms-joomla-admin.json +41 -0
- package/tests/selectors/cms-magento2-admin.json +32 -0
- package/tests/selectors/cms-prestashop-admin.json +38 -0
- package/tests/selectors/cms-shopify-admin.json +25 -0
- package/tests/selectors/cms-strapi-admin.json +42 -0
- package/tests/selectors/cms-typo3-admin.json +41 -0
- package/tests/selectors/cms-woocommerce-front.json +50 -0
- package/tests/selectors/cms-wordpress-admin.json +31 -0
- package/tests/selectors/framework-ant-design.json +80 -0
- package/tests/selectors/framework-bootstrap.json +86 -0
- package/tests/selectors/framework-bulma.json +74 -0
- package/tests/selectors/framework-chakra.json +58 -0
- package/tests/selectors/framework-foundation.json +51 -0
- package/tests/selectors/framework-material-ui.json +72 -0
- package/tests/selectors/framework-shadcn.json +51 -0
- package/tests/selectors/framework-tailwind.json +40 -0
- package/tests/selectors/framework-vuetify.json +61 -0
- package/tests/selectors/front-end-selectors.json +16 -0
- package/tests/selectors/homepage-selectors.json +13 -0
- package/tests/step-definitions/a11y.steps.js +800 -0
- package/tests/step-definitions/action.steps.js +167 -0
- package/tests/step-definitions/api.steps.js +732 -0
- package/tests/step-definitions/assertion.steps.js +352 -0
- package/tests/step-definitions/auth.steps.js +126 -0
- package/tests/step-definitions/clock.steps.js +128 -0
- package/tests/step-definitions/cookie.steps.js +216 -0
- package/tests/step-definitions/debug.steps.js +39 -0
- package/tests/step-definitions/dialog.steps.js +193 -0
- package/tests/step-definitions/drupal-canvas.steps.js +764 -0
- package/tests/step-definitions/drupal-ckeditor.steps.js +108 -0
- package/tests/step-definitions/drupal-core.steps.js +665 -0
- package/tests/step-definitions/drupal-helpers.js +371 -0
- package/tests/step-definitions/drupal-layout-builder.steps.js +466 -0
- package/tests/step-definitions/drupal-media.steps.js +99 -0
- package/tests/step-definitions/drupal-moderation.steps.js +71 -0
- package/tests/step-definitions/drupal-paragraphs.steps.js +50 -0
- package/tests/step-definitions/element.steps.js +356 -0
- package/tests/step-definitions/field.steps.js +653 -0
- package/tests/step-definitions/file-download.steps.js +211 -0
- package/tests/step-definitions/form.steps.js +333 -0
- package/tests/step-definitions/iframe.steps.js +228 -0
- package/tests/step-definitions/input.steps.js +202 -0
- package/tests/step-definitions/javascript.steps.js +232 -0
- package/tests/step-definitions/keyboard.steps.js +112 -0
- package/tests/step-definitions/link.steps.js +142 -0
- package/tests/step-definitions/metatag.steps.js +91 -0
- package/tests/step-definitions/modal.steps.js +244 -0
- package/tests/step-definitions/navigation.steps.js +218 -0
- package/tests/step-definitions/network.steps.js +280 -0
- package/tests/step-definitions/path.steps.js +141 -0
- package/tests/step-definitions/response.steps.js +98 -0
- package/tests/step-definitions/responsive.steps.js +125 -0
- package/tests/step-definitions/rest.steps.js +111 -0
- package/tests/step-definitions/screenshot.steps.js +423 -0
- package/tests/step-definitions/scroll.steps.js +189 -0
- package/tests/step-definitions/selectors.steps.js +1003 -0
- package/tests/step-definitions/storage.steps.js +194 -0
- package/tests/step-definitions/table.steps.js +181 -0
- package/tests/step-definitions/varbase-e2e.js +897 -0
- package/tests/step-definitions/varbase.steps.js +458 -0
- package/tests/step-definitions/video.steps.js +178 -0
- package/tests/step-definitions/wait.steps.js +400 -0
- package/tests/step-definitions/web-first.steps.js +298 -0
- package/tests/step-definitions/xml.steps.js +411 -0
- package/tests/step-definitions/yaml.steps.js +913 -0
- 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,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
|
+
}
|