【问题标题】:How can I run UI tests with FlaUI on a remote machine whilst not RDP'd into it?如何在远程机器上使用 FlaUI 运行 UI 测试而不是 RDP 进入它?
【发布时间】:2019-01-10 20:23:34
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 它们是在 RDP 会话关闭后停止运行,还是在没有 RDP 会话打开时根本不开始运行?
  • 我在这方面取得了一些进展,只要没有启动 RDP 会话,它们就能够运行,并且在 RDP 会话连接然后断开连接后它们停止。
  • 这个Remote Execution Guide怎么样?
  • 远程机器上是否连接了物理监视器?
  • 它是一个虚拟机,位于一个装满服务器机架的房间中,现在大部分问题都已解决

标签: ui-automation ncrunch flaui


【解决方案1】:

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

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

【讨论】:

  • 我不熟悉命令tscon 1 /dest:console。如果我运行它,那么断开 RDP 会话将确保机器不会锁定?
  • 这正是它的作用,是的
  • 这几乎是正确的答案。许多 UI 交互需要桌面会话。上述命令使桌面会话保持打开状态,而与 RDP 断开连接则将其关闭。作为替代方案,我们在使用 VNC 而非 RDP 方面相当成功。
【解决方案2】:

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

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

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

换成更短的,例如:

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

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

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

【讨论】:

    【解决方案3】:

    所以我完成了这项工作。主要是我按照here 的说明进行操作,但是当用户登录 TaskScheduler 时,我也禁用了 ServerManager 的启动。

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

    默认用户登录时桌面太小也会导致无法点击的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-16
      相关资源
      最近更新 更多