P3: validate browser helper args before launching Chromium

This commit is contained in:
王性驊 2026-09-13 16:01:03 +08:00
parent c2de102bd6
commit 829739e5b4
1 changed files with 14 additions and 1 deletions

View File

@ -284,6 +284,18 @@ async function handle(req) {
} }
case "click": { case "click": {
if (
!req.selector &&
!req.role &&
!req.text &&
!req.label &&
!req.placeholder
) {
return fail(
id,
"click requires selector, role(+name), text, label, or placeholder"
);
}
const p = await ensurePage(); const p = await ensurePage();
const loc = await resolveLocator(p, req); const loc = await resolveLocator(p, req);
await loc.click({ timeout: req.timeout_ms ?? 10000 }); await loc.click({ timeout: req.timeout_ms ?? 10000 });
@ -292,9 +304,9 @@ async function handle(req) {
} }
case "type": { case "type": {
const p = await ensurePage();
const text = req.text ?? req.value; const text = req.text ?? req.value;
if (text == null) return fail(id, "type: missing text"); if (text == null) return fail(id, "type: missing text");
const p = await ensurePage();
const loc = await resolveLocator(p, req); const loc = await resolveLocator(p, req);
if (req.clear !== false) { if (req.clear !== false) {
await loc.fill(String(text), { timeout: req.timeout_ms ?? 10000 }); await loc.fill(String(text), { timeout: req.timeout_ms ?? 10000 });
@ -377,6 +389,7 @@ async function runSelfTest() {
r = await handle({ id: "t4", op: "nope" }); r = await handle({ id: "t4", op: "nope" });
cases.push(["unknown_op", r.ok === false]); cases.push(["unknown_op", r.ok === false]);
await handle({ id: "t4b", op: "close" });
r = await handle({ id: "t5", op: "status" }); r = await handle({ id: "t5", op: "status" });
cases.push(["status", r.ok === true && r.browser_open === false]); cases.push(["status", r.ok === true && r.browser_open === false]);