3

我们有自动化的 UI 测试,通过定期在虚拟机上运行来验证我们的软件。我想在这个池中添加一些 Windows 8 发布预览机器,这样我们就可以针对它运行我们的自动化测试脚本,并确保我们的应用程序继续工作。

我们通过从干净的快照启动虚拟机来确保我们的测试始终以干净的状态开始。当机器启动时,它们的开始菜单/启动文件夹中有一个快捷方式,用于启动脚本。

问题是,在 Windows 8 上,机器启动时会显示开始屏幕,并且我们的 UI 测试无法与应用程序交互,因为开始屏幕会阻止所有内容。他们尝试单击鼠标并最终意外启动随机地铁应用程序,并且所有测试都失败了。

我以前在 Windows 8 消费者预览版下工作过。我们的脚本在启动时调用IShellDispatch4.ToggleDesktop ,这会导致开始屏幕隐藏。

在发布预览下,这不再有效。

我也试过:

  • 根据本文创建 explorer.exe 的快捷方式。它不起作用。

  • 根据这篇 Howtogeek 文章创建调用 explorer/ToggleDesktop 的屏幕保护程序的快捷方式。它不起作用(看起来它可能只是调用 IShellDispatch4.ToggleDesktop 无论如何)。

4

5 回答 5

1

我最终在 RTM 版本中所做的是:

引导程序脚本运行,它假定开始菜单将占据全屏。然后我们使用 win32 SendInput 输入 DESKTOP 并返回

于 2012-11-29T20:58:31.193 回答
1

听起来您已经在使用 VM 主机的 API 来执行诸如从脚本启动和停止虚拟机之类的操作。您可以使用相同的 API 将Windows+D组合键发送到 VM 吗?那将显示桌面。

于 2012-06-01T12:03:17.077 回答
0

这是一个解决方案,由来自各处的位编译而成。

我们的想法是我们要键入“桌面”,然后输入/返回命中(Orion 的想法)并在每次登录时执行此操作(参考文章中的计划任务想法),但避免使用自定义 win32 二进制文件。我的解决方案是使用 PowerShell 来避免 win32 二进制文件。

将以下 PS 脚本保存在 c:\sendkeys.ps1 中:

[void] [System.Reflection.Assembly]::LoadWithPartialName("'System.Windows.Forms")
[System.Windows.Forms.SendKeys]::SendWait("desktop{ENTER}")

然后在每个日志上创建一个计划任务运行,该任务使用以下参数启动 Powershell:

powershell -executionpolicy bypass -nologo -file c:\sendkeys.ps1
于 2013-01-15T01:09:39.140 回答
0

我们公司也有同样的问题,我们刚刚找到了解决办法。我们已经使用 AutoIt 并制作了一个脚本,它可以单击“桌面”磁贴。然后,我们将 AutoIt“编译”为一个可执行 exe,我们将其与我们的虚拟映像捆绑在它们各自的启动文件夹中。

自动编译器

我们的脚本使用以下命令:

MouseClick("left", x, y)

其中 x 和 y 是桌面磁贴内的坐标。我们的图像总是恢复到一个干净的状态(就像你的一样),所以这个图块总是在同一个位置。

于 2012-11-29T15:44:51.327 回答
0

@迈克尔Bisbjerg

你好!您还可以使用此代码按下并释放 Windows 键并将您直接发送到桌面:

Send("{LWINDOWN}{LWINUP}")

乔纳森

于 2014-04-13T14:39:53.527 回答