@eidra-umain/greenlight 0.4.0 → 0.6.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/README.md +57 -1
- package/dist/pilot/assertions.d.ts +14 -0
- package/dist/pilot/assertions.d.ts.map +1 -1
- package/dist/pilot/assertions.js +60 -7
- package/dist/pilot/assertions.js.map +1 -1
- package/dist/pilot/executor.d.ts.map +1 -1
- package/dist/pilot/executor.js +124 -81
- package/dist/pilot/executor.js.map +1 -1
- package/dist/pilot/pilot.d.ts.map +1 -1
- package/dist/pilot/pilot.js +68 -1
- package/dist/pilot/pilot.js.map +1 -1
- package/dist/pilot/prompts.d.ts +2 -2
- package/dist/pilot/prompts.d.ts.map +1 -1
- package/dist/pilot/prompts.js +36 -4
- package/dist/pilot/prompts.js.map +1 -1
- package/dist/pilot/response-parser.d.ts +2 -0
- package/dist/pilot/response-parser.d.ts.map +1 -1
- package/dist/pilot/response-parser.js +18 -2
- package/dist/pilot/response-parser.js.map +1 -1
- package/dist/planner/plan-runner.d.ts.map +1 -1
- package/dist/planner/plan-runner.js +67 -26
- package/dist/planner/plan-runner.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -35,7 +35,8 @@ tests:
|
|
|
35
35
|
|
|
36
36
|
GreenLight understands form wizards, custom dropdowns, autocomplete fields, checkbox consent flows, complex date pickers and interactive maps. It fills in forms with realistic test data, handles before/after value comparisons, and works with any UI framework.
|
|
37
37
|
|
|
38
|
-
The first run uses
|
|
38
|
+
The first run uses the LLM Pilot to discover the right actions (the **pilot** run).
|
|
39
|
+
After that, GreenLight caches a concrete action plan and replays it without LLM calls — making subsequent runs fast and deterministic.
|
|
39
40
|
|
|
40
41
|
## Quick start
|
|
41
42
|
|
|
@@ -176,6 +177,7 @@ Tests are plain English. The Pilot interprets intent, so phrasing is flexible. Q
|
|
|
176
177
|
|--------|---------|
|
|
177
178
|
| Navigate | `go to "/products"` or `navigate to About from the menu` |
|
|
178
179
|
| Click | `click "Add to Cart"` or `click the Submit button` |
|
|
180
|
+
| Scroll | `scroll down`, `scroll to top`, or `scroll to the footer` |
|
|
179
181
|
| Type | `enter "jane@example.com" into "Email"` |
|
|
180
182
|
| Select | `select "Canada" from "Country"` (works with native and custom dropdowns) |
|
|
181
183
|
| Form fill | `fill in the contact form with email "a@b.com" and some test data` |
|
|
@@ -183,9 +185,11 @@ Tests are plain English. The Pilot interprets intent, so phrasing is flexible. Q
|
|
|
183
185
|
| Check | `check the "I agree to terms" checkbox` |
|
|
184
186
|
| Random data | `name the booking a random string` |
|
|
185
187
|
| Date/time | `set the start time to 10 minutes from now` |
|
|
188
|
+
| Count | `count the number of product cards` |
|
|
186
189
|
| Remember | `remember the number of search results` |
|
|
187
190
|
| Compare | `check that the number of results is less than before` |
|
|
188
191
|
| Assert remembered | `check that the booking we just created is visible` |
|
|
192
|
+
| Viewport check | `check that "Contact Form" is in the viewport` |
|
|
189
193
|
| Assert | `check that page contains "Order Confirmed"` |
|
|
190
194
|
| Conditional | `if "Accept cookies" is visible, click it` |
|
|
191
195
|
| Map assert | `check that the map shows "Stockholm"` or `check that zoom level is at least 10` |
|
|
@@ -230,6 +234,33 @@ steps:
|
|
|
230
234
|
|
|
231
235
|
When you put text in quotes, GreenLight looks for an element with that exact text. Without quotes, it interprets the description more loosely against the accessibility tree.
|
|
232
236
|
|
|
237
|
+
### Scrolling
|
|
238
|
+
|
|
239
|
+
```yaml
|
|
240
|
+
steps:
|
|
241
|
+
- scroll down # scroll the page down
|
|
242
|
+
- scroll up # scroll the page up
|
|
243
|
+
- scroll to top # jump to the top of the page
|
|
244
|
+
- scroll to bottom # jump to the bottom of the page
|
|
245
|
+
- scroll to the "Contact us" section # scroll a specific element into view
|
|
246
|
+
- scroll to the footer # scroll to a described element
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
`scroll up` and `scroll down` move the page by a fixed amount (like pressing Page Down). `scroll to top` and `scroll to bottom` jump directly to the start or end of the page. When you describe a specific element, GreenLight finds it in the accessibility tree and scrolls it into view.
|
|
250
|
+
|
|
251
|
+
#### Viewport assertions
|
|
252
|
+
|
|
253
|
+
After scrolling, you can verify that an element is (or isn't) visible in the current viewport:
|
|
254
|
+
|
|
255
|
+
```yaml
|
|
256
|
+
steps:
|
|
257
|
+
- scroll to the "Contact" section
|
|
258
|
+
- check that "Contact Form" is in the viewport
|
|
259
|
+
- check that the "Hero Banner" is not in the viewport
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
This checks the element's position relative to the browser window, not just DOM visibility. An element can exist on the page and be "visible" in the DOM sense, but still be off-screen at the current scroll position. The `in the viewport` assertion verifies it's actually on screen.
|
|
263
|
+
|
|
233
264
|
### Typing and form fields
|
|
234
265
|
|
|
235
266
|
```yaml
|
|
@@ -373,6 +404,31 @@ steps:
|
|
|
373
404
|
|
|
374
405
|
Date picker steps are always computed fresh — even on cached plan replay, the timestamp is recalculated from the current time. This means tests with relative times like "10 minutes from now" never fail due to stale cached dates.
|
|
375
406
|
|
|
407
|
+
### Counting elements
|
|
408
|
+
|
|
409
|
+
Count the number of matching elements on the page and store the result for later comparison:
|
|
410
|
+
|
|
411
|
+
```yaml
|
|
412
|
+
steps:
|
|
413
|
+
# Count and compare against a previous count
|
|
414
|
+
- count the number of product cards
|
|
415
|
+
- apply the "Electronics" filter
|
|
416
|
+
- check that the number of product cards has decreased
|
|
417
|
+
|
|
418
|
+
# Count and compare against a remembered value
|
|
419
|
+
- remember the number of results shown
|
|
420
|
+
- apply a filter
|
|
421
|
+
- check that the number of product cards shown equals the remembered count
|
|
422
|
+
|
|
423
|
+
# Count specific elements
|
|
424
|
+
- count the number of "Add to Cart" buttons
|
|
425
|
+
- count the number of rows in the results table
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
**How it works:** GreenLight inspects the live page's accessibility tree to identify all elements matching the description. The LLM determines a common denominator (role, text pattern, or accessible name) that uniquely identifies the target elements, then counts all matches using exact text matching to avoid false positives from headings or breadcrumbs. The count is stored as a number in the value store — the same mechanism used by `remember` — so it works seamlessly with `check that ... has decreased/increased` comparisons.
|
|
429
|
+
|
|
430
|
+
When a step checks that the number of visible elements equals a remembered value, GreenLight automatically splits it into a count + compare: first count the elements, then compare the count against the stored variable.
|
|
431
|
+
|
|
376
432
|
### Value comparisons (remember/compare)
|
|
377
433
|
|
|
378
434
|
Remember a value before an action, then compare after:
|
|
@@ -22,6 +22,20 @@ export declare function executeAssertion(page: Page, action: Action, a11yTree: A
|
|
|
22
22
|
}): Promise<void>;
|
|
23
23
|
/** Extract a numeric value from a text string. */
|
|
24
24
|
export declare function extractNumber(text: string): number | null;
|
|
25
|
+
/**
|
|
26
|
+
* Execute a compare assertion: read a current value from the page,
|
|
27
|
+
* compare it against a remembered value using the specified operator.
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* Search the page for a numeric value near keywords extracted from the hint.
|
|
31
|
+
*
|
|
32
|
+
* Strategy:
|
|
33
|
+
* 1. Try to find a single text segment that contains both a number and a keyword.
|
|
34
|
+
* 2. If that fails, search the full page text for a number appearing within a
|
|
35
|
+
* short window (±80 chars) of a keyword match. This handles cases where the
|
|
36
|
+
* number and label are in separate DOM elements (adjacent lines).
|
|
37
|
+
*/
|
|
38
|
+
export declare function findValueByKeyword(page: Page, hint: string): Promise<string>;
|
|
25
39
|
export declare function executeCompareAssertion(page: Page, action: Action, a11yTree: A11yNode[]): Promise<void>;
|
|
26
40
|
export declare function buildAssertionCheck(page: Page, assertion: {
|
|
27
41
|
type: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assertions.d.ts","sourceRoot":"","sources":["../../src/pilot/assertions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,YAAY,CAAA;AAG/C,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAIjD;;;;GAIG;AACH,wBAAsB,aAAa,CAClC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAC1B,SAAS,SAAO,GACd,OAAO,CAAC,IAAI,CAAC,CAaf;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACrC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAAE,EACpB,UAAU,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,QAAQ,CAAC;IAAC,OAAO,CAAC,EAAE,UAAU,CAAA;CAAE,GACrD,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"assertions.d.ts","sourceRoot":"","sources":["../../src/pilot/assertions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,YAAY,CAAA;AAG/C,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAIjD;;;;GAIG;AACH,wBAAsB,aAAa,CAClC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAC1B,SAAS,SAAO,GACd,OAAO,CAAC,IAAI,CAAC,CAaf;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACrC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAAE,EACpB,UAAU,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,QAAQ,CAAC;IAAC,OAAO,CAAC,EAAE,UAAU,CAAA;CAAE,GACrD,OAAO,CAAC,IAAI,CAAC,CAqDf;AAED,kDAAkD;AAClD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKzD;AAED;;;GAGG;AACH;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkElF;AAED,wBAAsB,uBAAuB,CAC5C,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAAE,GAClB,OAAO,CAAC,IAAI,CAAC,CAmGf;AAkBD,wBAAgB,mBAAmB,CAClC,IAAI,EAAE,IAAI,EACV,SAAS,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC3C,MAAM,OAAO,CAAC,IAAI,CAAC,CAwJrB"}
|
package/dist/pilot/assertions.js
CHANGED
|
@@ -68,6 +68,7 @@ export async function executeAssertion(page, action, a11yTree, mapContext) {
|
|
|
68
68
|
assertion.type === "element_exists" ||
|
|
69
69
|
assertion.type === "element_enabled" ||
|
|
70
70
|
assertion.type === "element_disabled" ||
|
|
71
|
+
assertion.type === "element_in_viewport" ||
|
|
71
72
|
assertion.type === "link_exists" ||
|
|
72
73
|
assertion.type === "field_exists";
|
|
73
74
|
if (shouldPoll) {
|
|
@@ -97,7 +98,7 @@ export function extractNumber(text) {
|
|
|
97
98
|
* short window (±80 chars) of a keyword match. This handles cases where the
|
|
98
99
|
* number and label are in separate DOM elements (adjacent lines).
|
|
99
100
|
*/
|
|
100
|
-
async function findValueByKeyword(page, hint) {
|
|
101
|
+
export async function findValueByKeyword(page, hint) {
|
|
101
102
|
const keywords = hint
|
|
102
103
|
.replace(/_/g, " ")
|
|
103
104
|
.split(/\s+/)
|
|
@@ -186,11 +187,26 @@ export async function executeCompareAssertion(page, action, a11yTree) {
|
|
|
186
187
|
else {
|
|
187
188
|
throw new Error(`No remembered value found for "${variable}"`);
|
|
188
189
|
}
|
|
189
|
-
// Get the current value
|
|
190
|
-
//
|
|
190
|
+
// Get the current value.
|
|
191
|
+
// If the assertion's expected text matches a stored variable (e.g. from a
|
|
192
|
+
// preceding COUNT), use that directly instead of reading from the page.
|
|
193
|
+
// Otherwise, try the element ref/text first; if stale, fall back to keyword search.
|
|
191
194
|
let currentText;
|
|
192
195
|
const searchHint = action.assertion?.expected ?? variable;
|
|
193
|
-
|
|
196
|
+
const hintAsVar = searchHint.replace(/\s+/g, "_").toLowerCase();
|
|
197
|
+
if (globals.valueStore.has(searchHint)) {
|
|
198
|
+
currentText = globals.valueStore.get(searchHint) ?? "";
|
|
199
|
+
if (globals.debug) {
|
|
200
|
+
console.log(` [compare] Using stored variable "${searchHint}" = "${currentText}" as current value`);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
else if (globals.valueStore.has(hintAsVar)) {
|
|
204
|
+
currentText = globals.valueStore.get(hintAsVar) ?? "";
|
|
205
|
+
if (globals.debug) {
|
|
206
|
+
console.log(` [compare] Using stored variable "${hintAsVar}" = "${currentText}" as current value`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
else if (action.ref || action.text) {
|
|
194
210
|
try {
|
|
195
211
|
const locator = await resolveActionTarget(page, action, a11yTree);
|
|
196
212
|
currentText = (await locator.textContent() ?? "").trim();
|
|
@@ -212,9 +228,9 @@ export async function executeCompareAssertion(page, action, a11yTree) {
|
|
|
212
228
|
}
|
|
213
229
|
}
|
|
214
230
|
else {
|
|
215
|
-
//
|
|
216
|
-
// variable name
|
|
217
|
-
const hint =
|
|
231
|
+
// Prefer assertion.expected (the step description, often in page language)
|
|
232
|
+
// over the variable name (often an English identifier like "product_count").
|
|
233
|
+
const hint = action.assertion?.expected ?? variable;
|
|
218
234
|
currentText = await findValueByKeyword(page, hint);
|
|
219
235
|
}
|
|
220
236
|
const rememberedNum = extractNumber(rememberedText);
|
|
@@ -330,6 +346,43 @@ export function buildAssertionCheck(page, assertion) {
|
|
|
330
346
|
}
|
|
331
347
|
break;
|
|
332
348
|
}
|
|
349
|
+
case "element_in_viewport": {
|
|
350
|
+
const el = page.getByText(assertion.expected).first();
|
|
351
|
+
const visible = await el.isVisible();
|
|
352
|
+
if (!visible) {
|
|
353
|
+
throw new Error(`Element with text "${assertion.expected}" is not visible on the page`);
|
|
354
|
+
}
|
|
355
|
+
const inViewport = await el.evaluate((node) => {
|
|
356
|
+
const rect = node.getBoundingClientRect();
|
|
357
|
+
return (rect.top < window.innerHeight &&
|
|
358
|
+
rect.bottom > 0 &&
|
|
359
|
+
rect.left < window.innerWidth &&
|
|
360
|
+
rect.right > 0);
|
|
361
|
+
});
|
|
362
|
+
if (!inViewport) {
|
|
363
|
+
throw new Error(`Element "${assertion.expected}" exists but is not in the viewport at the current scroll position`);
|
|
364
|
+
}
|
|
365
|
+
break;
|
|
366
|
+
}
|
|
367
|
+
case "element_not_in_viewport": {
|
|
368
|
+
const notInVpEl = page.getByText(assertion.expected).first();
|
|
369
|
+
const notInVpVisible = await notInVpEl.isVisible().catch(() => false);
|
|
370
|
+
if (!notInVpVisible) {
|
|
371
|
+
// Not visible at all — that counts as not in viewport
|
|
372
|
+
break;
|
|
373
|
+
}
|
|
374
|
+
const isInViewport = await notInVpEl.evaluate((node) => {
|
|
375
|
+
const rect = node.getBoundingClientRect();
|
|
376
|
+
return (rect.top < window.innerHeight &&
|
|
377
|
+
rect.bottom > 0 &&
|
|
378
|
+
rect.left < window.innerWidth &&
|
|
379
|
+
rect.right > 0);
|
|
380
|
+
});
|
|
381
|
+
if (isInViewport) {
|
|
382
|
+
throw new Error(`Element "${assertion.expected}" is in the viewport but should not be`);
|
|
383
|
+
}
|
|
384
|
+
break;
|
|
385
|
+
}
|
|
333
386
|
case "element_disabled": {
|
|
334
387
|
const el = await findInteractiveElement(page, assertion.expected);
|
|
335
388
|
const disabled = await el.isDisabled();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assertions.js","sourceRoot":"","sources":["../../src/pilot/assertions.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"assertions.js","sourceRoot":"","sources":["../../src/pilot/assertions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/pilot/executor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAW,MAAM,YAAY,CAAA;AAC/C,OAAO,KAAK,EACX,MAAM,EACN,QAAQ,EACR,eAAe,EACf,QAAQ,EAER,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/pilot/executor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAW,MAAM,YAAY,CAAA;AAC/C,OAAO,KAAK,EACX,MAAM,EACN,QAAQ,EACR,eAAe,EACf,QAAQ,EAER,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAajD;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC9C,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GACzB,OAAO,CAAC,IAAI,CAAC,CAiBf;AAkBD;;GAEG;AACH,wBAAsB,aAAa,CAClC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAAE,EACpB,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,UAAU,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,QAAQ,CAAC;IAAC,OAAO,CAAC,EAAE,UAAU,CAAA;CAAE,EACvD,QAAQ,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,eAAe,CAAC,CA8mB1B"}
|
package/dist/pilot/executor.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Action executor — translates LLM Action objects into Playwright browser calls.
|
|
3
3
|
*/
|
|
4
|
-
import Fuse from "fuse.js";
|
|
5
4
|
import { globals } from "../globals.js";
|
|
6
|
-
import {
|
|
5
|
+
import { resolveActionTarget, extractSelectorInfo, findNodeByRef, } from "./locator.js";
|
|
7
6
|
import { checkCheckbox } from "./checkbox.js";
|
|
8
|
-
import { executeAssertion } from "./assertions.js";
|
|
7
|
+
import { executeAssertion, findValueByKeyword } from "./assertions.js";
|
|
9
8
|
/**
|
|
10
9
|
* Run an action that might trigger navigation.
|
|
11
10
|
* Listens for a 'framenavigated' event during the action — if one fires,
|
|
@@ -45,53 +44,6 @@ function flattenNodes(nodes) {
|
|
|
45
44
|
walk(nodes);
|
|
46
45
|
return result;
|
|
47
46
|
}
|
|
48
|
-
/**
|
|
49
|
-
* Search the enriched a11y tree for a value matching a query string.
|
|
50
|
-
* Uses Fuse.js fuzzy matching against node name, placeholder, visibleText,
|
|
51
|
-
* and value. When the best match is an input with a value, returns the
|
|
52
|
-
* value (what was typed) rather than the label.
|
|
53
|
-
*
|
|
54
|
-
* Used as a fallback when the LLM returns a remember action without
|
|
55
|
-
* specifying a target element.
|
|
56
|
-
*/
|
|
57
|
-
function findValueInTree(nodes, keywords) {
|
|
58
|
-
const flat = flattenNodes(nodes).filter((n) => !n.ref.startsWith("_"));
|
|
59
|
-
if (flat.length === 0)
|
|
60
|
-
return "";
|
|
61
|
-
const query = keywords.join(" ");
|
|
62
|
-
const fuse = new Fuse(flat, {
|
|
63
|
-
keys: [
|
|
64
|
-
{ name: "name", weight: 2 },
|
|
65
|
-
{ name: "placeholder", weight: 1.5 },
|
|
66
|
-
{ name: "visibleText", weight: 1 },
|
|
67
|
-
{ name: "value", weight: 0.5 },
|
|
68
|
-
],
|
|
69
|
-
threshold: 0.4,
|
|
70
|
-
includeScore: true,
|
|
71
|
-
});
|
|
72
|
-
const results = fuse.search(query);
|
|
73
|
-
if (globals.debug && results.length > 0) {
|
|
74
|
-
console.log(` [remember] Fuse.js top matches for "${query}":`);
|
|
75
|
-
for (const r of results.slice(0, 3)) {
|
|
76
|
-
console.log(` - [${r.item.ref}] "${r.item.name}" value="${r.item.value ?? ""}" (score: ${String(r.score?.toFixed(3))})`);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
if (results.length > 0) {
|
|
80
|
-
const best = results[0].item;
|
|
81
|
-
// Prefer the input value (what was typed) over the label
|
|
82
|
-
if (best.value)
|
|
83
|
-
return best.value;
|
|
84
|
-
if (best.visibleText)
|
|
85
|
-
return best.visibleText;
|
|
86
|
-
return best.name;
|
|
87
|
-
}
|
|
88
|
-
// No fuzzy match — return the first non-empty value field
|
|
89
|
-
for (const node of flat) {
|
|
90
|
-
if (node.value)
|
|
91
|
-
return node.value;
|
|
92
|
-
}
|
|
93
|
-
return "";
|
|
94
|
-
}
|
|
95
47
|
/**
|
|
96
48
|
* Execute a single Action against the browser page.
|
|
97
49
|
*/
|
|
@@ -435,14 +387,24 @@ export async function executeAction(page, action, a11yTree, _valueStore, mapCont
|
|
|
435
387
|
break;
|
|
436
388
|
}
|
|
437
389
|
case "scroll": {
|
|
438
|
-
if (action.ref) {
|
|
439
|
-
|
|
390
|
+
if (action.ref || action.text) {
|
|
391
|
+
// Scroll a specific element into view
|
|
392
|
+
const locator = await resolveActionTarget(page, action, a11yTree, stepHint);
|
|
440
393
|
resolvedSelector = await extractSelectorInfo(page, action, a11yTree, locator);
|
|
441
394
|
await locator.scrollIntoViewIfNeeded();
|
|
442
395
|
}
|
|
443
396
|
else {
|
|
444
|
-
const
|
|
445
|
-
|
|
397
|
+
const dir = (action.value ?? "down").toLowerCase();
|
|
398
|
+
if (dir === "top") {
|
|
399
|
+
await page.evaluate(() => window.scrollTo({ top: 0, behavior: "instant" }));
|
|
400
|
+
}
|
|
401
|
+
else if (dir === "bottom") {
|
|
402
|
+
await page.evaluate(() => window.scrollTo({ top: document.body.scrollHeight, behavior: "instant" }));
|
|
403
|
+
}
|
|
404
|
+
else {
|
|
405
|
+
const delta = dir === "up" ? -500 : 500;
|
|
406
|
+
await page.mouse.wheel(0, delta);
|
|
407
|
+
}
|
|
446
408
|
}
|
|
447
409
|
break;
|
|
448
410
|
}
|
|
@@ -472,47 +434,128 @@ export async function executeAction(page, action, a11yTree, _valueStore, mapCont
|
|
|
472
434
|
await page.getByText(action.value).waitFor({ state: "visible" });
|
|
473
435
|
break;
|
|
474
436
|
}
|
|
437
|
+
case "count": {
|
|
438
|
+
if (!action.text) {
|
|
439
|
+
throw new Error("count action requires a text description of elements to count");
|
|
440
|
+
}
|
|
441
|
+
const searchText = action.text;
|
|
442
|
+
// Strategy 1: Try getByRole with common container roles
|
|
443
|
+
// Look for elements whose accessible name contains the search text
|
|
444
|
+
const containerRoles = [
|
|
445
|
+
"article", "listitem", "row", "card",
|
|
446
|
+
"link", "button", "heading", "img",
|
|
447
|
+
];
|
|
448
|
+
let bestCount = 0;
|
|
449
|
+
let matchedStrategy = "";
|
|
450
|
+
for (const role of containerRoles) {
|
|
451
|
+
try {
|
|
452
|
+
const count = await page.getByRole(role, { name: new RegExp(searchText.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "i") }).count();
|
|
453
|
+
if (count > bestCount) {
|
|
454
|
+
bestCount = count;
|
|
455
|
+
matchedStrategy = `getByRole("${role}")`;
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
catch { /* try next */ }
|
|
459
|
+
}
|
|
460
|
+
// Strategy 2a: Try exact text match (case-sensitive, whole-string).
|
|
461
|
+
// This avoids false positives from headings, breadcrumbs, alerts
|
|
462
|
+
// that contain the same word with different casing or extra text.
|
|
463
|
+
try {
|
|
464
|
+
const exactCount = await page.getByText(searchText, { exact: true }).count();
|
|
465
|
+
if (exactCount > bestCount) {
|
|
466
|
+
bestCount = exactCount;
|
|
467
|
+
matchedStrategy = `getByText("${searchText}", exact)`;
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
catch { /* skip */ }
|
|
471
|
+
// Strategy 2b: Try substring text match (only if exact found nothing)
|
|
472
|
+
if (bestCount === 0) {
|
|
473
|
+
try {
|
|
474
|
+
const textCount = await page.getByText(searchText).count();
|
|
475
|
+
if (textCount > bestCount) {
|
|
476
|
+
bestCount = textCount;
|
|
477
|
+
matchedStrategy = `getByText("${searchText}")`;
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
catch { /* skip */ }
|
|
481
|
+
}
|
|
482
|
+
// Strategy 3: Search the a11y tree for nodes matching the description
|
|
483
|
+
if (bestCount === 0) {
|
|
484
|
+
const flat = flattenNodes(a11yTree).filter((n) => !n.ref.startsWith("_"));
|
|
485
|
+
const lower = searchText.toLowerCase();
|
|
486
|
+
const matchingNodes = flat.filter((n) => {
|
|
487
|
+
const nameMatch = n.name.toLowerCase().includes(lower);
|
|
488
|
+
const textMatch = n.visibleText?.toLowerCase().includes(lower);
|
|
489
|
+
const roleMatch = n.role.toLowerCase().includes(lower);
|
|
490
|
+
return nameMatch || textMatch || roleMatch;
|
|
491
|
+
});
|
|
492
|
+
if (matchingNodes.length > bestCount) {
|
|
493
|
+
bestCount = matchingNodes.length;
|
|
494
|
+
matchedStrategy = "a11y tree search";
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
if (globals.debug) {
|
|
498
|
+
console.log(` [count] Found ${String(bestCount)} elements matching "${searchText}" via ${matchedStrategy}`);
|
|
499
|
+
}
|
|
500
|
+
rememberedValue = String(bestCount);
|
|
501
|
+
break;
|
|
502
|
+
}
|
|
475
503
|
case "remember": {
|
|
476
504
|
let capturedText;
|
|
477
505
|
if (action.ref || action.text) {
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
506
|
+
let locatorResolved = false;
|
|
507
|
+
try {
|
|
508
|
+
const locator = await resolveActionTarget(page, action, a11yTree, stepHint);
|
|
509
|
+
resolvedSelector = await extractSelectorInfo(page, action, a11yTree, locator);
|
|
510
|
+
// Try inputValue() first (for inputs/textareas), fall back to textContent
|
|
511
|
+
capturedText = (await locator.inputValue().catch(() => null) ?? await locator.textContent() ?? "").trim();
|
|
512
|
+
locatorResolved = true;
|
|
513
|
+
}
|
|
514
|
+
catch {
|
|
515
|
+
// Element ref is stale (e.g. page re-rendered after a filter change).
|
|
516
|
+
// Fall back to keyword search below.
|
|
487
517
|
if (globals.debug) {
|
|
518
|
+
console.log(` [remember] Element target failed, falling back to keyword search`);
|
|
519
|
+
}
|
|
520
|
+
capturedText = "";
|
|
521
|
+
}
|
|
522
|
+
// If the variable name or step implies we need a number but
|
|
523
|
+
// the captured text has none (or the ref was stale), the LLM
|
|
524
|
+
// likely picked the wrong element. Fall back to page-text
|
|
525
|
+
// keyword search (same strategy as compare assertions).
|
|
526
|
+
const wantsNumber = /number|count|total|amount|qty|quantity|pris|antal|resultat/.test((action.rememberAs ?? "").toLowerCase() + " " + (stepHint ?? "").toLowerCase());
|
|
527
|
+
if (!locatorResolved || (wantsNumber && !/\d/.test(capturedText))) {
|
|
528
|
+
if (globals.debug && locatorResolved) {
|
|
488
529
|
console.log(` [remember] Captured "${capturedText}" but expected a number — falling back to keyword search`);
|
|
489
530
|
}
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
if (fallback) {
|
|
496
|
-
capturedText = fallback;
|
|
531
|
+
// Use the step hint (original step text) as search hint —
|
|
532
|
+
// it contains page-language terms. Fall back to variable name.
|
|
533
|
+
const searchHint = stepHint ?? (action.rememberAs ?? "").replace(/_/g, " ");
|
|
534
|
+
try {
|
|
535
|
+
capturedText = await findValueByKeyword(page, searchHint);
|
|
497
536
|
if (globals.debug) {
|
|
498
537
|
console.log(` [remember] Keyword search found: "${capturedText}"`);
|
|
499
538
|
}
|
|
500
539
|
}
|
|
540
|
+
catch {
|
|
541
|
+
if (!locatorResolved) {
|
|
542
|
+
throw new Error(`remember action: element ref "${action.ref}" not found and keyword search found no match`);
|
|
543
|
+
}
|
|
544
|
+
}
|
|
501
545
|
}
|
|
502
546
|
}
|
|
503
547
|
else {
|
|
504
|
-
// LLM didn't specify a target element.
|
|
505
|
-
//
|
|
506
|
-
//
|
|
548
|
+
// LLM didn't specify a target element. Use page-text keyword
|
|
549
|
+
// search (same strategy as compare assertions) to find a
|
|
550
|
+
// text segment containing both a number and a matching keyword.
|
|
507
551
|
if (globals.debug) {
|
|
508
|
-
console.log(` [remember] No ref/text target, searching
|
|
509
|
-
}
|
|
510
|
-
const
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
if (!capturedText) {
|
|
552
|
+
console.log(` [remember] No ref/text target, searching page text for matching value`);
|
|
553
|
+
}
|
|
554
|
+
const searchHint = stepHint ?? (action.rememberAs ?? "").replace(/_/g, " ");
|
|
555
|
+
try {
|
|
556
|
+
capturedText = await findValueByKeyword(page, searchHint);
|
|
557
|
+
}
|
|
558
|
+
catch {
|
|
516
559
|
throw new Error(`remember action: LLM returned no element target and could not find a matching value in the page`);
|
|
517
560
|
}
|
|
518
561
|
if (globals.debug) {
|