Borrow Scrapling's adaptive element finding, adapted to this project's in-session AX-ref model. When a saved @ref's node is gone (or its identity no longer matches) and the role/name/nth re-query also fails, score the current page's candidate elements against an AX fingerprint captured at snapshot time and relocate to the best match. - New `adaptive` module: pure, browser-free scoring (role, accessible name via Levenshtein, AX properties, ancestor-role LCS, parent/sibling) plus pick_best with a high absolute threshold (0.70) AND a clear margin (0.15) over the runner-up — so ambiguous twins are refused rather than mis-clicked, matching the existing "fail loudly over wrong click" posture. - Fingerprint captured during the existing AX-tree snapshot walk — no extra CDP round-trips. TreeNode is AX-only (no DOM tag/attrs), so we use AX role as the type and a few discriminating AX properties (value/url/level/checked); DOM id/class would have cost an N×describeNode storm per snapshot. - Wired into both resolve_element_center and resolve_element_object_id: on a verify-identity mismatch or a stale-node fallback miss, relocation is tried before erroring. A confident match overrides the identity guard; otherwise the original error is surfaced. Opt out with AGENT_BROWSER_ADAPTIVE_REF=0. README documents the new tuning knobs. Adds 9 unit tests; full suite 760 passed.
54 lines
953 B
Rust
54 lines
953 B
Rust
#[allow(dead_code)]
|
|
pub mod actions;
|
|
#[allow(dead_code)]
|
|
pub mod adaptive;
|
|
#[allow(dead_code)]
|
|
pub mod auth;
|
|
#[allow(dead_code)]
|
|
pub mod browser;
|
|
#[allow(dead_code)]
|
|
pub mod cdp;
|
|
#[allow(dead_code)]
|
|
pub mod cookies;
|
|
#[allow(dead_code)]
|
|
pub mod daemon;
|
|
#[allow(dead_code)]
|
|
pub mod diff;
|
|
#[allow(dead_code)]
|
|
pub mod element;
|
|
#[allow(dead_code)]
|
|
pub mod inspect_server;
|
|
#[allow(dead_code)]
|
|
pub mod interaction;
|
|
#[allow(dead_code)]
|
|
pub mod network;
|
|
#[allow(dead_code)]
|
|
pub mod policy;
|
|
#[allow(dead_code)]
|
|
pub mod providers;
|
|
#[allow(dead_code)]
|
|
pub mod react;
|
|
#[allow(dead_code)]
|
|
pub mod recording;
|
|
#[allow(dead_code)]
|
|
pub mod screenshot;
|
|
#[allow(dead_code)]
|
|
pub mod snapshot;
|
|
#[allow(dead_code)]
|
|
pub mod state;
|
|
#[allow(dead_code)]
|
|
pub mod stealth;
|
|
#[allow(dead_code)]
|
|
pub mod storage;
|
|
#[allow(dead_code)]
|
|
pub mod stream;
|
|
#[allow(dead_code)]
|
|
pub mod tracing;
|
|
#[allow(dead_code)]
|
|
pub mod webdriver;
|
|
|
|
#[cfg(test)]
|
|
mod e2e_tests;
|
|
#[cfg(test)]
|
|
mod parity_tests;
|