gpt4 book ai didi

c# - AutoIT 或 User32 按钮偶尔点击工作

转载 作者:可可西里 更新时间:2023-11-01 14:19:29 24 4
gpt4 key购买 nike

我正在尝试自动化应用程序的测试,但我遇到了一个我正在努力解决的问题。

该应用程序具有标准的 Windows 按钮,我尝试使用 AutoIT 和 User32 dll 来单击其中一些按钮。有时按钮被正确点击(耶!),有时它们失败(嘘!) - 但更糟糕的是,AutoIT 确信它点击了按钮(双重嘘!),然后产生误报(三次嘘声!)。当我看到它被说服时,我的意思是它返回点击成功,但实际上没有。

我在 Win Server 2K8 上运行该应用程序,除了它使用 MDI 窗口外,该应用程序没有什么特别之处,并且一些按钮包含在 MDI 窗口中。但是,有些不在 MDI 窗口中(例如,登录窗口,在创建父窗口之前)。

这是我的命令顺序:

在窗口中找到按钮(成功,总是)将窗口置于前景(成功)激活窗口(成功)激活按钮(成功)聚焦按钮(成功)如果按钮获得焦点并且按钮已启用,则单击它。 (成功/失败,不可预知的行为。我无法缩小为什么有时成功,有时失败的原因......)

其他细节:

有时订单有被点击的按钮,这应该会打开另一个窗口。该窗口关闭,然后再次单击该按钮 - 这一次没有任何反应。其他时候它按预期工作。

我以管理员身份运行,UAC 已完全禁用。

据我所知,这不是时间问题,因为在尝试单击按钮之前,我确实确保该按钮已获得焦点并已启用,并且我看到该按钮确实在其周围获得了焦点突出显示。

正如我所提到的,我也一直在尝试通过简单的 User32/SendMessage 调用进行此操作,但也失败了。

最后但并非最不重要的一点是,当我手动与应用程序交互时不会发生这种情况。我总是有实际的按钮点击工作。

有什么想法吗?

更新

这是我应该提到的等式的另一个变量 - 这是在 VM 上发生的(因为这是我需要运行它的地方)。我可以在我自己的机器上做一些有限的测试,但要得到一些真正的测试,它需要在 VM 上。点击我自己的开发箱似乎是可靠的,这让这一切更加令人费解。

我一直在另一个 VM 上尝试这个,它似乎也在那里工作。就两个虚拟机而言,它们运行相同版本的 Windows、相同版本的应用程序、相同版本的 AutoIT,等等。

我已将其简化为一个细节 - 幸运的是,我无法自行配置,必须提交一张票才能更改任何配置。配置上的区别是这样的:

工作的 VM 上,设备管理器显示鼠标是 vmware 鼠标。在正在 工作的虚拟机上,设备管理器显示的鼠标是 PS/2 鼠标。显然两者都是软件鼠标,但我现在想知道 VMWare 鼠标的行为是否会有所不同,并导致按钮点击并不总是有效。我不确定这作为解决方案的可能性有多大,因为根据我的理解,使用 User32 SendMessage 调用实际上并没有使用鼠标,而是发送了鼠标会发送的相同消息,但值得一试...

最佳答案

您说您已成功聚焦按钮,那么您是否尝试发送Spacebar 事件而不是MouseClick

Send("{SPACE}")

(我认为这就是语法。我不是 AutoIt 的常客)

空格键通常可用于与大多数可点击控件交互,例如按钮和复选框。根据我的经验,由于奇怪、不一致的原因,模拟的鼠标点击,甚至 ControlClicks 都比击键可靠得多。我的同情。

至于检测按钮是否被单击,也许最简单的方法是让按钮更改 AutoIT 可以检测到的表单。例如,在用户按下按钮之前显示为 Ready 的状态标签。当用户按下按钮时,文本变为 Processing。如有必要,您可以使标签不可见(或放置在表单边界之外),这样用户就看不到它,但 AutoIt 可以。

关于c# - AutoIT 或 User32 按钮偶尔点击工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9216520/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com