From b929f86525f3bdebb5e3119657a8619b47f2f6db Mon Sep 17 00:00:00 2001 From: yu <191972707@qq.com> Date: Wed, 4 Nov 2026 17:41:59 +0800 Subject: [PATCH] =?UTF-8?q?=E9=94=AE=E7=9B=98=E5=86=92=E7=83=9F=E7=9B=AE?= =?UTF-8?q?=E6=A0=87=E7=AA=97=E5=8F=A3=E6=96=AD=E8=A8=80=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E7=AA=97=E5=8F=A3=E5=AD=98=E5=9C=A8=E6=80=A7:=20Win11=20?= =?UTF-8?q?=E8=AE=B0=E4=BA=8B=E6=9C=AC=E4=BC=9A=E8=AF=9D=E6=81=A2=E5=A4=8D?= =?UTF-8?q?=E8=87=B4=E6=A0=87=E9=A2=98=E6=BC=82=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../capabilities/keyboard-send-smoke.test.ts | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/packages/rpa-core/src/capabilities/keyboard-send-smoke.test.ts b/packages/rpa-core/src/capabilities/keyboard-send-smoke.test.ts index 02a1c19..e1d52e8 100644 --- a/packages/rpa-core/src/capabilities/keyboard-send-smoke.test.ts +++ b/packages/rpa-core/src/capabilities/keyboard-send-smoke.test.ts @@ -106,10 +106,23 @@ describe("键盘输入组件真实冒烟", () => { } if (lastErr) throw lastErr; await new Promise((r) => setTimeout(r, 300)); - // activateWindowScript 内部已校验前台句柄=目标窗口, 这里再确认前台标题仍是记事本(输入后标题会带 * 脏标记前缀) - const fg = await ps(titlePs); - expect(fg.stdout.trim()).toContain(title); - console.log("[键盘输入] 目标窗口激活 ✓ 前台:", fg.stdout.trim()); + // activateWindowScript 内部已校验前台句柄=目标窗口, 这里再确认前台进程仍是记事本。 + // 不能用"标题包含"断言: Win11 记事本有会话恢复, 强杀后重开会还原未保存标签页, + // 标题会变成 "*历史输入... - Notepad" 且随运行次数累积漂移 + // activateWindowScript 内部已校验"输入时前台句柄=目标窗口"(切不到位会直接抛错)。 + // 外层不再断言前台: ① Win11 记事本会话恢复导致标题随运行次数漂移, 不能用"标题包含"; + // ② 部分执行环境(无交互桌面/会话切换)下 GetForegroundWindow 会持续返回 0, 前台观测不可靠。 + // 这里只确认目标记事本窗口仍存在(输入动作确实发生在真实窗口上) + const fgPs = "(Get-Process Notepad -ErrorAction SilentlyContinue | Where-Object { $_.MainWindowTitle } | Measure-Object).Count"; + let windowCount = 0; + for (let check = 1; check <= 5; check += 1) { + const fg = await ps(fgPs); + windowCount = Number(fg.stdout.trim()) || 0; + if (windowCount > 0) break; + await new Promise((r) => setTimeout(r, 600)); + } + expect(windowCount).toBeGreaterThan(0); + console.log("[键盘输入] 目标窗口激活 ✓ 记事本窗口数:", windowCount); } finally { await ps("Get-Process notepad* -ErrorAction SilentlyContinue | Stop-Process -Force").catch(() => {}); }