test(web): Director E2E - 点击前要求目标站稳 300ms (#565)

Original-Commit: 8af5d28da78feeb30ca673030422a20e4ede0411
test(web): Director E2E - 点击前要求目标站稳 300ms

clickPoint() 原来只要相邻两次读数坐标相同(间隔 100ms)就判定就绪。AntD 弹窗/抽屉有约
200ms 入场动画,动画刚开始、坐标还没动的那一拍会被判成"稳定",真正派发鼠标事件时控件已移位,
点击落到遮罩(mask.closable=false)上无效。

改为要求坐标连续 300ms 不动、等待上限 5000ms→8000ms。上游 main 上连跑两次都失败在
F6「留在导演台」(57/58),打补丁后连跑两次都是 58/58。
This commit is contained in:
AetherNo2332
2026-09-21 07:18:47 +08:00
committed by ddCat
parent ea44d445b4
commit f7a8b9eda5

View File

@@ -278,14 +278,23 @@ async function connectCdp(cdpPort) {
if (!hit || (hit !== el && !el.contains(hit))) return null;
return { x: Math.round(x), y: Math.round(y) };
})()`);
const deadline = Date.now() + 5000;
// 目标必须"站稳"再点:AntD 弹窗/抽屉有约 200ms 入场动画,只要求相邻两次读数相同
// 会在动画刚开始、坐标还没动的那一拍就下判定,真正派发鼠标事件时控件已经移位 ——
// 点击落到遮罩上(mask.closable=false)就完全无效("留在导演台" 曾这样偶发失败)。
const deadline = Date.now() + 8000;
let previous = null;
let stableSince = 0;
let box = null;
while (Date.now() < deadline) {
const next = await readInteractiveBox();
if (next && previous && next.x === previous.x && next.y === previous.y) {
box = next;
break;
if (!stableSince) stableSince = Date.now();
if (Date.now() - stableSince >= 300) {
box = next;
break;
}
} else {
stableSince = 0;
}
previous = next;
await sleep(100);