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 <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-02-27 18:43:41 +03:00
co-authored by Claude Opus 4.6
parent 68e346d645
commit 102a7b8849
+10 -10
View File
@@ -537,10 +537,10 @@ async function fillReferenceField(selector, fieldName, value, formNum) {
await page.click(selector); await page.click(selector);
} catch (e) { } catch (e) {
if (e.message.includes('intercepts pointer events')) { if (e.message.includes('intercepts pointer events')) {
await dismissErrors(); // Try force click first (no side effects), then Escape as fallback
await page.keyboard.press('Escape'); try {
await page.waitForTimeout(500); await page.click(selector, { force: true });
try { await page.click(selector); } catch (e2) { } catch (e2) {
if (e2.message.includes('intercepts pointer events')) { if (e2.message.includes('intercepts pointer events')) {
await dismissErrors(); await dismissErrors();
await page.keyboard.press('Escape'); await page.keyboard.press('Escape');
@@ -912,16 +912,16 @@ export async function clickElement(text, { dblclick } = {}) {
try { try {
await page.click(selector, { timeout: 5000 }); await page.click(selector, { timeout: 5000 });
} catch (clickErr) { } catch (clickErr) {
// If surface overlay intercepts — dismiss with Escape and retry
if (clickErr.message.includes('intercepts pointer events')) { if (clickErr.message.includes('intercepts pointer events')) {
await page.keyboard.press('Escape'); // Surface overlay intercepts — try force click first (no side effects),
await page.waitForTimeout(500); // then Escape + retry as fallback (Escape can trigger save dialogs on forms)
try { try {
await page.click(selector, { timeout: 5000 }); await page.click(selector, { force: true, timeout: 5000 });
} catch (clickErr2) { } catch (clickErr2) {
if (clickErr2.message.includes('intercepts pointer events')) { if (clickErr2.message.includes('intercepts pointer events')) {
// Persistent surface (e.g. grid editing overlay) — force click await page.keyboard.press('Escape');
await page.click(selector, { force: true, timeout: 5000 }); await page.waitForTimeout(500);
await page.click(selector, { timeout: 5000 });
} else { } else {
throw clickErr2; throw clickErr2;
} }