@scenetest/scenes 0.1.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/LICENSE +21 -0
- package/dist/__tests__/devices.test.d.ts +2 -0
- package/dist/__tests__/devices.test.d.ts.map +1 -0
- package/dist/__tests__/devices.test.js +117 -0
- package/dist/__tests__/devices.test.js.map +1 -0
- package/dist/__tests__/dsl.test.d.ts +2 -0
- package/dist/__tests__/dsl.test.d.ts.map +1 -0
- package/dist/__tests__/dsl.test.js +385 -0
- package/dist/__tests__/dsl.test.js.map +1 -0
- package/dist/__tests__/markdown-scene.test.d.ts +2 -0
- package/dist/__tests__/markdown-scene.test.d.ts.map +1 -0
- package/dist/__tests__/markdown-scene.test.js +508 -0
- package/dist/__tests__/markdown-scene.test.js.map +1 -0
- package/dist/__tests__/reactive.test.d.ts +2 -0
- package/dist/__tests__/reactive.test.d.ts.map +1 -0
- package/dist/__tests__/reactive.test.js +383 -0
- package/dist/__tests__/reactive.test.js.map +1 -0
- package/dist/__tests__/swarm.test.d.ts +2 -0
- package/dist/__tests__/swarm.test.d.ts.map +1 -0
- package/dist/__tests__/swarm.test.js +214 -0
- package/dist/__tests__/swarm.test.js.map +1 -0
- package/dist/actor.d.ts +104 -0
- package/dist/actor.d.ts.map +1 -0
- package/dist/actor.js +527 -0
- package/dist/actor.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +273 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +21 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +120 -0
- package/dist/config.js.map +1 -0
- package/dist/devices.d.ts +55 -0
- package/dist/devices.d.ts.map +1 -0
- package/dist/devices.js +167 -0
- package/dist/devices.js.map +1 -0
- package/dist/dsl.d.ts +99 -0
- package/dist/dsl.d.ts.map +1 -0
- package/dist/dsl.js +247 -0
- package/dist/dsl.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +9 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +27 -0
- package/dist/init.js.map +1 -0
- package/dist/loader.d.ts +2 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +10 -0
- package/dist/loader.js.map +1 -0
- package/dist/markdown-scene.d.ts +120 -0
- package/dist/markdown-scene.d.ts.map +1 -0
- package/dist/markdown-scene.js +452 -0
- package/dist/markdown-scene.js.map +1 -0
- package/dist/message-bus.d.ts +31 -0
- package/dist/message-bus.d.ts.map +1 -0
- package/dist/message-bus.js +74 -0
- package/dist/message-bus.js.map +1 -0
- package/dist/reactive.d.ts +267 -0
- package/dist/reactive.d.ts.map +1 -0
- package/dist/reactive.js +779 -0
- package/dist/reactive.js.map +1 -0
- package/dist/runner.d.ts +51 -0
- package/dist/runner.d.ts.map +1 -0
- package/dist/runner.js +306 -0
- package/dist/runner.js.map +1 -0
- package/dist/scene.d.ts +40 -0
- package/dist/scene.d.ts.map +1 -0
- package/dist/scene.js +110 -0
- package/dist/scene.js.map +1 -0
- package/dist/selectors.d.ts +57 -0
- package/dist/selectors.d.ts.map +1 -0
- package/dist/selectors.js +193 -0
- package/dist/selectors.js.map +1 -0
- package/dist/swarm.d.ts +64 -0
- package/dist/swarm.d.ts.map +1 -0
- package/dist/swarm.js +306 -0
- package/dist/swarm.js.map +1 -0
- package/dist/team-manager.d.ts +120 -0
- package/dist/team-manager.d.ts.map +1 -0
- package/dist/team-manager.js +267 -0
- package/dist/team-manager.js.map +1 -0
- package/dist/types.d.ts +653 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +61 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,653 @@
|
|
|
1
|
+
import type { Page, BrowserContext } from 'playwright';
|
|
2
|
+
import type { ScenetestConfig as BaseConfig } from '@scenetest/checks';
|
|
3
|
+
import type { DeviceProfile } from './devices.js';
|
|
4
|
+
/**
|
|
5
|
+
* Selector: space-separated tokens that resolve to DOM elements.
|
|
6
|
+
*
|
|
7
|
+
* Each token matches (in order): aria-label, id, data-testid, data-name, data-key, name
|
|
8
|
+
*
|
|
9
|
+
* Special behavior: after matching a token, if the SAME element has a data-key
|
|
10
|
+
* matching the NEXT token, that token is consumed without descending.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* 'button' // Simple selector
|
|
14
|
+
* 'modal form submit-button' // Nested: modal > form > submit-button
|
|
15
|
+
* 'playlist-row 12345 like-button' // If playlist-row has data-key="12345", stays on same element
|
|
16
|
+
*/
|
|
17
|
+
export type Selector = string;
|
|
18
|
+
/**
|
|
19
|
+
* Actor credentials and identity from config
|
|
20
|
+
*/
|
|
21
|
+
export interface ActorConfig {
|
|
22
|
+
id: string;
|
|
23
|
+
username?: string;
|
|
24
|
+
email?: string;
|
|
25
|
+
password?: string;
|
|
26
|
+
[key: string]: unknown;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* A team is a complete set of actors with roles as keys.
|
|
30
|
+
* Each team is a self-contained world where all relationships hold.
|
|
31
|
+
*/
|
|
32
|
+
export type TeamConfig = Record<string, ActorConfig>;
|
|
33
|
+
/**
|
|
34
|
+
* Scenetest CLI configuration.
|
|
35
|
+
*
|
|
36
|
+
* Extends the base ScenetestConfig from @scenetest/checks with runner-specific
|
|
37
|
+
* fields (browser, headed, devices, hooks, etc.).
|
|
38
|
+
*
|
|
39
|
+
* Actor teams are not defined here — they are auto-discovered from
|
|
40
|
+
* actor files: `actors.ts` (array of teams) or `actors/*.ts` (one team per file).
|
|
41
|
+
*/
|
|
42
|
+
export interface ScenetestConfig extends BaseConfig {
|
|
43
|
+
/** Base URL for the application (required for CLI runner) */
|
|
44
|
+
baseUrl: string;
|
|
45
|
+
/** Patterns to ignore */
|
|
46
|
+
ignore?: string[];
|
|
47
|
+
/** Browser to use */
|
|
48
|
+
browser?: 'chromium' | 'firefox' | 'webkit';
|
|
49
|
+
/** Show browser window */
|
|
50
|
+
headed?: boolean;
|
|
51
|
+
/** Slow down actions by this many ms */
|
|
52
|
+
slowMo?: number;
|
|
53
|
+
/** Scene timeout in ms */
|
|
54
|
+
timeout?: number;
|
|
55
|
+
/** Individual action timeout in ms */
|
|
56
|
+
actionTimeout?: number;
|
|
57
|
+
/** Warn threshold in ms - emit warning if action takes longer than this (default: 500) */
|
|
58
|
+
warnAfter?: number;
|
|
59
|
+
/**
|
|
60
|
+
* Selector aliases - map shorthand names to CSS selectors.
|
|
61
|
+
* Use with ~ prefix: user.see('~modal')
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```ts
|
|
65
|
+
* aliases: {
|
|
66
|
+
* modal: '[role=dialog]',
|
|
67
|
+
* 'btn-p': 'button[type=submit], button.primary',
|
|
68
|
+
* nav: '[role=navigation]',
|
|
69
|
+
* }
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
aliases?: Record<string, string>;
|
|
73
|
+
/** Report output directory */
|
|
74
|
+
reportDir?: string;
|
|
75
|
+
/** Report format */
|
|
76
|
+
reportFormat?: 'html' | 'json' | 'both';
|
|
77
|
+
/**
|
|
78
|
+
* Device rotation: assign each actor a rotating device profile.
|
|
79
|
+
* When true, uses built-in device pool (mobile, tablet, desktop).
|
|
80
|
+
* When an array of DeviceProfile, uses that as the pool.
|
|
81
|
+
* When false or omitted, all actors get the default Playwright context (no device emulation).
|
|
82
|
+
*/
|
|
83
|
+
devices?: boolean | DeviceProfile[];
|
|
84
|
+
/**
|
|
85
|
+
* Swarm mode configuration.
|
|
86
|
+
* When set, enables automatic swarm triggering based on failure thresholds.
|
|
87
|
+
*/
|
|
88
|
+
swarm?: SwarmConfig;
|
|
89
|
+
/** Hook: before all scenes run */
|
|
90
|
+
beforeAll?: () => Promise<void>;
|
|
91
|
+
/** Hook: after all scenes run */
|
|
92
|
+
afterAll?: () => Promise<void>;
|
|
93
|
+
/** Hook: before each scene */
|
|
94
|
+
beforeEach?: (scene: SceneInfo) => Promise<void>;
|
|
95
|
+
/** Hook: after each scene */
|
|
96
|
+
afterEach?: (scene: SceneInfo, report: SceneReport) => Promise<void>;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Scene metadata
|
|
100
|
+
*/
|
|
101
|
+
export interface SceneInfo {
|
|
102
|
+
name: string;
|
|
103
|
+
file: string;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Assertion result from app code
|
|
107
|
+
*/
|
|
108
|
+
export interface AssertionResult {
|
|
109
|
+
type: 'pass' | 'fail';
|
|
110
|
+
description: string;
|
|
111
|
+
result: boolean;
|
|
112
|
+
timestamp: number;
|
|
113
|
+
stack?: string;
|
|
114
|
+
context?: Record<string, unknown>;
|
|
115
|
+
location?: {
|
|
116
|
+
file: string;
|
|
117
|
+
line: number;
|
|
118
|
+
column?: number;
|
|
119
|
+
};
|
|
120
|
+
/** Which actor's browser triggered this */
|
|
121
|
+
actor?: string;
|
|
122
|
+
/** Device the actor was using when this assertion fired */
|
|
123
|
+
device?: string;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Script-level warning (not an assertion failure).
|
|
127
|
+
* These indicate unexpected paths in the test script itself,
|
|
128
|
+
* not failures in the application under test.
|
|
129
|
+
*/
|
|
130
|
+
export interface ScriptWarning {
|
|
131
|
+
/** The selector that triggered this warning */
|
|
132
|
+
selector: string;
|
|
133
|
+
/** Human-readable message explaining why this is unexpected */
|
|
134
|
+
message: string;
|
|
135
|
+
/** When the warning was triggered */
|
|
136
|
+
timestamp: number;
|
|
137
|
+
/** Which actor encountered this */
|
|
138
|
+
actor: string;
|
|
139
|
+
/** Action that was executing when the warning triggered */
|
|
140
|
+
duringAction?: string;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Timeline entry for scene actions
|
|
144
|
+
*/
|
|
145
|
+
export interface TimelineEntry {
|
|
146
|
+
action: string;
|
|
147
|
+
target?: string;
|
|
148
|
+
actor: string;
|
|
149
|
+
timestamp: number;
|
|
150
|
+
duration?: number;
|
|
151
|
+
error?: string;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Report for a single scene run
|
|
155
|
+
*/
|
|
156
|
+
export interface SceneReport {
|
|
157
|
+
name: string;
|
|
158
|
+
file: string;
|
|
159
|
+
status: 'completed' | 'failed' | 'timeout';
|
|
160
|
+
teamIndex: number;
|
|
161
|
+
actors: Record<string, {
|
|
162
|
+
id: string;
|
|
163
|
+
username?: string;
|
|
164
|
+
device?: string;
|
|
165
|
+
}>;
|
|
166
|
+
assertions: AssertionResult[];
|
|
167
|
+
warnings: ScriptWarning[];
|
|
168
|
+
timeline: TimelineEntry[];
|
|
169
|
+
duration: number;
|
|
170
|
+
error?: string;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Full run report
|
|
174
|
+
*/
|
|
175
|
+
export interface RunReport {
|
|
176
|
+
timestamp: string;
|
|
177
|
+
duration: number;
|
|
178
|
+
scenes: SceneReport[];
|
|
179
|
+
summary: {
|
|
180
|
+
scenes: number;
|
|
181
|
+
completed: number;
|
|
182
|
+
failed: number;
|
|
183
|
+
assertions: {
|
|
184
|
+
total: number;
|
|
185
|
+
passed: number;
|
|
186
|
+
failed: number;
|
|
187
|
+
};
|
|
188
|
+
warnings: number;
|
|
189
|
+
};
|
|
190
|
+
/** Present when this run was triggered by swarm mode */
|
|
191
|
+
swarm?: SwarmReport;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Swarm mode configuration
|
|
195
|
+
*/
|
|
196
|
+
export interface SwarmConfig {
|
|
197
|
+
/**
|
|
198
|
+
* Number of consecutive failed assertions (across runs) before triggering swarm.
|
|
199
|
+
* Default: 5
|
|
200
|
+
*/
|
|
201
|
+
failureThreshold?: number;
|
|
202
|
+
/**
|
|
203
|
+
* How many recent runs to consider when evaluating whether failures persist.
|
|
204
|
+
* Default: 3
|
|
205
|
+
*/
|
|
206
|
+
windowSize?: number;
|
|
207
|
+
/**
|
|
208
|
+
* Maximum concurrent teams during swarm execution.
|
|
209
|
+
* Use to limit database/memory pressure.
|
|
210
|
+
* Default: all teams (no throttle)
|
|
211
|
+
*/
|
|
212
|
+
concurrency?: number;
|
|
213
|
+
/**
|
|
214
|
+
* Number of times to repeat each scene during swarm mode.
|
|
215
|
+
* More repeats = better signal on flaky vs broken.
|
|
216
|
+
* Default: 3
|
|
217
|
+
*/
|
|
218
|
+
repeats?: number;
|
|
219
|
+
/**
|
|
220
|
+
* Whether to trigger swarm mode automatically when thresholds are exceeded.
|
|
221
|
+
* When false, swarm is only triggered via CLI flag.
|
|
222
|
+
* Default: true
|
|
223
|
+
*/
|
|
224
|
+
auto?: boolean;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Classification of a scene after swarm analysis
|
|
228
|
+
*/
|
|
229
|
+
export type SwarmClassification =
|
|
230
|
+
/** Always fails across all teams and repeats */
|
|
231
|
+
'broken'
|
|
232
|
+
/** Fails intermittently — sometimes passes, sometimes fails */
|
|
233
|
+
| 'flaky'
|
|
234
|
+
/** Fails only with specific team data (seed data edge case) */
|
|
235
|
+
| 'seed-data-edge-case'
|
|
236
|
+
/** Passes consistently — the original failure may have been transient */
|
|
237
|
+
| 'healthy';
|
|
238
|
+
/**
|
|
239
|
+
* Swarm result for a single scene
|
|
240
|
+
*/
|
|
241
|
+
export interface SwarmSceneResult {
|
|
242
|
+
/** Scene name */
|
|
243
|
+
name: string;
|
|
244
|
+
/** Scene file */
|
|
245
|
+
file: string;
|
|
246
|
+
/** How many times this scene was run */
|
|
247
|
+
runs: number;
|
|
248
|
+
/** How many times it passed */
|
|
249
|
+
passed: number;
|
|
250
|
+
/** How many times it failed */
|
|
251
|
+
failed: number;
|
|
252
|
+
/** Which teams experienced failures (indices) */
|
|
253
|
+
failingTeams: number[];
|
|
254
|
+
/** Which teams passed (indices) */
|
|
255
|
+
passingTeams: number[];
|
|
256
|
+
/** Automatic classification */
|
|
257
|
+
classification: SwarmClassification;
|
|
258
|
+
/** Per-run detail */
|
|
259
|
+
details: SwarmRunDetail[];
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Detail for a single swarm run of a scene
|
|
263
|
+
*/
|
|
264
|
+
export interface SwarmRunDetail {
|
|
265
|
+
teamIndex: number;
|
|
266
|
+
repeat: number;
|
|
267
|
+
status: 'completed' | 'failed' | 'timeout';
|
|
268
|
+
duration: number;
|
|
269
|
+
assertionsFailed: number;
|
|
270
|
+
assertionsTotal: number;
|
|
271
|
+
error?: string;
|
|
272
|
+
actors: Record<string, {
|
|
273
|
+
device?: string;
|
|
274
|
+
}>;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Full swarm report
|
|
278
|
+
*/
|
|
279
|
+
export interface SwarmReport {
|
|
280
|
+
/** Why swarm was triggered */
|
|
281
|
+
trigger: 'auto' | 'manual';
|
|
282
|
+
/** Scenes that were swarmed */
|
|
283
|
+
results: SwarmSceneResult[];
|
|
284
|
+
/** Summary counts by classification */
|
|
285
|
+
summary: {
|
|
286
|
+
broken: number;
|
|
287
|
+
flaky: number;
|
|
288
|
+
seedDataEdgeCase: number;
|
|
289
|
+
healthy: number;
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Live actor instance during a scene
|
|
294
|
+
*/
|
|
295
|
+
export interface Actor {
|
|
296
|
+
/** Actor ID from config */
|
|
297
|
+
id: string;
|
|
298
|
+
/** Role this actor is playing */
|
|
299
|
+
role: string;
|
|
300
|
+
/** Actor config (username, email, etc.) */
|
|
301
|
+
config: ActorConfig;
|
|
302
|
+
/** Playwright page for this actor */
|
|
303
|
+
page: Page;
|
|
304
|
+
/** Playwright browser context for this actor */
|
|
305
|
+
context: BrowserContext;
|
|
306
|
+
/** Collected assertions for this actor */
|
|
307
|
+
assertions: AssertionResult[];
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Context passed to scene function
|
|
311
|
+
*/
|
|
312
|
+
export interface SceneContext {
|
|
313
|
+
/** Get an actor by role from the current team */
|
|
314
|
+
actor: (role: string) => Promise<SequentialActorHandle>;
|
|
315
|
+
/** The team index assigned to this scene */
|
|
316
|
+
teamIndex: number;
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Sequential actor handle with chainable DSL (classic driver model).
|
|
320
|
+
*
|
|
321
|
+
* Each DSL call returns an `ActionChain` — a separate object that queues
|
|
322
|
+
* actions and executes them when awaited. Scope lives on the chain and
|
|
323
|
+
* resets at each `await` boundary.
|
|
324
|
+
*/
|
|
325
|
+
export interface SequentialActorHandle extends ActorConfig {
|
|
326
|
+
/** Role this actor is playing */
|
|
327
|
+
role: string;
|
|
328
|
+
/** Playwright page */
|
|
329
|
+
page: Page;
|
|
330
|
+
/** Open browser to URL (full page load, not SPA routing) */
|
|
331
|
+
openTo(url: string): ActionChain;
|
|
332
|
+
/**
|
|
333
|
+
* Wait for element to be visible and set it as the current scope.
|
|
334
|
+
* Supports nested selectors: 'parent child'
|
|
335
|
+
* Supports tuple selectors: ['playlist-row', '12345'] for name + key
|
|
336
|
+
*/
|
|
337
|
+
see(selector: Selector): ActionChain;
|
|
338
|
+
/**
|
|
339
|
+
* Wait for element to be visible, in the viewport (no scroll), and set it as scope.
|
|
340
|
+
* Like see() but additionally verifies the element is within the current viewport bounds.
|
|
341
|
+
* Fails if the element exists but requires scrolling to reach.
|
|
342
|
+
*/
|
|
343
|
+
seeInView(selector: Selector): ActionChain;
|
|
344
|
+
/** Wait for element to NOT be visible (hidden or detached) */
|
|
345
|
+
notSee(selector: Selector): ActionChain;
|
|
346
|
+
/** Wait for text to be visible */
|
|
347
|
+
seeText(text: string): ActionChain;
|
|
348
|
+
/** Wait for element to appear AND disappear (for toasts/notifications) */
|
|
349
|
+
seeToast(selector: Selector): ActionChain;
|
|
350
|
+
/**
|
|
351
|
+
* Click element within current scope.
|
|
352
|
+
* If no selector is given, clicks the current scope itself (the element from the last see()).
|
|
353
|
+
* Supports nested selectors: 'parent child'
|
|
354
|
+
* Supports tuple selectors: ['button', '12345'] for name + key
|
|
355
|
+
*/
|
|
356
|
+
click(selector?: Selector): ActionChain;
|
|
357
|
+
/**
|
|
358
|
+
* Type into input within current scope.
|
|
359
|
+
* Supports nested selectors: 'parent child'
|
|
360
|
+
* Supports tuple selectors: ['input', '12345'] for name + key
|
|
361
|
+
*/
|
|
362
|
+
typeInto(selector: Selector, value: string): ActionChain;
|
|
363
|
+
/** Check checkbox within current scope */
|
|
364
|
+
check(selector: Selector): ActionChain;
|
|
365
|
+
/** Select option in dropdown within current scope */
|
|
366
|
+
select(selector: Selector, value: string): ActionChain;
|
|
367
|
+
/** Wait for specified milliseconds */
|
|
368
|
+
wait(ms: number): ActionChain;
|
|
369
|
+
/** Emit message to the message bus */
|
|
370
|
+
emit(message: string): ActionChain;
|
|
371
|
+
/** Block until message arrives on the message bus */
|
|
372
|
+
waitFor(message: string): ActionChain;
|
|
373
|
+
/** Execute custom action */
|
|
374
|
+
do(fn: (page: Page) => Promise<void>): ActionChain;
|
|
375
|
+
/** Scroll the current scope (or nearest scrollable ancestor) to the bottom */
|
|
376
|
+
scrollToBottom(): ActionChain;
|
|
377
|
+
/**
|
|
378
|
+
* Navigate up to an ancestor matching the selector.
|
|
379
|
+
* If no selector is given, resets scope to page root.
|
|
380
|
+
* Use with aliases like ~container to find named containers.
|
|
381
|
+
*
|
|
382
|
+
* @example
|
|
383
|
+
* ```ts
|
|
384
|
+
* user.see('button').up('~container').see('other-element')
|
|
385
|
+
* user.see('deep nested thing').up() // back to page root
|
|
386
|
+
* ```
|
|
387
|
+
*/
|
|
388
|
+
up(selector?: Selector): ActionChain;
|
|
389
|
+
/**
|
|
390
|
+
* Return to the previously held scope.
|
|
391
|
+
* Useful after navigating with up() or drilling into a child.
|
|
392
|
+
*
|
|
393
|
+
* @example
|
|
394
|
+
* ```ts
|
|
395
|
+
* user.see('parent').see('child').prev().click('sibling')
|
|
396
|
+
* ```
|
|
397
|
+
*/
|
|
398
|
+
prev(): ActionChain;
|
|
399
|
+
/**
|
|
400
|
+
* Execute a text DSL string.
|
|
401
|
+
* Parses the multiline string into actions and queues them on the chain.
|
|
402
|
+
*
|
|
403
|
+
* @example
|
|
404
|
+
* ```ts
|
|
405
|
+
* await user.dsl(`
|
|
406
|
+
* openTo /login
|
|
407
|
+
* see login-form
|
|
408
|
+
* typeInto email alice@test.com
|
|
409
|
+
* click submit
|
|
410
|
+
* `)
|
|
411
|
+
* ```
|
|
412
|
+
*/
|
|
413
|
+
dsl(text: string): ActionChain;
|
|
414
|
+
/**
|
|
415
|
+
* Register a conditional watcher. If the selector becomes visible during
|
|
416
|
+
* the next awaited action, the callback will be executed.
|
|
417
|
+
* Watchers are cleared after each await.
|
|
418
|
+
*/
|
|
419
|
+
if(selector: Selector, callback: () => Promise<void>): void;
|
|
420
|
+
/**
|
|
421
|
+
* Register a script warning. If the selector becomes visible during
|
|
422
|
+
* subsequent actions, a warning is recorded (but test continues).
|
|
423
|
+
* Use for unexpected paths that aren't failures.
|
|
424
|
+
*
|
|
425
|
+
* @example
|
|
426
|
+
* ```ts
|
|
427
|
+
* user.warnIf('welcome-modal', 'should not see welcome - user has dismiss flag')
|
|
428
|
+
* await user.see('dashboard')
|
|
429
|
+
* ```
|
|
430
|
+
*/
|
|
431
|
+
warnIf(selector: Selector, message: string): void;
|
|
432
|
+
}
|
|
433
|
+
/**
|
|
434
|
+
* Chainable action builder
|
|
435
|
+
*/
|
|
436
|
+
export interface ActionChain extends PromiseLike<void> {
|
|
437
|
+
/** Open browser to URL (full page load, not SPA routing) */
|
|
438
|
+
openTo(url: string): ActionChain;
|
|
439
|
+
/**
|
|
440
|
+
* Wait for element to be visible and set it as the current scope.
|
|
441
|
+
* Subsequent actions (click, typeInto, etc.) will look within this scope.
|
|
442
|
+
*/
|
|
443
|
+
see(selector: Selector): ActionChain;
|
|
444
|
+
/**
|
|
445
|
+
* Wait for element to be visible AND in the viewport (no scroll), and set it as scope.
|
|
446
|
+
* Fails if the element exists but requires scrolling to reach.
|
|
447
|
+
*/
|
|
448
|
+
seeInView(selector: Selector): ActionChain;
|
|
449
|
+
/** Wait for element to NOT be visible (hidden or detached) */
|
|
450
|
+
notSee(selector: Selector): ActionChain;
|
|
451
|
+
/** Wait for text to be visible */
|
|
452
|
+
seeText(text: string): ActionChain;
|
|
453
|
+
/** Wait for element to appear AND disappear (for toasts/notifications) */
|
|
454
|
+
seeToast(selector: Selector): ActionChain;
|
|
455
|
+
/** Click element within current scope, or click current scope if no selector given */
|
|
456
|
+
click(selector?: Selector): ActionChain;
|
|
457
|
+
/** Type into input within current scope */
|
|
458
|
+
typeInto(selector: Selector, value: string): ActionChain;
|
|
459
|
+
/** Check checkbox within current scope */
|
|
460
|
+
check(selector: Selector): ActionChain;
|
|
461
|
+
/** Select option in dropdown within current scope */
|
|
462
|
+
select(selector: Selector, value: string): ActionChain;
|
|
463
|
+
/** Wait for specified milliseconds */
|
|
464
|
+
wait(ms: number): ActionChain;
|
|
465
|
+
/** Emit message to the message bus */
|
|
466
|
+
emit(message: string): ActionChain;
|
|
467
|
+
/** Block until message arrives on the message bus */
|
|
468
|
+
waitFor(message: string): ActionChain;
|
|
469
|
+
/** Execute custom action */
|
|
470
|
+
do(fn: (page: Page) => Promise<void>): ActionChain;
|
|
471
|
+
/** Scroll the current scope (or nearest scrollable ancestor) to the bottom */
|
|
472
|
+
scrollToBottom(): ActionChain;
|
|
473
|
+
/** Navigate up to ancestor matching selector, or reset to page root if no selector */
|
|
474
|
+
up(selector?: Selector): ActionChain;
|
|
475
|
+
/**
|
|
476
|
+
* Return to the previously held scope.
|
|
477
|
+
* Useful after navigating with up() or drilling into a child.
|
|
478
|
+
*
|
|
479
|
+
* @example
|
|
480
|
+
* ```ts
|
|
481
|
+
* user.see('parent').see('child').prev().click('sibling')
|
|
482
|
+
* ```
|
|
483
|
+
*/
|
|
484
|
+
prev(): ActionChain;
|
|
485
|
+
/**
|
|
486
|
+
* Execute a text DSL string.
|
|
487
|
+
* Parses the multiline string into actions and queues them on the chain.
|
|
488
|
+
*
|
|
489
|
+
* @example
|
|
490
|
+
* ```ts
|
|
491
|
+
* await user.see('form').dsl(`
|
|
492
|
+
* typeInto email alice@test.com
|
|
493
|
+
* typeInto password secret
|
|
494
|
+
* click submit
|
|
495
|
+
* `)
|
|
496
|
+
* ```
|
|
497
|
+
*/
|
|
498
|
+
dsl(text: string): ActionChain;
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* Scene definition function
|
|
502
|
+
*/
|
|
503
|
+
export type SceneFn = (context: SceneContext) => Promise<void>;
|
|
504
|
+
/**
|
|
505
|
+
* Registered scene
|
|
506
|
+
*/
|
|
507
|
+
export interface RegisteredScene {
|
|
508
|
+
name: string;
|
|
509
|
+
fn: SceneFn;
|
|
510
|
+
file: string;
|
|
511
|
+
}
|
|
512
|
+
/**
|
|
513
|
+
* Minimal interface that both `SequentialActorHandle` and `ConcurrentActorHandle` satisfy.
|
|
514
|
+
*
|
|
515
|
+
* `runMacro()` and the `dsl()` method on actors all operate
|
|
516
|
+
* against this structural type so they work with both execution models.
|
|
517
|
+
*
|
|
518
|
+
* Return types are `unknown` because scene-model methods return `ActionChain`
|
|
519
|
+
* while reactive methods return the actor itself — the text DSL doesn't
|
|
520
|
+
* inspect return values.
|
|
521
|
+
*/
|
|
522
|
+
export interface DslTarget {
|
|
523
|
+
openTo(url: string): unknown;
|
|
524
|
+
see(selector: Selector): unknown;
|
|
525
|
+
seeInView(selector: Selector): unknown;
|
|
526
|
+
notSee(selector: Selector): unknown;
|
|
527
|
+
seeText(text: string): unknown;
|
|
528
|
+
seeToast(selector: Selector): unknown;
|
|
529
|
+
click(selector?: Selector): unknown;
|
|
530
|
+
typeInto(selector: Selector, value: string): unknown;
|
|
531
|
+
check(selector: Selector): unknown;
|
|
532
|
+
select(selector: Selector, value: string): unknown;
|
|
533
|
+
wait(ms: number): unknown;
|
|
534
|
+
emit(message: string): unknown;
|
|
535
|
+
warnIf(selector: Selector, message: string): void;
|
|
536
|
+
up(selector?: Selector): unknown;
|
|
537
|
+
prev(): unknown;
|
|
538
|
+
scrollToBottom(): unknown;
|
|
539
|
+
/** Block until message arrives on the bus */
|
|
540
|
+
waitFor(message: string): unknown;
|
|
541
|
+
}
|
|
542
|
+
/**
|
|
543
|
+
* Concurrent actor handle (declarative / flow model).
|
|
544
|
+
*
|
|
545
|
+
* Every DSL method pushes an action onto the actor's persistent queue and
|
|
546
|
+
* returns `this`, so methods are chainable without `await`.
|
|
547
|
+
* Nothing executes until the flow runner calls `drain()`.
|
|
548
|
+
*
|
|
549
|
+
* Scope lives on the actor (not on a throwaway chain) and flows through
|
|
550
|
+
* the queue during sequential drain execution.
|
|
551
|
+
*/
|
|
552
|
+
export interface ConcurrentActorHandle {
|
|
553
|
+
/** Role this actor is playing */
|
|
554
|
+
readonly role: string;
|
|
555
|
+
/** Actor ID from config */
|
|
556
|
+
readonly id: string;
|
|
557
|
+
/** Actor credentials forwarded from config */
|
|
558
|
+
readonly username?: string;
|
|
559
|
+
readonly email?: string;
|
|
560
|
+
readonly password?: string;
|
|
561
|
+
[key: string]: unknown;
|
|
562
|
+
/** Playwright page for low-level access */
|
|
563
|
+
readonly page: Page;
|
|
564
|
+
/** Number of queued actions (for testing/inspection) */
|
|
565
|
+
readonly pending: number;
|
|
566
|
+
openTo(url: string): ConcurrentActorHandle;
|
|
567
|
+
scrollToBottom(): ConcurrentActorHandle;
|
|
568
|
+
see(selector: Selector): ConcurrentActorHandle;
|
|
569
|
+
seeInView(selector: Selector): ConcurrentActorHandle;
|
|
570
|
+
notSee(selector: Selector): ConcurrentActorHandle;
|
|
571
|
+
seeText(text: string): ConcurrentActorHandle;
|
|
572
|
+
seeToast(selector: Selector): ConcurrentActorHandle;
|
|
573
|
+
click(selector?: Selector): ConcurrentActorHandle;
|
|
574
|
+
typeInto(selector: Selector, value: string): ConcurrentActorHandle;
|
|
575
|
+
check(selector: Selector): ConcurrentActorHandle;
|
|
576
|
+
select(selector: Selector, value: string): ConcurrentActorHandle;
|
|
577
|
+
up(selector?: Selector): ConcurrentActorHandle;
|
|
578
|
+
prev(): ConcurrentActorHandle;
|
|
579
|
+
wait(ms: number): ConcurrentActorHandle;
|
|
580
|
+
emit(message: string): ConcurrentActorHandle;
|
|
581
|
+
/** Block this actor's queue until a message arrives on the bus */
|
|
582
|
+
waitFor(message: string): ConcurrentActorHandle;
|
|
583
|
+
do(fn: (page: Page) => Promise<void>): ConcurrentActorHandle;
|
|
584
|
+
warnIf(selector: Selector, message: string): void;
|
|
585
|
+
/**
|
|
586
|
+
* Persistent conditional monitor.
|
|
587
|
+
*
|
|
588
|
+
* Polls during every subsequent action. When `selector` becomes
|
|
589
|
+
* visible, the sub-actions declared inside `callback` execute inline
|
|
590
|
+
* (one-shot). The callback receives the actor; DSL calls inside it
|
|
591
|
+
* are captured as the monitor's sub-actions.
|
|
592
|
+
*/
|
|
593
|
+
if(selector: Selector, callback: (actor: ConcurrentActorHandle) => void): void;
|
|
594
|
+
/**
|
|
595
|
+
* Queue actions from a text DSL string.
|
|
596
|
+
* Parses the multiline string and pushes each action onto the queue.
|
|
597
|
+
*
|
|
598
|
+
* @example
|
|
599
|
+
* ```ts
|
|
600
|
+
* user.dsl(`
|
|
601
|
+
* openTo /login
|
|
602
|
+
* see login-form
|
|
603
|
+
* typeInto email alice@test.com
|
|
604
|
+
* click submit
|
|
605
|
+
* `)
|
|
606
|
+
* ```
|
|
607
|
+
*/
|
|
608
|
+
dsl(text: string): ConcurrentActorHandle;
|
|
609
|
+
}
|
|
610
|
+
/**
|
|
611
|
+
* Context passed to a flow function.
|
|
612
|
+
*
|
|
613
|
+
* `actor()` is synchronous — it returns a reactive handle immediately.
|
|
614
|
+
* Browser contexts are created in parallel after the declaration phase,
|
|
615
|
+
* before actors begin draining their queues.
|
|
616
|
+
*/
|
|
617
|
+
export interface FlowContext {
|
|
618
|
+
/** Get or create a concurrent actor by role (synchronous — no await needed) */
|
|
619
|
+
actor: (role: string) => ConcurrentActorHandle;
|
|
620
|
+
/** The team index assigned to this flow */
|
|
621
|
+
teamIndex: number;
|
|
622
|
+
}
|
|
623
|
+
/**
|
|
624
|
+
* Flow definition function.
|
|
625
|
+
*
|
|
626
|
+
* The function body is the *declaration phase* — actor creation and DSL
|
|
627
|
+
* calls are all synchronous. After it returns, browsers launch in parallel,
|
|
628
|
+
* then all actors drain their queues concurrently.
|
|
629
|
+
*
|
|
630
|
+
* The function may be async (for backward compatibility or if you need
|
|
631
|
+
* top-level await for non-actor reasons), but it doesn't need to be.
|
|
632
|
+
*/
|
|
633
|
+
export type FlowFn = (context: FlowContext) => void | Promise<void>;
|
|
634
|
+
/**
|
|
635
|
+
* CLI options
|
|
636
|
+
*/
|
|
637
|
+
export interface CLIOptions {
|
|
638
|
+
/** Run in interactive UI mode */
|
|
639
|
+
ui?: boolean;
|
|
640
|
+
/** Run with visible browser */
|
|
641
|
+
headed?: boolean;
|
|
642
|
+
/** Report output directory */
|
|
643
|
+
report?: string;
|
|
644
|
+
/** Report format */
|
|
645
|
+
format?: 'html' | 'json' | 'both';
|
|
646
|
+
/** Config file path */
|
|
647
|
+
config?: string;
|
|
648
|
+
/** Enable device rotation */
|
|
649
|
+
devices?: boolean;
|
|
650
|
+
/** Force swarm mode (run all teams against all scenes) */
|
|
651
|
+
swarm?: boolean;
|
|
652
|
+
}
|
|
653
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|