@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,203 @@
|
|
|
1
|
+
# URL paths steps
|
|
2
|
+
|
|
3
|
+
8 steps, defined in `tests/step-definitions/path.steps.js`.
|
|
4
|
+
|
|
5
|
+
Cucumber-js loads every `*.steps.js` in that directory automatically — you never `require()` a step file from a feature.
|
|
6
|
+
|
|
7
|
+
| # | Step |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| 1 | `Then the path should be "/dashboard"` |
|
|
10
|
+
| 2 | `Then the path should not be "/login"` |
|
|
11
|
+
| 3 | `Then current url should have the "lang" parameter` |
|
|
12
|
+
| 4 | `Then current url should have the "lang" parameter with the "en" value` |
|
|
13
|
+
| 5 | `Then current url should not have the "missing" parameter` |
|
|
14
|
+
| 6 | `Then current url should not have the "lang" parameter with the "fr" value` |
|
|
15
|
+
| 7 | `Given the basic authentication with the username "admin" and the password "secret"` |
|
|
16
|
+
| 8 | `When I go back` |
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 1. Then the path should be "/dashboard"
|
|
21
|
+
|
|
22
|
+
Assert the current URL pathname equals an expected string (no query/fragment).
|
|
23
|
+
|
|
24
|
+
**Keyword**: `Then`
|
|
25
|
+
|
|
26
|
+
**Pattern**
|
|
27
|
+
|
|
28
|
+
```js
|
|
29
|
+
'the path should be {string}'
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**Examples**
|
|
33
|
+
|
|
34
|
+
```gherkin
|
|
35
|
+
Then the path should be "/dashboard"
|
|
36
|
+
Then the path should be "/about"
|
|
37
|
+
And the path should be "/checkout/step-2"
|
|
38
|
+
Then the path should be "/admin/users"
|
|
39
|
+
Then the path should be "/"
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## 2. Then the path should not be "/login"
|
|
43
|
+
|
|
44
|
+
Assert the current URL pathname is NOT equal to an expected string.
|
|
45
|
+
|
|
46
|
+
**Keyword**: `Then`
|
|
47
|
+
|
|
48
|
+
**Pattern**
|
|
49
|
+
|
|
50
|
+
```js
|
|
51
|
+
'the path should not be {string}'
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**Examples**
|
|
55
|
+
|
|
56
|
+
```gherkin
|
|
57
|
+
Then the path should not be "/login"
|
|
58
|
+
Then the path should not be "/error"
|
|
59
|
+
And the path should not be "/admin"
|
|
60
|
+
Then the path should not be "/maintenance"
|
|
61
|
+
Then the path should not be "/forbidden"
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## 3. Then current url should have the "lang" parameter
|
|
65
|
+
|
|
66
|
+
Assert the current URL has the named query parameter (any value).
|
|
67
|
+
|
|
68
|
+
**Keyword**: `Then`
|
|
69
|
+
|
|
70
|
+
**Pattern**
|
|
71
|
+
|
|
72
|
+
```js
|
|
73
|
+
'current url should have the {string} parameter'
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Examples**
|
|
77
|
+
|
|
78
|
+
```gherkin
|
|
79
|
+
Then current url should have the "lang" parameter
|
|
80
|
+
Then current url should have the "page" parameter
|
|
81
|
+
And current url should have the "q" parameter
|
|
82
|
+
Then current url should have the "ref" parameter
|
|
83
|
+
Then current url should have the "sort" parameter
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## 4. Then current url should have the "lang" parameter with the "en" value
|
|
87
|
+
|
|
88
|
+
Assert the current URL has the named query parameter with the exact value.
|
|
89
|
+
|
|
90
|
+
**Keyword**: `Then`
|
|
91
|
+
|
|
92
|
+
**Pattern**
|
|
93
|
+
|
|
94
|
+
```js
|
|
95
|
+
'current url should have the {string} parameter with the {string} value'
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**Examples**
|
|
99
|
+
|
|
100
|
+
```gherkin
|
|
101
|
+
Then current url should have the "lang" parameter with the "en" value
|
|
102
|
+
Then current url should have the "page" parameter with the "2" value
|
|
103
|
+
And current url should have the "sort" parameter with the "price" value
|
|
104
|
+
Then current url should have the "ref" parameter with the "newsletter" value
|
|
105
|
+
Then current url should have the "q" parameter with the "laptops" value
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## 5. Then current url should not have the "missing" parameter
|
|
109
|
+
|
|
110
|
+
Assert the current URL does NOT carry the named query parameter.
|
|
111
|
+
|
|
112
|
+
**Keyword**: `Then`
|
|
113
|
+
|
|
114
|
+
**Pattern**
|
|
115
|
+
|
|
116
|
+
```js
|
|
117
|
+
'current url should not have the {string} parameter'
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**Examples**
|
|
121
|
+
|
|
122
|
+
```gherkin
|
|
123
|
+
Then current url should not have the "missing" parameter
|
|
124
|
+
Then current url should not have the "debug" parameter
|
|
125
|
+
And current url should not have the "preview" parameter
|
|
126
|
+
Then current url should not have the "force" parameter
|
|
127
|
+
Then current url should not have the "test" parameter
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## 6. Then current url should not have the "lang" parameter with the "fr" value
|
|
131
|
+
|
|
132
|
+
Assert the current URL does NOT carry a parameter+value pair.
|
|
133
|
+
|
|
134
|
+
**Keyword**: `Then`
|
|
135
|
+
|
|
136
|
+
**Pattern**
|
|
137
|
+
|
|
138
|
+
```js
|
|
139
|
+
'current url should not have the {string} parameter with the {string} value'
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
**Examples**
|
|
143
|
+
|
|
144
|
+
```gherkin
|
|
145
|
+
Then current url should not have the "lang" parameter with the "fr" value
|
|
146
|
+
Then current url should not have the "page" parameter with the "100" value
|
|
147
|
+
And current url should not have the "sort" parameter with the "old" value
|
|
148
|
+
Then current url should not have the "preview" parameter with the "1" value
|
|
149
|
+
Then current url should not have the "debug" parameter with the "true" value
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## 7. Given the basic authentication with the username "admin" and the password "secret"
|
|
153
|
+
|
|
154
|
+
Re-open the browser context with HTTP basic-auth credentials.
|
|
155
|
+
|
|
156
|
+
**Keyword**: `Given`
|
|
157
|
+
|
|
158
|
+
**Pattern**
|
|
159
|
+
|
|
160
|
+
```js
|
|
161
|
+
'the basic authentication with the username {string} and the password {string}'
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
**Examples**
|
|
165
|
+
|
|
166
|
+
```gherkin
|
|
167
|
+
Given the basic authentication with the username "admin" and the password "secret"
|
|
168
|
+
Given the basic authentication with the username "guest" and the password "guest"
|
|
169
|
+
And the basic authentication with the username "alice" and the password "s3cret"
|
|
170
|
+
Given the basic authentication with the username "ci" and the password "ci-token-123"
|
|
171
|
+
Given the basic authentication with the username "tester" and the password ""
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## 8. When I go back
|
|
175
|
+
|
|
176
|
+
Navigate one step back in the browser history.
|
|
177
|
+
|
|
178
|
+
Equivalent to clicking the browser back button. Throws no error if there
|
|
179
|
+
is no history (returns null from `page.goBack()`).
|
|
180
|
+
|
|
181
|
+
**Keyword**: `When`
|
|
182
|
+
|
|
183
|
+
**Pattern**
|
|
184
|
+
|
|
185
|
+
```js
|
|
186
|
+
/^(I |we )*go back$/
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
**Examples**
|
|
190
|
+
|
|
191
|
+
```gherkin
|
|
192
|
+
When I go back
|
|
193
|
+
When I follow "About"
|
|
194
|
+
And I go back
|
|
195
|
+
Then I should be on the homepage
|
|
196
|
+
And I go back
|
|
197
|
+
When I am on "/cart"
|
|
198
|
+
When I am on "/checkout"
|
|
199
|
+
And I go back
|
|
200
|
+
Then I should be on "/cart"
|
|
201
|
+
When I go back
|
|
202
|
+
And I wait until the URL contains "/products"
|
|
203
|
+
```
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Response headers steps
|
|
2
|
+
|
|
3
|
+
4 steps, defined in `tests/step-definitions/response.steps.js`.
|
|
4
|
+
|
|
5
|
+
Cucumber-js loads every `*.steps.js` in that directory automatically — you never `require()` a step file from a feature.
|
|
6
|
+
|
|
7
|
+
| # | Step |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| 1 | `Then the response should contain the header "content-type"` |
|
|
10
|
+
| 2 | `Then the response should not contain the header "x-fake-header"` |
|
|
11
|
+
| 3 | `Then the response header "content-type" should contain the value "html"` |
|
|
12
|
+
| 4 | `Then the response header "content-type" should not contain the value "application/json"` |
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 1. Then the response should contain the header "content-type"
|
|
17
|
+
|
|
18
|
+
Assert the most recent navigation response carried a header (case-insensitive).
|
|
19
|
+
|
|
20
|
+
**Keyword**: `Then`
|
|
21
|
+
|
|
22
|
+
**Pattern**
|
|
23
|
+
|
|
24
|
+
```js
|
|
25
|
+
'the response should contain the header {string}'
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**Examples**
|
|
29
|
+
|
|
30
|
+
```gherkin
|
|
31
|
+
Then the response should contain the header "content-type"
|
|
32
|
+
Then the response should contain the header "cache-control"
|
|
33
|
+
And the response should contain the header "x-frame-options"
|
|
34
|
+
Then the response should contain the header "set-cookie"
|
|
35
|
+
Then the response should contain the header "etag"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## 2. Then the response should not contain the header "x-fake-header"
|
|
39
|
+
|
|
40
|
+
Assert the most recent navigation response did NOT carry a header.
|
|
41
|
+
|
|
42
|
+
**Keyword**: `Then`
|
|
43
|
+
|
|
44
|
+
**Pattern**
|
|
45
|
+
|
|
46
|
+
```js
|
|
47
|
+
'the response should not contain the header {string}'
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Examples**
|
|
51
|
+
|
|
52
|
+
```gherkin
|
|
53
|
+
Then the response should not contain the header "x-fake-header"
|
|
54
|
+
Then the response should not contain the header "x-powered-by"
|
|
55
|
+
And the response should not contain the header "server"
|
|
56
|
+
Then the response should not contain the header "x-aspnet-version"
|
|
57
|
+
Then the response should not contain the header "x-debug-token"
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## 3. Then the response header "content-type" should contain the value "html"
|
|
61
|
+
|
|
62
|
+
Assert a header's value contains a substring.
|
|
63
|
+
|
|
64
|
+
**Keyword**: `Then`
|
|
65
|
+
|
|
66
|
+
**Pattern**
|
|
67
|
+
|
|
68
|
+
```js
|
|
69
|
+
'the response header {string} should contain the value {string}'
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**Examples**
|
|
73
|
+
|
|
74
|
+
```gherkin
|
|
75
|
+
Then the response header "content-type" should contain the value "html"
|
|
76
|
+
Then the response header "cache-control" should contain the value "no-cache"
|
|
77
|
+
And the response header "content-type" should contain the value "charset=utf-8"
|
|
78
|
+
Then the response header "set-cookie" should contain the value "session="
|
|
79
|
+
Then the response header "x-frame-options" should contain the value "DENY"
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## 4. Then the response header "content-type" should not contain the value "application/json"
|
|
83
|
+
|
|
84
|
+
Assert a header's value does NOT contain a substring (or the header is absent).
|
|
85
|
+
|
|
86
|
+
**Keyword**: `Then`
|
|
87
|
+
|
|
88
|
+
**Pattern**
|
|
89
|
+
|
|
90
|
+
```js
|
|
91
|
+
'the response header {string} should not contain the value {string}'
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**Examples**
|
|
95
|
+
|
|
96
|
+
```gherkin
|
|
97
|
+
Then the response header "content-type" should not contain the value "application/json"
|
|
98
|
+
Then the response header "cache-control" should not contain the value "public"
|
|
99
|
+
And the response header "content-type" should not contain the value "xml"
|
|
100
|
+
Then the response header "set-cookie" should not contain the value "Domain=other"
|
|
101
|
+
Then the response header "x-frame-options" should not contain the value "ALLOW"
|
|
102
|
+
```
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# Responsive viewports steps
|
|
2
|
+
|
|
3
|
+
5 steps, defined in `tests/step-definitions/responsive.steps.js`.
|
|
4
|
+
|
|
5
|
+
Cucumber-js loads every `*.steps.js` in that directory automatically — you never `require()` a step file from a feature.
|
|
6
|
+
|
|
7
|
+
| # | Step |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| 1 | `Given the following responsive breakpoints:` |
|
|
10
|
+
| 2 | `When I set the viewport to the "mobile" breakpoint` |
|
|
11
|
+
| 3 | `When I set the viewport width to 1200` |
|
|
12
|
+
| 4 | `When I set the viewport height to 800` |
|
|
13
|
+
| 5 | `When I set the viewport to 1200 by 800` |
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 1. Given the following responsive breakpoints:
|
|
18
|
+
|
|
19
|
+
Replace the breakpoint registry for the current scenario from a data table.
|
|
20
|
+
|
|
21
|
+
**Keyword**: `Given`
|
|
22
|
+
|
|
23
|
+
**Pattern**
|
|
24
|
+
|
|
25
|
+
```js
|
|
26
|
+
'the following responsive breakpoints:'
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**Examples**
|
|
30
|
+
|
|
31
|
+
```gherkin
|
|
32
|
+
Given the following responsive breakpoints:
|
|
33
|
+
| mobile | 375 | 667 |
|
|
34
|
+
| tablet | 768 | 1024 |
|
|
35
|
+
| desktop | 1200 | 900 |
|
|
36
|
+
Given the following responsive breakpoints:
|
|
37
|
+
| watch | 280 | 280 |
|
|
38
|
+
| phablet | 414 | 896 |
|
|
39
|
+
And the following responsive breakpoints:
|
|
40
|
+
| xs | 320 | 480 |
|
|
41
|
+
| sm | 480 | 800 |
|
|
42
|
+
Given the following responsive breakpoints:
|
|
43
|
+
| hd | 1280 | 720 |
|
|
44
|
+
| full-hd | 1920 | 1080 |
|
|
45
|
+
Given the following responsive breakpoints:
|
|
46
|
+
| a11y | 320 | 480 |
|
|
47
|
+
| print | 794 | 1123 |
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## 2. When I set the viewport to the "mobile" breakpoint
|
|
51
|
+
|
|
52
|
+
Resize the viewport to a registered named breakpoint.
|
|
53
|
+
|
|
54
|
+
Built-in names: `xs`, `sm`, `md`, `lg`, `xl`, `xxl`, `xxxl`, `mobile`,
|
|
55
|
+
`tablet`, `desktop`. Project-defined names override built-ins.
|
|
56
|
+
|
|
57
|
+
**Keyword**: `When`
|
|
58
|
+
|
|
59
|
+
**Pattern**
|
|
60
|
+
|
|
61
|
+
```js
|
|
62
|
+
/^(I |we )*set the viewport to the "([^"]*)" breakpoint$/
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Examples**
|
|
66
|
+
|
|
67
|
+
```gherkin
|
|
68
|
+
When I set the viewport to the "mobile" breakpoint
|
|
69
|
+
When I set the viewport to the "tablet" breakpoint
|
|
70
|
+
And we set the viewport to the "desktop" breakpoint
|
|
71
|
+
When I set the viewport to the "xl" breakpoint
|
|
72
|
+
When I set the viewport to the "xxxl" breakpoint
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## 3. When I set the viewport width to 1200
|
|
76
|
+
|
|
77
|
+
Resize the viewport width while keeping the current height.
|
|
78
|
+
|
|
79
|
+
**Keyword**: `When`
|
|
80
|
+
|
|
81
|
+
**Pattern**
|
|
82
|
+
|
|
83
|
+
```js
|
|
84
|
+
/^(I |we )*set the viewport width to (\d+)$/
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**Examples**
|
|
88
|
+
|
|
89
|
+
```gherkin
|
|
90
|
+
When I set the viewport width to 1200
|
|
91
|
+
When I set the viewport width to 375
|
|
92
|
+
And we set the viewport width to 1920
|
|
93
|
+
When I set the viewport width to 768
|
|
94
|
+
When I set the viewport width to 1024
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## 4. When I set the viewport height to 800
|
|
98
|
+
|
|
99
|
+
Resize the viewport height while keeping the current width.
|
|
100
|
+
|
|
101
|
+
**Keyword**: `When`
|
|
102
|
+
|
|
103
|
+
**Pattern**
|
|
104
|
+
|
|
105
|
+
```js
|
|
106
|
+
/^(I |we )*set the viewport height to (\d+)$/
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
**Examples**
|
|
110
|
+
|
|
111
|
+
```gherkin
|
|
112
|
+
When I set the viewport height to 800
|
|
113
|
+
When I set the viewport height to 1024
|
|
114
|
+
And we set the viewport height to 1080
|
|
115
|
+
When I set the viewport height to 667
|
|
116
|
+
When I set the viewport height to 900
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## 5. When I set the viewport to 1200 by 800
|
|
120
|
+
|
|
121
|
+
Resize the viewport to an explicit width-by-height pair.
|
|
122
|
+
|
|
123
|
+
**Keyword**: `When`
|
|
124
|
+
|
|
125
|
+
**Pattern**
|
|
126
|
+
|
|
127
|
+
```js
|
|
128
|
+
/^(I |we )*set the viewport to (\d+) by (\d+)$/
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**Examples**
|
|
132
|
+
|
|
133
|
+
```gherkin
|
|
134
|
+
When I set the viewport to 1200 by 800
|
|
135
|
+
When I set the viewport to 375 by 667
|
|
136
|
+
And we set the viewport to 1920 by 1080
|
|
137
|
+
When I set the viewport to 768 by 1024
|
|
138
|
+
When I set the viewport to 1024 by 768
|
|
139
|
+
```
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# REST (short form) steps
|
|
2
|
+
|
|
3
|
+
5 steps, defined in `tests/step-definitions/rest.steps.js`.
|
|
4
|
+
|
|
5
|
+
Cucumber-js loads every `*.steps.js` in that directory automatically — you never `require()` a step file from a feature.
|
|
6
|
+
|
|
7
|
+
| # | Step |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| 1 | `Given a REST header "Authorization" with value "Bearer abc123"` |
|
|
10
|
+
| 2 | `When I send a REST "GET" request to "/api/users"` |
|
|
11
|
+
| 3 | `When I send a REST "POST" request to "/api/users" with body:` |
|
|
12
|
+
| 4 | `Then the REST response status code should be 200` |
|
|
13
|
+
| 5 | `Then the REST response should contain "Alice"` |
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 1. Given a REST header "Authorization" with value "Bearer abc123"
|
|
18
|
+
|
|
19
|
+
Add an HTTP header to subsequent REST requests.
|
|
20
|
+
|
|
21
|
+
**Keyword**: `Given`
|
|
22
|
+
|
|
23
|
+
**Pattern**
|
|
24
|
+
|
|
25
|
+
```js
|
|
26
|
+
'a REST header {string} with value {string}'
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**Examples**
|
|
30
|
+
|
|
31
|
+
```gherkin
|
|
32
|
+
Given a REST header "Authorization" with value "Bearer abc123"
|
|
33
|
+
Given a REST header "Accept" with value "application/json"
|
|
34
|
+
And a REST header "X-Request-ID" with value "req-001"
|
|
35
|
+
Given a REST header "Content-Type" with value "application/json"
|
|
36
|
+
Given a REST header "X-API-Key" with value "key-xyz"
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## 2. When I send a REST "GET" request to "/api/users"
|
|
40
|
+
|
|
41
|
+
Send an HTTP request without a body.
|
|
42
|
+
|
|
43
|
+
**Keyword**: `When`
|
|
44
|
+
|
|
45
|
+
**Pattern**
|
|
46
|
+
|
|
47
|
+
```js
|
|
48
|
+
/^(I |we )*send a REST "([^"]*)" request to "([^"]*)"$/
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Examples**
|
|
52
|
+
|
|
53
|
+
```gherkin
|
|
54
|
+
When I send a REST "GET" request to "/api/users"
|
|
55
|
+
When I send a REST "DELETE" request to "/api/orders/1"
|
|
56
|
+
And we send a REST "GET" request to "https://example.com/api/health"
|
|
57
|
+
When I send a REST "GET" request to "/api/me"
|
|
58
|
+
When I send a REST "DELETE" request to "/api/cart/items/42"
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## 3. When I send a REST "POST" request to "/api/users" with body:
|
|
62
|
+
|
|
63
|
+
Send an HTTP request with a doc-string body (raw text, JSON, or form-encoded).
|
|
64
|
+
|
|
65
|
+
**Keyword**: `When`
|
|
66
|
+
|
|
67
|
+
**Pattern**
|
|
68
|
+
|
|
69
|
+
```js
|
|
70
|
+
/^(I |we )*send a REST "([^"]*)" request to "([^"]*)" with body:$/
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**Examples**
|
|
74
|
+
|
|
75
|
+
```gherkin
|
|
76
|
+
When I send a REST "POST" request to "/api/users" with body:
|
|
77
|
+
"""
|
|
78
|
+
{"name": "Alice"}
|
|
79
|
+
"""
|
|
80
|
+
When I send a REST "PUT" request to "/api/users/1" with body:
|
|
81
|
+
"""
|
|
82
|
+
{"role": "admin"}
|
|
83
|
+
"""
|
|
84
|
+
And we send a REST "PATCH" request to "/api/orders/1" with body:
|
|
85
|
+
"""
|
|
86
|
+
{"status": "shipped"}
|
|
87
|
+
"""
|
|
88
|
+
When I send a REST "POST" request to "/api/login" with body:
|
|
89
|
+
"""
|
|
90
|
+
username=alice&password=s3cret
|
|
91
|
+
"""
|
|
92
|
+
When I send a REST "POST" request to "/webhooks/event" with body:
|
|
93
|
+
"""
|
|
94
|
+
{"event": "ping"}
|
|
95
|
+
"""
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## 4. Then the REST response status code should be 200
|
|
99
|
+
|
|
100
|
+
Assert the most recent REST response carried an expected status code.
|
|
101
|
+
|
|
102
|
+
**Keyword**: `Then`
|
|
103
|
+
|
|
104
|
+
**Pattern**
|
|
105
|
+
|
|
106
|
+
```js
|
|
107
|
+
'the REST response status code should be {int}'
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**Examples**
|
|
111
|
+
|
|
112
|
+
```gherkin
|
|
113
|
+
Then the REST response status code should be 200
|
|
114
|
+
Then the REST response status code should be 201
|
|
115
|
+
And the REST response status code should be 401
|
|
116
|
+
Then the REST response status code should be 404
|
|
117
|
+
Then the REST response status code should be 500
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## 5. Then the REST response should contain "Alice"
|
|
121
|
+
|
|
122
|
+
Assert the most recent REST response body contains a substring.
|
|
123
|
+
|
|
124
|
+
**Keyword**: `Then`
|
|
125
|
+
|
|
126
|
+
**Pattern**
|
|
127
|
+
|
|
128
|
+
```js
|
|
129
|
+
'the REST response should contain {string}'
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
**Examples**
|
|
133
|
+
|
|
134
|
+
```gherkin
|
|
135
|
+
Then the REST response should contain "Alice"
|
|
136
|
+
Then the REST response should contain "id"
|
|
137
|
+
And the REST response should contain "shipped"
|
|
138
|
+
Then the REST response should contain "ok"
|
|
139
|
+
Then the REST response should contain "Welcome"
|
|
140
|
+
```
|