fix(cli): text-selector click by visible label + get text→body + tab --activate (#24)
Three CLI gaps surfaced driving a Mercari signup→checkout flow: - #24-B (correctness): a bare label like 'click 購入手続きへ' was fed straight to document.querySelector as CSS and failed as an invalid selector, even though snapshot listed the button by that exact name. build_find_element_js now tries CSS first, then falls back to matching an interactive element by visible text (exact then contains) — nested and non-ASCII labels resolve. 'text=<label>' forces the text path. CSS still wins when it matches. - #24-D: 'get text' with no selector now returns the whole page (body). - #24-C: 'tab <ref> --activate' (alias --front) switches to the tab AND raises it to the foreground — to surface a specific tab for the human. Tests cover the text fallback / text= / xpath builder, body default, activate flag. The core stale-sessionId-after-cross-process-nav bug is the #20/#23 class, already fixed in ext 0.4.8 — needs that extension deployed.
This commit is contained in:
@@ -4466,6 +4466,17 @@ async fn handle_tab_switch(cmd: &Value, state: &mut DaemonState) -> Result<Value
|
||||
state.active_frame_id = None;
|
||||
let result = mgr.tab_switch_by_id(tab_id).await?;
|
||||
|
||||
// `--activate`: raise this tab to the foreground (the switch made it active;
|
||||
// bring_to_front acts on the active tab) — for handing a specific tab to the
|
||||
// human (issue #24-C). Best-effort; don't fail the switch if it can't.
|
||||
if cmd
|
||||
.get("activate")
|
||||
.and_then(|v| v.as_bool())
|
||||
.unwrap_or(false)
|
||||
{
|
||||
let _ = mgr.bring_to_front().await;
|
||||
}
|
||||
|
||||
if let Some(ref server) = state.stream_server {
|
||||
if let Ok(dims) = mgr
|
||||
.evaluate(
|
||||
|
||||
Reference in New Issue
Block a user