8

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

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

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

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

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

有什么方法可以让测试以一种我们不必连续观察的方式运行吗?

4

3 回答 3

6

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

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

于 2019-01-16T12:53:18.510 回答
1

So I have made this work. Mainly I followed the instructions here but I also disabled ServerManager from starting up when the user logs in in TaskScheduler.

The company policy also prevents machines from not locking so we have a powershell script which presses numlock twice every minute to prevent the desktop from locking.

There were also issues with the desktop being too small when the default user logs in which also prevented things from being clicked.

于 2019-01-22T06:58:25.790 回答
1

据我记得,您可以在控件上调用事件,而不是用鼠标模拟它们。随着事件的注入,情况有所不同。这不仅适用于 TestStack.White 适配,也适用于大多数机器人框架。那么使用鼠标的动机是什么?

当 JQuery 出现在 Javascript 中时,它改变了引用项目的范式。但它也减少了您需要编写的代码量、创建实用方法和更改:

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

更短的,例如:

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

您无意中删除了一层抽象,使它们更具可读性,运行速度更快,不依赖于屏幕分辨率或 dpi 等。

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

于 2019-01-19T14:07:15.820 回答