Python 当RDP(VM)最小化时,自动化脚本失败

Python 当RDP(VM)最小化时,自动化脚本失败,python,selenium,autoit,sikuli,Python,Selenium,Autoit,Sikuli,我一直面临在一个虚拟机上自动执行脚本的问题。我已经自动化了保存文档的功能,这是一个理想的Windows设计的UI。我尝试过使用各种技术/工具,如AutoIT、Python、Sikuli,但如果VM最小化,脚本就会停止。它工作得非常好,因为VM是通过RDP打开的,我可以看到运行时的执行情况。但是如果我最小化RDP,脚本将在“另存为”对话框中停止,发送键(Cntrl+s)或(Enter)都不会通过AutoIt脚本工作。请提供一些解决方案,以便即使在最小化模式下也能成功执行脚本。在最小化RDP会话上执

我一直面临在一个虚拟机上自动执行脚本的问题。我已经自动化了保存文档的功能,这是一个理想的Windows设计的UI。我尝试过使用各种技术/工具,如AutoIT、Python、Sikuli,但如果VM最小化,脚本就会停止。它工作得非常好,因为VM是通过RDP打开的,我可以看到运行时的执行情况。但是如果我最小化RDP,脚本将在“另存为”对话框中停止,发送键(Cntrl+s)或(Enter)都不会通过AutoIt脚本工作。请提供一些解决方案,以便即使在最小化模式下也能成功执行脚本。

在最小化RDP会话上执行脚本时失败的原因很简单。GUI自动化/测试工具需要有一个未锁定的活动桌面-否则操作系统认为它不需要实际呈现GUI操作(这很耗时),因为没有用户可以看到呈现的图形用户界面。程序通常不通过GUI进行通信

这就是为什么QF测试和其他GUI自动化/测试工具在其常见问题解答中经常有一个注释来描述此类问题。例如,QF测试中的常见问题14,请参见

如Windows 10或Windows Server 2016常见问题14所述,如果是RDP连接,则需要修改注册表。去

HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client
并添加一个新值

RemoteDesktop_SuppressWhenMinimized as DWORD having the value 2

重新启动后,您将能够最小化RDP连接。但是,断开或关闭RDP连接可能仍然会导致故障。

您可以尝试运行所述的管理员身份的
tscon.exe RDP Tcp#0/dest:console
。这将断开RDP连接,但会使所有GUI程序在VM上正常运行。我个人曾在虚拟机上使用过autoit,效果不错。当然,您将无法在脚本运行时监视脚本,因此这可能对您有效,也可能对您无效。

谢谢,我同意您的看法,但AutoIT和Sikuli工具也会出现这种情况吗?用Python编码打开窗口并发送控件到另存为对话框怎么样?我还想提到我的一些脚本在最小化模式下工作,我只面临使用AutoIt自动生成的基于窗口的GUI组件“另存为”对话框的问题。@ArtiChetwani但AutoIt和Sikuli工具也会出现这种行为吗?-是的,它正在影响所有GUI测试/自动化工具,不仅仅是AutoIt、Sikuli。。。在某种程度上,每个GUI测试/自动化工具都需要操作系统,如果操作系统不想做任何事情,则没有工具可以帮助您-如果您需要GUI,则不允许使用最小化或锁定的会话。就这么简单。通过虚拟机等有许多解决方法,请参阅我链接的常见问题。@ArtiChetwani如何使用Python编码打开窗口并发送控件以另存为对话框?-这也行不通。“发送控件”可能已经受到影响。@ArtiChetwani我还想指出,我的一些脚本在最小化模式下工作,我只面临使用AutoIt自动执行的基于窗口的GUI组件“另存为”对话框的问题。。。是的,我没有说操作系统完全阻止任何与GUI相关的操作。但是,您不确定哪一个会被“阻止”。因此,如果您执行脚本100次,可能只有1%或99%的时间失败。然而,有些操作比其他操作更容易失败。Sikulis实际上正在处理屏幕上物理显示的任何内容。如果它不在那里,西库利就不会“看到”它。