#![allow(
clippy::too_many_lines,
clippy::doc_markdown,
clippy::uninlined_format_args,
clippy::unwrap_used,
clippy::expect_used,
clippy::needless_pass_by_value
)]
use super::client::McpClient;
const FIXTURE: &str = r"
<button id='target' onclick='window.__clicked=true'>Click me</button>
<div id='overlay' style='position:fixed;inset:0;z-index:9999;background:rgba(0,0,0,0.5)'>blocking</div>
<script>window.__handlerRuns=0;</script>
";
fn setup(c: &mut McpClient) {
c.nav(FIXTURE);
c.script("await page.waitForSelector('#target'); return true;");
}
pub fn test_add_locator_handler_unsupported(c: &mut McpClient) {
setup(c);
let v = c.script_value(
r"
let threw = false;
let message = '';
try {
page.addLocatorHandler(page.locator('#overlay'), () => {});
} catch (e) {
threw = true;
message = String(e && e.message ? e.message : e);
}
// removeLocatorHandler must never throw, even with nothing registered.
page.removeLocatorHandler(page.locator('#overlay'));
return { threw, message };
",
);
assert_eq!(
v["threw"].as_bool(),
Some(true),
"QuickJS addLocatorHandler should throw Unsupported: {v}"
);
assert!(
v["message"]
.as_str()
.unwrap_or_default()
.to_lowercase()
.contains("addlocatorhandler"),
"error should explain the addLocatorHandler limitation: {v}"
);
}