使用Ruby的WIN32API查找特定按钮

时间:2010-07-27 13:56:11

标签: ruby winapi testing automated-tests

我正在为Windows C#.net应用程序进行一些脚本化的GUI测试。我正在使用Ruby来推动测试,我的脚在WIN32API领域正式受到了影响 - 但我当然不会对它过于自信。事实上,我觉得我缺少一些基本的理解。在这一点上,我知道如何获得不同控件的唯一方法是通过控制类和一些识别文本的组合。

我的问题是,我必须测试的应用程序有一系列的几个按钮 - 所有这些按钮都包含一个图标而没有文本。

是否有可用于检索特定按钮的方法?我已经通过相对定位来实现这一目标,但这种情况很糟糕,而且我对此并不感兴趣。

我可以访问源代码;如果我可以设置一些识别属性/属性,我非常愿意。我现在只是无知。

4 个答案:

答案 0 :(得分:2)

我现在面临着一个非常类似的问题。您可以尝试在窗体及其控件上设置id / automation id,然后使用ruby + ironruby + bewildr。

https://github.com/natritmeyer/bewildr

DotNetDevDude有一个很好的运行: http://dotnetdevdude.com/Blog/2010/08/23/AutomatedWPFUITestingUsingIronRubyAndCucumberWithBewildr.aspx

祝你好运。

答案 1 :(得分:0)

不幸的是,这可能并不容易。你想要枚举所有的窗户和他们的孩子,并寻找关于你想要的按钮的“线索”,全部使用win32api。

可以在win32screenshot中找到“枚举所有窗口”的示例(搜索“window_titles”)。

http://github.com/rdp/win32screenshot

-r

答案 2 :(得分:0)

像这样的UI自动化是一个PITA。我不知道Ruby所以我无法帮助你了解细节,但我可以提供一些来自我写的最后一个基于gui的线束。它是在C#中完成的,我使用System.Runtime.InteropServices来访问user32.dll中的各种函数。

然后我能够构建各种方法来获取各种GUI元素的句柄。通常这是获取父窗口的句柄然后关联子项的问题,直到我得到正确的控件,然后使用句柄执行该控件上需要的功能。像Spy ++或WinID这样的工具对于查看子控件和父控件之间的关系以及在构建线束时是否获得正确的句柄非常有用。

抱歉,我无法直接帮助你。

答案 3 :(得分:-1)

好的,如果有图标,那么你可以进入页面并查看代码。然后在视图代码中找到按钮图标名称。你得到scr和alt参数,然后在下面的代码中复制名称和过去。

ie.image(:src,/ icon name /)。点击

ie.image(:alt,/ icon name /)。点击