我对 PowerBuilder 不熟悉,但我有一项任务是为 PB 创建自动 UI 测试应用程序。我们决定在 Python 中使用 pywinauto 和 iaccesible 库来实现。问题是无法从中访问某些 UI 元素,例如新添加的列表记录(即使 inspect32 也无法获取)。任何想法如何达到这些元素并使它们可测试?
4 回答
I'm experimenting with code for a tool for automating PowerBuilder-based GUIs as well. From what I can see, your best bet would be to use the PowerBuilder Native Interface (PBNI), and call PowerScript code from within your NVO.
If you like, feel free to send me an email (see my profile for my email address), I'd be interested in exchanging ideas about how to do this.
我有一段时间没有使用 PowerBuilder,但我想您要解决的问题与我要解决的问题类似,这些问题是为那些使用诸如 Wonderware Intouch 之类的 SCADA 系统制作项目的人解决的。
这种应用程序的问题是没有 API 来获取或设置控件的值。所以 pywinauto 方法行不通。
我制作了一个小工具来模拟用户事件并从屏幕截图中获取结果。我使用 PIL 和 pytesser ORM 来分析屏幕截图。这不是最简单的方法,但可以正常工作。
该工具是开源的,免费的,可以从我的网站下载(对不起,法语)。您只需要一个帐户,但它也是免费的。问一下。
如果您能阅读法语,这里有一篇关于测试基于 Intouch 的应用程序的文章
很抱歉自我推销,但我遇到了类似的问题,没有解决方案,所以我自己写了。无论如何,这是免费和开源的......
我在 AutomatedQa 支持中看到他们推荐使用 msaa 并在控件上设置一些属性的配方。我不知道它是否有效。
如果您正在测试 DataWindows(类是 pbdwxxx,例如 pbdw110),您将不得不使用单击特定坐标和发送 Tab 键的组合来获得您想要的控件。当然,您也可以发送上下箭头键在行间移动。最简单的做法是从 SLE 之类的普通控件开始,然后将选项卡放入 DataWindow。问题是 DataWindow 本质上只是一个图像。在您通过单击或 Tab 键将焦点移到那里之前,没有对给定字段的控制。我还发现DataWindow 的iAccessible 界面有点奇怪。如果您向 DataWindow 询问具有焦点的对象,您不会得到正确的答案。如果你列举所有的孩子,你可以找到一个有重点的孩子。如果您可以修改源代码,我还建议您为 DataWindow 控件设置 AccessibleName,否则您可能无法识别除位置之外的控件(DataWindow 控件是指 DataWindow 内的控件,而不是 DataWindow 本身) . 如果它是一个 MDI 应用程序,您可能还会发现定位 MicroHelp 窗口(类 fnhelpxxx,例如 fnhelp110,从主应用程序窗口中查找)有助于确定您当前的上下文。
编辑添加: Sikuli看起来很有希望用于测试 PowerBuilder。它通过从保存的屏幕截图片段中识别屏幕上的对象来工作。也就是说,您截取您希望它找到的屏幕部分的屏幕截图。