我们有一些UI测试,这些测试使用FlaUI自动执行与Windows UI的交互。
当我们在构建服务器上运行这些测试时,除非有人通过RDP连接,否则它们将无法与UI交互。
我们从测试中得到的错误只是Could not send mouse input. ErrorCode: 5
该计算机设置为在启动时登录用户,如果我们以该用户身份登录到RDP会话并“监视”测试,则它们运行正常,并且可以与桌面交互。一旦我们断开与该用户的连接,他们就会停止再次互动。
我们正在使用NCrunch网格节点控制台应用程序通过NCrunch网格节点运行测试,该应用程序在登录时启动(即,它不作为服务运行,因此可以与桌面交互)。
是否可以通过某种方式使测试运行,这意味着我们不必持续监视它们?
答案 0 :(得分:2)
如果模拟鼠标单击,则必须有一个活动的桌面会话(https://github.com/Roemer/FlaUI/wiki/FAQ#how-can-i-run-flaui-tests-on-a-build-serveragent)。
您有两个选择:测试时无需单击鼠标(使用UIA模式)或确保构建代理的活动桌面会话。如常见问题解答所述,请确保通过运行tscon 1 /dest:console
答案 1 :(得分:1)
所以我做了这项工作。我主要按照here的说明进行操作,但是当用户登录TaskScheduler时,我也禁止了ServerManager的启动。
公司政策还防止计算机未锁定,因此我们有一个Powershell脚本,该脚本每分钟按两次numlock两次以防止桌面锁定。
还存在默认用户登录时桌面过小的问题,这也阻止了单击操作。
答案 2 :(得分:0)
据我所知,您可以调用控件上的事件,而不用鼠标模拟事件。由于注入了事件,因此有所不同。这不仅适用于TestStack.White改编,而且适用于大多数机器人框架。那么使用鼠标的动机是什么?
当JQuery进入Javascript时,它改变了范例如何引用项目的范例。但这也减少了您需要编写,创建实用程序方法和更改的代码量:
FindFirstChild(cf => cf.ByAutomationId("RedButton")).AsButton().Click();
到更短的内容,例如:
_.Find<Button>("RedButton").Click();
无意间删除了一层抽象,使它们更易读,运行更快,不依赖于屏幕分辨率或dpi等。
如果以前的方法不适用,我会尝试做一件事-在虚拟机中运行NCrunch Grid实现。我的意思是,从理论上讲,它可以工作。