@petukhovart/agent-view 0.16.1 → 0.17.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/.claude-plugin/plugin.json +1 -1
- package/README.md +5 -3
- package/dist/cdp/transport.d.ts +2 -0
- package/dist/cdp/transport.d.ts.map +1 -1
- package/dist/cdp/transport.js +168 -9
- package/dist/cdp/transport.js.map +1 -1
- package/dist/cdp/types.d.ts +44 -1
- package/dist/cdp/types.d.ts.map +1 -1
- package/dist/cdp/types.js.map +1 -1
- package/dist/cli/client.d.ts.map +1 -1
- package/dist/cli/client.js +1 -3
- package/dist/cli/client.js.map +1 -1
- package/dist/cli/commands/act.d.ts +3 -0
- package/dist/cli/commands/act.d.ts.map +1 -0
- package/dist/cli/commands/act.js +19 -0
- package/dist/cli/commands/act.js.map +1 -0
- package/dist/cli/commands/click.d.ts +2 -0
- package/dist/cli/commands/click.d.ts.map +1 -1
- package/dist/cli/commands/click.js +9 -4
- package/dist/cli/commands/click.js.map +1 -1
- package/dist/cli/commands/dom.d.ts.map +1 -1
- package/dist/cli/commands/dom.js +1 -0
- package/dist/cli/commands/dom.js.map +1 -1
- package/dist/cli/commands/fill.d.ts +2 -0
- package/dist/cli/commands/fill.d.ts.map +1 -1
- package/dist/cli/commands/fill.js +11 -4
- package/dist/cli/commands/fill.js.map +1 -1
- package/dist/cli/commands/screenshot.d.ts +2 -0
- package/dist/cli/commands/screenshot.d.ts.map +1 -1
- package/dist/cli/commands/screenshot.js +10 -1
- package/dist/cli/commands/screenshot.js.map +1 -1
- package/dist/cli/commands/wait.d.ts +3 -1
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +6 -2
- package/dist/cli/commands/wait.js.map +1 -1
- package/dist/cli/commands/watch.js +1 -1
- package/dist/cli/commands/watch.js.map +1 -1
- package/dist/cli/index.js +46 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/config/manager.d.ts.map +1 -1
- package/dist/config/manager.js +4 -0
- package/dist/config/manager.js.map +1 -1
- package/dist/config/types.d.ts +5 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/inspectors/controls/index.d.ts +39 -0
- package/dist/inspectors/controls/index.d.ts.map +1 -0
- package/dist/inspectors/controls/index.js +140 -0
- package/dist/inspectors/controls/index.js.map +1 -0
- package/dist/inspectors/dom/index.d.ts +2 -0
- package/dist/inspectors/dom/index.d.ts.map +1 -1
- package/dist/inspectors/dom/index.js +21 -14
- package/dist/inspectors/dom/index.js.map +1 -1
- package/dist/server/act-replay.d.ts +23 -0
- package/dist/server/act-replay.d.ts.map +1 -0
- package/dist/server/act-replay.js +143 -0
- package/dist/server/act-replay.js.map +1 -0
- package/dist/server/act-script.d.ts +46 -0
- package/dist/server/act-script.d.ts.map +1 -0
- package/dist/server/act-script.js +46 -0
- package/dist/server/act-script.js.map +1 -0
- package/dist/server/act-session.d.ts +23 -0
- package/dist/server/act-session.d.ts.map +1 -0
- package/dist/server/act-session.js +304 -0
- package/dist/server/act-session.js.map +1 -0
- package/dist/server/locator.d.ts +19 -0
- package/dist/server/locator.d.ts.map +1 -0
- package/dist/server/locator.js +33 -0
- package/dist/server/locator.js.map +1 -0
- package/dist/server/port.d.ts +7 -0
- package/dist/server/port.d.ts.map +1 -0
- package/dist/server/port.js +19 -0
- package/dist/server/port.js.map +1 -0
- package/dist/server/server.d.ts +1 -0
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +76 -18
- package/dist/server/server.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/skills/verify/SKILL.md +12 -20
- package/skills/verify/references/commands.md +118 -4
package/dist/config/types.d.ts
CHANGED
|
@@ -29,5 +29,10 @@ export type AgentViewConfig = {
|
|
|
29
29
|
logFile?: string;
|
|
30
30
|
/** Feed size cap in bytes. On overflow the feed rotates once to `<file>.prev`. Default 8 MB. */
|
|
31
31
|
logMaxBytes?: number;
|
|
32
|
+
/**
|
|
33
|
+
* Attribute carrying the project's test ids, shown by `dom` and addressed by `--testid`.
|
|
34
|
+
* Missing: `data-testid`, `data-test-id`, `data-test`, `data-qa` and `data-cy` are all tried.
|
|
35
|
+
*/
|
|
36
|
+
testIdAttribute?: string;
|
|
32
37
|
};
|
|
33
38
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,WAAW,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,WAAW,CAAA;KACpB,CAAA;IACD;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,qDAAqD;IACrD,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,6EAA6E;IAC7E,cAAc,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;IAC1C;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,kGAAkG;IAClG,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,2HAA2H;IAC3H,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,gGAAgG;IAChG,WAAW,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,WAAW,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,WAAW,CAAA;KACpB,CAAA;IACD;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,qDAAqD;IACrD,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,6EAA6E;IAC7E,cAAc,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;IAC1C;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,kGAAkG;IAClG,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,2HAA2H;IAC3H,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,gGAAgG;IAChG,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { AXNode, LayoutSnapshot } from '../../cdp/types.js';
|
|
2
|
+
/** Rows text can be typed into. */
|
|
3
|
+
export declare const TEXT_ROLES: ReadonlySet<string>;
|
|
4
|
+
export declare const PASSWORD_MASK = "\u2022\u2022\u2022\u2022";
|
|
5
|
+
export type Control = {
|
|
6
|
+
backendDOMNodeId: number;
|
|
7
|
+
role: string;
|
|
8
|
+
name: string;
|
|
9
|
+
testid?: string;
|
|
10
|
+
value?: string;
|
|
11
|
+
states: string[];
|
|
12
|
+
isPassword: boolean;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Interactive AX nodes whose box is non-empty and intersects the viewport, in AX-tree order,
|
|
16
|
+
* then pointer-only `item` rows in layout order.
|
|
17
|
+
*/
|
|
18
|
+
export declare function extractControls(ax: AXNode[], layout: LayoutSnapshot, testIdAttributes: readonly string[]): Control[];
|
|
19
|
+
export declare const describeControl: (c: Control) => string;
|
|
20
|
+
export declare function formatControlRow(c: Control, n: number): string;
|
|
21
|
+
type TableHeader = {
|
|
22
|
+
step: number;
|
|
23
|
+
maxSteps: number;
|
|
24
|
+
untilLabel: string;
|
|
25
|
+
};
|
|
26
|
+
export declare function formatControlTable(controls: Control[], header: TableHeader): string;
|
|
27
|
+
type RowResolution = {
|
|
28
|
+
control: Control;
|
|
29
|
+
} | {
|
|
30
|
+
gone: Control;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Stale guard: row n of the last printed table, located in a fresh snapshot.
|
|
34
|
+
* Same node still a visible control → it; else the unique control with the same
|
|
35
|
+
* fingerprint; else gone. Never a guess.
|
|
36
|
+
*/
|
|
37
|
+
export declare function resolveRow(last: Control, current: Control[]): RowResolution;
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/inspectors/controls/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAQ,MAAM,oBAAoB,CAAA;AAQtE,mCAAmC;AACnC,eAAO,MAAM,UAAU,EAAE,WAAW,CAAC,MAAM,CAA+D,CAAA;AAK1G,eAAO,MAAM,aAAa,6BAAS,CAAA;AAEnC,MAAM,MAAM,OAAO,GAAG;IACpB,gBAAgB,EAAE,MAAM,CAAA;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,UAAU,EAAE,OAAO,CAAA;CACpB,CAAA;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,gBAAgB,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,EAAE,CAsDpH;AAgDD,eAAO,MAAM,eAAe,GAAI,GAAG,OAAO,KAAG,MAAqD,CAAA;AAElG,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAM9D;AAED,KAAK,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAA;AAEzE,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CAMnF;AAED,KAAK,aAAa,GACd;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAA;AAErB;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,aAAa,CAM3E"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
const INTERACTIVE_ROLES = new Set([
|
|
2
|
+
'button', 'link', 'textbox', 'searchbox', 'combobox', 'checkbox', 'radio', 'switch', 'tab',
|
|
3
|
+
'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option', 'listbox', 'slider', 'spinbutton', 'treeitem',
|
|
4
|
+
]);
|
|
5
|
+
/** Not interactive, but the decider must see why the form it just sent came back (a snackbar). */
|
|
6
|
+
const NOTICE_ROLES = new Set(['alert', 'status']);
|
|
7
|
+
/** Rows text can be typed into. */
|
|
8
|
+
export const TEXT_ROLES = new Set(['textbox', 'searchbox', 'combobox', 'spinbutton']);
|
|
9
|
+
const VALUE_ROLES = new Set([...TEXT_ROLES, 'slider']);
|
|
10
|
+
const STATE_PROPS = ['checked', 'expanded', 'selected', 'disabled'];
|
|
11
|
+
const MAX_ROWS = 150;
|
|
12
|
+
const NAME_SEARCH_DEPTH = 5;
|
|
13
|
+
export const PASSWORD_MASK = '••••';
|
|
14
|
+
/**
|
|
15
|
+
* Interactive AX nodes whose box is non-empty and intersects the viewport, in AX-tree order,
|
|
16
|
+
* then pointer-only `item` rows in layout order.
|
|
17
|
+
*/
|
|
18
|
+
export function extractControls(ax, layout, testIdAttributes) {
|
|
19
|
+
const byId = new Map(ax.map(n => [n.nodeId, n]));
|
|
20
|
+
const childName = (node, depth) => {
|
|
21
|
+
if (depth <= 0)
|
|
22
|
+
return '';
|
|
23
|
+
for (const id of node.childIds ?? []) {
|
|
24
|
+
const child = byId.get(id);
|
|
25
|
+
if (!child)
|
|
26
|
+
continue;
|
|
27
|
+
const found = child.name?.value || childName(child, depth - 1);
|
|
28
|
+
if (found)
|
|
29
|
+
return found;
|
|
30
|
+
}
|
|
31
|
+
return '';
|
|
32
|
+
};
|
|
33
|
+
const controls = [];
|
|
34
|
+
for (const node of ax) {
|
|
35
|
+
const role = node.role?.value ?? '';
|
|
36
|
+
const id = node.backendDOMNodeId;
|
|
37
|
+
if (node.ignored || !(INTERACTIVE_ROLES.has(role) || NOTICE_ROLES.has(role)) || id === undefined)
|
|
38
|
+
continue;
|
|
39
|
+
const box = layout.nodes.get(id);
|
|
40
|
+
if (!box || !isOnScreen(box.rect, layout.viewport))
|
|
41
|
+
continue;
|
|
42
|
+
const name = node.name?.value || childName(node, NAME_SEARCH_DEPTH);
|
|
43
|
+
// Empty alerts are standing slots (Vuetify's per-field `v-messages`), not news.
|
|
44
|
+
if (NOTICE_ROLES.has(role) && !name)
|
|
45
|
+
continue;
|
|
46
|
+
const testAttr = testIdAttributes.find(a => box.attributes[a]);
|
|
47
|
+
const rawValue = node.value?.value;
|
|
48
|
+
controls.push({
|
|
49
|
+
backendDOMNodeId: id,
|
|
50
|
+
role,
|
|
51
|
+
name,
|
|
52
|
+
testid: testAttr ? box.attributes[testAttr] : undefined,
|
|
53
|
+
value: VALUE_ROLES.has(role) && (typeof rawValue === 'string' || typeof rawValue === 'number') && rawValue !== ''
|
|
54
|
+
? String(rawValue)
|
|
55
|
+
: undefined,
|
|
56
|
+
states: STATE_PROPS.filter(p => isStateOn(node, p)),
|
|
57
|
+
isPassword: box.tag === 'input' && box.attributes['type']?.toLowerCase() === 'password',
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
// A field wrapper (Vuetify `v-field`) often repeats its input's role — one control,
|
|
61
|
+
// two rows. Names do not identify the pair: the wrapper's name turns into the typed
|
|
62
|
+
// value. The AX tree does not nest them (the input is listed apart), so the box does:
|
|
63
|
+
// the inner node carries the value, the wrapper around it goes. Fields only — a
|
|
64
|
+
// parent treeitem boxes its children and is still a control of its own.
|
|
65
|
+
const rectOf = (c) => layout.nodes.get(c.backendDOMNodeId).rect;
|
|
66
|
+
const isWrapper = (outer) => VALUE_ROLES.has(outer.role) && controls.some(inner => inner !== outer && inner.role === outer.role && isLarger(rectOf(outer), rectOf(inner)) && isInside(rectOf(inner), rectOf(outer)));
|
|
67
|
+
const axById = new Map(ax.map(n => [n.backendDOMNodeId, n]));
|
|
68
|
+
const nameOf = (id, attributes) => {
|
|
69
|
+
const node = axById.get(id);
|
|
70
|
+
return node?.name?.value || (node && childName(node, NAME_SEARCH_DEPTH)) || attributes['title'] || attributes['aria-label'] || '';
|
|
71
|
+
};
|
|
72
|
+
return [...controls.filter(c => !isWrapper(c)), ...pointerItems(controls, { layout, testIdAttributes, nameOf })];
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* A `div` with a pointer handler and no interactive role (a widget-bar item) is invisible to
|
|
76
|
+
* the AX filter above; a test id plus `cursor: pointer` marks it as meant to be pressed or dragged.
|
|
77
|
+
* `cursor` is inherited, so a tagged node inside a control is that control, not an item.
|
|
78
|
+
*/
|
|
79
|
+
function pointerItems(controls, { layout, testIdAttributes, nameOf }) {
|
|
80
|
+
const controlRects = controls.map(c => layout.nodes.get(c.backendDOMNodeId).rect);
|
|
81
|
+
const items = [];
|
|
82
|
+
for (const [id, box] of layout.nodes) {
|
|
83
|
+
const testAttr = testIdAttributes.find(a => box.attributes[a]);
|
|
84
|
+
if (!testAttr || box.cursor !== 'pointer' || !isOnScreen(box.rect, layout.viewport))
|
|
85
|
+
continue;
|
|
86
|
+
if (controlRects.some(rect => isInside(box.rect, rect)))
|
|
87
|
+
continue;
|
|
88
|
+
const name = nameOf(id, box.attributes);
|
|
89
|
+
items.push({ backendDOMNodeId: id, role: 'item', name, testid: box.attributes[testAttr], states: [], isPassword: false });
|
|
90
|
+
}
|
|
91
|
+
return items;
|
|
92
|
+
}
|
|
93
|
+
const isLarger = (a, b) => a.width * a.height > b.width * b.height;
|
|
94
|
+
function isInside(inner, outer) {
|
|
95
|
+
return inner.x >= outer.x && inner.y >= outer.y
|
|
96
|
+
&& inner.x + inner.width <= outer.x + outer.width && inner.y + inner.height <= outer.y + outer.height;
|
|
97
|
+
}
|
|
98
|
+
function isOnScreen(rect, viewport) {
|
|
99
|
+
const hasArea = rect.width > 0 && rect.height > 0;
|
|
100
|
+
const isIntersecting = rect.x < viewport.width && rect.y < viewport.height && rect.x + rect.width > 0 && rect.y + rect.height > 0;
|
|
101
|
+
return hasArea && isIntersecting;
|
|
102
|
+
}
|
|
103
|
+
function isStateOn(node, prop) {
|
|
104
|
+
const v = node.properties?.find(p => p.name === prop)?.value.value;
|
|
105
|
+
return v === true || v === 'true' || v === 'mixed';
|
|
106
|
+
}
|
|
107
|
+
/** Identity that survives a re-render: what the decider saw, not the DOM node. */
|
|
108
|
+
const fingerprint = (c) => `${c.role}|${c.name}|${c.testid ?? ''}`;
|
|
109
|
+
export const describeControl = (c) => (c.name ? `${c.role} "${c.name}"` : c.role);
|
|
110
|
+
export function formatControlRow(c, n) {
|
|
111
|
+
const parts = [`[${n}] ${describeControl(c)}${c.testid ? ` testid=${c.testid}` : ''}`];
|
|
112
|
+
if (c.isPassword)
|
|
113
|
+
parts.push(c.value === undefined ? 'empty' : PASSWORD_MASK);
|
|
114
|
+
else if (c.value !== undefined)
|
|
115
|
+
parts.push(JSON.stringify(c.value));
|
|
116
|
+
parts.push(...c.states);
|
|
117
|
+
return parts.join(' · ');
|
|
118
|
+
}
|
|
119
|
+
export function formatControlTable(controls, header) {
|
|
120
|
+
const head = [`act step ${header.step}/${header.maxSteps}`, `${controls.length} controls`, `until ${header.untilLabel}`];
|
|
121
|
+
const rows = controls.slice(0, MAX_ROWS).map((c, i) => formatControlRow(c, i + 1));
|
|
122
|
+
const hidden = controls.length - rows.length;
|
|
123
|
+
if (hidden > 0)
|
|
124
|
+
rows.push(`… ${hidden} more below — act scroll down`);
|
|
125
|
+
return [head.join(' · '), ...rows].join('\n');
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Stale guard: row n of the last printed table, located in a fresh snapshot.
|
|
129
|
+
* Same node still a visible control → it; else the unique control with the same
|
|
130
|
+
* fingerprint; else gone. Never a guess.
|
|
131
|
+
*/
|
|
132
|
+
export function resolveRow(last, current) {
|
|
133
|
+
const same = current.find(c => c.backendDOMNodeId === last.backendDOMNodeId);
|
|
134
|
+
if (same)
|
|
135
|
+
return { control: same };
|
|
136
|
+
const key = fingerprint(last);
|
|
137
|
+
const matches = current.filter(c => fingerprint(c) === key);
|
|
138
|
+
return matches.length === 1 ? { control: matches[0] } : { gone: last };
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/inspectors/controls/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,8 @@ export type DOMSnapshotOptions = {
|
|
|
9
9
|
startRef?: number;
|
|
10
10
|
compact?: boolean;
|
|
11
11
|
maxLines?: number;
|
|
12
|
+
/** `backendDOMNodeId` → test id. A node carrying one is printed even when it has no name. */
|
|
13
|
+
testIds?: ReadonlyMap<number, string>;
|
|
12
14
|
};
|
|
13
15
|
export type DOMSnapshotResult = {
|
|
14
16
|
text: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/inspectors/dom/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEhD,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,gBAAgB,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/inspectors/dom/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEhD,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,gBAAgB,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,6FAA6F;IAC7F,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACtC,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,QAAQ,EAAE,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAQD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAqD9D;AAsID,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CA+CnB;AA8DD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,GAAG,OAAO,CAAM,GACzD,cAAc,CAehB"}
|
|
@@ -64,6 +64,17 @@ export function diffDomText(prev, curr) {
|
|
|
64
64
|
const ALWAYS_SKIP_ROLES = new Set(['InlineTextBox']);
|
|
65
65
|
const SKIP_WHEN_EMPTY_ROLES = new Set(['none', 'generic', 'StaticText']);
|
|
66
66
|
const HARD_MAX_DEPTH = 100;
|
|
67
|
+
function testIdOf(node, ctx) {
|
|
68
|
+
return node.backendDOMNodeId === undefined ? undefined : ctx.testIds?.get(node.backendDOMNodeId);
|
|
69
|
+
}
|
|
70
|
+
function isSkipped(node, role, name, ctx) {
|
|
71
|
+
return SKIP_WHEN_EMPTY_ROLES.has(role) && !name && testIdOf(node, ctx) === undefined;
|
|
72
|
+
}
|
|
73
|
+
function formatLabel(node, role, name, isFallback, ctx) {
|
|
74
|
+
const nameStr = name ? ` "${name}"${isFallback ? ' [fallback]' : ''}` : '';
|
|
75
|
+
const testId = testIdOf(node, ctx);
|
|
76
|
+
return `${role}${nameStr}${testId === undefined ? '' : ` [testid=${testId}]`}`;
|
|
77
|
+
}
|
|
67
78
|
function resolveNameFromChildren(node, nodeMap, depthLimit = 5) {
|
|
68
79
|
if (depthLimit <= 0 || !node.childIds)
|
|
69
80
|
return '';
|
|
@@ -145,7 +156,7 @@ function walkVisibleNodes(nodeId, indent, ctx, onVisit) {
|
|
|
145
156
|
const name = ownName || fallbackName;
|
|
146
157
|
if (ALWAYS_SKIP_ROLES.has(role))
|
|
147
158
|
return;
|
|
148
|
-
const skip =
|
|
159
|
+
const skip = isSkipped(node, role, name, ctx);
|
|
149
160
|
if (!skip) {
|
|
150
161
|
if (nodePassesFilter(node, name, role, ctx)) {
|
|
151
162
|
onVisit(node, name, !ownName && !!fallbackName, indent);
|
|
@@ -160,7 +171,8 @@ function walkVisibleNodes(nodeId, indent, ctx, onVisit) {
|
|
|
160
171
|
}
|
|
161
172
|
}
|
|
162
173
|
}
|
|
163
|
-
function effectiveChildren(node,
|
|
174
|
+
function effectiveChildren(node, ctx) {
|
|
175
|
+
const { nodeMap } = ctx;
|
|
164
176
|
if (!node.childIds)
|
|
165
177
|
return [];
|
|
166
178
|
return node.childIds.filter(childId => {
|
|
@@ -173,9 +185,7 @@ function effectiveChildren(node, nodeMap) {
|
|
|
173
185
|
const childName = child.name?.value ?? '';
|
|
174
186
|
const fallback = !childName ? resolveNameFromChildren(child, nodeMap) : '';
|
|
175
187
|
const resolvedName = childName || fallback;
|
|
176
|
-
|
|
177
|
-
return false;
|
|
178
|
-
return true;
|
|
188
|
+
return !isSkipped(child, childRole, resolvedName, ctx);
|
|
179
189
|
});
|
|
180
190
|
}
|
|
181
191
|
export function formatAccessibilityTree(nodes, options = {}) {
|
|
@@ -190,7 +200,7 @@ export function formatAccessibilityTree(nodes, options = {}) {
|
|
|
190
200
|
const rootNodeId = nodes[0]?.nodeId;
|
|
191
201
|
if (!rootNodeId)
|
|
192
202
|
return { text: '(empty)', refs: [], nextRef };
|
|
193
|
-
const ctx = { nodeMap, lowerFilter: filter?.toLowerCase(), maxDepth };
|
|
203
|
+
const ctx = { nodeMap, lowerFilter: filter?.toLowerCase(), maxDepth, testIds: options.testIds };
|
|
194
204
|
if (!compact) {
|
|
195
205
|
walkVisibleNodes(rootNodeId, 0, ctx, (node, name, isFallback, indent) => {
|
|
196
206
|
const ref = nextRef++;
|
|
@@ -198,9 +208,7 @@ export function formatAccessibilityTree(nodes, options = {}) {
|
|
|
198
208
|
refs.push({ ref, backendDOMNodeId: node.backendDOMNodeId });
|
|
199
209
|
}
|
|
200
210
|
const padding = ' '.repeat(indent);
|
|
201
|
-
|
|
202
|
-
const nameStr = name ? ` "${name}"${isFallback ? ' [fallback]' : ''}` : '';
|
|
203
|
-
lines.push(`${padding}${role}${nameStr} [ref=${ref}]`);
|
|
211
|
+
lines.push(`${padding}${formatLabel(node, node.role?.value ?? '', name, isFallback, ctx)} [ref=${ref}]`);
|
|
204
212
|
});
|
|
205
213
|
}
|
|
206
214
|
else {
|
|
@@ -238,7 +246,7 @@ function walkCompact(nodeId, indent, chain, chainIndent, ctx, sink) {
|
|
|
238
246
|
const name = ownName || fallbackName;
|
|
239
247
|
if (ALWAYS_SKIP_ROLES.has(role))
|
|
240
248
|
return;
|
|
241
|
-
const skip =
|
|
249
|
+
const skip = isSkipped(node, role, name, ctx);
|
|
242
250
|
if (skip) {
|
|
243
251
|
if (node.childIds) {
|
|
244
252
|
for (const childId of node.childIds) {
|
|
@@ -250,17 +258,16 @@ function walkCompact(nodeId, indent, chain, chainIndent, ctx, sink) {
|
|
|
250
258
|
if (!nodePassesFilter(node, name, role, ctx))
|
|
251
259
|
return;
|
|
252
260
|
const ref = sink.allocRef(node.backendDOMNodeId);
|
|
253
|
-
const effChildren = effectiveChildren(node, ctx
|
|
261
|
+
const effChildren = effectiveChildren(node, ctx);
|
|
254
262
|
const isSingleChild = effChildren.length === 1;
|
|
255
|
-
if (isSingleChild && !ownName) {
|
|
263
|
+
if (isSingleChild && !ownName && testIdOf(node, ctx) === undefined) {
|
|
256
264
|
walkCompact(effChildren[0], indent + 1, [...chain, role], chainIndent, ctx, sink);
|
|
257
265
|
return;
|
|
258
266
|
}
|
|
259
267
|
const isFallback = !ownName && !!fallbackName;
|
|
260
|
-
const nameStr = name ? ` "${name}"${isFallback ? ' [fallback]' : ''}` : '';
|
|
261
268
|
const padding = ' '.repeat(chainIndent);
|
|
262
269
|
const chainPrefix = chain.length > 0 ? `${chain.join(' > ')} > ` : '';
|
|
263
|
-
sink.pushLine(`${padding}${chainPrefix}${role}
|
|
270
|
+
sink.pushLine(`${padding}${chainPrefix}${formatLabel(node, role, name, isFallback, ctx)} [ref=${ref}]`);
|
|
264
271
|
if (node.childIds) {
|
|
265
272
|
for (const childId of node.childIds) {
|
|
266
273
|
walkCompact(childId, indent + 1, [], chainIndent + 1, ctx, sink);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/inspectors/dom/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/inspectors/dom/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { PageSession } from '../cdp/types.js';
|
|
2
|
+
import type { ServerResponse } from '../types.js';
|
|
3
|
+
/** What an act run needs from the server. */
|
|
4
|
+
export type ActDeps = {
|
|
5
|
+
/** Replaced by `reconnect` when the window reloads under a step. */
|
|
6
|
+
conn: PageSession;
|
|
7
|
+
invalidateAxCache: () => void;
|
|
8
|
+
/** Fresh session after the window reloaded under us. */
|
|
9
|
+
reconnect: () => Promise<PageSession>;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* A saved `act` run, executed with no model and no settle: each step waits only until
|
|
13
|
+
* its own target is on screen, enabled and uncovered, then acts. First line of the
|
|
14
|
+
* result: `DONE` (until met), `FAIL` (the app did not answer: until never came, or a
|
|
15
|
+
* control stayed disabled or covered — a bug) or `STALE` (a step's control is gone —
|
|
16
|
+
* the script no longer fits the app).
|
|
17
|
+
*/
|
|
18
|
+
export declare function replay({ name, secret, testIdAttribute }: {
|
|
19
|
+
name: string;
|
|
20
|
+
secret?: string;
|
|
21
|
+
testIdAttribute?: string;
|
|
22
|
+
}, deps: ActDeps): Promise<ServerResponse>;
|
|
23
|
+
//# sourceMappingURL=act-replay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"act-replay.d.ts","sourceRoot":"","sources":["../../src/server/act-replay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAElD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAYjD,6CAA6C;AAC7C,MAAM,MAAM,OAAO,GAAG;IACpB,oEAAoE;IACpE,IAAI,EAAE,WAAW,CAAA;IACjB,iBAAiB,EAAE,MAAM,IAAI,CAAA;IAC7B,wDAAwD;IACxD,SAAS,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAA;CACtC,CAAA;AAED;;;;;;GAMG;AACH,wBAAsB,MAAM,CAC1B,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,EAC9F,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,cAAc,CAAC,CAiHzB"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { isDeadSocket } from '../cdp/transport.js';
|
|
2
|
+
import { extractControls } from '../inspectors/controls/index.js';
|
|
3
|
+
import { findByLocator, locatorFromArgs, testIdAttributes, testIdLocator } from './locator.js';
|
|
4
|
+
import { edgePoint, readScript, viewportBox } from './act-script.js';
|
|
5
|
+
const POLL_MS = 50;
|
|
6
|
+
const STEP_TIMEOUT_MS = 10_000;
|
|
7
|
+
const UNTIL_TIMEOUT_MS = 15_000;
|
|
8
|
+
const EXIT_DONE = 0;
|
|
9
|
+
const EXIT_FAIL = 1;
|
|
10
|
+
const EXIT_STALE = 3;
|
|
11
|
+
/**
|
|
12
|
+
* A saved `act` run, executed with no model and no settle: each step waits only until
|
|
13
|
+
* its own target is on screen, enabled and uncovered, then acts. First line of the
|
|
14
|
+
* result: `DONE` (until met), `FAIL` (the app did not answer: until never came, or a
|
|
15
|
+
* control stayed disabled or covered — a bug) or `STALE` (a step's control is gone —
|
|
16
|
+
* the script no longer fits the app).
|
|
17
|
+
*/
|
|
18
|
+
export async function replay({ name, secret, testIdAttribute }, deps) {
|
|
19
|
+
const script = await readScript(name);
|
|
20
|
+
if (!script)
|
|
21
|
+
return { ok: false, error: `No saved script "${name}" — record one with act start … --save ${name}` };
|
|
22
|
+
if (script.steps.some(s => 'isPassword' in s && s.isPassword) && !secret) {
|
|
23
|
+
return { ok: false, error: `"${name}" types a password — set AGENT_VIEW_SECRET` };
|
|
24
|
+
}
|
|
25
|
+
const until = locatorFromArgs({ ...script.until, testIdAttribute });
|
|
26
|
+
if (!until)
|
|
27
|
+
return { ok: false, error: `"${name}" has no done condition — re-record it with act start --until-testid …` };
|
|
28
|
+
const attributes = testIdAttributes(testIdAttribute);
|
|
29
|
+
const t0 = Date.now();
|
|
30
|
+
const elapsed = () => `${((Date.now() - t0) / 1000).toFixed(1)}s`;
|
|
31
|
+
const verdict = (exitCode, line) => ({ ok: true, data: `${line} · ${elapsed()}`, exitCode });
|
|
32
|
+
/** Polls until `probe` yields a value or time runs out; rides over the window reloading. */
|
|
33
|
+
const poll = async (probe, timeoutMs) => {
|
|
34
|
+
const end = Date.now() + timeoutMs;
|
|
35
|
+
for (;;) {
|
|
36
|
+
try {
|
|
37
|
+
const value = await probe(deps.conn);
|
|
38
|
+
if (value !== undefined)
|
|
39
|
+
return value;
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
if (!isDeadSocket(err))
|
|
43
|
+
throw err;
|
|
44
|
+
// Between documents the window is not there yet; the next poll tries again.
|
|
45
|
+
deps.conn = await deps.reconnect().catch(() => deps.conn);
|
|
46
|
+
}
|
|
47
|
+
if (Date.now() > end)
|
|
48
|
+
return undefined;
|
|
49
|
+
await new Promise(r => setTimeout(r, POLL_MS));
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
/** The control, or why it is not usable yet: absent, or present but disabled / covered. */
|
|
53
|
+
const find = async (target, { isEnabledRequired }) => {
|
|
54
|
+
let seen;
|
|
55
|
+
const control = await poll(async (c) => {
|
|
56
|
+
deps.invalidateAxCache();
|
|
57
|
+
const [ax, layout] = await Promise.all([c.getAccessibilityTree(), c.getLayoutSnapshot()]);
|
|
58
|
+
const hit = extractControls(ax, layout, attributes).find(ctl => target.testid ? ctl.testid === target.testid : ctl.role === target.role && ctl.name === target.name);
|
|
59
|
+
seen = undefined;
|
|
60
|
+
if (!hit)
|
|
61
|
+
return undefined;
|
|
62
|
+
if (isEnabledRequired && hit.states.includes('disabled')) {
|
|
63
|
+
seen = 'disabled';
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
let covering;
|
|
67
|
+
try {
|
|
68
|
+
covering = await c.hitTest(hit.backendDOMNodeId, attributes);
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
if (isDeadSocket(err))
|
|
72
|
+
throw err;
|
|
73
|
+
return undefined; // detached between the snapshot and the hit test: look again
|
|
74
|
+
}
|
|
75
|
+
if (covering)
|
|
76
|
+
seen = `covered by ${covering}`;
|
|
77
|
+
return covering ? undefined : hit;
|
|
78
|
+
}, STEP_TIMEOUT_MS);
|
|
79
|
+
return { control, seen };
|
|
80
|
+
};
|
|
81
|
+
const findTestId = (testid) => poll(async (c) => {
|
|
82
|
+
const found = await findByLocator(c, testIdLocator(testid, testIdAttribute));
|
|
83
|
+
return 'error' in found ? undefined : found;
|
|
84
|
+
}, STEP_TIMEOUT_MS);
|
|
85
|
+
const describe = (t) => (t.name ? `${t.role} "${t.name}"` : t.role) + (t.testid ? ` testid=${t.testid}` : '');
|
|
86
|
+
for (const [i, step] of script.steps.entries()) {
|
|
87
|
+
const at = `step ${i + 1}/${script.steps.length}`;
|
|
88
|
+
if (step.op === 'scroll') {
|
|
89
|
+
await poll(async (c) => { await c.scrollViewport(step.direction); return true; }, STEP_TIMEOUT_MS);
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
const { control, seen } = await find(step.target, { isEnabledRequired: step.op !== 'drag' });
|
|
93
|
+
if (!control) {
|
|
94
|
+
// Present but unusable is the app misbehaving; absent is the script out of date.
|
|
95
|
+
return seen
|
|
96
|
+
? verdict(EXIT_FAIL, `FAIL: ${at} ${step.op} ${describe(step.target)} — still ${seen} after ${STEP_TIMEOUT_MS / 1000}s`)
|
|
97
|
+
: verdict(EXIT_STALE, `STALE: ${at} ${step.op} ${describe(step.target)} — not on screen within ${STEP_TIMEOUT_MS / 1000}s`);
|
|
98
|
+
}
|
|
99
|
+
try {
|
|
100
|
+
if (step.op !== 'drag') {
|
|
101
|
+
if (step.op === 'click') {
|
|
102
|
+
await deps.conn.clickByNodeId(control.backendDOMNodeId);
|
|
103
|
+
}
|
|
104
|
+
else if (step.op === 'type') {
|
|
105
|
+
await deps.conn.fillByNodeId(control.backendDOMNodeId, step.isPassword ? secret : step.value ?? '');
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
const outcome = await deps.conn.selectOption(control.backendDOMNodeId, step.value ?? '');
|
|
109
|
+
const reason = outcome === 'no-option' ? `no option "${step.value}"` : 'not a native select';
|
|
110
|
+
if (outcome !== 'ok')
|
|
111
|
+
return verdict(EXIT_STALE, `STALE: ${at} select ${describe(step.target)} — ${reason}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
const to = step.to;
|
|
116
|
+
const dest = !to ? undefined : 'role' in to ? (await find(to, { isEnabledRequired: false })).control : await findTestId(to.testid);
|
|
117
|
+
if (to && !dest) {
|
|
118
|
+
const label = 'role' in to ? describe(to) : `testid=${to.testid}`;
|
|
119
|
+
return verdict(EXIT_STALE, `STALE: ${at} drag target ${label} not found`);
|
|
120
|
+
}
|
|
121
|
+
const from = await deps.conn.getBoxCenter(control.backendDOMNodeId);
|
|
122
|
+
const box = dest ? await deps.conn.getBoxRect(dest.backendDOMNodeId, { scrollIntoView: false }) : await viewportBox(deps.conn);
|
|
123
|
+
await deps.conn.dragBetweenPositions(from, edgePoint(box, step.edge), { mode: 'pointer' });
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
// The window reloaded under the action (login, logout): it went out; the next poll reconnects.
|
|
128
|
+
// Any other failure means the control vanished between finding and acting (a panel
|
|
129
|
+
// that toggled shut): the app is not in the state the script was recorded in.
|
|
130
|
+
if (!isDeadSocket(err)) {
|
|
131
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
132
|
+
return verdict(EXIT_STALE, `STALE: ${at} ${step.op} ${describe(step.target)} — ${reason}`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Split the total: our steps vs the app answering them (auth, reload) — only the first is ours to speed up.
|
|
137
|
+
const stepsTime = elapsed();
|
|
138
|
+
const isMet = await poll(async (c) => ('error' in await findByLocator(c, until) ? undefined : true), UNTIL_TIMEOUT_MS);
|
|
139
|
+
return isMet
|
|
140
|
+
? verdict(EXIT_DONE, `DONE: replay ${name} · ${script.steps.length} steps in ${stepsTime}, then ${until.label}`)
|
|
141
|
+
: verdict(EXIT_FAIL, `FAIL: replay ${name} — steps ran, ${until.label} not visible after ${UNTIL_TIMEOUT_MS / 1000}s`);
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=act-replay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"act-replay.js","sourceRoot":"","sources":["../../src/server/act-replay.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { PageSession, Point, Rect } from '../cdp/types.js';
|
|
2
|
+
/** How a replay finds a control again: its test id, else role + name. */
|
|
3
|
+
export type StepTarget = {
|
|
4
|
+
testid?: string;
|
|
5
|
+
role: string;
|
|
6
|
+
name: string;
|
|
7
|
+
};
|
|
8
|
+
/** A drop target: a row, or any element by its test id. */
|
|
9
|
+
export type DropTarget = StepTarget | {
|
|
10
|
+
testid: string;
|
|
11
|
+
};
|
|
12
|
+
export type RecordedStep = {
|
|
13
|
+
op: 'click' | 'type' | 'select';
|
|
14
|
+
target: StepTarget;
|
|
15
|
+
value?: string;
|
|
16
|
+
isPassword: boolean;
|
|
17
|
+
} | {
|
|
18
|
+
op: 'scroll';
|
|
19
|
+
direction: 'up' | 'down';
|
|
20
|
+
}
|
|
21
|
+
/** `to`: a row, any element by test id, or absent = the viewport. */
|
|
22
|
+
| {
|
|
23
|
+
op: 'drag';
|
|
24
|
+
target: StepTarget;
|
|
25
|
+
to?: DropTarget;
|
|
26
|
+
edge: Edge;
|
|
27
|
+
};
|
|
28
|
+
export type UntilArgs = {
|
|
29
|
+
testid?: string;
|
|
30
|
+
selector?: string;
|
|
31
|
+
};
|
|
32
|
+
export type ActScript = {
|
|
33
|
+
until: UntilArgs;
|
|
34
|
+
steps: RecordedStep[];
|
|
35
|
+
};
|
|
36
|
+
export declare const isScriptName: (name: string | undefined) => name is string;
|
|
37
|
+
/** Steps are stored by what identifies a control across runs, never by row number. Passwords are not stored. */
|
|
38
|
+
export declare function writeScript(name: string, { until, steps }: ActScript): Promise<string>;
|
|
39
|
+
export declare function readScript(name: string): Promise<ActScript | undefined>;
|
|
40
|
+
export declare const EDGES: readonly ["left", "right", "top", "bottom", "center"];
|
|
41
|
+
export type Edge = typeof EDGES[number];
|
|
42
|
+
export declare const isEdge: (value: string) => value is Edge;
|
|
43
|
+
/** Drop point inside `box`, on its midline, inset from `edge` — a centre drop replaces instead of splitting. */
|
|
44
|
+
export declare function edgePoint(box: Rect, edge: Edge): Point;
|
|
45
|
+
export declare function viewportBox(conn: PageSession): Promise<Rect>;
|
|
46
|
+
//# sourceMappingURL=act-script.d.ts.map
|