我正在尝试自动化应用程序的测试,但我遇到了一个我正在努力解决的问题。
该应用程序具有标准的 Windows 按钮,我尝试使用 AutoIT 和 User32 dll 来单击其中一些按钮。有时按钮被正确点击(耶!),有时它们失败(嘘!) - 但更糟糕的是,AutoIT确信它点击了按钮(双嘘!),然后产生误报(三重嘘!)。当我看到它被说服时,我的意思是它返回点击成功,而不是成功。
我在 Win Server 2K8 上运行该应用程序,该应用程序除了使用 MDI 窗口之外没有什么特别之处,并且一些按钮包含在 MDI 窗口中。但有些不在 MDI 窗口中(例如,在创建父窗口之前的登录窗口)。
这是我的命令顺序:
在窗口中找到按钮(成功,总是) 将窗口带到前台(成功) 激活窗口(成功) 激活按钮(成功) 聚焦按钮(成功) 如果按钮获得焦点,并且按钮已启用,则点击它。(成功/失败,不可预知的行为。我无法缩小为什么有时会成功,以及为什么有时会失败......)
其他详情:
有时订单会单击按钮,这应该会打开另一个窗口。该窗口关闭,然后再次单击该按钮 - 这一次,没有任何反应。其他时候它按预期工作。
我以管理员身份运行,并且 UAC 已完全禁用。
据我所知,这不是时间问题,因为我确实确保按钮已聚焦并在尝试单击它之前启用,并且我看到该按钮确实在其周围获得了聚焦的突出显示。
正如我所提到的,我也一直在尝试使用简单的 User32/SendMessage 调用,但这也失败了。
最后但并非最不重要的一点是,当我手动与应用程序交互时不会发生这种情况。我一直有实际的按钮点击工作。
有什么想法吗?
更新
这是我应该提到的等式的另一个变量 - 这发生在 VM 上(因为这是我需要运行它的地方)。我可以在我自己的机器上做一些有限的测试,但要获得一些真正的测试,它需要在 VM 上。点击我自己的开发框似乎是可靠的,这让这更加令人费解。
我一直在另一个 VM 上尝试这个,它似乎也在那里工作。就这两个虚拟机而言,它们运行的是相同版本的 Windows、相同版本的我的应用程序、相同版本的 AutoIT 等。
我已将其简化为一个细节 - 幸运的是,我无法自行配置,并且必须提交一张票才能更改任何配置。配置的区别是这样的:
在不工作的虚拟机上,设备管理器显示一个鼠标,它是一个 vmware 鼠标。在正在工作的 VM 上,设备管理器显示鼠标是 PS/2 鼠标。显然两者都是软件鼠标,但我现在想知道 VMWare 鼠标是否会表现不同,并导致按钮点击并不总是有效。我不确定这作为解决方案的可能性有多大,因为根据我的理解,使用 User32 SendMessage 调用实际上并不使用鼠标,而是发送鼠标会发送的相同消息,但值得一试...