有趣的问题!我有一段时间没有做过任何低级(想想 Win32)Windows 编程,但这就是我要做的。
使用命名管道并让您的应用程序监听它。使用这个命名管道作为通信介质,实现一个真正简单的协议,您可以在应用程序中查询给定其 HWND 的控件的名称,或您认为有用的其他内容。确保协议足够丰富,以便在您的应用程序和测试框架之间交换足够的信息。确保测试框架不会从应用程序中产生太多的“特殊行为”,因为那样您就不会真正测试功能,而是测试您的测试框架。
可能有更优雅和更酷的方法来实现它,但这是我脑海中的记忆,只使用简单的 Win32 API 调用。
我们为工作中的产品实施的另一种方法是在事件脚本中记录用户事件,例如鼠标点击和按键事件。这应该足够丰富,以便您可以让应用程序播放它,人为地将这些事件注入消息队列,并让它的行为方式与您第一次录制脚本时的行为方式相同。当您播放脚本时,您基本上模拟了用户。
除此之外,您可以记录任何重要状态(用户文档、首选项、GUI 控件层次结构等),记录脚本时一次,回放时一次。这为您提供了两组可以比较的数据,以确保一切都保持不变。该解决方案为您提供了不容易修改的测试(如果您的 GUI 更改,您必须重新记录),但提供了很棒的回归测试。
(编辑:在 beta 测试期间,这也是一个很棒的 QA 工具,例如:只需让您的用户记录他们的操作,如果发生崩溃,您很有可能只需回放脚本即可轻松重现问题)
祝你好运!
卡尔