@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,505 @@
|
|
|
1
|
+
# XML responses steps
|
|
2
|
+
|
|
3
|
+
20 steps, defined in `tests/step-definitions/xml.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 response content from the file "feed.xml"` |
|
|
10
|
+
| 2 | `Given the response content is the following:` |
|
|
11
|
+
| 3 | `Then the response should be in XML format` |
|
|
12
|
+
| 4 | `Then the response should not be in XML format` |
|
|
13
|
+
| 5 | `Then the XML element "/root/item" should exist` |
|
|
14
|
+
| 6 | `Then the XML element "/root/missing" should not exist` |
|
|
15
|
+
| 7 | `Then the XML element "/root/item" should be equal to "Hello"` |
|
|
16
|
+
| 8 | `Then the XML element "/root/item" should not be equal to "Bye"` |
|
|
17
|
+
| 9 | `Then the XML element "/root/item" should contain "Hello"` |
|
|
18
|
+
| 10 | `Then the XML element "/root/item" should not contain "Error"` |
|
|
19
|
+
| 11 | `Then the XML attribute "id" on element "/root/item" should exist` |
|
|
20
|
+
| 12 | `Then the XML attribute "deprecated" on element "/root/item" should not exist` |
|
|
21
|
+
| 13 | `Then the XML attribute "id" on element "/root/item" should be equal to "1"` |
|
|
22
|
+
| 14 | `Then the XML attribute "id" on element "/root/item" should not be equal to "0"` |
|
|
23
|
+
| 15 | `Then the XML attribute "id" on element "/root/item" should contain "abc"` |
|
|
24
|
+
| 16 | `Then the XML attribute "id" on element "/root/item" should not contain "old"` |
|
|
25
|
+
| 17 | `Then the XML element "//entry" should have 5 elements` |
|
|
26
|
+
| 18 | `Then the XML should use the namespace "http://www.w3.org/2005/Atom"` |
|
|
27
|
+
| 19 | `Then the XML should not use the namespace "http://example.com/legacy"` |
|
|
28
|
+
| 20 | `When I print last XML response` |
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 1. Given the response content from the file "feed.xml"
|
|
33
|
+
|
|
34
|
+
Load XML response content from a file under `tests/assets/`.
|
|
35
|
+
|
|
36
|
+
**Keyword**: `Given`
|
|
37
|
+
|
|
38
|
+
**Pattern**
|
|
39
|
+
|
|
40
|
+
```js
|
|
41
|
+
'the response content from the file {string}'
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**Examples**
|
|
45
|
+
|
|
46
|
+
```gherkin
|
|
47
|
+
Given the response content from the file "feed.xml"
|
|
48
|
+
Given the response content from the file "rss.xml"
|
|
49
|
+
And the response content from the file "sitemap.xml"
|
|
50
|
+
Given the response content from the file "soap-response.xml"
|
|
51
|
+
Given the response content from the file "/tmp/sample.xml"
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## 2. Given the response content is the following:
|
|
55
|
+
|
|
56
|
+
Set XML response content inline from a Gherkin doc string.
|
|
57
|
+
|
|
58
|
+
**Keyword**: `Given`
|
|
59
|
+
|
|
60
|
+
**Pattern**
|
|
61
|
+
|
|
62
|
+
```js
|
|
63
|
+
'the response content is the following:'
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**Examples**
|
|
67
|
+
|
|
68
|
+
```gherkin
|
|
69
|
+
Given the response content is the following:
|
|
70
|
+
"""
|
|
71
|
+
<root><item id="1">Hello</item></root>
|
|
72
|
+
"""
|
|
73
|
+
Given the response content is the following:
|
|
74
|
+
"""
|
|
75
|
+
<feed><entry><title>Sample feed</title></entry></feed>
|
|
76
|
+
"""
|
|
77
|
+
And the response content is the following:
|
|
78
|
+
"""
|
|
79
|
+
<orders><order id="1"><status>shipped</status></order></orders>
|
|
80
|
+
"""
|
|
81
|
+
Given the response content is the following:
|
|
82
|
+
"""
|
|
83
|
+
<products><product><name>Laptop</name></product></products>
|
|
84
|
+
"""
|
|
85
|
+
Given the response content is the following:
|
|
86
|
+
"""
|
|
87
|
+
<error code="404">Not found</error>
|
|
88
|
+
"""
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## 3. Then the response should be in XML format
|
|
92
|
+
|
|
93
|
+
Assert the loaded response parses as XML.
|
|
94
|
+
|
|
95
|
+
**Keyword**: `Then`
|
|
96
|
+
|
|
97
|
+
**Pattern**
|
|
98
|
+
|
|
99
|
+
```js
|
|
100
|
+
'the response should be in XML format'
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Examples**
|
|
104
|
+
|
|
105
|
+
```gherkin
|
|
106
|
+
Then the response should be in XML format
|
|
107
|
+
Given the response content from the file "rss.xml"
|
|
108
|
+
Then the response should be in XML format
|
|
109
|
+
And the response should be in XML format
|
|
110
|
+
Given the response content is the following:
|
|
111
|
+
"""
|
|
112
|
+
<root/>
|
|
113
|
+
"""
|
|
114
|
+
Then the response should be in XML format
|
|
115
|
+
Then the response should be in XML format
|
|
116
|
+
And the XML element "/root" should exist
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## 4. Then the response should not be in XML format
|
|
120
|
+
|
|
121
|
+
Assert the loaded response is NOT XML.
|
|
122
|
+
|
|
123
|
+
**Keyword**: `Then`
|
|
124
|
+
|
|
125
|
+
**Pattern**
|
|
126
|
+
|
|
127
|
+
```js
|
|
128
|
+
'the response should not be in XML format'
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**Examples**
|
|
132
|
+
|
|
133
|
+
```gherkin
|
|
134
|
+
Then the response should not be in XML format
|
|
135
|
+
Given the response content is the following:
|
|
136
|
+
"""
|
|
137
|
+
{"hello": "world"}
|
|
138
|
+
"""
|
|
139
|
+
Then the response should not be in XML format
|
|
140
|
+
And the response should not be in XML format
|
|
141
|
+
Given the response content is the following:
|
|
142
|
+
"""
|
|
143
|
+
plain text
|
|
144
|
+
"""
|
|
145
|
+
Then the response should not be in XML format
|
|
146
|
+
Then the response should not be in XML format
|
|
147
|
+
And I print last XML response
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## 5. Then the XML element "/root/item" should exist
|
|
151
|
+
|
|
152
|
+
Assert at least one XML element matches an XPath.
|
|
153
|
+
|
|
154
|
+
**Keyword**: `Then`
|
|
155
|
+
|
|
156
|
+
**Pattern**
|
|
157
|
+
|
|
158
|
+
```js
|
|
159
|
+
'the XML element {string} should exist'
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**Examples**
|
|
163
|
+
|
|
164
|
+
```gherkin
|
|
165
|
+
Then the XML element "/root/item" should exist
|
|
166
|
+
Then the XML element "//book/title" should exist
|
|
167
|
+
And the XML element "/order/customer" should exist
|
|
168
|
+
Then the XML element "//status" should exist
|
|
169
|
+
Then the XML element "/feed/entry[2]" should exist
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## 6. Then the XML element "/root/missing" should not exist
|
|
173
|
+
|
|
174
|
+
Assert NO XML element matches an XPath.
|
|
175
|
+
|
|
176
|
+
**Keyword**: `Then`
|
|
177
|
+
|
|
178
|
+
**Pattern**
|
|
179
|
+
|
|
180
|
+
```js
|
|
181
|
+
'the XML element {string} should not exist'
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**Examples**
|
|
185
|
+
|
|
186
|
+
```gherkin
|
|
187
|
+
Then the XML element "/root/missing" should not exist
|
|
188
|
+
Then the XML element "//error" should not exist
|
|
189
|
+
And the XML element "/feed/legacy" should not exist
|
|
190
|
+
Then the XML element "//deprecated" should not exist
|
|
191
|
+
Then the XML element "/order/refund" should not exist
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## 7. Then the XML element "/root/item" should be equal to "Hello"
|
|
195
|
+
|
|
196
|
+
Assert an XML element's text content equals an expected value (trimmed).
|
|
197
|
+
|
|
198
|
+
**Keyword**: `Then`
|
|
199
|
+
|
|
200
|
+
**Pattern**
|
|
201
|
+
|
|
202
|
+
```js
|
|
203
|
+
'the XML element {string} should be equal to {string}'
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
**Examples**
|
|
207
|
+
|
|
208
|
+
```gherkin
|
|
209
|
+
Then the XML element "/root/item" should be equal to "Hello"
|
|
210
|
+
Then the XML element "//status" should be equal to "shipped"
|
|
211
|
+
And the XML element "/order/customer/name" should be equal to "Alice"
|
|
212
|
+
Then the XML element "/book/title" should be equal to "Sample title"
|
|
213
|
+
Then the XML element "//count" should be equal to "5"
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
## 8. Then the XML element "/root/item" should not be equal to "Bye"
|
|
217
|
+
|
|
218
|
+
Assert an XML element's text content is NOT equal to an expected value.
|
|
219
|
+
|
|
220
|
+
**Keyword**: `Then`
|
|
221
|
+
|
|
222
|
+
**Pattern**
|
|
223
|
+
|
|
224
|
+
```js
|
|
225
|
+
'the XML element {string} should not be equal to {string}'
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
**Examples**
|
|
229
|
+
|
|
230
|
+
```gherkin
|
|
231
|
+
Then the XML element "/root/item" should not be equal to "Bye"
|
|
232
|
+
Then the XML element "//status" should not be equal to "cancelled"
|
|
233
|
+
And the XML element "/order/customer/name" should not be equal to "Anonymous"
|
|
234
|
+
Then the XML element "/book/title" should not be equal to "Untitled"
|
|
235
|
+
Then the XML element "//count" should not be equal to "0"
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
## 9. Then the XML element "/root/item" should contain "Hello"
|
|
239
|
+
|
|
240
|
+
Assert an XML element's text content contains a substring.
|
|
241
|
+
|
|
242
|
+
**Keyword**: `Then`
|
|
243
|
+
|
|
244
|
+
**Pattern**
|
|
245
|
+
|
|
246
|
+
```js
|
|
247
|
+
'the XML element {string} should contain {string}'
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
**Examples**
|
|
251
|
+
|
|
252
|
+
```gherkin
|
|
253
|
+
Then the XML element "/root/item" should contain "Hello"
|
|
254
|
+
Then the XML element "//status" should contain "ship"
|
|
255
|
+
And the XML element "/order/customer/name" should contain "Alice"
|
|
256
|
+
Then the XML element "/book/title" should contain "Varbase E2E"
|
|
257
|
+
Then the XML element "/feed/entry/summary" should contain "release"
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
## 10. Then the XML element "/root/item" should not contain "Error"
|
|
261
|
+
|
|
262
|
+
Assert an XML element's text content does NOT contain a substring.
|
|
263
|
+
|
|
264
|
+
**Keyword**: `Then`
|
|
265
|
+
|
|
266
|
+
**Pattern**
|
|
267
|
+
|
|
268
|
+
```js
|
|
269
|
+
'the XML element {string} should not contain {string}'
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
**Examples**
|
|
273
|
+
|
|
274
|
+
```gherkin
|
|
275
|
+
Then the XML element "/root/item" should not contain "Error"
|
|
276
|
+
Then the XML element "//status" should not contain "fail"
|
|
277
|
+
And the XML element "/order/customer/name" should not contain "Anonymous"
|
|
278
|
+
Then the XML element "/book/title" should not contain "Untitled"
|
|
279
|
+
Then the XML element "/feed/entry/summary" should not contain "TODO"
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
## 11. Then the XML attribute "id" on element "/root/item" should exist
|
|
283
|
+
|
|
284
|
+
Assert an XML element has the named attribute.
|
|
285
|
+
|
|
286
|
+
**Keyword**: `Then`
|
|
287
|
+
|
|
288
|
+
**Pattern**
|
|
289
|
+
|
|
290
|
+
```js
|
|
291
|
+
'the XML attribute {string} on element {string} should exist'
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
**Examples**
|
|
295
|
+
|
|
296
|
+
```gherkin
|
|
297
|
+
Then the XML attribute "id" on element "/root/item" should exist
|
|
298
|
+
Then the XML attribute "lang" on element "/feed" should exist
|
|
299
|
+
And the XML attribute "type" on element "//entry" should exist
|
|
300
|
+
Then the XML attribute "version" on element "/rss" should exist
|
|
301
|
+
Then the XML attribute "code" on element "/error" should exist
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
## 12. Then the XML attribute "deprecated" on element "/root/item" should not exist
|
|
305
|
+
|
|
306
|
+
Assert an XML element does NOT have the named attribute.
|
|
307
|
+
|
|
308
|
+
**Keyword**: `Then`
|
|
309
|
+
|
|
310
|
+
**Pattern**
|
|
311
|
+
|
|
312
|
+
```js
|
|
313
|
+
'the XML attribute {string} on element {string} should not exist'
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
**Examples**
|
|
317
|
+
|
|
318
|
+
```gherkin
|
|
319
|
+
Then the XML attribute "deprecated" on element "/root/item" should not exist
|
|
320
|
+
Then the XML attribute "internal" on element "/feed" should not exist
|
|
321
|
+
And the XML attribute "secret" on element "//entry" should not exist
|
|
322
|
+
Then the XML attribute "private" on element "/rss" should not exist
|
|
323
|
+
Then the XML attribute "debug" on element "/error" should not exist
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
## 13. Then the XML attribute "id" on element "/root/item" should be equal to "1"
|
|
327
|
+
|
|
328
|
+
Assert an XML attribute equals an expected value.
|
|
329
|
+
|
|
330
|
+
**Keyword**: `Then`
|
|
331
|
+
|
|
332
|
+
**Pattern**
|
|
333
|
+
|
|
334
|
+
```js
|
|
335
|
+
'the XML attribute {string} on element {string} should be equal to {string}'
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
**Examples**
|
|
339
|
+
|
|
340
|
+
```gherkin
|
|
341
|
+
Then the XML attribute "id" on element "/root/item" should be equal to "1"
|
|
342
|
+
Then the XML attribute "lang" on element "/feed" should be equal to "en"
|
|
343
|
+
And the XML attribute "type" on element "//entry" should be equal to "html"
|
|
344
|
+
Then the XML attribute "version" on element "/rss" should be equal to "2.0"
|
|
345
|
+
Then the XML attribute "code" on element "/error" should be equal to "404"
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
## 14. Then the XML attribute "id" on element "/root/item" should not be equal to "0"
|
|
349
|
+
|
|
350
|
+
Assert an XML attribute is NOT equal to an expected value.
|
|
351
|
+
|
|
352
|
+
**Keyword**: `Then`
|
|
353
|
+
|
|
354
|
+
**Pattern**
|
|
355
|
+
|
|
356
|
+
```js
|
|
357
|
+
'the XML attribute {string} on element {string} should not be equal to {string}'
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
**Examples**
|
|
361
|
+
|
|
362
|
+
```gherkin
|
|
363
|
+
Then the XML attribute "id" on element "/root/item" should not be equal to "0"
|
|
364
|
+
Then the XML attribute "lang" on element "/feed" should not be equal to "xx"
|
|
365
|
+
And the XML attribute "type" on element "//entry" should not be equal to "binary"
|
|
366
|
+
Then the XML attribute "version" on element "/rss" should not be equal to "0.9"
|
|
367
|
+
Then the XML attribute "code" on element "/error" should not be equal to "200"
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
## 15. Then the XML attribute "id" on element "/root/item" should contain "abc"
|
|
371
|
+
|
|
372
|
+
Assert an XML attribute contains a substring.
|
|
373
|
+
|
|
374
|
+
**Keyword**: `Then`
|
|
375
|
+
|
|
376
|
+
**Pattern**
|
|
377
|
+
|
|
378
|
+
```js
|
|
379
|
+
'the XML attribute {string} on element {string} should contain {string}'
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
**Examples**
|
|
383
|
+
|
|
384
|
+
```gherkin
|
|
385
|
+
Then the XML attribute "id" on element "/root/item" should contain "abc"
|
|
386
|
+
Then the XML attribute "href" on element "//link" should contain "example.com"
|
|
387
|
+
And the XML attribute "type" on element "//entry" should contain "html"
|
|
388
|
+
Then the XML attribute "version" on element "/rss" should contain "2"
|
|
389
|
+
Then the XML attribute "code" on element "/error" should contain "4"
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
## 16. Then the XML attribute "id" on element "/root/item" should not contain "old"
|
|
393
|
+
|
|
394
|
+
Assert an XML attribute does NOT contain a substring.
|
|
395
|
+
|
|
396
|
+
**Keyword**: `Then`
|
|
397
|
+
|
|
398
|
+
**Pattern**
|
|
399
|
+
|
|
400
|
+
```js
|
|
401
|
+
'the XML attribute {string} on element {string} should not contain {string}'
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
**Examples**
|
|
405
|
+
|
|
406
|
+
```gherkin
|
|
407
|
+
Then the XML attribute "id" on element "/root/item" should not contain "old"
|
|
408
|
+
Then the XML attribute "href" on element "//link" should not contain "tracking"
|
|
409
|
+
And the XML attribute "type" on element "//entry" should not contain "binary"
|
|
410
|
+
Then the XML attribute "version" on element "/rss" should not contain "alpha"
|
|
411
|
+
Then the XML attribute "code" on element "/error" should not contain "5"
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
## 17. Then the XML element "//entry" should have 5 elements
|
|
415
|
+
|
|
416
|
+
Assert exactly N elements match an XPath.
|
|
417
|
+
|
|
418
|
+
**Keyword**: `Then`
|
|
419
|
+
|
|
420
|
+
**Pattern**
|
|
421
|
+
|
|
422
|
+
```js
|
|
423
|
+
'the XML element {string} should have {int} element(s)'
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
**Examples**
|
|
427
|
+
|
|
428
|
+
```gherkin
|
|
429
|
+
Then the XML element "//entry" should have 5 elements
|
|
430
|
+
Then the XML element "/root/item" should have 1 element
|
|
431
|
+
And the XML element "//error" should have 0 elements
|
|
432
|
+
Then the XML element "/feed/entry" should have 10 elements
|
|
433
|
+
Then the XML element "/orders/order" should have 3 elements
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
## 18. Then the XML should use the namespace "http://www.w3.org/2005/Atom"
|
|
437
|
+
|
|
438
|
+
Assert the XML root declares an `xmlns:*` namespace URI.
|
|
439
|
+
|
|
440
|
+
**Keyword**: `Then`
|
|
441
|
+
|
|
442
|
+
**Pattern**
|
|
443
|
+
|
|
444
|
+
```js
|
|
445
|
+
'the XML should use the namespace {string}'
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
**Examples**
|
|
449
|
+
|
|
450
|
+
```gherkin
|
|
451
|
+
Then the XML should use the namespace "http://www.w3.org/2005/Atom"
|
|
452
|
+
Then the XML should use the namespace "http://www.sitemaps.org/schemas/sitemap/0.9"
|
|
453
|
+
And the XML should use the namespace "http://schemas.xmlsoap.org/soap/envelope/"
|
|
454
|
+
Then the XML should use the namespace "http://www.w3.org/1999/xhtml"
|
|
455
|
+
Then the XML should use the namespace "http://www.opengis.net/gml"
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
## 19. Then the XML should not use the namespace "http://example.com/legacy"
|
|
459
|
+
|
|
460
|
+
Assert the XML root does NOT declare a namespace URI.
|
|
461
|
+
|
|
462
|
+
**Keyword**: `Then`
|
|
463
|
+
|
|
464
|
+
**Pattern**
|
|
465
|
+
|
|
466
|
+
```js
|
|
467
|
+
'the XML should not use the namespace {string}'
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
**Examples**
|
|
471
|
+
|
|
472
|
+
```gherkin
|
|
473
|
+
Then the XML should not use the namespace "http://example.com/legacy"
|
|
474
|
+
Then the XML should not use the namespace "http://example.com/internal"
|
|
475
|
+
And the XML should not use the namespace "http://example.com/v1"
|
|
476
|
+
Then the XML should not use the namespace "http://example.com/deprecated"
|
|
477
|
+
Then the XML should not use the namespace "http://example.com/private"
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
## 20. When I print last XML response
|
|
481
|
+
|
|
482
|
+
Print the most recently set raw XML response to stdout (debug aid).
|
|
483
|
+
|
|
484
|
+
**Keyword**: `When`
|
|
485
|
+
|
|
486
|
+
**Pattern**
|
|
487
|
+
|
|
488
|
+
```js
|
|
489
|
+
/^(I |we )*print last XML response$/
|
|
490
|
+
```
|
|
491
|
+
|
|
492
|
+
**Examples**
|
|
493
|
+
|
|
494
|
+
```gherkin
|
|
495
|
+
When I print last XML response
|
|
496
|
+
When I send a REST "GET" request to "/api/feed"
|
|
497
|
+
And I print last XML response
|
|
498
|
+
And I print last XML response
|
|
499
|
+
Given the response content is the following:
|
|
500
|
+
"""
|
|
501
|
+
<root/>
|
|
502
|
+
"""
|
|
503
|
+
When I print last XML response
|
|
504
|
+
When I print last XML response
|
|
505
|
+
```
|