playwriter 0.0.56 → 0.0.58
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/a11y-client.js +194 -0
- package/dist/aria-snapshot.d.ts +134 -72
- package/dist/aria-snapshot.d.ts.map +1 -1
- package/dist/aria-snapshot.js +934 -786
- package/dist/aria-snapshot.js.map +1 -1
- package/dist/aria-snapshot.test.js +146 -23
- package/dist/aria-snapshot.test.js.map +1 -1
- package/dist/aria-snapshot.unit.test.d.ts +2 -0
- package/dist/aria-snapshot.unit.test.d.ts.map +1 -0
- package/dist/aria-snapshot.unit.test.js +500 -0
- package/dist/aria-snapshot.unit.test.js.map +1 -0
- package/dist/bippy.js +1 -1
- package/dist/cdp-relay.d.ts.map +1 -1
- package/dist/cdp-relay.js +547 -170
- package/dist/cdp-relay.js.map +1 -1
- package/dist/cdp-session.d.ts +24 -29
- package/dist/cdp-session.d.ts.map +1 -1
- package/dist/cdp-session.js +25 -145
- package/dist/cdp-session.js.map +1 -1
- package/dist/clean-html.d.ts +1 -1
- package/dist/clean-html.d.ts.map +1 -1
- package/dist/clean-html.js +18 -26
- package/dist/clean-html.js.map +1 -1
- package/dist/cli.js +163 -29
- package/dist/cli.js.map +1 -1
- package/dist/debugger-examples-types.d.ts +5 -5
- package/dist/debugger-examples-types.d.ts.map +1 -1
- package/dist/debugger.d.ts.map +1 -1
- package/dist/debugger.js +0 -1
- package/dist/debugger.js.map +1 -1
- package/dist/diff-utils.d.ts +20 -0
- package/dist/diff-utils.d.ts.map +1 -0
- package/dist/diff-utils.js +53 -0
- package/dist/diff-utils.js.map +1 -0
- package/dist/diff-utils.test.d.ts +2 -0
- package/dist/diff-utils.test.d.ts.map +1 -0
- package/dist/diff-utils.test.js +137 -0
- package/dist/diff-utils.test.js.map +1 -0
- package/dist/editor.d.ts.map +1 -1
- package/dist/editor.js +36 -9
- package/dist/editor.js.map +1 -1
- package/dist/executor.d.ts +32 -4
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +305 -109
- package/dist/executor.js.map +1 -1
- package/dist/executor.unit.test.d.ts +2 -0
- package/dist/executor.unit.test.d.ts.map +1 -0
- package/dist/executor.unit.test.js +78 -0
- package/dist/executor.unit.test.js.map +1 -0
- package/dist/extension-connection.test.d.ts +2 -0
- package/dist/extension-connection.test.d.ts.map +1 -0
- package/dist/extension-connection.test.js +522 -0
- package/dist/extension-connection.test.js.map +1 -0
- package/dist/ghost-browser.d.ts +62 -0
- package/dist/ghost-browser.d.ts.map +1 -0
- package/dist/ghost-browser.js +107 -0
- package/dist/ghost-browser.js.map +1 -0
- package/dist/htmlrewrite.d.ts.map +1 -1
- package/dist/htmlrewrite.js +157 -1
- package/dist/htmlrewrite.js.map +1 -1
- package/dist/htmlrewrite.test.js +5849 -11860
- package/dist/htmlrewrite.test.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/kill-port.d.ts +11 -0
- package/dist/kill-port.d.ts.map +1 -0
- package/dist/kill-port.js +151 -0
- package/dist/kill-port.js.map +1 -0
- package/dist/page-markdown.d.ts +40 -0
- package/dist/page-markdown.d.ts.map +1 -0
- package/dist/page-markdown.js +181 -0
- package/dist/page-markdown.js.map +1 -0
- package/dist/prompt.md +290 -52
- package/dist/protocol.d.ts +113 -1
- package/dist/protocol.d.ts.map +1 -1
- package/dist/react-source.d.ts +1 -1
- package/dist/react-source.d.ts.map +1 -1
- package/dist/react-source.js +0 -1
- package/dist/react-source.js.map +1 -1
- package/dist/readability.js +1660 -0
- package/dist/recording-relay.d.ts +47 -0
- package/dist/recording-relay.d.ts.map +1 -0
- package/dist/recording-relay.js +217 -0
- package/dist/recording-relay.js.map +1 -0
- package/dist/relay-client.js +2 -2
- package/dist/relay-client.js.map +1 -1
- package/dist/relay-core.test.d.ts +2 -0
- package/dist/relay-core.test.d.ts.map +1 -0
- package/dist/relay-core.test.js +823 -0
- package/dist/relay-core.test.js.map +1 -0
- package/dist/relay-navigation.test.d.ts +2 -0
- package/dist/relay-navigation.test.d.ts.map +1 -0
- package/dist/relay-navigation.test.js +490 -0
- package/dist/relay-navigation.test.js.map +1 -0
- package/dist/relay-session.test.d.ts +2 -0
- package/dist/relay-session.test.d.ts.map +1 -0
- package/dist/relay-session.test.js +1037 -0
- package/dist/relay-session.test.js.map +1 -0
- package/dist/screen-recording.d.ts +79 -0
- package/dist/screen-recording.d.ts.map +1 -0
- package/dist/screen-recording.js +117 -0
- package/dist/screen-recording.js.map +1 -0
- package/dist/selector-generator.js +1 -1
- package/dist/snapshot-tools.test.d.ts +2 -0
- package/dist/snapshot-tools.test.d.ts.map +1 -0
- package/dist/snapshot-tools.test.js +814 -0
- package/dist/snapshot-tools.test.js.map +1 -0
- package/dist/styles-api.md +1 -1
- package/dist/styles.d.ts +1 -1
- package/dist/styles.d.ts.map +1 -1
- package/dist/styles.js +0 -1
- package/dist/styles.js.map +1 -1
- package/dist/{mcp.test.d.ts → test-declarations.d.ts} +4 -1
- package/dist/test-declarations.d.ts.map +1 -0
- package/dist/test-declarations.js +2 -0
- package/dist/test-declarations.js.map +1 -0
- package/dist/test-utils.d.ts +27 -2
- package/dist/test-utils.d.ts.map +1 -1
- package/dist/test-utils.js +108 -5
- package/dist/test-utils.js.map +1 -1
- package/dist/utils.d.ts +3 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +19 -5
- package/dist/utils.js.map +1 -1
- package/dist/wait-for-page-load.d.ts +1 -1
- package/dist/wait-for-page-load.d.ts.map +1 -1
- package/package.json +9 -6
- package/src/__snapshots__/ax-debug/github-ax-tree.json +40735 -0
- package/src/__snapshots__/ax-debug/github-dom-flat.json +41418 -0
- package/src/__snapshots__/ax-debug/hackernews-ax-tree.json +53112 -0
- package/src/__snapshots__/ax-debug/hackernews-dom-flat.json +16322 -0
- package/src/__snapshots__/x.com.processed.html +684 -975
- package/src/__snapshots__/x.com.processed.withStyles.html +89 -2066
- package/src/a11y-client.ts +240 -0
- package/src/aria-snapshot.test.ts +163 -27
- package/src/aria-snapshot.ts +1121 -978
- package/src/aria-snapshot.unit.test.ts +557 -0
- package/src/aria-snapshots/github-content.md +77 -0
- package/src/aria-snapshots/github-interactive.txt +190 -246
- package/src/aria-snapshots/github-raw.txt +307 -369
- package/src/aria-snapshots/hackernews-content.md +3 -0
- package/src/aria-snapshots/hackernews-interactive.txt +474 -399
- package/src/aria-snapshots/hackernews-raw.txt +424 -884
- package/src/assets/aria-labels-github.png +0 -0
- package/src/assets/aria-labels-google.png +0 -0
- package/src/assets/aria-labels-hacker-news.png +0 -0
- package/src/cdp-relay.ts +660 -199
- package/src/cdp-session.ts +39 -182
- package/src/clean-html.ts +21 -33
- package/src/cli.ts +203 -35
- package/src/debugger-examples-types.ts +5 -5
- package/src/debugger.ts +3 -4
- package/src/diff-utils.test.ts +152 -0
- package/src/diff-utils.ts +73 -0
- package/src/editor.ts +40 -12
- package/src/executor.ts +359 -117
- package/src/executor.unit.test.ts +90 -0
- package/src/extension-connection.test.ts +633 -0
- package/src/ghost-browser.ts +151 -0
- package/src/htmlrewrite.test.ts +5850 -11859
- package/src/htmlrewrite.ts +174 -1
- package/src/index.ts +3 -1
- package/src/kill-port.ts +167 -0
- package/src/page-markdown.ts +240 -0
- package/src/protocol.ts +139 -1
- package/src/react-source.ts +3 -4
- package/src/recording-relay.ts +267 -0
- package/src/relay-client.ts +2 -2
- package/src/relay-core.test.ts +932 -0
- package/src/relay-navigation.test.ts +593 -0
- package/src/relay-session.test.ts +1286 -0
- package/src/screen-recording.ts +191 -0
- package/src/skill.md +299 -57
- package/src/snapshot-tools.test.ts +966 -0
- package/src/snapshots/hacker-news-accessibility-full.md +79 -0
- package/src/snapshots/hacker-news-accessibility-interactive.md +42 -0
- package/src/snapshots/hacker-news-content.md +21 -0
- package/src/snapshots/page-markdown-output.txt +16 -0
- package/src/snapshots/shadcn-ui-accessibility-full.md +192 -0
- package/src/snapshots/shadcn-ui-accessibility-interactive.md +131 -0
- package/src/snapshots/shadcn-ui-content.md +13 -0
- package/src/styles.ts +4 -5
- package/src/test-declarations.ts +13 -0
- package/src/test-utils.ts +129 -5
- package/src/utils.ts +30 -5
- package/src/wait-for-page-load.ts +1 -1
- package/dist/mcp.test.d.ts.map +0 -1
- package/dist/mcp.test.js +0 -3278
- package/dist/mcp.test.js.map +0 -1
- package/src/aria-snapshots/github-compact.txt +0 -369
- package/src/aria-snapshots/github-interactive-dedup.txt +0 -246
- package/src/aria-snapshots/github-interactive-flat.txt +0 -125
- package/src/aria-snapshots/hackernews-compact.txt +0 -748
- package/src/aria-snapshots/hackernews-interactive-dedup.txt +0 -399
- package/src/aria-snapshots/hackernews-interactive-flat.txt +0 -230
- package/src/assets/aria-labels-github-snapshot.txt +0 -369
- package/src/assets/aria-labels-google-snapshot.txt +0 -31
- package/src/assets/aria-labels-hacker-news-snapshot.txt +0 -884
- package/src/assets/framer.html +0 -4174
- package/src/mcp.test.ts +0 -3937
- package/src/snapshots/hacker-news-initial-accessibility.md +0 -105
- package/src/snapshots/shadcn-ui-accessibility.md +0 -144
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
(() => {
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __moduleCache = /* @__PURE__ */ new WeakMap;
|
|
7
|
+
var __toCommonJS = (from) => {
|
|
8
|
+
var entry = __moduleCache.get(from), desc;
|
|
9
|
+
if (entry)
|
|
10
|
+
return entry;
|
|
11
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function")
|
|
13
|
+
__getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
|
|
14
|
+
get: () => from[key],
|
|
15
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
16
|
+
}));
|
|
17
|
+
__moduleCache.set(from, entry);
|
|
18
|
+
return entry;
|
|
19
|
+
};
|
|
20
|
+
var __export = (target, all) => {
|
|
21
|
+
for (var name in all)
|
|
22
|
+
__defProp(target, name, {
|
|
23
|
+
get: all[name],
|
|
24
|
+
enumerable: true,
|
|
25
|
+
configurable: true,
|
|
26
|
+
set: (newValue) => all[name] = () => newValue
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
// src/a11y-client.ts
|
|
31
|
+
var exports_a11y_client = {};
|
|
32
|
+
__export(exports_a11y_client, {
|
|
33
|
+
hideA11yLabels: () => hideA11yLabels
|
|
34
|
+
});
|
|
35
|
+
var LABELS_CONTAINER_ID = "__playwriter_labels__";
|
|
36
|
+
var LABELS_TIMER_KEY = "__playwriter_labels_timer__";
|
|
37
|
+
var ROLE_COLORS = {
|
|
38
|
+
link: ["#FFF785", "#FFC542", "#E3BE23"],
|
|
39
|
+
button: ["#FFE0B2", "#FFCC80", "#FFB74D"],
|
|
40
|
+
textbox: ["#FFCDD2", "#EF9A9A", "#E57373"],
|
|
41
|
+
combobox: ["#F8BBD0", "#F48FB1", "#F06292"],
|
|
42
|
+
searchbox: ["#F8BBD0", "#F48FB1", "#F06292"],
|
|
43
|
+
checkbox: ["#C8E6C9", "#A5D6A7", "#81C784"],
|
|
44
|
+
radio: ["#C8E6C9", "#A5D6A7", "#81C784"],
|
|
45
|
+
slider: ["#BBDEFB", "#90CAF9", "#64B5F6"],
|
|
46
|
+
spinbutton: ["#BBDEFB", "#90CAF9", "#64B5F6"],
|
|
47
|
+
switch: ["#D1C4E9", "#B39DDB", "#9575CD"],
|
|
48
|
+
menuitem: ["#FFE0B2", "#FFCC80", "#FFB74D"],
|
|
49
|
+
menuitemcheckbox: ["#FFE0B2", "#FFCC80", "#FFB74D"],
|
|
50
|
+
menuitemradio: ["#FFE0B2", "#FFCC80", "#FFB74D"],
|
|
51
|
+
option: ["#FFE0B2", "#FFCC80", "#FFB74D"],
|
|
52
|
+
tab: ["#FFE0B2", "#FFCC80", "#FFB74D"],
|
|
53
|
+
treeitem: ["#FFE0B2", "#FFCC80", "#FFB74D"],
|
|
54
|
+
img: ["#B3E5FC", "#81D4FA", "#4FC3F7"],
|
|
55
|
+
video: ["#B3E5FC", "#81D4FA", "#4FC3F7"],
|
|
56
|
+
audio: ["#B3E5FC", "#81D4FA", "#4FC3F7"]
|
|
57
|
+
};
|
|
58
|
+
var DEFAULT_COLORS = ["#FFF9C4", "#FFF59D", "#FFEB3B"];
|
|
59
|
+
function renderA11yLabels(labels) {
|
|
60
|
+
const doc = document;
|
|
61
|
+
const win = window;
|
|
62
|
+
if (win[LABELS_TIMER_KEY]) {
|
|
63
|
+
win.clearTimeout(win[LABELS_TIMER_KEY]);
|
|
64
|
+
win[LABELS_TIMER_KEY] = null;
|
|
65
|
+
}
|
|
66
|
+
doc.getElementById(LABELS_CONTAINER_ID)?.remove();
|
|
67
|
+
const container = doc.createElement("div");
|
|
68
|
+
container.id = LABELS_CONTAINER_ID;
|
|
69
|
+
container.style.cssText = "position:absolute;left:0;top:0;z-index:2147483647;pointer-events:none;";
|
|
70
|
+
const style = doc.createElement("style");
|
|
71
|
+
style.textContent = `
|
|
72
|
+
.__pw_label__ {
|
|
73
|
+
position: absolute;
|
|
74
|
+
font: bold 12px Helvetica, Arial, sans-serif;
|
|
75
|
+
padding: 1px 4px;
|
|
76
|
+
border-radius: 3px;
|
|
77
|
+
color: black;
|
|
78
|
+
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.6);
|
|
79
|
+
white-space: nowrap;
|
|
80
|
+
}
|
|
81
|
+
`;
|
|
82
|
+
container.appendChild(style);
|
|
83
|
+
const svg = doc.createElementNS("http://www.w3.org/2000/svg", "svg");
|
|
84
|
+
svg.style.cssText = "position:absolute;left:0;top:0;pointer-events:none;overflow:visible;";
|
|
85
|
+
svg.setAttribute("width", `${doc.documentElement.scrollWidth}`);
|
|
86
|
+
svg.setAttribute("height", `${doc.documentElement.scrollHeight}`);
|
|
87
|
+
const defs = doc.createElementNS("http://www.w3.org/2000/svg", "defs");
|
|
88
|
+
svg.appendChild(defs);
|
|
89
|
+
const markerCache = {};
|
|
90
|
+
function getArrowMarkerId(color) {
|
|
91
|
+
if (markerCache[color]) {
|
|
92
|
+
return markerCache[color];
|
|
93
|
+
}
|
|
94
|
+
const markerId = `arrow-${color.replace("#", "")}`;
|
|
95
|
+
const marker = doc.createElementNS("http://www.w3.org/2000/svg", "marker");
|
|
96
|
+
marker.setAttribute("id", markerId);
|
|
97
|
+
marker.setAttribute("viewBox", "0 0 10 10");
|
|
98
|
+
marker.setAttribute("refX", "9");
|
|
99
|
+
marker.setAttribute("refY", "5");
|
|
100
|
+
marker.setAttribute("markerWidth", "6");
|
|
101
|
+
marker.setAttribute("markerHeight", "6");
|
|
102
|
+
marker.setAttribute("orient", "auto-start-reverse");
|
|
103
|
+
const path = doc.createElementNS("http://www.w3.org/2000/svg", "path");
|
|
104
|
+
path.setAttribute("d", "M 0 0 L 10 5 L 0 10 z");
|
|
105
|
+
path.setAttribute("fill", color);
|
|
106
|
+
marker.appendChild(path);
|
|
107
|
+
defs.appendChild(marker);
|
|
108
|
+
markerCache[color] = markerId;
|
|
109
|
+
return markerId;
|
|
110
|
+
}
|
|
111
|
+
container.appendChild(svg);
|
|
112
|
+
const placedLabels = [];
|
|
113
|
+
const LABEL_HEIGHT = 17;
|
|
114
|
+
const LABEL_CHAR_WIDTH = 7;
|
|
115
|
+
const viewportLeft = win.scrollX;
|
|
116
|
+
const viewportTop = win.scrollY;
|
|
117
|
+
const viewportRight = viewportLeft + win.innerWidth;
|
|
118
|
+
const viewportBottom = viewportTop + win.innerHeight;
|
|
119
|
+
let count = 0;
|
|
120
|
+
for (const { ref, role, box } of labels) {
|
|
121
|
+
const rectLeft = box.x;
|
|
122
|
+
const rectTop = box.y;
|
|
123
|
+
const rectRight = rectLeft + box.width;
|
|
124
|
+
const rectBottom = rectTop + box.height;
|
|
125
|
+
if (box.width <= 0 || box.height <= 0) {
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
if (rectRight < viewportLeft || rectLeft > viewportRight || rectBottom < viewportTop || rectTop > viewportBottom) {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
const labelWidth = ref.length * LABEL_CHAR_WIDTH + 8;
|
|
132
|
+
const labelLeft = rectLeft;
|
|
133
|
+
const labelTop = Math.max(0, rectTop - LABEL_HEIGHT);
|
|
134
|
+
const labelRect = {
|
|
135
|
+
left: labelLeft,
|
|
136
|
+
top: labelTop,
|
|
137
|
+
right: labelLeft + labelWidth,
|
|
138
|
+
bottom: labelTop + LABEL_HEIGHT
|
|
139
|
+
};
|
|
140
|
+
let overlaps = false;
|
|
141
|
+
for (const placed of placedLabels) {
|
|
142
|
+
if (labelRect.left < placed.right && labelRect.right > placed.left && labelRect.top < placed.bottom && labelRect.bottom > placed.top) {
|
|
143
|
+
overlaps = true;
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
if (overlaps) {
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
const [gradTop, gradBottom, border] = ROLE_COLORS[role] || DEFAULT_COLORS;
|
|
151
|
+
const label = doc.createElement("div");
|
|
152
|
+
label.className = "__pw_label__";
|
|
153
|
+
label.textContent = ref;
|
|
154
|
+
label.style.background = `linear-gradient(to bottom, ${gradTop} 0%, ${gradBottom} 100%)`;
|
|
155
|
+
label.style.border = `1px solid ${border}`;
|
|
156
|
+
label.style.left = `${labelLeft}px`;
|
|
157
|
+
label.style.top = `${labelTop}px`;
|
|
158
|
+
container.appendChild(label);
|
|
159
|
+
const line = doc.createElementNS("http://www.w3.org/2000/svg", "line");
|
|
160
|
+
const labelCenterX = labelLeft + labelWidth / 2;
|
|
161
|
+
const labelBottomY = labelTop + LABEL_HEIGHT;
|
|
162
|
+
const elementCenterX = rectLeft + box.width / 2;
|
|
163
|
+
const elementCenterY = rectTop + box.height / 2;
|
|
164
|
+
line.setAttribute("x1", `${labelCenterX}`);
|
|
165
|
+
line.setAttribute("y1", `${labelBottomY}`);
|
|
166
|
+
line.setAttribute("x2", `${elementCenterX}`);
|
|
167
|
+
line.setAttribute("y2", `${elementCenterY}`);
|
|
168
|
+
line.setAttribute("stroke", border);
|
|
169
|
+
line.setAttribute("stroke-width", "1.5");
|
|
170
|
+
line.setAttribute("marker-end", `url(#${getArrowMarkerId(border)})`);
|
|
171
|
+
svg.appendChild(line);
|
|
172
|
+
placedLabels.push(labelRect);
|
|
173
|
+
count++;
|
|
174
|
+
}
|
|
175
|
+
doc.documentElement.appendChild(container);
|
|
176
|
+
win[LABELS_TIMER_KEY] = win.setTimeout(() => {
|
|
177
|
+
doc.getElementById(LABELS_CONTAINER_ID)?.remove();
|
|
178
|
+
win[LABELS_TIMER_KEY] = null;
|
|
179
|
+
}, 30000);
|
|
180
|
+
return count;
|
|
181
|
+
}
|
|
182
|
+
function hideA11yLabels() {
|
|
183
|
+
const win = window;
|
|
184
|
+
if (win[LABELS_TIMER_KEY]) {
|
|
185
|
+
win.clearTimeout(win[LABELS_TIMER_KEY]);
|
|
186
|
+
win[LABELS_TIMER_KEY] = null;
|
|
187
|
+
}
|
|
188
|
+
document.getElementById(LABELS_CONTAINER_ID)?.remove();
|
|
189
|
+
}
|
|
190
|
+
globalThis.__a11y = {
|
|
191
|
+
renderA11yLabels,
|
|
192
|
+
hideA11yLabels
|
|
193
|
+
};
|
|
194
|
+
})();
|
package/dist/aria-snapshot.d.ts
CHANGED
|
@@ -1,60 +1,24 @@
|
|
|
1
|
-
import type { Page, Locator, ElementHandle } from 'playwright-core';
|
|
2
|
-
|
|
1
|
+
import type { Page, Locator, ElementHandle, Frame, FrameLocator } from '@xmorse/playwright-core';
|
|
2
|
+
import type { Protocol } from 'devtools-protocol';
|
|
3
|
+
import type { ICDPSession } from './cdp-session.js';
|
|
4
|
+
export type SnapshotFormat = 'raw';
|
|
3
5
|
export declare const DEFAULT_SNAPSHOT_FORMAT: SnapshotFormat;
|
|
4
|
-
/**
|
|
5
|
-
* Apply a snapshot format transformation with error handling.
|
|
6
|
-
* If processing fails, logs the error and returns the raw snapshot.
|
|
7
|
-
*/
|
|
8
|
-
export declare function formatSnapshot(snapshot: string, format: SnapshotFormat, logger?: {
|
|
9
|
-
error: (...args: unknown[]) => void;
|
|
10
|
-
}): string;
|
|
11
|
-
export interface CompactSnapshotOptions {
|
|
12
|
-
/** Remove [cursor=pointer] hints (default: true) */
|
|
13
|
-
removeCursorPointer?: boolean;
|
|
14
|
-
/** Remove [active] markers (default: true) */
|
|
15
|
-
removeActive?: boolean;
|
|
16
|
-
/** Remove empty structural rows/cells (default: true) */
|
|
17
|
-
removeEmptyStructural?: boolean;
|
|
18
|
-
/** Remove text separators like "|" (default: true) */
|
|
19
|
-
removeTextSeparators?: boolean;
|
|
20
|
-
/** Remove /url: metadata lines (default: false) */
|
|
21
|
-
removeUrls?: boolean;
|
|
22
|
-
}
|
|
23
|
-
export interface InteractiveSnapshotOptions {
|
|
24
|
-
/** Keep /url: metadata for links (default: false) */
|
|
25
|
-
keepUrls?: boolean;
|
|
26
|
-
/** Keep image elements (default: true) */
|
|
27
|
-
keepImages?: boolean;
|
|
28
|
-
/** Keep tree structure, removing only empty branches (default: true) */
|
|
29
|
-
keepStructure?: boolean;
|
|
30
|
-
/** Keep headings for context (default: true) */
|
|
31
|
-
keepHeadings?: boolean;
|
|
32
|
-
/** Remove unnamed generic/group wrappers (default: true) */
|
|
33
|
-
removeGenericWrappers?: boolean;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Post-process a snapshot to make it more compact.
|
|
37
|
-
* Removes noise while preserving structure.
|
|
38
|
-
* Typical reduction: 15-25%
|
|
39
|
-
*/
|
|
40
|
-
export declare function compactSnapshot(snapshot: string, options?: CompactSnapshotOptions): string;
|
|
41
|
-
/**
|
|
42
|
-
* Post-process a snapshot to show only interactive elements.
|
|
43
|
-
* Like agent-browser's compact mode - keeps structure but only refs on interactive elements.
|
|
44
|
-
* Typical reduction: 50-65% with structure, 80-90% flat
|
|
45
|
-
*/
|
|
46
|
-
export declare function interactiveSnapshot(snapshot: string, options?: InteractiveSnapshotOptions): string;
|
|
47
|
-
/**
|
|
48
|
-
* Remove duplicate text from parent elements when the same text appears in descendants.
|
|
49
|
-
* For example, if a row's name is "upvote | story title" and it contains children with
|
|
50
|
-
* those exact names, the parent's name is redundant and can be removed.
|
|
51
|
-
*/
|
|
52
|
-
export declare function deduplicateSnapshot(snapshot: string): string;
|
|
53
6
|
export interface AriaRef {
|
|
54
7
|
role: string;
|
|
55
8
|
name: string;
|
|
56
9
|
ref: string;
|
|
10
|
+
shortRef: string;
|
|
11
|
+
backendNodeId?: Protocol.DOM.BackendNodeId;
|
|
57
12
|
}
|
|
13
|
+
export type AriaSnapshotNode = {
|
|
14
|
+
role: string;
|
|
15
|
+
name: string;
|
|
16
|
+
locator?: string;
|
|
17
|
+
ref?: string;
|
|
18
|
+
shortRef?: string;
|
|
19
|
+
backendNodeId?: Protocol.DOM.BackendNodeId;
|
|
20
|
+
children: AriaSnapshotNode[];
|
|
21
|
+
};
|
|
58
22
|
export interface ScreenshotResult {
|
|
59
23
|
path: string;
|
|
60
24
|
base64: string;
|
|
@@ -64,58 +28,152 @@ export interface ScreenshotResult {
|
|
|
64
28
|
}
|
|
65
29
|
export interface AriaSnapshotResult {
|
|
66
30
|
snapshot: string;
|
|
31
|
+
tree: AriaSnapshotNode[];
|
|
32
|
+
refs: AriaRef[];
|
|
67
33
|
refToElement: Map<string, {
|
|
68
34
|
role: string;
|
|
69
35
|
name: string;
|
|
36
|
+
shortRef: string;
|
|
70
37
|
}>;
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
38
|
+
refToSelector: Map<string, string>;
|
|
39
|
+
/**
|
|
40
|
+
* Get a CSS selector for a ref. Use with page.locator().
|
|
41
|
+
* For stable test IDs, returns [data-testid="..."] or [id="..."]
|
|
42
|
+
* For fallback refs, returns a role-based selector.
|
|
43
|
+
*/
|
|
44
|
+
getSelectorForRef: (ref: string) => string | null;
|
|
75
45
|
getRefsForLocators: (locators: Array<Locator | ElementHandle>) => Promise<Array<AriaRef | null>>;
|
|
76
46
|
getRefForLocator: (locator: Locator | ElementHandle) => Promise<AriaRef | null>;
|
|
77
47
|
getRefStringForLocator: (locator: Locator | ElementHandle) => Promise<string | null>;
|
|
78
48
|
}
|
|
49
|
+
export declare function buildShortRefMap({ refs }: {
|
|
50
|
+
refs: Array<{
|
|
51
|
+
ref: string;
|
|
52
|
+
}>;
|
|
53
|
+
}): Map<string, string>;
|
|
54
|
+
type DomNodeInfo = {
|
|
55
|
+
nodeId: Protocol.DOM.NodeId;
|
|
56
|
+
parentId?: Protocol.DOM.NodeId;
|
|
57
|
+
backendNodeId: Protocol.DOM.BackendNodeId;
|
|
58
|
+
nodeName: string;
|
|
59
|
+
attributes: Map<string, string>;
|
|
60
|
+
};
|
|
61
|
+
export type SnapshotLine = {
|
|
62
|
+
text: string;
|
|
63
|
+
baseLocator?: string;
|
|
64
|
+
hasChildren?: boolean;
|
|
65
|
+
role?: string;
|
|
66
|
+
name?: string;
|
|
67
|
+
indent?: number;
|
|
68
|
+
};
|
|
69
|
+
export type SnapshotNode = {
|
|
70
|
+
role: string;
|
|
71
|
+
name: string;
|
|
72
|
+
baseLocator?: string;
|
|
73
|
+
ref?: string;
|
|
74
|
+
backendNodeId?: Protocol.DOM.BackendNodeId;
|
|
75
|
+
indentOffset?: number;
|
|
76
|
+
ignored?: boolean;
|
|
77
|
+
children: SnapshotNode[];
|
|
78
|
+
};
|
|
79
|
+
export declare function buildSnapshotLines(nodes: SnapshotNode[], indent?: number): SnapshotLine[];
|
|
80
|
+
export declare function buildRawSnapshotTree(options: {
|
|
81
|
+
nodeId: Protocol.Accessibility.AXNodeId;
|
|
82
|
+
axById: Map<Protocol.Accessibility.AXNodeId, Protocol.Accessibility.AXNode>;
|
|
83
|
+
isNodeInScope: (node: Protocol.Accessibility.AXNode) => boolean;
|
|
84
|
+
}): SnapshotNode | null;
|
|
85
|
+
export declare function filterInteractiveSnapshotTree(options: {
|
|
86
|
+
node: SnapshotNode;
|
|
87
|
+
ancestorNames: string[];
|
|
88
|
+
labelContext: boolean;
|
|
89
|
+
refFilter?: (entry: {
|
|
90
|
+
role: string;
|
|
91
|
+
name: string;
|
|
92
|
+
}) => boolean;
|
|
93
|
+
domByBackendId: Map<Protocol.DOM.BackendNodeId, DomNodeInfo>;
|
|
94
|
+
createRefForNode: (options: {
|
|
95
|
+
backendNodeId?: Protocol.DOM.BackendNodeId;
|
|
96
|
+
role: string;
|
|
97
|
+
name: string;
|
|
98
|
+
}) => string | null;
|
|
99
|
+
}): {
|
|
100
|
+
nodes: SnapshotNode[];
|
|
101
|
+
names: Set<string>;
|
|
102
|
+
};
|
|
103
|
+
export declare function filterFullSnapshotTree(options: {
|
|
104
|
+
node: SnapshotNode;
|
|
105
|
+
ancestorNames: string[];
|
|
106
|
+
refFilter?: (entry: {
|
|
107
|
+
role: string;
|
|
108
|
+
name: string;
|
|
109
|
+
}) => boolean;
|
|
110
|
+
domByBackendId: Map<Protocol.DOM.BackendNodeId, DomNodeInfo>;
|
|
111
|
+
createRefForNode: (options: {
|
|
112
|
+
backendNodeId?: Protocol.DOM.BackendNodeId;
|
|
113
|
+
role: string;
|
|
114
|
+
name: string;
|
|
115
|
+
}) => string | null;
|
|
116
|
+
}): {
|
|
117
|
+
nodes: SnapshotNode[];
|
|
118
|
+
names: Set<string>;
|
|
119
|
+
};
|
|
120
|
+
export declare function finalizeSnapshotOutput(lines: SnapshotLine[], nodes: SnapshotNode[], shortRefMap: Map<string, string>): {
|
|
121
|
+
snapshot: string;
|
|
122
|
+
tree: AriaSnapshotNode[];
|
|
123
|
+
};
|
|
79
124
|
/**
|
|
80
|
-
* Get an accessibility snapshot with utilities to look up
|
|
81
|
-
* Uses
|
|
125
|
+
* Get an accessibility snapshot with utilities to look up refs for elements.
|
|
126
|
+
* Uses the browser accessibility tree (CDP) and maps nodes to DOM attributes.
|
|
127
|
+
*
|
|
128
|
+
* Refs are generated from stable test IDs when available (data-testid, data-test-id, etc.)
|
|
129
|
+
* or fall back to e1, e2, e3...
|
|
130
|
+
*
|
|
131
|
+
* @param page - Playwright page
|
|
132
|
+
* @param locator - Optional locator to scope the snapshot to a subtree
|
|
133
|
+
* @param refFilter - Optional filter for which elements get refs
|
|
82
134
|
*
|
|
83
135
|
* @example
|
|
84
136
|
* ```ts
|
|
85
|
-
* const { snapshot,
|
|
86
|
-
*
|
|
87
|
-
*
|
|
137
|
+
* const { snapshot, getSelectorForRef } = await getAriaSnapshot({ page })
|
|
138
|
+
* // Snapshot shows locators like [id="submit-btn"] or role=button[name="Submit"]
|
|
139
|
+
* const selector = getSelectorForRef('submit-btn')
|
|
140
|
+
* await page.locator(selector).click()
|
|
88
141
|
* ```
|
|
89
142
|
*/
|
|
90
|
-
export declare function getAriaSnapshot({ page, refFilter }: {
|
|
143
|
+
export declare function getAriaSnapshot({ page, frame, locator, refFilter, interactiveOnly, cdp }: {
|
|
91
144
|
page: Page;
|
|
145
|
+
frame?: Frame | FrameLocator;
|
|
146
|
+
locator?: Locator;
|
|
92
147
|
refFilter?: (info: {
|
|
93
148
|
role: string;
|
|
94
149
|
name: string;
|
|
95
150
|
}) => boolean;
|
|
151
|
+
interactiveOnly?: boolean;
|
|
152
|
+
cdp?: ICDPSession;
|
|
96
153
|
}): Promise<AriaSnapshotResult>;
|
|
97
154
|
/**
|
|
98
155
|
* Show Vimium-style labels on interactive elements.
|
|
99
|
-
* Labels are
|
|
156
|
+
* Labels are colored badges positioned above each element showing the ref.
|
|
100
157
|
* Use with screenshots so agents can see which elements are interactive.
|
|
101
158
|
*
|
|
102
|
-
* Labels auto-hide after 30 seconds to prevent stale labels
|
|
159
|
+
* Labels auto-hide after 30 seconds to prevent stale labels.
|
|
103
160
|
* Call this function again if the page HTML changes to get fresh labels.
|
|
104
161
|
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
162
|
+
* @param page - Playwright page
|
|
163
|
+
* @param locator - Optional locator to scope labels to a subtree
|
|
164
|
+
* @param interactiveOnly - Only show labels for interactive elements (default: true)
|
|
107
165
|
*
|
|
108
166
|
* @example
|
|
109
167
|
* ```ts
|
|
110
168
|
* const { snapshot, labelCount } = await showAriaRefLabels({ page })
|
|
111
169
|
* await page.screenshot({ path: '/tmp/screenshot.png' })
|
|
112
|
-
* // Agent sees [
|
|
113
|
-
* await page.locator('
|
|
114
|
-
* // Labels auto-hide after 30 seconds, or call hideAriaRefLabels() manually
|
|
170
|
+
* // Agent sees [submit-btn] label on "Submit" button
|
|
171
|
+
* await page.locator('[data-testid="submit-btn"]').click()
|
|
115
172
|
* ```
|
|
116
173
|
*/
|
|
117
|
-
export declare function showAriaRefLabels({ page, interactiveOnly, logger }: {
|
|
174
|
+
export declare function showAriaRefLabels({ page, locator, interactiveOnly, logger }: {
|
|
118
175
|
page: Page;
|
|
176
|
+
locator?: Locator;
|
|
119
177
|
interactiveOnly?: boolean;
|
|
120
178
|
logger?: {
|
|
121
179
|
info?: (...args: unknown[]) => void;
|
|
@@ -136,18 +194,21 @@ export declare function hideAriaRefLabels({ page }: {
|
|
|
136
194
|
* Shows Vimium-style labels, captures the screenshot, then removes the labels.
|
|
137
195
|
* The screenshot is automatically included in the MCP response.
|
|
138
196
|
*
|
|
197
|
+
* @param page - Playwright page
|
|
198
|
+
* @param locator - Optional locator to scope labels to a subtree
|
|
139
199
|
* @param collector - Array to collect screenshots (passed by MCP execute tool)
|
|
140
200
|
*
|
|
141
201
|
* @example
|
|
142
202
|
* ```ts
|
|
143
203
|
* await screenshotWithAccessibilityLabels({ page })
|
|
144
204
|
* // Screenshot is automatically included in the MCP response
|
|
145
|
-
* // Use
|
|
146
|
-
* await page.locator('
|
|
205
|
+
* // Use ref from the snapshot to interact with elements
|
|
206
|
+
* await page.locator('[data-testid="submit-btn"]').click()
|
|
147
207
|
* ```
|
|
148
208
|
*/
|
|
149
|
-
export declare function screenshotWithAccessibilityLabels({ page, interactiveOnly, collector, logger }: {
|
|
209
|
+
export declare function screenshotWithAccessibilityLabels({ page, locator, interactiveOnly, collector, logger }: {
|
|
150
210
|
page: Page;
|
|
211
|
+
locator?: Locator;
|
|
151
212
|
interactiveOnly?: boolean;
|
|
152
213
|
collector: ScreenshotResult[];
|
|
153
214
|
logger?: {
|
|
@@ -155,4 +216,5 @@ export declare function screenshotWithAccessibilityLabels({ page, interactiveOnl
|
|
|
155
216
|
error?: (...args: unknown[]) => void;
|
|
156
217
|
};
|
|
157
218
|
}): Promise<void>;
|
|
219
|
+
export { getAriaSnapshot as getAriaSnapshotWithRefs };
|
|
158
220
|
//# sourceMappingURL=aria-snapshot.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aria-snapshot.d.ts","sourceRoot":"","sources":["../src/aria-snapshot.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"aria-snapshot.d.ts","sourceRoot":"","sources":["../src/aria-snapshot.ts"],"names":[],"mappings":"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"}
|