我如何 运行 UI 在远程计算机上使用 FlaUI 进行测试,而不是 RDP 进入它?

How can I run UI tests with FlaUI on a remote machine whilst not RDP'd into it?

我们有一些 UI 测试使用 FlaUI 来自动与 windows UI.

交互

当我们 运行 在构建服务器上进行这些测试时,它们无法与 UI 交互,除非有人通过 RDP 连接。

我们从测试中得到的错误只是 Could not send mouse input. ErrorCode: 5

机器设置为在启动时登录用户,如果我们以该用户身份登录 RDP 会话并 'watch' 测试,那么它们 运行 可以并可以与桌面。一旦我们断开该用户的连接,他们就无法再次互动。

我们运行通过 NC运行ch 网格节点进行测试,使用 NC运行ch 网格节点控制台应用程序,该应用程序在登录时启动(即它不是 运行宁作为一项服务,因此它可以与桌面交互)。

有没有什么方法可以让测试 运行 让我们不必持续观察它们?

如果您模拟鼠标点击,则必须有一个活动的桌面会话 (https://github.com/Roemer/FlaUI/wiki/FAQ#how-can-i-run-flaui-tests-on-a-build-serveragent)。

您有两个选择:无需单击鼠标进行测试(使用 UIA 模式)或确保构建代理的桌面会话处于活动状态。如常见问题解答中所述,请确保通过 运行 tscon 1 /dest:console

断开 RDP 后会话未关闭

据我所知,您可以调用控件上的事件,而不是用鼠标模拟它们。它是不同的,因为事件被注入。这不仅适用于 TestStack.White 适配,而且适用于大多数机器人框架。那么使用鼠标背后的动机是什么?

当 JQuery 变为 Javascript 时,它改变了项目引用的范式。但它也减少了您需要编写的代码量,创建一个实用方法并更改:

FindFirstChild(cf => cf.ByAutomationId("RedButton")).AsButton().Click();

更短的内容,例如:

_.Find<Button>("RedButton").Click();

不经意间删除了一层抽象,使它们更具可读性,运行s 更快,不依赖于屏幕分辨率或 dpi 等

如果以前的方法不适用,我会尝试一件事 - 运行 虚拟机中的 NC运行ch 网格实现。我的意思是,理论上,它可以工作。

所以我完成了这项工作。主要是我遵循了说明 here 但我还禁用了 ServerManager 在用户登录 TaskScheduler 时启动。

公司政策也防止机器不锁定,所以我们有一个 powershell 脚本,每分钟按两次 numlock 以防止桌面锁定。

还存在默认用户登录时桌面太小的问题,这也阻止了点击。