GUI自动化测试 - 窗口句柄问题

时间:2008-08-20 20:03:29

标签: ui-automation window-handles gui-testing

我们公司目前正在为紧凑型框架应用程序编写GUI自动化测试工具。我们最初搜索了很多工具,但它们都不适合我们。

通过使用该工具,您可以记录测试用例并将它们组合到测试套件中。对于每个测试套件,都会生成一个应用程序,该应用程序启动测试中的应用程序并模拟用户输入。

一般情况下,该工具工作正常,但由于我们使用窗口句柄进行模拟用户输入,因此您无法做很多事情。例如,我们不可能获得控件的名称(我们只是得到标题)。

使用窗口句柄的另一个问题是检查更改。目前我们模拟对控件的点击,并根据结果知道应用程序是否已进入下一步。

是否有其他(更简单)的方式来做这些事情(例如消息队列或其他任何东西)?

5 个答案:

答案 0 :(得分:2)

有趣的问题!我有一段时间没有做任何低级(想想Win32)Windows编程,但这就是我要做的。

使用命名管道并让您的应用程序监听它。使用此命名管道作为通信介质,实现一个真正简单的协议,您可以在应用程序中查询给定HWND的控件名称,或其他您觉得有用的东西。确保协议足够丰富,以便在应用程序和测试框架之间交换足够的信息。确保测试框架不会从应用程序中产生太多“特殊行为”,因为那样你就不会真正测试这些功能,而是测试框架。

实现这一点可能有更优雅和更酷的方式,但这是我从头脑中记住的,只使用简单的Win32 API调用。

我们为工作中的产品实施的另一种方法是在事件脚本中记录用户事件,例如鼠标点击和关键事件。这应该足够丰富,以便您可以让应用程序回放它,人为地将这些事件注入到消息队列中,并使其行为与您第一次记录脚本时的行为相同。您在播放脚本时基本上模拟了用户。

除此之外,您还可以记录任何重要状态(用户的文档,首选项,GUI控件层次结构等),一次录制脚本时,一次播放时。这为您提供了两组可比较的数据,以确保一切都保持不变。这个解决方案为您提供了不容易修改的测试(如果您的GUI发生了变化,您必须重新记录),但这提供了令人敬畏的回归测试。

(编辑:在beta测试期间,这也是一个非常棒的QA工具,例如:让您的用户记录他们的行为,如果发生崩溃,您很有可能通过回放脚本轻松地重现问题)

祝你好运!

卡尔

答案 1 :(得分:1)

如果Automated GUI测试工具了解应用程序编写的框架,则可以使用该信息制作更好或更高级的脚本。例如TestComplete知道Borland的VCL和WinForms。如果使用Windows Presentation Foundation测试应用程序构建,则对此build in提供高级支持。

答案 2 :(得分:1)

使用NUnitForms。我已经将它们用于单线程和多线程应用程序,并且您不必担心句柄和类似的东西

以下是一些有关值得阅读的NUnitForms的帖子

NUnitForms and failed DragDrop registration - problem of MTA vs STA

Compiled application exe GUI testing with NUnitForms

答案 3 :(得分:0)

我终于找到了一个在测试应用程序和被测试应用程序之间进行通信的解决方案:Managed Spy。它基本上是在ManagedSpyLib之上构建的.NET应用程序。

ManagedSpyLib允许以编程方式访问另一个进程的Windows窗体控件。为此,它使用Window Hooks和内存映射文件。

感谢所有帮助我解决问题的人!

答案 4 :(得分:0)

Managed Spy不提供紧凑框架应用程序的解决方案。

Jamo Solutions公司(www.jamosolutions.com)满足移动设备自动化测试的要求,包括.net紧凑型框架应用程序。