@testmuai/playwright-bindings 0.1.15 → 0.1.16
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/configure.d.ts.map +1 -1
- package/dist/configure.js +2 -1
- package/dist/configure.js.map +1 -1
- package/dist/helpers/devtools.d.ts +1 -1
- package/dist/helpers/textualAnalyzer/domStructured.d.ts +44 -0
- package/dist/helpers/textualAnalyzer/domStructured.d.ts.map +1 -0
- package/dist/helpers/textualAnalyzer/domStructured.js +242 -0
- package/dist/helpers/textualAnalyzer/domStructured.js.map +1 -0
- package/dist/helpers/textualAnalyzer/evaluate.d.ts +14 -0
- package/dist/helpers/textualAnalyzer/evaluate.d.ts.map +1 -0
- package/dist/helpers/textualAnalyzer/evaluate.js +5 -0
- package/dist/helpers/textualAnalyzer/evaluate.js.map +1 -0
- package/dist/helpers/textualAnalyzer/extractor.d.ts +21 -0
- package/dist/helpers/textualAnalyzer/extractor.d.ts.map +1 -0
- package/dist/helpers/textualAnalyzer/extractor.js +38 -0
- package/dist/helpers/textualAnalyzer/extractor.js.map +1 -0
- package/dist/helpers/textualAnalyzer/heal.d.ts +17 -0
- package/dist/helpers/textualAnalyzer/heal.d.ts.map +1 -0
- package/dist/helpers/textualAnalyzer/heal.js +83 -0
- package/dist/helpers/textualAnalyzer/heal.js.map +1 -0
- package/dist/helpers/textualAnalyzer/index.d.ts +27 -0
- package/dist/helpers/textualAnalyzer/index.d.ts.map +1 -0
- package/dist/helpers/textualAnalyzer/index.js +50 -0
- package/dist/helpers/textualAnalyzer/index.js.map +1 -0
- package/dist/helpers/textualAnalyzer/locatorEnrichment.d.ts +27 -0
- package/dist/helpers/textualAnalyzer/locatorEnrichment.d.ts.map +1 -0
- package/dist/helpers/textualAnalyzer/locatorEnrichment.js +99 -0
- package/dist/helpers/textualAnalyzer/locatorEnrichment.js.map +1 -0
- package/dist/helpers/vision.d.ts +5 -5
- package/dist/helpers/vision.js +3 -3
- package/dist/helpers/vision.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/configure.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../src/configure.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../src/configure.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,aAAa,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,iHAAiH;IACjH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,QAAA,MAAM,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAmBxC,CAAC;AAEF,KAAK,SAAS,GAAG,MAAM,OAAO,QAAQ,CAAC;AAKvC,KAAK,aAAa,GAAG,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAGtD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAEhE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAUtD;AAED,wBAAgB,GAAG,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAErE;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAE9C;AAED,wBAAgB,MAAM,IAAI,IAAI,CAU7B"}
|
package/dist/configure.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { log } from './log.js';
|
|
1
2
|
const DEFAULTS = {
|
|
2
3
|
clipboard: false,
|
|
3
4
|
build: '',
|
|
@@ -27,7 +28,7 @@ export function _registerConfigureHook(hook) {
|
|
|
27
28
|
export function configure(opts) {
|
|
28
29
|
for (const key of Object.keys(opts)) {
|
|
29
30
|
if (!(key in DEFAULTS)) {
|
|
30
|
-
|
|
31
|
+
log.warn(`testmu.configure: unknown key '${key}', ignoring`);
|
|
31
32
|
continue;
|
|
32
33
|
}
|
|
33
34
|
data[key] = opts[key];
|
package/dist/configure.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../src/configure.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../src/configure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AA+B/B,MAAM,QAAQ,GAA+B;IAC3C,SAAS,EAAE,KAAK;IAChB,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,EAAE;IACZ,aAAa,EAAE,EAAE;IACjB,aAAa,EAAE,EAAE;IACjB,gBAAgB,EAAE,KAAK;IACvB,SAAS,EAAE,EAAE;IACb,UAAU,EAAE,EAAE;IACd,eAAe,EAAE,EAAE;IACnB,aAAa,EAAE,EAAE;IACjB,aAAa,EAAE,CAAC;IAChB,sBAAsB,EAAE,KAAK;IAC7B,0BAA0B,EAAE,KAAK;IACjC,SAAS,EAAE,KAAK;CACjB,CAAC;AAIF,MAAM,IAAI,GAA+B,EAAE,GAAG,QAAQ,EAAE,CAAC;AACzD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAa,CAAC;AAGrC,MAAM,KAAK,GAAoB,EAAE,CAAC;AAElC,MAAM,UAAU,sBAAsB,CAAC,IAAmB;IACxD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAsB;IAC9C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAgB,EAAE,CAAC;QACnD,IAAI,CAAC,CAAC,GAAG,IAAI,QAAQ,CAAC,EAAE,CAAC;YACvB,GAAG,CAAC,IAAI,CAAC,kCAAkC,GAAG,aAAa,CAAC,CAAC;YAC7D,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,GAAG,CAAsB,GAAM;IAC7C,OAAO,IAAI,CAAC,GAAG,CAAyB,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,GAAc;IACnC,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,MAAM;IACpB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAgB,EAAE,CAAC;QACvD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAAG,IAAmC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;aAClE,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;YAAG,IAAmC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;;YAC3F,IAAmC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACvD,CAAC;IACD,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,uFAAuF;IACvF,4FAA4F;AAC9F,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* DevTools capture layer for @testmuai/playwright-bindings.
|
|
3
3
|
*
|
|
4
|
-
* Lifecycle
|
|
4
|
+
* Lifecycle:
|
|
5
5
|
* 1. startCapture(page, context) — before user test code
|
|
6
6
|
* 2. User test code runs, events accumulate
|
|
7
7
|
* 3. devtoolsNetworkQuery(code) etc. execute JS code against captured data
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Common structured (accessibility-tree) DOM capture + serializer (TS).
|
|
3
|
+
*
|
|
4
|
+
* The serialize logic produces a stable, nested index space so a recorded
|
|
5
|
+
* extraction's `el(i)` references resolve consistently at record, replay, and heal
|
|
6
|
+
* time, matching the Python binding. It walks a binding-local `AxNode` built from CDP.
|
|
7
|
+
*/
|
|
8
|
+
import type { Page } from 'playwright';
|
|
9
|
+
export interface AxNode {
|
|
10
|
+
role: string;
|
|
11
|
+
name: string;
|
|
12
|
+
description: string;
|
|
13
|
+
value: string;
|
|
14
|
+
url: string | null;
|
|
15
|
+
level: number | null;
|
|
16
|
+
checked: boolean | string | null;
|
|
17
|
+
disabled: boolean;
|
|
18
|
+
selected: boolean | null;
|
|
19
|
+
expanded: boolean | null;
|
|
20
|
+
pressed: boolean | string | null;
|
|
21
|
+
required: boolean;
|
|
22
|
+
readonly: boolean;
|
|
23
|
+
focused: boolean;
|
|
24
|
+
isVisible: boolean | null;
|
|
25
|
+
inViewport: boolean | null;
|
|
26
|
+
backendDomNodeId: number | null;
|
|
27
|
+
children: AxNode[];
|
|
28
|
+
}
|
|
29
|
+
export interface StructuredDom {
|
|
30
|
+
/** nested prompt snapshot */
|
|
31
|
+
text: string;
|
|
32
|
+
/** maps each rendered `[i]` to its CDP backend_dom_node_id for el(i) resolution */
|
|
33
|
+
indexToBackendId: Record<number, number>;
|
|
34
|
+
}
|
|
35
|
+
export declare function buildStructuredDom(root: AxNode): StructuredDom;
|
|
36
|
+
/**
|
|
37
|
+
* Capture the current viewport as a structured (nested) DOM snapshot.
|
|
38
|
+
*
|
|
39
|
+
* getFullAXTree → fetch DOM.getBoxModel boxes for visible non-container nodes →
|
|
40
|
+
* derive isVisible/inViewport → AxNode tree → buildStructuredDom. Returns null if
|
|
41
|
+
* the tree is empty or capture fails.
|
|
42
|
+
*/
|
|
43
|
+
export declare function captureStructuredDom(page: Page): Promise<StructuredDom | null>;
|
|
44
|
+
//# sourceMappingURL=domStructured.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domStructured.d.ts","sourceRoot":"","sources":["../../../src/helpers/textualAnalyzer/domStructured.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,YAAY,CAAC;AAUnD,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAID,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAM9D;AAkKD;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAyDpF"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import { log } from '../../log.js';
|
|
2
|
+
// Structural-container roles that never render — children promoted to the
|
|
3
|
+
// container's depth (mirrors Playwright normalizeGenericRoles for always-redundant
|
|
4
|
+
// roles). 'generic' is handled separately (kept when structural).
|
|
5
|
+
const ALWAYS_COLLAPSE = new Set(['none', 'rootwebarea', 'webarea', 'genericcontainer']);
|
|
6
|
+
// Static-text roles render as `text: ...` without an index.
|
|
7
|
+
const TEXT_ROLES = new Set(['statictext', 'text']);
|
|
8
|
+
export function buildStructuredDom(root) {
|
|
9
|
+
const lines = [];
|
|
10
|
+
const indexToBackendId = {};
|
|
11
|
+
const counter = { value: 0 };
|
|
12
|
+
walk(root, 0, lines, indexToBackendId, counter);
|
|
13
|
+
return { text: lines.join('\n'), indexToBackendId };
|
|
14
|
+
}
|
|
15
|
+
function walk(node, depth, lines, indexToBackendId, counter) {
|
|
16
|
+
const role = (node.role || '').trim().toLowerCase();
|
|
17
|
+
// Visibility / viewport filter — exclude the node but still walk its children
|
|
18
|
+
// at the same depth (so a hidden wrapper doesn't drop visible descendants).
|
|
19
|
+
if (node.isVisible === false || node.inViewport === false) {
|
|
20
|
+
walkChildren(node, depth, lines, indexToBackendId, counter);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
if (TEXT_ROLES.has(role)) {
|
|
24
|
+
if (node.name)
|
|
25
|
+
lines.push(`${' '.repeat(depth)}text: ${node.name}`);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (shouldCollapse(role, node)) {
|
|
29
|
+
walkChildren(node, depth, lines, indexToBackendId, counter);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
counter.value += 1;
|
|
33
|
+
const index = counter.value;
|
|
34
|
+
const indent = ' '.repeat(depth);
|
|
35
|
+
lines.push(renderLine(node, role, index, indent));
|
|
36
|
+
if (node.backendDomNodeId != null)
|
|
37
|
+
indexToBackendId[index] = node.backendDomNodeId;
|
|
38
|
+
if (node.url)
|
|
39
|
+
lines.push(`${' '.repeat(depth + 1)}/url: ${node.url}`);
|
|
40
|
+
walkChildren(node, depth + 1, lines, indexToBackendId, counter);
|
|
41
|
+
}
|
|
42
|
+
function walkChildren(node, depth, lines, indexToBackendId, counter) {
|
|
43
|
+
for (const child of node.children) {
|
|
44
|
+
walk(child, depth, lines, indexToBackendId, counter);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function shouldCollapse(role, node) {
|
|
48
|
+
if (ALWAYS_COLLAPSE.has(role))
|
|
49
|
+
return true;
|
|
50
|
+
if (role === 'generic')
|
|
51
|
+
return visibleChildCount(node) < 2;
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
function visibleChildCount(node) {
|
|
55
|
+
return node.children.filter((c) => c.isVisible !== false && c.inViewport !== false).length;
|
|
56
|
+
}
|
|
57
|
+
function renderLine(node, role, index, indent) {
|
|
58
|
+
const parts = [`${indent}[${index}] ${role} "${node.name}"`];
|
|
59
|
+
if (node.level != null)
|
|
60
|
+
parts.push(`[level=${node.level}]`);
|
|
61
|
+
if (node.checked === true)
|
|
62
|
+
parts.push('[checked]');
|
|
63
|
+
else if (node.checked === 'mixed')
|
|
64
|
+
parts.push('[checked=mixed]');
|
|
65
|
+
if (node.disabled)
|
|
66
|
+
parts.push('[disabled]');
|
|
67
|
+
if (node.selected === true)
|
|
68
|
+
parts.push('[selected]');
|
|
69
|
+
if (node.expanded === true)
|
|
70
|
+
parts.push('[expanded]');
|
|
71
|
+
if (node.pressed === true)
|
|
72
|
+
parts.push('[pressed]');
|
|
73
|
+
if (node.required)
|
|
74
|
+
parts.push('[required]');
|
|
75
|
+
if (node.readonly)
|
|
76
|
+
parts.push('[readonly]');
|
|
77
|
+
if (node.focused)
|
|
78
|
+
parts.push('[focused]');
|
|
79
|
+
if (node.value)
|
|
80
|
+
parts.push(`value="${node.value}"`);
|
|
81
|
+
if (node.description)
|
|
82
|
+
parts.push(`[desc="${node.description}"]`);
|
|
83
|
+
return parts.join(' ');
|
|
84
|
+
}
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
// CDP tree capture (integration glue). Produces an AxNode tree with
|
|
87
|
+
// isVisible/inViewport derived from DOM.getBoxModel boxes so the serializer's
|
|
88
|
+
// viewport filter is effective. Not unit-tested (CDP I/O) — verified via the
|
|
89
|
+
// live export/autoheal end-to-end run.
|
|
90
|
+
// ---------------------------------------------------------------------------
|
|
91
|
+
const SKIP_BOX_ROLES = new Set(['none', 'generic', 'rootwebarea', 'webarea']);
|
|
92
|
+
function isVisible(box) {
|
|
93
|
+
if (box == null)
|
|
94
|
+
return null;
|
|
95
|
+
return box.width > 0 && box.height > 0;
|
|
96
|
+
}
|
|
97
|
+
function isInViewport(box, vw, vh) {
|
|
98
|
+
if (box == null)
|
|
99
|
+
return null;
|
|
100
|
+
const { x, y, width: w, height: h } = box;
|
|
101
|
+
if (x + w < 0 || x > vw)
|
|
102
|
+
return false;
|
|
103
|
+
if (y + h < 0 || y > vh)
|
|
104
|
+
return false;
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
function cdpProp(properties, name) {
|
|
108
|
+
if (!properties)
|
|
109
|
+
return null;
|
|
110
|
+
for (const p of properties) {
|
|
111
|
+
if (p['name'] === name) {
|
|
112
|
+
const v = p['value'];
|
|
113
|
+
return typeof v === 'object' && v !== null ? v.value : null;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
function axValue(node, key) {
|
|
119
|
+
const info = node[key];
|
|
120
|
+
return typeof info === 'object' && info !== null
|
|
121
|
+
? String(info.value ?? '')
|
|
122
|
+
: '';
|
|
123
|
+
}
|
|
124
|
+
function parseNode(node, byId, vw, vh) {
|
|
125
|
+
const props = node['properties'];
|
|
126
|
+
const box = node['_bounding_box'] ?? null;
|
|
127
|
+
const children = [];
|
|
128
|
+
for (const cid of node['childIds'] ?? []) {
|
|
129
|
+
const child = byId.get(cid);
|
|
130
|
+
if (child)
|
|
131
|
+
children.push(parseNode(child, byId, vw, vh));
|
|
132
|
+
}
|
|
133
|
+
const checked = cdpProp(props, 'checked');
|
|
134
|
+
const pressed = cdpProp(props, 'pressed');
|
|
135
|
+
const levelRaw = cdpProp(props, 'level');
|
|
136
|
+
return {
|
|
137
|
+
role: axValue(node, 'role'),
|
|
138
|
+
name: axValue(node, 'name'),
|
|
139
|
+
description: axValue(node, 'description'),
|
|
140
|
+
value: axValue(node, 'value'),
|
|
141
|
+
url: cdpProp(props, 'url') ?? null,
|
|
142
|
+
level: typeof levelRaw === 'number' ? levelRaw : (levelRaw != null ? Number(levelRaw) : null),
|
|
143
|
+
checked: checked ?? null,
|
|
144
|
+
disabled: Boolean(cdpProp(props, 'disabled')),
|
|
145
|
+
selected: cdpProp(props, 'selected') ?? null,
|
|
146
|
+
expanded: cdpProp(props, 'expanded') ?? null,
|
|
147
|
+
pressed: pressed ?? null,
|
|
148
|
+
required: Boolean(cdpProp(props, 'required')),
|
|
149
|
+
readonly: Boolean(cdpProp(props, 'readonly')),
|
|
150
|
+
focused: Boolean(cdpProp(props, 'focused')),
|
|
151
|
+
isVisible: isVisible(box),
|
|
152
|
+
inViewport: isInViewport(box, vw, vh),
|
|
153
|
+
backendDomNodeId: node['backendDOMNodeId'] ?? null,
|
|
154
|
+
children,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
async function viewport(page) {
|
|
158
|
+
const vp = page.viewportSize();
|
|
159
|
+
if (vp && vp.width && vp.height)
|
|
160
|
+
return { vw: vp.width, vh: vp.height };
|
|
161
|
+
try {
|
|
162
|
+
const dims = await page.evaluate(() => ({ width: window.innerWidth, height: window.innerHeight }));
|
|
163
|
+
if (dims && dims.width && dims.height)
|
|
164
|
+
return { vw: dims.width, vh: dims.height };
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
// fall through to default
|
|
168
|
+
}
|
|
169
|
+
return { vw: 1280, vh: 800 };
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Capture the current viewport as a structured (nested) DOM snapshot.
|
|
173
|
+
*
|
|
174
|
+
* getFullAXTree → fetch DOM.getBoxModel boxes for visible non-container nodes →
|
|
175
|
+
* derive isVisible/inViewport → AxNode tree → buildStructuredDom. Returns null if
|
|
176
|
+
* the tree is empty or capture fails.
|
|
177
|
+
*/
|
|
178
|
+
export async function captureStructuredDom(page) {
|
|
179
|
+
const { vw, vh } = await viewport(page);
|
|
180
|
+
let cdp = null;
|
|
181
|
+
try {
|
|
182
|
+
cdp = await page.context().newCDPSession(page);
|
|
183
|
+
const result = (await cdp.send('Accessibility.getFullAXTree', {}));
|
|
184
|
+
const nodes = result.nodes ?? [];
|
|
185
|
+
if (nodes.length === 0)
|
|
186
|
+
return null;
|
|
187
|
+
const boxTargets = [];
|
|
188
|
+
for (const node of nodes) {
|
|
189
|
+
const bid = node['backendDOMNodeId'];
|
|
190
|
+
if (!bid)
|
|
191
|
+
continue;
|
|
192
|
+
const role = axValue(node, 'role').trim().toLowerCase();
|
|
193
|
+
if (!SKIP_BOX_ROLES.has(role))
|
|
194
|
+
boxTargets.push(bid);
|
|
195
|
+
}
|
|
196
|
+
const boxes = new Map();
|
|
197
|
+
const fetchBox = async (bid) => {
|
|
198
|
+
try {
|
|
199
|
+
const r = (await cdp.send('DOM.getBoxModel', { backendNodeId: bid }));
|
|
200
|
+
const border = r.model?.border ?? [];
|
|
201
|
+
if (border.length >= 8) {
|
|
202
|
+
const xs = [border[0], border[2], border[4], border[6]];
|
|
203
|
+
const ys = [border[1], border[3], border[5], border[7]];
|
|
204
|
+
const x = Math.min(...xs);
|
|
205
|
+
const y = Math.min(...ys);
|
|
206
|
+
boxes.set(bid, { x, y, width: Math.max(...xs) - x, height: Math.max(...ys) - y });
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
// node has no box (detached / display:none) — leave unset
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
if (boxTargets.length)
|
|
214
|
+
await Promise.all(boxTargets.map(fetchBox));
|
|
215
|
+
const byId = new Map();
|
|
216
|
+
for (const node of nodes) {
|
|
217
|
+
const nid = node['nodeId'];
|
|
218
|
+
if (!nid)
|
|
219
|
+
continue;
|
|
220
|
+
const bid = node['backendDOMNodeId'];
|
|
221
|
+
if (bid && boxes.has(bid))
|
|
222
|
+
node['_bounding_box'] = boxes.get(bid);
|
|
223
|
+
byId.set(nid, node);
|
|
224
|
+
}
|
|
225
|
+
const root = nodes.find((n) => !n['parentId']) ?? nodes[0];
|
|
226
|
+
const tree = parseNode(root, byId, vw, vh);
|
|
227
|
+
return buildStructuredDom(tree);
|
|
228
|
+
}
|
|
229
|
+
catch (e) {
|
|
230
|
+
log.warn(`[dom_structured] capture failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
231
|
+
return null;
|
|
232
|
+
}
|
|
233
|
+
finally {
|
|
234
|
+
if (cdp) {
|
|
235
|
+
try {
|
|
236
|
+
await cdp.detach();
|
|
237
|
+
}
|
|
238
|
+
catch { /* ignore */ }
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=domStructured.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domStructured.js","sourceRoot":"","sources":["../../../src/helpers/textualAnalyzer/domStructured.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Execute a recorded `(els) => {...}` extractor against resolved element handles.
|
|
3
|
+
*
|
|
4
|
+
* Playwright JS — UNLIKE Playwright Python — does NOT auto-invoke a *string*
|
|
5
|
+
* function expression with its arg (it returns the function object, which
|
|
6
|
+
* serializes to undefined). The python binding relies on that auto-invoke
|
|
7
|
+
* (`page.evaluate(wrapped_js, handles)`). To get identical behaviour here we
|
|
8
|
+
* reconstruct the recorded arrow as a real function whose source Playwright
|
|
9
|
+
* compiles natively via Runtime.callFunctionOn (NOT page-side eval — so no CSP
|
|
10
|
+
* `unsafe-eval` dependency), then call it with the handles array as its `els` arg.
|
|
11
|
+
*/
|
|
12
|
+
import type { Page, ElementHandle } from 'playwright';
|
|
13
|
+
export declare function evaluateWrapped(page: Page, wrappedJs: string, handles: ElementHandle[]): Promise<unknown>;
|
|
14
|
+
//# sourceMappingURL=evaluate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../../src/helpers/textualAnalyzer/evaluate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEtD,wBAAsB,eAAe,CACnC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GACtD,OAAO,CAAC,OAAO,CAAC,CAGlB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../../src/helpers/textualAnalyzer/evaluate.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAU,EAAE,SAAiB,EAAE,OAAwB;IAEvD,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,KAAK,EAAE,WAAW,SAAS,SAAS,CAA8B,CAAC;IAC3F,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAoB,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure helpers for executing a recorded textual extraction expression.
|
|
3
|
+
*
|
|
4
|
+
* The extraction code may reference snapshot nodes via `el(i)`. We parse those
|
|
5
|
+
* indices, resolve each to a stable element handle, and wrap the code so `el(i)`
|
|
6
|
+
* returns the matching handle. The wrap format and index alignment are kept stable
|
|
7
|
+
* so a recorded extraction runs identically at record, replay, and export time
|
|
8
|
+
* across the Python and TypeScript bindings.
|
|
9
|
+
*/
|
|
10
|
+
/** Return the el(i) indices referenced in `code`, unique, first-seen order. */
|
|
11
|
+
export declare function parseElReferences(code: string): number[];
|
|
12
|
+
/**
|
|
13
|
+
* Wrap `code` for `page.evaluate(fn, els)`.
|
|
14
|
+
*
|
|
15
|
+
* `els` is the array of resolved element handles in `indices` order; `el(i)` maps
|
|
16
|
+
* each referenced snapshot index to its handle's position. A boolean result is
|
|
17
|
+
* coerced to a lowercase `'true'`/`'false'` STRING so the value matches the
|
|
18
|
+
* analyzer node's runtime normalization; `null` and every other type pass through.
|
|
19
|
+
*/
|
|
20
|
+
export declare function wrapExtractorCode(code: string, indices: number[]): string;
|
|
21
|
+
//# sourceMappingURL=extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../../../src/helpers/textualAnalyzer/extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAOxD;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAUzE"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure helpers for executing a recorded textual extraction expression.
|
|
3
|
+
*
|
|
4
|
+
* The extraction code may reference snapshot nodes via `el(i)`. We parse those
|
|
5
|
+
* indices, resolve each to a stable element handle, and wrap the code so `el(i)`
|
|
6
|
+
* returns the matching handle. The wrap format and index alignment are kept stable
|
|
7
|
+
* so a recorded extraction runs identically at record, replay, and export time
|
|
8
|
+
* across the Python and TypeScript bindings.
|
|
9
|
+
*/
|
|
10
|
+
const EL_REFERENCE = /\bel\(\s*(\d+)\s*\)/g;
|
|
11
|
+
/** Return the el(i) indices referenced in `code`, unique, first-seen order. */
|
|
12
|
+
export function parseElReferences(code) {
|
|
13
|
+
const seen = [];
|
|
14
|
+
for (const match of code.matchAll(EL_REFERENCE)) {
|
|
15
|
+
const index = parseInt(match[1], 10);
|
|
16
|
+
if (!seen.includes(index))
|
|
17
|
+
seen.push(index);
|
|
18
|
+
}
|
|
19
|
+
return seen;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Wrap `code` for `page.evaluate(fn, els)`.
|
|
23
|
+
*
|
|
24
|
+
* `els` is the array of resolved element handles in `indices` order; `el(i)` maps
|
|
25
|
+
* each referenced snapshot index to its handle's position. A boolean result is
|
|
26
|
+
* coerced to a lowercase `'true'`/`'false'` STRING so the value matches the
|
|
27
|
+
* analyzer node's runtime normalization; `null` and every other type pass through.
|
|
28
|
+
*/
|
|
29
|
+
export function wrapExtractorCode(code, indices) {
|
|
30
|
+
const posMap = indices.map((index, position) => `${index}: ${position}`).join(', ');
|
|
31
|
+
return ('(els) => {\n' +
|
|
32
|
+
` const __m = {${posMap}};\n` +
|
|
33
|
+
' const el = (i) => els[__m[i]];\n' +
|
|
34
|
+
` const __v = (${code});\n` +
|
|
35
|
+
" return (typeof __v === 'boolean' ? String(__v) : __v);\n" +
|
|
36
|
+
'}');
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../../src/helpers/textualAnalyzer/extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,YAAY,GAAG,sBAAsB,CAAC;AAE5C,+EAA+E;AAC/E,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAW,EAAE,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,OAAiB;IAC/D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,GAAG,KAAK,KAAK,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpF,OAAO,CACL,cAAc;QACd,kBAAkB,MAAM,MAAM;QAC9B,oCAAoC;QACpC,kBAAkB,IAAI,MAAM;QAC5B,4DAA4D;QAC5D,GAAG,CACJ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TextualAnalyzer heal: regenerate the WHOLE extraction against a fresh page (TS).
|
|
3
|
+
*
|
|
4
|
+
* Flow: capture a fresh structured DOM snapshot → POST the heal endpoint
|
|
5
|
+
* (/api/v1/textual_analyzer/heal) to regenerate the el(i) code → resolve each el(i) to a
|
|
6
|
+
* stable locator → page.evaluate(wrap(code), handles).
|
|
7
|
+
*
|
|
8
|
+
* Returns a HealOutcome on success, or null on any miss (no usable code, a locator
|
|
9
|
+
* that won't resolve, or a null/empty result) — the caller then FAILS the step
|
|
10
|
+
* (there is no vision fallback for a textual heal).
|
|
11
|
+
*/
|
|
12
|
+
import type { Page } from 'playwright';
|
|
13
|
+
export interface HealOutcome {
|
|
14
|
+
value: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function runHeal(page: Page, query: string, expectedValue: string | null, needsUnitConversion: boolean): Promise<HealOutcome | null>;
|
|
17
|
+
//# sourceMappingURL=heal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heal.d.ts","sourceRoot":"","sources":["../../../src/helpers/textualAnalyzer/heal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,IAAI,EAAiB,MAAM,YAAY,CAAC;AAWtD,MAAM,WAAW,WAAW;IAK1B,KAAK,EAAE,MAAM,CAAC;CACf;AAkCD,wBAAsB,OAAO,CAC3B,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,EAAE,mBAAmB,EAAE,OAAO,GACpF,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAsC7B"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { config } from '../../config.js';
|
|
2
|
+
import { fetchWithAuth } from '../../http.js';
|
|
3
|
+
import { log } from '../../log.js';
|
|
4
|
+
import { captureStructuredDom } from './domStructured.js';
|
|
5
|
+
import { enrichElementLocator } from './locatorEnrichment.js';
|
|
6
|
+
import { evaluateWrapped } from './evaluate.js';
|
|
7
|
+
import { parseElReferences, wrapExtractorCode } from './extractor.js';
|
|
8
|
+
const HEAL_TIMEOUT_MS = 60_000;
|
|
9
|
+
function healUrl() {
|
|
10
|
+
return config.current.aiApiHost.replace(/\/+$/, '') + '/api/v1/textual_analyzer/heal';
|
|
11
|
+
}
|
|
12
|
+
async function postHeal(query, domSnapshot, expectedValue, needsUnit) {
|
|
13
|
+
const body = {
|
|
14
|
+
query,
|
|
15
|
+
dom_snapshot: domSnapshot,
|
|
16
|
+
expected_value: expectedValue,
|
|
17
|
+
needs_unit_conversion: needsUnit,
|
|
18
|
+
};
|
|
19
|
+
try {
|
|
20
|
+
const resp = await fetchWithAuth(healUrl(), {
|
|
21
|
+
method: 'POST',
|
|
22
|
+
headers: { 'content-type': 'application/json' },
|
|
23
|
+
body: JSON.stringify(body),
|
|
24
|
+
signal: AbortSignal.timeout(HEAL_TIMEOUT_MS),
|
|
25
|
+
});
|
|
26
|
+
if (!resp.ok) {
|
|
27
|
+
// 404 = no usable code / low confidence -> miss (fail the step).
|
|
28
|
+
log.helper(`[textual_analyzer] heal endpoint ${healUrl()} -> ${resp.status}`);
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
return (await resp.json());
|
|
32
|
+
}
|
|
33
|
+
catch (e) {
|
|
34
|
+
log.warn(`[textual_analyzer] heal POST failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export async function runHeal(page, query, expectedValue, needsUnitConversion) {
|
|
39
|
+
const structured = await captureStructuredDom(page);
|
|
40
|
+
if (structured == null || !structured.text)
|
|
41
|
+
return null;
|
|
42
|
+
const resp = await postHeal(query, structured.text, expectedValue, needsUnitConversion);
|
|
43
|
+
if (!resp || !resp['code'])
|
|
44
|
+
return null;
|
|
45
|
+
const code = String(resp['code']);
|
|
46
|
+
const indices = parseElReferences(code);
|
|
47
|
+
const handles = [];
|
|
48
|
+
const cdp = await page.context().newCDPSession(page);
|
|
49
|
+
try {
|
|
50
|
+
for (const i of indices) {
|
|
51
|
+
const bid = structured.indexToBackendId[i];
|
|
52
|
+
if (bid == null)
|
|
53
|
+
return null;
|
|
54
|
+
const enriched = await enrichElementLocator(cdp, { backendDomNodeId: bid });
|
|
55
|
+
const loc = enriched?.locator;
|
|
56
|
+
if (!loc)
|
|
57
|
+
return null;
|
|
58
|
+
const handle = await page.locator(loc).first().elementHandle();
|
|
59
|
+
if (handle == null)
|
|
60
|
+
return null;
|
|
61
|
+
handles.push(handle);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
try {
|
|
66
|
+
await cdp.detach();
|
|
67
|
+
}
|
|
68
|
+
catch { /* ignore */ }
|
|
69
|
+
}
|
|
70
|
+
const wrapped = wrapExtractorCode(code, indices);
|
|
71
|
+
let value;
|
|
72
|
+
try {
|
|
73
|
+
value = await evaluateWrapped(page, wrapped, handles);
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
log.warn(`[textual_analyzer] heal evaluate failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
if (value == null || value === '')
|
|
80
|
+
return null; // regenerated code still missed
|
|
81
|
+
return { value: String(value) };
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=heal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heal.js","sourceRoot":"","sources":["../../../src/helpers/textualAnalyzer/heal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* testmu.textualAnalyzer — the public helper exported test code calls (TS).
|
|
3
|
+
*
|
|
4
|
+
* Replaces the old raw `page.evaluate(wrappedJs, [handles...])`. Per recorded
|
|
5
|
+
* locator: STRICT visibility check (small timeout). If ALL are visible, resolve
|
|
6
|
+
* handles and run the recorded wrappedJs (the fast happy path). If ANY is not
|
|
7
|
+
* visible, AUTOHEAL — regenerate the whole extraction (runHeal) and recover the
|
|
8
|
+
* value. If heal misses, FAIL the step (no vision fallback).
|
|
9
|
+
*/
|
|
10
|
+
import type { Page } from 'playwright';
|
|
11
|
+
export declare class TextualAnalyzerHealFailed extends Error {
|
|
12
|
+
}
|
|
13
|
+
export interface TextualAnalyzerOptions {
|
|
14
|
+
wrappedJs: string;
|
|
15
|
+
locators: string[];
|
|
16
|
+
query: string;
|
|
17
|
+
expectedValue?: string | null;
|
|
18
|
+
needsUnitConversion?: boolean;
|
|
19
|
+
operator?: string;
|
|
20
|
+
transforms?: string[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Execute a recorded textual_visual extraction, healing on locator drift.
|
|
24
|
+
* Returns the extracted value (string; transforms applied downstream as today).
|
|
25
|
+
*/
|
|
26
|
+
export declare function textualAnalyzer(page: Page, opts: TextualAnalyzerOptions): Promise<string | null>;
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/helpers/textualAnalyzer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,IAAI,EAAiB,MAAM,YAAY,CAAC;AAStD,qBAAa,yBAA0B,SAAQ,KAAK;CAAG;AAEvD,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAsBD;;;GAGG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwBtG"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { log, preview, repr } from '../../log.js';
|
|
2
|
+
import { evaluateWrapped } from './evaluate.js';
|
|
3
|
+
import { runHeal } from './heal.js';
|
|
4
|
+
// Strict "visible with eyes" gate — a recorded locator must be actually visible
|
|
5
|
+
// within this window or we heal. Small so we don't wait the default per locator.
|
|
6
|
+
const VISIBLE_TIMEOUT_MS = 1500;
|
|
7
|
+
export class TextualAnalyzerHealFailed extends Error {
|
|
8
|
+
}
|
|
9
|
+
async function staleAndHandles(page, locators) {
|
|
10
|
+
const stale = [];
|
|
11
|
+
const handles = [];
|
|
12
|
+
for (const loc of locators) {
|
|
13
|
+
const target = page.locator(loc).first();
|
|
14
|
+
try {
|
|
15
|
+
await target.waitFor({ state: 'visible', timeout: VISIBLE_TIMEOUT_MS });
|
|
16
|
+
const handle = await target.elementHandle();
|
|
17
|
+
if (handle == null)
|
|
18
|
+
stale.push(loc);
|
|
19
|
+
else
|
|
20
|
+
handles.push(handle);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
// timeout / detached / strict-mode
|
|
24
|
+
stale.push(loc);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return { stale, handles };
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Execute a recorded textual_visual extraction, healing on locator drift.
|
|
31
|
+
* Returns the extracted value (string; transforms applied downstream as today).
|
|
32
|
+
*/
|
|
33
|
+
export async function textualAnalyzer(page, opts) {
|
|
34
|
+
const { wrappedJs, locators, query, expectedValue = null, needsUnitConversion = false } = opts;
|
|
35
|
+
const { stale, handles } = await staleAndHandles(page, locators);
|
|
36
|
+
// Happy path — every recorded locator visible.
|
|
37
|
+
if (stale.length === 0 && handles.length === locators.length) {
|
|
38
|
+
return (await evaluateWrapped(page, wrappedJs, handles));
|
|
39
|
+
}
|
|
40
|
+
// Drift — regenerate the whole extraction.
|
|
41
|
+
log.helper(`[textual_analyzer] ${stale.length}/${locators.length} locators not visible -> heal ` +
|
|
42
|
+
`(query=${repr(preview(query, 60).replace(/\.\.\.$/, ''))})`);
|
|
43
|
+
const outcome = await runHeal(page, query, expectedValue, needsUnitConversion);
|
|
44
|
+
if (outcome == null) {
|
|
45
|
+
throw new TextualAnalyzerHealFailed(`textualAnalyzer could not heal extraction for query=${repr(query)}; stale locators: ${JSON.stringify(stale)}`);
|
|
46
|
+
}
|
|
47
|
+
log.helper(`[textual_analyzer] healed locator drift -> ${repr(outcome.value)}`);
|
|
48
|
+
return outcome.value;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/helpers/textualAnalyzer/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,gFAAgF;AAChF,iFAAiF;AACjF,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC,MAAM,OAAO,yBAA0B,SAAQ,KAAK;CAAG;AAYvD,KAAK,UAAU,eAAe,CAC5B,IAAU,EAAE,QAAkB;IAE9B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAoB,EAAE,CAAC;IACpC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAC;YACxE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;YAC5C,IAAI,MAAM,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;gBAC/B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,mCAAmC;YACnC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAU,EAAE,IAA4B;IAC5E,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,EAAE,mBAAmB,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;IAE/F,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAEjE,+CAA+C;IAC/C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC7D,OAAO,CAAC,MAAM,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAkB,CAAC;IAC5E,CAAC;IAED,2CAA2C;IAC3C,GAAG,CAAC,MAAM,CACR,sBAAsB,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,gCAAgC;QACrF,UAAU,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,GAAG,CAC7D,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,mBAAmB,CAAC,CAAC;IAC/E,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,MAAM,IAAI,yBAAyB,CACjC,uDAAuD,IAAI,CAAC,KAAK,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAC/G,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,MAAM,CAAC,8CAA8C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChF,OAAO,OAAO,CAAC,KAAK,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Synthesize a stable selector for a DOM element via CDP (TS).
|
|
3
|
+
*
|
|
4
|
+
* Strategy:
|
|
5
|
+
* 1. backendDomNodeId → DOM.resolveNode + Runtime.callFunctionOn → JS selector
|
|
6
|
+
* 2. boundingBox only → Runtime.evaluate elementFromPoint(cx, cy) → same JS
|
|
7
|
+
* 3. else → null
|
|
8
|
+
*
|
|
9
|
+
* JS selector priority: #id → [data-testid="…"]/[data-test*] → tag[aria-label="…"]
|
|
10
|
+
* → minimal CSS path (tag:nth-of-type) → null.
|
|
11
|
+
*/
|
|
12
|
+
import type { CDPSession } from 'playwright';
|
|
13
|
+
export interface EnrichTarget {
|
|
14
|
+
backendDomNodeId?: number | null;
|
|
15
|
+
boundingBox?: {
|
|
16
|
+
x: number;
|
|
17
|
+
y: number;
|
|
18
|
+
width: number;
|
|
19
|
+
height: number;
|
|
20
|
+
} | null;
|
|
21
|
+
}
|
|
22
|
+
/** Return {locator, locatorType} for a flat-DOM element, or null. */
|
|
23
|
+
export declare function enrichElementLocator(cdp: CDPSession, element: EnrichTarget): Promise<{
|
|
24
|
+
locator: string;
|
|
25
|
+
locatorType: string;
|
|
26
|
+
} | null>;
|
|
27
|
+
//# sourceMappingURL=locatorEnrichment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locatorEnrichment.d.ts","sourceRoot":"","sources":["../../../src/helpers/textualAnalyzer/locatorEnrichment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,MAAM,WAAW,YAAY;IAC3B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAC9E;AAiFD,qEAAqE;AACrE,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,GACrC,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAiB1D"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { log } from '../../log.js';
|
|
2
|
+
// Kept BYTE-FOR-BYTE identical to the python _SELECTOR_JS so heal-time selector
|
|
3
|
+
// synthesis is the same across bindings.
|
|
4
|
+
const SELECTOR_JS = String.raw `
|
|
5
|
+
function() {
|
|
6
|
+
const el = this;
|
|
7
|
+
if (!el || el.nodeType !== 1) return null;
|
|
8
|
+
|
|
9
|
+
if (el.id && /^[A-Za-z][\w-]*$/.test(el.id)) {
|
|
10
|
+
return {locator: '#' + CSS.escape(el.id), locator_type: 'css'};
|
|
11
|
+
}
|
|
12
|
+
for (const a of ['data-testid','data-test-id','data-test','data-qa']) {
|
|
13
|
+
const v = el.getAttribute(a);
|
|
14
|
+
if (v) {
|
|
15
|
+
return {
|
|
16
|
+
locator: '[' + a + '="' + v.replace(/"/g,'\\"') + '"]',
|
|
17
|
+
locator_type: 'css',
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const aria = el.getAttribute('aria-label');
|
|
22
|
+
if (aria) {
|
|
23
|
+
return {
|
|
24
|
+
locator: el.tagName.toLowerCase() + '[aria-label="' + aria.replace(/"/g,'\\"') + '"]',
|
|
25
|
+
locator_type: 'css',
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function path(node) {
|
|
29
|
+
const segs = [];
|
|
30
|
+
while (node && node.nodeType === 1 && node !== document.body) {
|
|
31
|
+
let seg = node.tagName.toLowerCase();
|
|
32
|
+
if (node.parentNode) {
|
|
33
|
+
const sib = Array.from(node.parentNode.children || []).filter(
|
|
34
|
+
c => c.tagName === node.tagName
|
|
35
|
+
);
|
|
36
|
+
if (sib.length > 1) {
|
|
37
|
+
seg += ':nth-of-type(' + (sib.indexOf(node) + 1) + ')';
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
segs.unshift(seg);
|
|
41
|
+
node = node.parentNode;
|
|
42
|
+
}
|
|
43
|
+
return segs.join(' > ');
|
|
44
|
+
}
|
|
45
|
+
const css = path(el);
|
|
46
|
+
if (css) return {locator: css, locator_type: 'css'};
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
`;
|
|
50
|
+
async function resolveObjectId(cdp, element) {
|
|
51
|
+
const bid = element.backendDomNodeId;
|
|
52
|
+
if (bid != null) {
|
|
53
|
+
try {
|
|
54
|
+
const r = (await cdp.send('DOM.resolveNode', { backendNodeId: bid }));
|
|
55
|
+
return r.object?.objectId ?? null;
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
log.warn(`[autoheal] DOM.resolveNode(backendNodeId=${bid}) failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const bbox = element.boundingBox;
|
|
62
|
+
if (bbox) {
|
|
63
|
+
const cx = Math.floor(bbox.x + bbox.width / 2);
|
|
64
|
+
const cy = Math.floor(bbox.y + bbox.height / 2);
|
|
65
|
+
try {
|
|
66
|
+
const r = (await cdp.send('Runtime.evaluate', {
|
|
67
|
+
expression: `document.elementFromPoint(${cx},${cy})`,
|
|
68
|
+
returnByValue: false,
|
|
69
|
+
}));
|
|
70
|
+
return r.result?.objectId ?? null;
|
|
71
|
+
}
|
|
72
|
+
catch (e) {
|
|
73
|
+
log.warn(`[autoheal] elementFromPoint(${cx},${cy}) failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
/** Return {locator, locatorType} for a flat-DOM element, or null. */
|
|
79
|
+
export async function enrichElementLocator(cdp, element) {
|
|
80
|
+
const objectId = await resolveObjectId(cdp, element);
|
|
81
|
+
if (!objectId)
|
|
82
|
+
return null;
|
|
83
|
+
try {
|
|
84
|
+
const resp = (await cdp.send('Runtime.callFunctionOn', {
|
|
85
|
+
objectId,
|
|
86
|
+
functionDeclaration: SELECTOR_JS,
|
|
87
|
+
returnByValue: true,
|
|
88
|
+
}));
|
|
89
|
+
const r = resp.result?.value;
|
|
90
|
+
if (r && r.locator) {
|
|
91
|
+
return { locator: r.locator, locatorType: r.locator_type ?? 'css' };
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch (e) {
|
|
95
|
+
log.warn(`[autoheal] selector synthesis failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
96
|
+
}
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=locatorEnrichment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locatorEnrichment.js","sourceRoot":"","sources":["../../../src/helpers/textualAnalyzer/locatorEnrichment.ts"],"names":[],"mappings":"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"}
|
package/dist/helpers/vision.d.ts
CHANGED
|
@@ -42,8 +42,8 @@ interface AxNode {
|
|
|
42
42
|
} | unknown;
|
|
43
43
|
}
|
|
44
44
|
/**
|
|
45
|
-
* Convert CDP Accessibility.getFullAXTree nodes to
|
|
46
|
-
* 1-based indexing
|
|
45
|
+
* Convert CDP Accessibility.getFullAXTree nodes to the flat-DOM format.
|
|
46
|
+
* 1-based indexing matches the recorder's flat-DOM format. PY parity.
|
|
47
47
|
*/
|
|
48
48
|
export declare function _buildFlatDom(a11yNodes: AxNode[]): FlatDomElement[];
|
|
49
49
|
/**
|
|
@@ -67,7 +67,7 @@ export interface VisionQueryOptions {
|
|
|
67
67
|
returnType?: string;
|
|
68
68
|
/**
|
|
69
69
|
* When 'true' or 'false', signals a boolean visibility/state check.
|
|
70
|
-
*
|
|
70
|
+
* The backend analyzer activates its boolean-check path and
|
|
71
71
|
* returns 'true'/'false' instead of free-form page text. Omit for
|
|
72
72
|
* value extraction.
|
|
73
73
|
*/
|
|
@@ -87,8 +87,8 @@ export interface TextualQueryOptions {
|
|
|
87
87
|
returnType?: string;
|
|
88
88
|
/**
|
|
89
89
|
* When 'true' or 'false', signals a boolean state check (e.g.
|
|
90
|
-
* checkbox.checked, radio.selected, aria-expanded).
|
|
91
|
-
* DOM analyzer activates its
|
|
90
|
+
* checkbox.checked, radio.selected, aria-expanded). The backend
|
|
91
|
+
* DOM analyzer activates its boolean-check path and
|
|
92
92
|
* returns 'true'/'false' instead of 'checked'/'on'/element text.
|
|
93
93
|
* Applied only on the extract step.
|
|
94
94
|
*/
|
package/dist/helpers/vision.js
CHANGED
|
@@ -82,8 +82,8 @@ function() {
|
|
|
82
82
|
}
|
|
83
83
|
`;
|
|
84
84
|
/**
|
|
85
|
-
* Convert CDP Accessibility.getFullAXTree nodes to
|
|
86
|
-
* 1-based indexing
|
|
85
|
+
* Convert CDP Accessibility.getFullAXTree nodes to the flat-DOM format.
|
|
86
|
+
* 1-based indexing matches the recorder's flat-DOM format. PY parity.
|
|
87
87
|
*/
|
|
88
88
|
export function _buildFlatDom(a11yNodes) {
|
|
89
89
|
const result = [];
|
|
@@ -216,7 +216,7 @@ async function _postAnalyzer(body, timeoutMs) {
|
|
|
216
216
|
}
|
|
217
217
|
return (await resp.json());
|
|
218
218
|
}
|
|
219
|
-
/** Get a CDP snapshot of a single element matching
|
|
219
|
+
/** Get a CDP snapshot of a single element matching the recorder's format. PY parity. */
|
|
220
220
|
async function _getElementSnapshot(cdp, backendDomNodeId) {
|
|
221
221
|
const empty = {
|
|
222
222
|
tag_name: '', text_content: '', attributes: {}, styles: {}, states: {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vision.js","sourceRoot":"","sources":["../../src/helpers/vision.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vision.js","sourceRoot":"","sources":["../../src/helpers/vision.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ import { executeJs } from './helpers/executeJs.js';
|
|
|
8
8
|
import { executeApi } from './helpers/executeApi.js';
|
|
9
9
|
import { executeDb } from './helpers/executeDb.js';
|
|
10
10
|
import { visionQuery, textualQuery, visionWait, visionAction, getVisionCoordinates } from './helpers/vision.js';
|
|
11
|
+
import { textualAnalyzer } from './helpers/textualAnalyzer/index.js';
|
|
11
12
|
import { verifyAssertion, evaluateBranch } from './helpers/assertion.js';
|
|
12
13
|
import { evaluateNetworkAssertion, networkQuery } from './helpers/network.js';
|
|
13
14
|
import { evaluateMath } from './helpers/math.js';
|
|
@@ -32,6 +33,7 @@ declare const testmu: {
|
|
|
32
33
|
visionWait: typeof visionWait;
|
|
33
34
|
visionAction: typeof visionAction;
|
|
34
35
|
getVisionCoordinates: typeof getVisionCoordinates;
|
|
36
|
+
textualAnalyzer: typeof textualAnalyzer;
|
|
35
37
|
verifyAssertion: typeof verifyAssertion;
|
|
36
38
|
evaluateBranch: typeof evaluateBranch;
|
|
37
39
|
evaluateNetworkAssertion: typeof evaluateNetworkAssertion;
|
|
@@ -67,6 +69,7 @@ export type { DbRequest } from './helpers/executeDb.js';
|
|
|
67
69
|
export type { AssertionTree, AssertionResult, SubCheck } from './helpers/assertion.js';
|
|
68
70
|
export type { NetworkNode, NetworkLeaf, NetworkComposite, NetworkQueryOptions } from './helpers/network.js';
|
|
69
71
|
export type { VisionCoordinates } from './helpers/vision.js';
|
|
72
|
+
export type { TextualAnalyzerOptions } from './helpers/textualAnalyzer/index.js';
|
|
70
73
|
export { ExecuteJsError } from './helpers/executeJs.js';
|
|
71
74
|
export type { StepOpts, StepState, OnFailure } from './step.js';
|
|
72
75
|
export type { ElementBounds, EndStepOpts } from './reporters/index.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEvE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EACL,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,oBAAoB,EAC1E,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,oBAAoB,EAAE,oBAAoB,EAC1C,oBAAoB,EAAE,oBAAoB,EAC1C,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,sBAAsB,EACtE,wBAAwB,EACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAkC,MAAM,uBAAuB,CAAC;AAEtF,QAAA,MAAM,MAAM
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -8,6 +8,7 @@ import { executeJs } from './helpers/executeJs.js';
|
|
|
8
8
|
import { executeApi } from './helpers/executeApi.js';
|
|
9
9
|
import { executeDb } from './helpers/executeDb.js';
|
|
10
10
|
import { visionQuery, textualQuery, visionWait, visionAction, getVisionCoordinates, } from './helpers/vision.js';
|
|
11
|
+
import { textualAnalyzer } from './helpers/textualAnalyzer/index.js';
|
|
11
12
|
import { verifyAssertion, evaluateBranch } from './helpers/assertion.js';
|
|
12
13
|
import { evaluateNetworkAssertion, networkQuery } from './helpers/network.js';
|
|
13
14
|
import { evaluateMath } from './helpers/math.js';
|
|
@@ -23,6 +24,7 @@ const testmu = {
|
|
|
23
24
|
configure, test, step, run,
|
|
24
25
|
executeJs, executeApi, executeDb,
|
|
25
26
|
visionQuery, textualQuery, visionWait, visionAction, getVisionCoordinates,
|
|
27
|
+
textualAnalyzer,
|
|
26
28
|
verifyAssertion, evaluateBranch,
|
|
27
29
|
evaluateNetworkAssertion, networkQuery,
|
|
28
30
|
evaluateMath, smartuiSnapshot,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEvE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EACL,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,oBAAoB,GAC1E,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,oBAAoB,EAAE,oBAAoB,EAC1C,oBAAoB,EAAE,oBAAoB,EAC1C,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,sBAAsB,EACtE,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAkC,MAAM,uBAAuB,CAAC;AAEtF,MAAM,MAAM,GAAG;IACb,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG;IAC1B,SAAS,EAAE,UAAU,EAAE,SAAS;IAChC,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,oBAAoB;IACzE,eAAe,EAAE,cAAc;IAC/B,wBAAwB,EAAE,YAAY;IACtC,YAAY,EAAE,eAAe;IAC7B,SAAS,EAAE,SAAS;IACpB,mBAAmB,EAAE,cAAc;IACnC,aAAa;IACb,oBAAoB,EAAE,oBAAoB;IAC1C,oBAAoB,EAAE,oBAAoB;IAC1C,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,sBAAsB;IACtE,wBAAwB;IACxB,aAAa;CACd,CAAC;AAEF,eAAe,MAAM,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,CAAC;AAOxE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEvE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EACL,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,oBAAoB,GAC1E,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,oBAAoB,EAAE,oBAAoB,EAC1C,oBAAoB,EAAE,oBAAoB,EAC1C,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,sBAAsB,EACtE,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAkC,MAAM,uBAAuB,CAAC;AAEtF,MAAM,MAAM,GAAG;IACb,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG;IAC1B,SAAS,EAAE,UAAU,EAAE,SAAS;IAChC,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,oBAAoB;IACzE,eAAe;IACf,eAAe,EAAE,cAAc;IAC/B,wBAAwB,EAAE,YAAY;IACtC,YAAY,EAAE,eAAe;IAC7B,SAAS,EAAE,SAAS;IACpB,mBAAmB,EAAE,cAAc;IACnC,aAAa;IACb,oBAAoB,EAAE,oBAAoB;IAC1C,oBAAoB,EAAE,oBAAoB;IAC1C,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,sBAAsB;IACtE,wBAAwB;IACxB,aAAa;CACd,CAAC;AAEF,eAAe,MAAM,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,CAAC;AAOxE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAMvE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC"}
|