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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user