callman-core 1.30.0 → 1.31.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/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/ui-test/commands.d.ts +54 -0
- package/dist/ui-test/commands.d.ts.map +1 -0
- package/dist/ui-test/commands.js +436 -0
- package/dist/ui-test/commands.js.map +1 -0
- package/dist/ui-test/flow-lint.d.ts +43 -0
- package/dist/ui-test/flow-lint.d.ts.map +1 -0
- package/dist/ui-test/flow-lint.js +229 -0
- package/dist/ui-test/flow-lint.js.map +1 -0
- package/dist-cjs/index.js +2 -0
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/ui-test/commands.js +441 -0
- package/dist-cjs/ui-test/commands.js.map +1 -0
- package/dist-cjs/ui-test/flow-lint.js +235 -0
- package/dist-cjs/ui-test/flow-lint.js.map +1 -0
- package/package.json +3 -1
|
@@ -0,0 +1,441 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* UI-test step catalog — the machine-readable list of every YAML step a
|
|
4
|
+
* Callman UI-test flow can contain, with its aliases, the platforms it runs
|
|
5
|
+
* on and its arguments.
|
|
6
|
+
*
|
|
7
|
+
* Sources it mirrors (keep in sync when a step is added):
|
|
8
|
+
* - the flow parsers (callman-backend `ui-test-engine/yaml-parser.ts` and
|
|
9
|
+
* callman-desktop `electron/ui-testing/yaml-parser.ts`) — web engine;
|
|
10
|
+
* - the desktop builder palette (`step-catalog.ts`) — incl. the mobile
|
|
11
|
+
* engine ("M") commands and the platform availability sets.
|
|
12
|
+
*
|
|
13
|
+
* Consumers: `lintUiTestFlow` (flow-lint.ts) and the MCP server's
|
|
14
|
+
* `callman://docs/ui-test-steps` reference. Pure data — no runtime deps.
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.UI_TEST_HEADER_KEYS = exports.UI_TEST_COMMANDS = void 0;
|
|
18
|
+
exports.findUiTestCommand = findUiTestCommand;
|
|
19
|
+
exports.renderUiTestCommandReference = renderUiTestCommandReference;
|
|
20
|
+
const ALL = ["web", "android", "ios"];
|
|
21
|
+
const WEB = ["web"];
|
|
22
|
+
const MOBILE = ["android", "ios"];
|
|
23
|
+
/** Element locator arguments shared by click / assert / input steps. */
|
|
24
|
+
const LOCATOR = [
|
|
25
|
+
{ name: "text", type: "string", description: "Visible text (or accessibility label) of the element." },
|
|
26
|
+
{ name: "id", type: "string", description: "Element id (web DOM id / Android resource-id / iOS accessibility id)." },
|
|
27
|
+
{ name: "testId", type: "string", description: "data-testid attribute (web)." },
|
|
28
|
+
{ name: "css", type: "string", description: "CSS selector (web)." },
|
|
29
|
+
{ name: "xpath", type: "string", description: "XPath selector." },
|
|
30
|
+
{ name: "name", type: "string", description: "name attribute (web forms)." },
|
|
31
|
+
{ name: "placeholder", type: "string", description: "Placeholder text of an input (web)." },
|
|
32
|
+
{ name: "index", type: "number", description: "0-based index when several elements match." },
|
|
33
|
+
];
|
|
34
|
+
/** Relative / state matchers the mobile engine understands on selectors. */
|
|
35
|
+
const MOBILE_MATCHERS = [
|
|
36
|
+
{ name: "enabled", type: "boolean", description: "Only match enabled (or disabled) elements (mobile)." },
|
|
37
|
+
{ name: "checked", type: "boolean", description: "Only match checked elements (mobile)." },
|
|
38
|
+
{ name: "focused", type: "boolean", description: "Only match focused elements (mobile)." },
|
|
39
|
+
{ name: "selected", type: "boolean", description: "Only match selected elements (mobile)." },
|
|
40
|
+
{ name: "below", type: "string", description: "Element is below the element with this text (mobile)." },
|
|
41
|
+
{ name: "above", type: "string", description: "Element is above the element with this text (mobile)." },
|
|
42
|
+
{ name: "leftOf", type: "string", description: "Element is left of the element with this text (mobile)." },
|
|
43
|
+
{ name: "rightOf", type: "string", description: "Element is right of the element with this text (mobile)." },
|
|
44
|
+
{ name: "containsChild", type: "string", description: "Element contains a child with this text (mobile)." },
|
|
45
|
+
];
|
|
46
|
+
const TIMEOUT = { name: "timeout", type: "number", description: "Timeout in milliseconds." };
|
|
47
|
+
const OPTIONAL = { name: "optional", type: "boolean", description: "Do not fail the flow when the element is missing." };
|
|
48
|
+
function cmd(spec) {
|
|
49
|
+
return { aliases: [], forms: ["mapping"], ...spec };
|
|
50
|
+
}
|
|
51
|
+
exports.UI_TEST_COMMANDS = [
|
|
52
|
+
// ── Navigation ────────────────────────────────────────────────────────────
|
|
53
|
+
cmd({ key: "navigate", category: "Navigation", platforms: WEB, forms: ["scalar"], scalarArg: "url",
|
|
54
|
+
summary: "Open a URL in the current tab.",
|
|
55
|
+
args: [{ name: "url", type: "string", required: true, description: "Absolute URL; {{dataset}} placeholders allowed." }],
|
|
56
|
+
example: '- navigate: "https://shop.example.com/cart"' }),
|
|
57
|
+
cmd({ key: "openLink", category: "Navigation", platforms: ALL, forms: ["scalar", "mapping"], scalarArg: "url",
|
|
58
|
+
summary: "Open a URL (web) or a deep link (mobile).",
|
|
59
|
+
args: [
|
|
60
|
+
{ name: "url", type: "string", required: true, description: "URL or deep link. `link` is accepted as a synonym." },
|
|
61
|
+
{ name: "clearState", type: "boolean", description: "Clear app state first (mobile)." },
|
|
62
|
+
{ name: "stopApp", type: "boolean", description: "Stop the app first (mobile)." },
|
|
63
|
+
{ name: "fullSize", type: "boolean", description: "Open the browser window full size (desktop web runs)." },
|
|
64
|
+
],
|
|
65
|
+
example: '- openLink: "https://example.com/login"' }),
|
|
66
|
+
cmd({ key: "launchApp", category: "App lifecycle", platforms: MOBILE, forms: ["bare", "mapping"],
|
|
67
|
+
summary: "Launch the app under test (uses the header `appId` unless overridden).",
|
|
68
|
+
args: [
|
|
69
|
+
{ name: "appId", type: "string", description: "Package name / bundle id override." },
|
|
70
|
+
{ name: "clearState", type: "boolean", description: "Clear app data before launching." },
|
|
71
|
+
{ name: "clearKeychain", type: "boolean", description: "Clear the iOS keychain before launching." },
|
|
72
|
+
{ name: "stopApp", type: "boolean", description: "Stop a running instance first (default true)." },
|
|
73
|
+
],
|
|
74
|
+
example: "- launchApp:\n clearState: true" }),
|
|
75
|
+
cmd({ key: "selectOption", category: "Navigation", platforms: WEB,
|
|
76
|
+
summary: "Pick an option in a <select>.",
|
|
77
|
+
args: [
|
|
78
|
+
{ name: "value", type: "string", description: "Option value to select." },
|
|
79
|
+
{ name: "text", type: "string", description: "Option label to select (use value or text)." },
|
|
80
|
+
{ name: "id", type: "string", description: "Select element id." },
|
|
81
|
+
{ name: "name", type: "string", description: "Select element name." },
|
|
82
|
+
{ name: "css", type: "string", description: "Select element CSS selector." },
|
|
83
|
+
{ name: "xpath", type: "string", description: "Select element XPath." },
|
|
84
|
+
],
|
|
85
|
+
example: '- selectOption:\n id: "country"\n text: "Azerbaijan"' }),
|
|
86
|
+
cmd({ key: "refresh", category: "Navigation", platforms: WEB, forms: ["bare"], summary: "Reload the page.", args: [], example: "- refresh" }),
|
|
87
|
+
cmd({ key: "goBack", aliases: ["back"], category: "Navigation", platforms: ALL, forms: ["bare"],
|
|
88
|
+
summary: "Browser back (web) / system back button (mobile).", args: [], example: "- goBack" }),
|
|
89
|
+
cmd({ key: "goForward", category: "Navigation", platforms: WEB, forms: ["bare"], summary: "Browser forward.", args: [], example: "- goForward" }),
|
|
90
|
+
// ── Click / Hover ─────────────────────────────────────────────────────────
|
|
91
|
+
cmd({ key: "tapOn", aliases: ["click"], category: "Click / Hover", platforms: ALL, forms: ["scalar", "mapping"], scalarArg: "text",
|
|
92
|
+
summary: "Click / tap an element.",
|
|
93
|
+
args: [...LOCATOR, ...MOBILE_MATCHERS,
|
|
94
|
+
{ name: "link", type: "string", description: "Link text (web anchors)." },
|
|
95
|
+
{ name: "times", type: "number", description: "Repeat the tap N times." },
|
|
96
|
+
OPTIONAL],
|
|
97
|
+
example: '- tapOn: "Sign in"\n- tapOn:\n id: "submit"' }),
|
|
98
|
+
cmd({ key: "doubleTapOn", aliases: ["doubleClick"], category: "Click / Hover", platforms: ALL, forms: ["scalar", "mapping"], scalarArg: "text",
|
|
99
|
+
summary: "Double-click / double-tap an element.", args: [...LOCATOR, OPTIONAL], example: '- doubleTapOn: "Row 1"' }),
|
|
100
|
+
cmd({ key: "longPressOn", aliases: ["rightClick"], category: "Click / Hover", platforms: ALL, forms: ["scalar", "mapping"], scalarArg: "text",
|
|
101
|
+
summary: "Right-click (web) / long-press (mobile) an element.", args: [...LOCATOR, OPTIONAL], example: '- longPressOn: "Message"' }),
|
|
102
|
+
cmd({ key: "hover", category: "Click / Hover", platforms: WEB, forms: ["scalar", "mapping"], scalarArg: "text",
|
|
103
|
+
summary: "Move the mouse over an element.", args: LOCATOR, example: '- hover: "Products"' }),
|
|
104
|
+
// ── Type / Keyboard ───────────────────────────────────────────────────────
|
|
105
|
+
cmd({ key: "inputText", category: "Type / Keyboard", platforms: ALL, forms: ["scalar", "mapping"], scalarArg: "text",
|
|
106
|
+
summary: "Type text. Scalar form types into the focused field; the mapping form targets a field.",
|
|
107
|
+
args: [
|
|
108
|
+
{ name: "text", type: "string", required: true, description: "Text to type (`value` is a synonym). {{dataset}} placeholders allowed." },
|
|
109
|
+
{ name: "target", type: "string", description: "Label/text of the field to type into (web)." },
|
|
110
|
+
{ name: "targetText", type: "string", description: "Visible text near the field (web)." },
|
|
111
|
+
...LOCATOR.filter((a) => a.name !== "text"),
|
|
112
|
+
],
|
|
113
|
+
example: '- tapOn: "Email"\n- inputText: "{{email}}"\n- inputText:\n id: "password"\n text: "{{password}}"' }),
|
|
114
|
+
cmd({ key: "pressKey", category: "Type / Keyboard", platforms: ALL, forms: ["scalar"], scalarArg: "key",
|
|
115
|
+
summary: "Press a key: Enter, Tab, Escape, Backspace, Delete, Space, ArrowUp/Down/Left/Right, F5 (web); Enter, Backspace, BACK, HOME (mobile).",
|
|
116
|
+
args: [{ name: "key", type: "string", required: true, description: "Key name." }], example: "- pressKey: Enter" }),
|
|
117
|
+
cmd({ key: "eraseText", aliases: ["clearText"], category: "Type / Keyboard", platforms: ALL, forms: ["bare", "scalar"], scalarArg: "chars",
|
|
118
|
+
summary: "Delete characters from the focused field.",
|
|
119
|
+
args: [{ name: "chars", type: "number", description: "How many characters (default: all / 50)." }], example: "- eraseText: 20" }),
|
|
120
|
+
cmd({ key: "copyTextFrom", category: "Type / Keyboard", platforms: ALL, forms: ["scalar", "mapping"], scalarArg: "text",
|
|
121
|
+
summary: "Copy an element's text into a variable (default `copiedText`), usable later as {{var}} / ${var}.",
|
|
122
|
+
args: [...LOCATOR, { name: "into", type: "string", description: "Variable name (default copiedText)." }],
|
|
123
|
+
example: '- copyTextFrom:\n id: "order-number"\n into: "orderNo"' }),
|
|
124
|
+
cmd({ key: "pasteText", category: "Type / Keyboard", platforms: MOBILE, forms: ["bare"], summary: "Paste the clipboard into the focused field.", args: [], example: "- pasteText" }),
|
|
125
|
+
cmd({ key: "setClipboard", category: "Type / Keyboard", platforms: MOBILE, forms: ["scalar"], scalarArg: "text",
|
|
126
|
+
summary: "Put text on the device clipboard.", args: [{ name: "text", type: "string", required: true, description: "Clipboard text." }], example: '- setClipboard: "hello"' }),
|
|
127
|
+
cmd({ key: "inputRandomText", category: "Type / Keyboard", platforms: MOBILE, forms: ["bare", "mapping"], summary: "Type random text.",
|
|
128
|
+
args: [{ name: "length", type: "number", description: "Length." }], example: "- inputRandomText" }),
|
|
129
|
+
cmd({ key: "inputRandomEmail", category: "Type / Keyboard", platforms: MOBILE, forms: ["bare"], summary: "Type a random email.", args: [], example: "- inputRandomEmail" }),
|
|
130
|
+
cmd({ key: "inputRandomNumber", category: "Type / Keyboard", platforms: MOBILE, forms: ["bare", "mapping"], summary: "Type a random number.",
|
|
131
|
+
args: [{ name: "length", type: "number", description: "Digits." }], example: "- inputRandomNumber:\n length: 6" }),
|
|
132
|
+
cmd({ key: "inputRandomPersonName", category: "Type / Keyboard", platforms: MOBILE, forms: ["bare"], summary: "Type a random person name.", args: [], example: "- inputRandomPersonName" }),
|
|
133
|
+
cmd({ key: "hideKeyboard", category: "Mobile device", platforms: MOBILE, forms: ["bare"], summary: "Hide the on-screen keyboard.", args: [], example: "- hideKeyboard" }),
|
|
134
|
+
// ── Assertions ────────────────────────────────────────────────────────────
|
|
135
|
+
cmd({ key: "assertVisible", aliases: ["checkVisible", "checkValue"], category: "Assertions", platforms: ALL, forms: ["scalar", "mapping"], scalarArg: "text",
|
|
136
|
+
summary: "Assert an element is visible (checkValue also compares its value).",
|
|
137
|
+
args: [...LOCATOR, ...MOBILE_MATCHERS, OPTIONAL,
|
|
138
|
+
{ name: "value", type: "string", description: "checkValue: expected value/text of the element." },
|
|
139
|
+
{ name: "match", type: "string", description: "checkValue: contains | exact." },
|
|
140
|
+
{ name: "containsDescendants", type: "list", description: "Element must contain these child texts." }],
|
|
141
|
+
example: '- assertVisible: "Welcome back"' }),
|
|
142
|
+
cmd({ key: "assertNotVisible", aliases: ["checkNotVisible"], category: "Assertions", platforms: ALL, forms: ["scalar", "mapping"], scalarArg: "text",
|
|
143
|
+
summary: "Assert an element is NOT visible.", args: LOCATOR, example: '- assertNotVisible: "Error"' }),
|
|
144
|
+
cmd({ key: "checkUrl", aliases: ["assertUrl"], category: "Assertions", platforms: WEB, forms: ["scalar"], scalarArg: "url",
|
|
145
|
+
summary: "Assert the page URL equals a value.", args: [{ name: "url", type: "string", required: true, description: "Expected URL." }], example: '- checkUrl: "https://example.com/home"' }),
|
|
146
|
+
cmd({ key: "checkUrlContains", aliases: ["assertUrlContains"], category: "Assertions", platforms: WEB, forms: ["scalar"], scalarArg: "text",
|
|
147
|
+
summary: "Assert the page URL contains a value.", args: [{ name: "text", type: "string", required: true, description: "Substring." }], example: '- checkUrlContains: "/dashboard"' }),
|
|
148
|
+
cmd({ key: "checkTitle", aliases: ["assertTitle"], category: "Assertions", platforms: WEB, forms: ["scalar"], scalarArg: "title",
|
|
149
|
+
summary: "Assert the page title equals a value.", args: [{ name: "title", type: "string", required: true, description: "Expected title." }], example: '- checkTitle: "Dashboard"' }),
|
|
150
|
+
cmd({ key: "checkTitleContains", aliases: ["assertTitleContains"], category: "Assertions", platforms: WEB, forms: ["scalar"], scalarArg: "text",
|
|
151
|
+
summary: "Assert the page title contains a value.", args: [{ name: "text", type: "string", required: true, description: "Substring." }], example: '- checkTitleContains: "Dash"' }),
|
|
152
|
+
cmd({ key: "checkInputValue", aliases: ["assertInputValue"], category: "Assertions", platforms: WEB, forms: ["scalar", "mapping"], scalarArg: "value",
|
|
153
|
+
summary: "Assert an input's value.", args: [{ name: "value", type: "string", required: true, description: "Expected value." }, { name: "id", type: "string", description: "Input id." }],
|
|
154
|
+
example: '- checkInputValue:\n id: "email"\n value: "a@b.com"' }),
|
|
155
|
+
cmd({ key: "checkChecked", aliases: ["assertChecked"], category: "Assertions", platforms: WEB, forms: ["scalar"], scalarArg: "text",
|
|
156
|
+
summary: "Assert a checkbox/radio is checked.", args: [{ name: "text", type: "string", required: true, description: "Label or id." }], example: '- checkChecked: "Remember me"' }),
|
|
157
|
+
cmd({ key: "checkUnchecked", aliases: ["assertUnchecked"], category: "Assertions", platforms: WEB, forms: ["scalar"], scalarArg: "text",
|
|
158
|
+
summary: "Assert a checkbox/radio is unchecked.", args: [{ name: "text", type: "string", required: true, description: "Label or id." }], example: '- checkUnchecked: "Newsletter"' }),
|
|
159
|
+
cmd({ key: "checkEnabled", aliases: ["assertEnabled"], category: "Assertions", platforms: WEB, forms: ["scalar"], scalarArg: "text",
|
|
160
|
+
summary: "Assert an element is enabled.", args: [{ name: "text", type: "string", required: true, description: "Label or id." }], example: '- checkEnabled: "Pay"' }),
|
|
161
|
+
cmd({ key: "checkDisabled", aliases: ["assertDisabled"], category: "Assertions", platforms: WEB, forms: ["scalar"], scalarArg: "text",
|
|
162
|
+
summary: "Assert an element is disabled.", args: [{ name: "text", type: "string", required: true, description: "Label or id." }], example: '- checkDisabled: "Pay"' }),
|
|
163
|
+
cmd({ key: "checkCount", aliases: ["assertCount"], category: "Assertions", platforms: WEB,
|
|
164
|
+
summary: "Assert how many elements match a text.",
|
|
165
|
+
args: [{ name: "text", type: "string", required: true, description: "Text to match." }, { name: "count", type: "number", required: true, description: "Expected count." }],
|
|
166
|
+
example: '- checkCount:\n text: "Item"\n count: 3' }),
|
|
167
|
+
cmd({ key: "assertTrue", aliases: ["verify"], category: "Assertions", platforms: WEB, forms: ["scalar"], scalarArg: "expression",
|
|
168
|
+
summary: "Assert a JavaScript expression evaluated in the page is truthy.",
|
|
169
|
+
args: [{ name: "expression", type: "string", required: true, description: "JS expression." }], example: "- verify: \"document.querySelectorAll('.row').length > 0\"" }),
|
|
170
|
+
cmd({ key: "assertApi", aliases: ["checkApi"], category: "Assertions", platforms: WEB, forms: ["scalar", "mapping"], scalarArg: "urlContains",
|
|
171
|
+
summary: "Assert the page made a network call matching a URL (and status).",
|
|
172
|
+
args: [{ name: "urlContains", type: "string", required: true, description: "URL substring (`url` is a synonym)." }, { name: "status", type: "number", description: "Expected HTTP status." }],
|
|
173
|
+
example: '- assertApi:\n urlContains: "/api/orders"\n status: 201' }),
|
|
174
|
+
cmd({ key: "assertAlertText", category: "Alert", platforms: WEB, forms: ["scalar"], scalarArg: "text",
|
|
175
|
+
summary: "Assert the text of the open browser dialog.", args: [{ name: "text", type: "string", required: true, description: "Expected text." }], example: '- assertAlertText: "Saved"' }),
|
|
176
|
+
// ── Scroll / Drag ─────────────────────────────────────────────────────────
|
|
177
|
+
cmd({ key: "scroll", category: "Scroll / Drag", platforms: ALL, forms: ["bare", "mapping"],
|
|
178
|
+
summary: "Scroll the page or an element.",
|
|
179
|
+
args: [
|
|
180
|
+
{ name: "direction", type: "string", description: "up | down | left | right (default down)." },
|
|
181
|
+
{ name: "times", type: "number", description: "How many times." },
|
|
182
|
+
{ name: "id", type: "string", description: "Scrollable element id." },
|
|
183
|
+
{ name: "testId", type: "string", description: "Scrollable element testId." },
|
|
184
|
+
{ name: "css", type: "string", description: "Scrollable element CSS." },
|
|
185
|
+
{ name: "xpath", type: "string", description: "Scrollable element XPath." },
|
|
186
|
+
{ name: "point", type: "string", description: "Point as \"x%,y%\"." },
|
|
187
|
+
],
|
|
188
|
+
example: "- scroll:\n direction: down\n times: 3" }),
|
|
189
|
+
cmd({ key: "swipe", category: "Scroll / Drag", platforms: ALL,
|
|
190
|
+
summary: "Swipe gesture.",
|
|
191
|
+
args: [
|
|
192
|
+
{ name: "direction", type: "string", description: "UP | DOWN | LEFT | RIGHT." },
|
|
193
|
+
{ name: "start", type: "string", description: "Start point \"x%,y%\" (mobile)." },
|
|
194
|
+
{ name: "end", type: "string", description: "End point \"x%,y%\" (mobile)." },
|
|
195
|
+
{ name: "from", type: "object", description: "Swipe from an element {id|text} (mobile)." },
|
|
196
|
+
{ name: "duration", type: "number", description: "Gesture duration ms." },
|
|
197
|
+
{ name: "times", type: "number", description: "Repeat count." },
|
|
198
|
+
],
|
|
199
|
+
example: "- swipe:\n direction: LEFT" }),
|
|
200
|
+
cmd({ key: "scrollUntilVisible", category: "Scroll / Drag", platforms: ALL, forms: ["scalar", "mapping"], scalarArg: "text",
|
|
201
|
+
summary: "Scroll until an element becomes visible.",
|
|
202
|
+
args: [
|
|
203
|
+
{ name: "text", type: "string", description: "Element text (or `element: {text|id}`)." },
|
|
204
|
+
{ name: "element", type: "object", description: "Element selector {text|id}." },
|
|
205
|
+
{ name: "direction", type: "string", description: "Scroll direction (default DOWN)." },
|
|
206
|
+
TIMEOUT,
|
|
207
|
+
{ name: "speed", type: "number", description: "Scroll speed 0-100 (mobile)." },
|
|
208
|
+
],
|
|
209
|
+
example: '- scrollUntilVisible:\n element:\n text: "Terms"\n direction: DOWN' }),
|
|
210
|
+
cmd({ key: "dragAndDrop", category: "Scroll / Drag", platforms: WEB,
|
|
211
|
+
summary: "Drag from one normalized point to another (0..1 of the viewport).",
|
|
212
|
+
args: ["fromNx", "fromNy", "toNx", "toNy"].map((name) => ({ name, type: "number", required: true, description: "Normalized coordinate 0..1." })),
|
|
213
|
+
example: "- dragAndDrop:\n fromNx: 0.2\n fromNy: 0.5\n toNx: 0.8\n toNy: 0.5" }),
|
|
214
|
+
// ── Wait ──────────────────────────────────────────────────────────────────
|
|
215
|
+
cmd({ key: "wait", aliases: ["pause"], category: "Wait", platforms: ALL, forms: ["scalar"], scalarArg: "ms",
|
|
216
|
+
summary: "Sleep for N milliseconds.", args: [{ name: "ms", type: "number", required: true, description: "Milliseconds." }], example: "- pause: 1000" }),
|
|
217
|
+
cmd({ key: "waitForAnimationToEnd", category: "Wait", platforms: ALL, forms: ["bare", "mapping"],
|
|
218
|
+
summary: "Wait until the screen stops changing.", args: [TIMEOUT], example: "- waitForAnimationToEnd" }),
|
|
219
|
+
cmd({ key: "extendedWaitUntil", category: "Wait", platforms: ALL,
|
|
220
|
+
summary: "Wait until an element is visible / not visible or a JS condition holds.",
|
|
221
|
+
args: [
|
|
222
|
+
{ name: "visible", type: "string|object", description: "Text or selector to wait for." },
|
|
223
|
+
{ name: "notVisible", type: "string|object", description: "Text or selector to wait to disappear." },
|
|
224
|
+
{ name: "condition", type: "string", description: "JS condition (web)." },
|
|
225
|
+
TIMEOUT,
|
|
226
|
+
],
|
|
227
|
+
example: '- extendedWaitUntil:\n visible: "Done"\n timeout: 15000' }),
|
|
228
|
+
// ── Slider / Date ─────────────────────────────────────────────────────────
|
|
229
|
+
cmd({ key: "setSlider", category: "Slider / Date", platforms: WEB, forms: ["scalar", "mapping"], scalarArg: "value",
|
|
230
|
+
summary: "Set a range input.", args: [{ name: "value", type: "number", required: true, description: "Value." }, { name: "id", type: "string", description: "Input id." }], example: "- setSlider: 40" }),
|
|
231
|
+
cmd({ key: "checkSliderValue", aliases: ["assertSliderValue"], category: "Slider / Date", platforms: WEB, forms: ["scalar", "mapping"], scalarArg: "value",
|
|
232
|
+
summary: "Assert a range input value.",
|
|
233
|
+
args: [{ name: "value", type: "number", required: true, description: "Expected value." }, { name: "id", type: "string", description: "Input id." }, { name: "tolerance", type: "number", description: "Allowed delta." }],
|
|
234
|
+
example: "- checkSliderValue:\n value: 40\n tolerance: 1" }),
|
|
235
|
+
cmd({ key: "setDate", category: "Slider / Date", platforms: WEB, forms: ["scalar", "mapping"], scalarArg: "value",
|
|
236
|
+
summary: "Set a date input.", args: [{ name: "value", type: "string", required: true, description: "YYYY-MM-DD." }, { name: "id", type: "string", description: "Input id." }], example: '- setDate: "2026-10-01"' }),
|
|
237
|
+
// ── Browser ───────────────────────────────────────────────────────────────
|
|
238
|
+
cmd({ key: "closeTab", category: "Browser", platforms: WEB, forms: ["bare"], summary: "Close the current tab.", args: [], example: "- closeTab" }),
|
|
239
|
+
cmd({ key: "switchTab", category: "Browser", platforms: WEB, forms: ["scalar", "mapping"], scalarArg: "index",
|
|
240
|
+
summary: "Switch to a tab by index or title.",
|
|
241
|
+
args: [{ name: "index", type: "number", description: "0-based index." }, { name: "title", type: "string", description: "Tab title." }], example: "- switchTab: 1" }),
|
|
242
|
+
cmd({ key: "switchFrame", category: "Browser", platforms: WEB, forms: ["scalar", "mapping"], scalarArg: "id",
|
|
243
|
+
summary: "Switch into an iframe by id or index.",
|
|
244
|
+
args: [{ name: "id", type: "string", description: "Frame id." }, { name: "index", type: "number", description: "Frame index." }], example: '- switchFrame: "payment"' }),
|
|
245
|
+
cmd({ key: "switchDefaultContent", category: "Browser", platforms: WEB, forms: ["bare"], summary: "Leave the iframe.", args: [], example: "- switchDefaultContent" }),
|
|
246
|
+
cmd({ key: "setCookie", category: "Browser", platforms: WEB,
|
|
247
|
+
summary: "Set a cookie.",
|
|
248
|
+
args: [{ name: "name", type: "string", required: true, description: "Name." }, { name: "value", type: "string", required: true, description: "Value." }, { name: "domain", type: "string", description: "Domain." }],
|
|
249
|
+
example: '- setCookie:\n name: "consent"\n value: "yes"' }),
|
|
250
|
+
cmd({ key: "deleteCookie", category: "Browser", platforms: WEB, forms: ["bare", "scalar"], scalarArg: "name",
|
|
251
|
+
summary: "Delete one cookie (or all when no name).", args: [{ name: "name", type: "string", description: "Cookie name." }], example: '- deleteCookie: "session"' }),
|
|
252
|
+
cmd({ key: "acceptAlert", category: "Alert", platforms: WEB, forms: ["bare", "scalar"], scalarArg: "text",
|
|
253
|
+
summary: "Accept the next browser dialog (optionally typing prompt text).", args: [{ name: "text", type: "string", description: "Prompt text." }], example: "- acceptAlert" }),
|
|
254
|
+
cmd({ key: "dismissAlert", category: "Alert", platforms: WEB, forms: ["bare"], summary: "Dismiss the next browser dialog.", args: [], example: "- dismissAlert" }),
|
|
255
|
+
cmd({ key: "executeScript", aliases: ["evalScript", "fakerData"], category: "Data / Hybrid", platforms: ALL, forms: ["scalar", "mapping"], scalarArg: "script",
|
|
256
|
+
summary: "Run JavaScript (page context on web; the engine's JS on mobile). `extract` saves results as variables.",
|
|
257
|
+
args: [{ name: "script", type: "string", required: true, description: "JS source." }, { name: "extract", type: "map", description: "{ varName: jsonPath } saved from the result." }],
|
|
258
|
+
example: "- executeScript:\n script: \"return document.title\"\n extract:\n title: \"$\"" }),
|
|
259
|
+
// ── Flow control ──────────────────────────────────────────────────────────
|
|
260
|
+
cmd({ key: "runFlow", category: "Flow", platforms: ALL, forms: ["scalar", "mapping"], scalarArg: "name",
|
|
261
|
+
summary: "Run another flow of the library by NAME (inlined at run time). Leading runFlow lines are the flow's preconditions. A mapping with `when` makes it conditional.",
|
|
262
|
+
args: [
|
|
263
|
+
{ name: "name", type: "string", description: "Library flow name." },
|
|
264
|
+
{ name: "commands", type: "list", description: "Inline steps instead of a named flow." },
|
|
265
|
+
{ name: "when", type: "object", description: "Condition: {visible|notVisible|true|platform}." },
|
|
266
|
+
{ name: "env", type: "map", description: "Variables passed to the sub-flow." },
|
|
267
|
+
],
|
|
268
|
+
example: '- runFlow: "Login"' }),
|
|
269
|
+
cmd({ key: "repeat", category: "Flow", platforms: ALL,
|
|
270
|
+
summary: "Repeat steps N times or while a condition holds.",
|
|
271
|
+
args: [
|
|
272
|
+
{ name: "times", type: "number", description: "Iterations." },
|
|
273
|
+
{ name: "while", type: "object", description: "{visible|notVisible|true: expr}." },
|
|
274
|
+
{ name: "commands", type: "list", required: true, description: "Steps to repeat." },
|
|
275
|
+
],
|
|
276
|
+
example: '- repeat:\n times: 3\n commands:\n - tapOn: "Next"' }),
|
|
277
|
+
cmd({ key: "retry", category: "Flow", platforms: ALL,
|
|
278
|
+
summary: "Retry a block of steps until it passes.",
|
|
279
|
+
args: [{ name: "maxRetries", type: "number", description: "Default 3." }, { name: "commands", type: "list", required: true, description: "Steps." }],
|
|
280
|
+
example: '- retry:\n maxRetries: 2\n commands:\n - tapOn: "Refresh"' }),
|
|
281
|
+
// ── Data / Hybrid ─────────────────────────────────────────────────────────
|
|
282
|
+
cmd({ key: "dbQuery", category: "Data / Hybrid", platforms: ALL, hybrid: true,
|
|
283
|
+
summary: "Run SQL on a workspace database connection; extract values into variables and assert on rows.",
|
|
284
|
+
args: [
|
|
285
|
+
{ name: "connection", type: "string", required: true, description: "Workspace connection name or id." },
|
|
286
|
+
{ name: "query", type: "string", required: true, description: "SQL. {{vars}} allowed." },
|
|
287
|
+
{ name: "extract", type: "map", description: "{ var: \"rows[0].column\" }." },
|
|
288
|
+
{ name: "expect", type: "map|list", description: "Map {path: value} or list [{field, op, value}] — op: equals, not_equals, contains, not_contains, is_null, not_null, gt, lt, gte, lte." },
|
|
289
|
+
],
|
|
290
|
+
example: '- dbQuery:\n connection: "orders-db"\n query: "select status from orders where id = \'{{orderNo}}\'"\n expect:\n - field: "rows[0].status"\n op: equals\n value: "PAID"' }),
|
|
291
|
+
cmd({ key: "apiCall", category: "Data / Hybrid", platforms: ALL, hybrid: true,
|
|
292
|
+
summary: "Call an HTTP API mid-flow; extract from the response and assert status/body.",
|
|
293
|
+
args: [
|
|
294
|
+
{ name: "method", type: "string", description: "GET | POST | PUT | PATCH | DELETE (default GET)." },
|
|
295
|
+
{ name: "url", type: "string", required: true, description: "URL." },
|
|
296
|
+
{ name: "headers", type: "map", description: "Headers." },
|
|
297
|
+
{ name: "body", type: "string|object", description: "Body (object sent as JSON)." },
|
|
298
|
+
{ name: "extract", type: "map", description: "{ var: \"body.path\" }." },
|
|
299
|
+
{ name: "expect", type: "object", description: "{ status?, body? }." },
|
|
300
|
+
],
|
|
301
|
+
example: '- apiCall:\n method: POST\n url: "{{baseUrl}}/api/otp"\n body: { phone: "{{phone}}" }\n extract:\n otp: "body.code"' }),
|
|
302
|
+
cmd({ key: "kafkaPublish", category: "Data / Hybrid", platforms: ALL, hybrid: true,
|
|
303
|
+
summary: "Publish a Kafka message through a workspace connection.",
|
|
304
|
+
args: [
|
|
305
|
+
{ name: "connection", type: "string", required: true, description: "Kafka connection name or id." },
|
|
306
|
+
{ name: "topic", type: "string", required: true, description: "Topic." },
|
|
307
|
+
{ name: "key", type: "string", description: "Message key." },
|
|
308
|
+
{ name: "value", type: "string|object", required: true, description: "Payload (mapping/list sent as JSON)." },
|
|
309
|
+
{ name: "headers", type: "map", description: "Message headers." },
|
|
310
|
+
TIMEOUT,
|
|
311
|
+
],
|
|
312
|
+
example: '- kafkaPublish:\n connection: "kafka-dev"\n topic: "orders"\n value: { id: "{{orderNo}}" }' }),
|
|
313
|
+
cmd({ key: "kafkaCheck", category: "Data / Hybrid", platforms: ALL, hybrid: true,
|
|
314
|
+
summary: "Wait for a Kafka message matching a filter; extract fields.",
|
|
315
|
+
args: [
|
|
316
|
+
{ name: "connection", type: "string", required: true, description: "Kafka connection name or id." },
|
|
317
|
+
{ name: "topic", type: "string", required: true, description: "Topic." },
|
|
318
|
+
{ name: "filter", type: "string|object", description: "Match on key/value content." },
|
|
319
|
+
{ name: "extract", type: "map", description: "{ var: path }." },
|
|
320
|
+
TIMEOUT,
|
|
321
|
+
],
|
|
322
|
+
example: '- kafkaCheck:\n connection: "kafka-dev"\n topic: "order-events"\n filter: "{{orderNo}}"' }),
|
|
323
|
+
cmd({ key: "redisCheck", category: "Data / Hybrid", platforms: ALL, hybrid: true,
|
|
324
|
+
summary: "Read a Redis key; extract and assert.",
|
|
325
|
+
args: [
|
|
326
|
+
{ name: "connection", type: "string", required: true, description: "Redis connection name or id." },
|
|
327
|
+
{ name: "key", type: "string", required: true, description: "Key." },
|
|
328
|
+
{ name: "extract", type: "map", description: "{ var: path }." },
|
|
329
|
+
{ name: "expect", type: "map", description: "Expected values." },
|
|
330
|
+
],
|
|
331
|
+
example: '- redisCheck:\n connection: "redis-dev"\n key: "otp:{{phone}}"\n extract:\n otp: "value"' }),
|
|
332
|
+
cmd({ key: "runScript", category: "Data / Hybrid", platforms: MOBILE, forms: ["scalar"], scalarArg: "path",
|
|
333
|
+
summary: "Run a JS file with the mobile engine.", args: [{ name: "path", type: "string", required: true, description: "Script file." }], example: '- runScript: "setup.js"' }),
|
|
334
|
+
// ── Media ─────────────────────────────────────────────────────────────────
|
|
335
|
+
cmd({ key: "takeScreenshot", aliases: ["screenshot"], category: "Media", platforms: ALL, forms: ["bare", "scalar"], scalarArg: "name",
|
|
336
|
+
summary: "Screenshot (success/failure screenshots are captured automatically).",
|
|
337
|
+
args: [{ name: "name", type: "string", description: "File name." }], example: "- takeScreenshot",
|
|
338
|
+
unavailable: "Screenshots are captured automatically on success and failure; manual screenshot steps are ignored." }),
|
|
339
|
+
cmd({ key: "addMedia", category: "Media", platforms: MOBILE, forms: ["mapping", "scalar"], scalarArg: "files",
|
|
340
|
+
summary: "Push media files to the device gallery.", args: [{ name: "files", type: "list", required: true, description: "File paths." }], example: '- addMedia:\n - "photo.png"' }),
|
|
341
|
+
cmd({ key: "assertScreenshot", category: "Media", platforms: MOBILE, forms: ["scalar"], scalarArg: "name", summary: "Visual regression against a baseline.",
|
|
342
|
+
args: [{ name: "name", type: "string", required: true, description: "Baseline." }], example: '- assertScreenshot: "home"', unavailable: "Visual regression isn't available yet." }),
|
|
343
|
+
cmd({ key: "startRecording", category: "Media", platforms: MOBILE, forms: ["scalar"], scalarArg: "name", summary: "Start screen recording.",
|
|
344
|
+
args: [{ name: "name", type: "string", description: "File." }], example: '- startRecording: "run"', unavailable: "Screen recording isn't available yet." }),
|
|
345
|
+
cmd({ key: "stopRecording", category: "Media", platforms: MOBILE, forms: ["bare"], summary: "Stop screen recording.", args: [], example: "- stopRecording", unavailable: "Screen recording isn't available yet." }),
|
|
346
|
+
// ── App lifecycle / Mobile device ─────────────────────────────────────────
|
|
347
|
+
cmd({ key: "stopApp", category: "App lifecycle", platforms: MOBILE, forms: ["bare", "scalar"], scalarArg: "appId", summary: "Stop the app.",
|
|
348
|
+
args: [{ name: "appId", type: "string", description: "App id (default header appId)." }], example: "- stopApp" }),
|
|
349
|
+
cmd({ key: "killApp", category: "App lifecycle", platforms: MOBILE, forms: ["bare", "scalar"], scalarArg: "appId", summary: "Kill the app process.",
|
|
350
|
+
args: [{ name: "appId", type: "string", description: "App id." }], example: "- killApp" }),
|
|
351
|
+
cmd({ key: "clearState", category: "App lifecycle", platforms: MOBILE, forms: ["bare", "scalar"], scalarArg: "appId", summary: "Clear app data.",
|
|
352
|
+
args: [{ name: "appId", type: "string", description: "App id." }], example: "- clearState" }),
|
|
353
|
+
cmd({ key: "clearKeychain", category: "App lifecycle", platforms: ["ios"], forms: ["bare"], summary: "Clear the iOS keychain.", args: [], example: "- clearKeychain" }),
|
|
354
|
+
cmd({ key: "setLocation", category: "Mobile device", platforms: MOBILE, summary: "Mock GPS location.",
|
|
355
|
+
args: [{ name: "latitude", type: "number", required: true, description: "Latitude." }, { name: "longitude", type: "number", required: true, description: "Longitude." }],
|
|
356
|
+
example: "- setLocation:\n latitude: 40.4093\n longitude: 49.8671" }),
|
|
357
|
+
cmd({ key: "travel", category: "Mobile device", platforms: MOBILE, summary: "Move the mocked location along points.",
|
|
358
|
+
args: [{ name: "points", type: "list", required: true, description: "[\"lat,lng\", …]." }, { name: "speedMPS", type: "number", description: "Speed m/s." }],
|
|
359
|
+
example: '- travel:\n points:\n - "40.40,49.86"\n - "40.41,49.87"\n speedMPS: 20' }),
|
|
360
|
+
cmd({ key: "setOrientation", category: "Mobile device", platforms: MOBILE, forms: ["scalar"], scalarArg: "orientation",
|
|
361
|
+
summary: "PORTRAIT | LANDSCAPE_LEFT | LANDSCAPE_RIGHT | UPSIDE_DOWN.", args: [{ name: "orientation", type: "string", required: true, description: "Orientation." }], example: "- setOrientation: LANDSCAPE_LEFT" }),
|
|
362
|
+
cmd({ key: "setAirplaneMode", category: "Mobile device", platforms: MOBILE, forms: ["scalar"], scalarArg: "state",
|
|
363
|
+
summary: "enabled | disabled.", args: [{ name: "state", type: "string", required: true, description: "enabled | disabled." }], example: "- setAirplaneMode: enabled" }),
|
|
364
|
+
cmd({ key: "toggleAirplaneMode", category: "Mobile device", platforms: MOBILE, forms: ["bare"], summary: "Toggle airplane mode.", args: [], example: "- toggleAirplaneMode" }),
|
|
365
|
+
cmd({ key: "setPermissions", category: "Mobile device", platforms: MOBILE, summary: "Grant/deny app permissions.",
|
|
366
|
+
args: [{ name: "permissions", type: "map", required: true, description: "{ camera: allow, location: deny, all: allow }." }, { name: "appId", type: "string", description: "App id." }],
|
|
367
|
+
example: "- setPermissions:\n permissions:\n camera: allow" }),
|
|
368
|
+
// ── AI ────────────────────────────────────────────────────────────────────
|
|
369
|
+
...["assertWithAI", "assertNoDefectsWithAI", "extractTextWithAI"].map((key) => cmd({ key, category: "AI", platforms: MOBILE, forms: ["scalar", "mapping"], scalarArg: "assertion",
|
|
370
|
+
summary: "AI-evaluated screen assertion.", args: [{ name: "assertion", type: "string", description: "Instruction." }],
|
|
371
|
+
example: `- ${key}: "The cart shows 2 items"`, unavailable: "AI steps are not connected yet." })),
|
|
372
|
+
];
|
|
373
|
+
const BY_KEY = new Map();
|
|
374
|
+
for (const c of exports.UI_TEST_COMMANDS) {
|
|
375
|
+
BY_KEY.set(c.key, c);
|
|
376
|
+
for (const a of c.aliases)
|
|
377
|
+
BY_KEY.set(a, c);
|
|
378
|
+
}
|
|
379
|
+
/** Look a YAML step key up (aliases included). */
|
|
380
|
+
function findUiTestCommand(key) {
|
|
381
|
+
return BY_KEY.get(key);
|
|
382
|
+
}
|
|
383
|
+
/** Header (config block) keys a flow may carry before `---`. */
|
|
384
|
+
exports.UI_TEST_HEADER_KEYS = [
|
|
385
|
+
{ key: "url", platforms: WEB, description: "Entry URL the browser opens first (web flows). {{dataset}} allowed." },
|
|
386
|
+
{ key: "appId", platforms: MOBILE, description: "Android package name / iOS bundle id (mobile flows)." },
|
|
387
|
+
{ key: "appActivity", platforms: ["android"], description: "Launch activity (Android, optional)." },
|
|
388
|
+
{ key: "deviceName", platforms: MOBILE, description: "Preferred device name (optional)." },
|
|
389
|
+
{ key: "name", platforms: ALL, description: "Display name (informational)." },
|
|
390
|
+
{ key: "tags", platforms: ALL, description: "Flow-file tags." },
|
|
391
|
+
{ key: "env", platforms: ALL, description: "Default variables (dataset values win)." },
|
|
392
|
+
{ key: "defineAttributes", platforms: ALL, description: "Same as env." },
|
|
393
|
+
{ key: "onFlowStart", platforms: ALL, description: "Steps run before the flow (mobile engine)." },
|
|
394
|
+
{ key: "onFlowComplete", platforms: ALL, description: "Steps run after the flow (mobile engine)." },
|
|
395
|
+
];
|
|
396
|
+
/** Markdown reference of every step — served to AI tools. */
|
|
397
|
+
function renderUiTestCommandReference() {
|
|
398
|
+
const lines = [
|
|
399
|
+
"# UI-test steps",
|
|
400
|
+
"",
|
|
401
|
+
"A flow is a YAML document: an optional header (config) block, a `---` line, then a list of steps.",
|
|
402
|
+
"Each step is `- key` (bare), `- key: value` (scalar) or `- key:` with a mapping. Any step may carry `label:` (its display name).",
|
|
403
|
+
"`{{name}}` placeholders are filled from the flow dataset; values saved by `extract` / `copyTextFrom` are available to later steps as `{{var}}`.",
|
|
404
|
+
"",
|
|
405
|
+
"Platforms: **web** runs on Playwright (server runner or the desktop app); **android / ios** run on the mobile engine \"M\" in the desktop app.",
|
|
406
|
+
"Data / Hybrid steps (DB, API, Kafka, Redis, script) run on every platform, in order, between UI steps.",
|
|
407
|
+
"",
|
|
408
|
+
"## Header keys",
|
|
409
|
+
"",
|
|
410
|
+
"| Key | Platforms | Meaning |",
|
|
411
|
+
"|---|---|---|",
|
|
412
|
+
...exports.UI_TEST_HEADER_KEYS.map((h) => `| \`${h.key}\` | ${h.platforms.join(", ")} | ${h.description} |`),
|
|
413
|
+
"",
|
|
414
|
+
];
|
|
415
|
+
const byCat = new Map();
|
|
416
|
+
for (const c of exports.UI_TEST_COMMANDS) {
|
|
417
|
+
const list = byCat.get(c.category) ?? [];
|
|
418
|
+
list.push(c);
|
|
419
|
+
byCat.set(c.category, list);
|
|
420
|
+
}
|
|
421
|
+
for (const [cat, cmds] of byCat) {
|
|
422
|
+
lines.push(`## ${cat}`, "");
|
|
423
|
+
for (const c of cmds) {
|
|
424
|
+
const alias = c.aliases.length ? ` (aliases: ${c.aliases.map((a) => `\`${a}\``).join(", ")})` : "";
|
|
425
|
+
lines.push(`### \`${c.key}\`${alias}`, "");
|
|
426
|
+
lines.push(`${c.summary} Platforms: ${c.platforms.join(", ")}.${c.hybrid ? " Hybrid data step." : ""}`);
|
|
427
|
+
if (c.unavailable)
|
|
428
|
+
lines.push(`> Not runnable yet: ${c.unavailable}`);
|
|
429
|
+
const forms = c.forms.map((f) => (f === "scalar" && c.scalarArg ? `scalar (= ${c.scalarArg})` : f)).join(", ");
|
|
430
|
+
lines.push(`Forms: ${forms}.`);
|
|
431
|
+
if (c.args.length) {
|
|
432
|
+
lines.push("", "| Arg | Type | Req | Description |", "|---|---|---|---|");
|
|
433
|
+
for (const a of c.args)
|
|
434
|
+
lines.push(`| \`${a.name}\` | ${a.type} | ${a.required ? "yes" : ""} | ${a.description} |`);
|
|
435
|
+
}
|
|
436
|
+
lines.push("", "```yaml", c.example, "```", "");
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
return lines.join("\n");
|
|
440
|
+
}
|
|
441
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/ui-test/commands.ts"],"names":[],"mappings":"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"}
|