如何制作 PowerBuilder UI 测试应用程序?

6

我不熟悉PowerBuilder,但是我有一个任务需要创建PB的自动UI测试应用程序。我们决定使用Python和pywinauto以及iaccesible库来完成它。问题是有些UI元素(如新添加的列表记录)无法从中访问(即使inspect32也无法获取它)。有什么想法可以达到这些元素并使它们可测试吗?

4个回答

2

我正在尝试编写一个自动化PowerBuilder GUI的工具。从我的观察来看,您最好使用PowerBuilder Native Interface (PBNI),并从NVO内部调用PowerScript代码。

如果您愿意,可以给我发送电子邮件(请查看我的个人资料获取我的电子邮件地址),我很乐意交流关于如何实现这一目标的想法。


1

我在AutomatedQa支持中看到了一份建议使用MSAA并设置控件的一些属性的食谱。我不知道它是否有效。


使用MSAA协助测试的限制在于PowerBuilder仅提供开发人员明确提供的MSAA信息,除了一些例外情况。请注意,我这里说的是经典PB,我还没有在WinForms中探索过。我已将MSAA支持添加到我们中间层的许多PFC控件中。 - Hugh Brackett

1

我已经有一段时间没有使用PowerBuilder了,但我猜你试图解决的问题与我正在为使用SCADA系统(如Wonderware Intouch)制作项目的人们所面临的问题类似。

这种应用程序的问题在于没有API来获取或设置控件的值。因此,pywinauto方法无法奏效。

我制作了一个小工具来模拟用户事件并从屏幕截图中获取结果。我使用PIL和pytesser ORM来分析屏幕截图。这不是最简单的方法,但它可以正常工作。

该工具是开源且免费的,可以从我的网站(抱歉,是法语)下载。您只需要一个帐户,但也是免费的。只需提出要求即可。

如果您能阅读法语,这里是有关测试基于Intouch的应用程序的文章之一

很抱歉我在自我推广,但我遇到了一个类似的问题,没有解决方案,所以我写了我的解决方案。无论如何,这是免费和开源的...


1
嗨。除了一些例外情况,我们的Python应用程序运行得相当好。我们不直接设置控制值,而是告诉系统例如:“转到以下位置x,y,输入一些文本并单击Enter”。我们使用pywinauto和iaccesible来查找控件并获取位置、值等信息。但问题是,有些元素无法被pywinauto或iaccesible找到。 - Jerzy Sekuła

1
如果您正在测试DataWindows(类为pbdwxxx,例如pbdw110),则必须使用在特定坐标处单击和发送Tab键的组合来获取所需的控件。当然,您也可以发送上下箭头键以在行之间移动。最简单的方法是从普通控件(如SLE)开始,然后切换到DataWindow。问题在于,DataWindow本质上只是一张图片。在单击或切换焦点之前,没有给定字段的控件。我还发现DataWindow的iAccessible接口有点奇怪。如果您要求DataWindow具有焦点的对象,则不会得到正确的答案。如果您枚举所有子项,则可以找到具有焦点的子项。如果您可以修改源代码,我建议您为DataWindow控件设置AccessibleName,否则您可能无法识别控件,除非通过位置(指DataWindow内部的控件,而不是DataWindow本身)。如果它是MDI应用程序,则您可能还会发现查找MicroHelp窗口(类fnhelpxxx,例如fnhelp110,从主应用程序窗口中查找)有助于确定当前上下文。
编辑后添加: Sikuli 对于测试PowerBuilder非常有前途。它通过识别屏幕上的对象来工作,从保存的屏幕截图片段中识别。也就是说,您需要拍摄屏幕上想要查找的部分的截图。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接