@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 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 an LLM to discover the right actions (the **discovery run**). After that, GreenLight caches a concrete action plan and replays it without LLM calls — making subsequent runs fast and deterministic.
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,CAoDf;AAED,kDAAkD;AAClD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKzD;AAmFD,wBAAsB,uBAAuB,CAC5C,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAAE,GAClB,OAAO,CAAC,IAAI,CAAC,CAsFf;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,CAuGrB"}
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"}
@@ -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 from the page.
190
- // Try the element ref/text first; if the ref is stale, fall back to keyword search.
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
- if (action.ref || action.text) {
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
- // Use assertion.expected as hint (the step description) when the
216
- // variable name is useless (e.g. "_" for literal comparisons).
217
- const hint = (variable === "_" ? action.assertion?.expected : null) ?? variable;
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;AAcjD;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC9C,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GACzB,OAAO,CAAC,IAAI,CAAC,CAiBf;AAoED;;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,CAihB1B"}
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"}
@@ -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 { resolveLocator, resolveActionTarget, extractSelectorInfo, findNodeByRef, } from "./locator.js";
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
- const locator = await resolveLocator(page, a11yTree, action.ref);
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 delta = action.value === "up" ? -500 : 500;
445
- await page.mouse.wheel(0, delta);
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
- const locator = await resolveActionTarget(page, action, a11yTree, stepHint);
479
- resolvedSelector = await extractSelectorInfo(page, action, a11yTree, locator);
480
- // Try inputValue() first (for inputs/textareas), fall back to textContent
481
- capturedText = (await locator.inputValue().catch(() => null) ?? await locator.textContent() ?? "").trim();
482
- // If the variable name or step implies we need a number but
483
- // the captured text has none, the LLM likely picked the wrong
484
- // element. Fall back to keyword search in the a11y tree.
485
- const wantsNumber = /number|count|total|amount|qty|quantity|pris|antal|resultat/.test((action.rememberAs ?? "").toLowerCase());
486
- if (wantsNumber && !/\d/.test(capturedText)) {
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
- const keywords = (action.rememberAs ?? "")
491
- .replace(/_/g, " ")
492
- .split(" ")
493
- .filter((w) => w.length > 2);
494
- const fallback = findValueInTree(a11yTree, keywords);
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. Search the a11y tree
505
- // for nodes whose text contains a number and matches keywords
506
- // from the step description (the variable name or step text).
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 a11y tree for matching value`);
509
- }
510
- const keywords = (action.rememberAs ?? "")
511
- .replace(/_/g, " ")
512
- .split(" ")
513
- .filter((w) => w.length > 2);
514
- capturedText = findValueInTree(a11yTree, keywords);
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) {