From 102a7b88498f957ea487ea4905fbbd51c083ea74 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Fri, 27 Feb 2026 18:43:41 +0300 Subject: [PATCH] fix(web-test): force click before Escape on surface intercept Escape on document forms triggers "save changes?" dialog. Reorder retry strategy: try force:true first (no side effects), then Escape as fallback. Applied to both clickElement and fillReferenceField. Co-Authored-By: Claude Opus 4.6 --- .claude/skills/web-test/scripts/browser.mjs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.claude/skills/web-test/scripts/browser.mjs b/.claude/skills/web-test/scripts/browser.mjs index 57f124cc..5de877ba 100644 --- a/.claude/skills/web-test/scripts/browser.mjs +++ b/.claude/skills/web-test/scripts/browser.mjs @@ -537,10 +537,10 @@ async function fillReferenceField(selector, fieldName, value, formNum) { await page.click(selector); } catch (e) { if (e.message.includes('intercepts pointer events')) { - await dismissErrors(); - await page.keyboard.press('Escape'); - await page.waitForTimeout(500); - try { await page.click(selector); } catch (e2) { + // Try force click first (no side effects), then Escape as fallback + try { + await page.click(selector, { force: true }); + } catch (e2) { if (e2.message.includes('intercepts pointer events')) { await dismissErrors(); await page.keyboard.press('Escape'); @@ -912,16 +912,16 @@ export async function clickElement(text, { dblclick } = {}) { try { await page.click(selector, { timeout: 5000 }); } catch (clickErr) { - // If surface overlay intercepts — dismiss with Escape and retry if (clickErr.message.includes('intercepts pointer events')) { - await page.keyboard.press('Escape'); - await page.waitForTimeout(500); + // Surface overlay intercepts — try force click first (no side effects), + // then Escape + retry as fallback (Escape can trigger save dialogs on forms) try { - await page.click(selector, { timeout: 5000 }); + await page.click(selector, { force: true, timeout: 5000 }); } catch (clickErr2) { if (clickErr2.message.includes('intercepts pointer events')) { - // Persistent surface (e.g. grid editing overlay) — force click - await page.click(selector, { force: true, timeout: 5000 }); + await page.keyboard.press('Escape'); + await page.waitForTimeout(500); + await page.click(selector, { timeout: 5000 }); } else { throw clickErr2; }