pyauto 【There is no active desktop required for moving mouse cursor】 报错处理

引言

在用easytrader调用同花顺客户端时,报错:There is no active desktop required for moving mouse cursor

分析步骤

1. bing 搜索,pyauto git issue

通过bing搜索 ,找到git的讨论方案

1
pyauto windows 远程桌面 There is no active desktop required for moving mouse cursor

alt text

https://github.com/pywinauto/pywinauto/issues/1096
是pyauto这个开源项目的git地址,上面的这个issue和我个人碰到的问题一样,下面有人回答了,windows 相关的都在 Remote Execution Guide. 中。

pyauto doc

打开remote execution guid,是pyauto的官方文档,关于远程运行的说明文档,正式我们需要的。
alt text
如标红里说的,要使用windows远程,有两个需要注意的事项

1
2
如果RDP(远程桌面协议)窗口被最小化,默认情况下远程PC上将没有活动的桌面环境。 
如果RDP被断开连接,桌面会被锁定无法访问。

而本人正好踩了第一点的坑,窗口最小化了。
远程桌面的时候,最小化被连接的窗口是常规窗口,不然我远程干嘛,那么就没有办法了吗,有点,文档里提供了官方的解决方案。

Running Tests in Minimized Remote Desktop Windows

Running Tests in Minimized Remote Desktop Windows

继续跟着文档,说明了失败的原因

If you minimize the Remote Desktop window (the window that displays the remote computer’s desktop), Windows switches the remote session to the GUI-less mode and does not display windows and controls. As a result, TestComplete (or TestExecute) will be unable to interact with the tested application’s GUI, as it does not exist and your automated GUI test will fail.

如果你最小化了远程桌面窗口(显示远程计算机桌面的窗口),Windows会将远程会话切换到无GUI模式,此时不会显示窗口和控件。因此,TestComplete(或TestExecute)将无法与被测应用的GUI进行交互,因为此时GUI并不存在,从而导致你的自动化GUI测试失败。

同时文档里也写了解决方案,这个后面里说。

至此,问题解决。

原因

最小化了远程桌面窗口(显示远程计算机桌面的窗口)时,Windows会将远程会话切换到无GUI模式,此时不会显示窗口和控件。因此,pyauto将无法与被测应用的GUI进行交互,因为此时GUI并不存在,从而导致你的自动化GUI测试失败。

解决方法

修改注册列表,官方文档有些了,就不具体了
alt text

总结

  1. 多看官方文档,官方文档很详细,远程相关的操作在 remote execution guid中。
  2. windows RDP 无GUI模式
    1
    2
    3
    Windows RDP(Remote Desktop Protocol,远程桌面协议)的无GUI(Graphical User Interface,图形用户界面)模式是指在远程会话中不完全加载图形界面的一种工作模式。在正常情况下,当你通过RDP连接到另一台Windows计算机时,你会看到一个完整的桌面环境,包括桌面图标、任务栏、开始菜单和其他图形元素。

    然而,在无GUI模式下,远程会话不会渲染这些图形元素。这意味着远程桌面上的应用程序窗口、菜单和对话框不会显示出来。这种模式通常是为了节省资源,提高性能,尤其是在网络带宽有限的情况下,因为传输图形界面需要更多的数据量。

参考