await page.locator('#submit').waitFor({ state: 'visible', timeout: 5000 });
await page.locator('.guide-mask .close').click();
await page.locator('#submit').click();

端到端用例等 #submit 按钮,30 秒后报 TimeoutError。截图里按钮就在页面上,只是被引导弹窗盖住了。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:等待条件是可点击,元素被遮挡时一直判定不可点。超时信息只说没等到,不说明是被谁挡住。

「端到端元素超时」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。监控和日志的时间要对上,时区不一致会多绕很大一圈。

临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

处理上按这个顺序:等待条件先改成可见 确认元素本身是否渲染;检查遮罩层或未关闭的引导弹窗 先关掉;选择器加唯一属性 避免匹配到隐藏的同名按钮;超时按接口耗时设 不要一律 30 秒。

确认没问题再收工,用例在五秒内点掉遮罩并完成提交 超时日志里能看到卡在哪一步。

作者 9823189