如何制作PowerBuilder UI测试应用程序?
我对PowerBuilder不太熟悉,但我有一个任务要为PB创建一个自动化用户界面测试应用程序。我们决定用Python和pywinauto以及iaccesible库来实现这个任务。问题是,有些用户界面元素,比如新添加的列表记录,无法通过这些工具访问(连inspect32也无法获取)。有没有什么办法可以访问这些元素并让它们可以被测试呢?
4 个回答
如果你在测试DataWindows(这个类是pbdwxxx,比如pbdw110),你需要通过点击特定的位置和按Tab键的组合来找到你想要的控件。当然,你也可以用上下箭头键在行之间移动。最简单的方法是先从一个普通控件,比如SLE开始,然后按Tab键进入DataWindow。问题是,DataWindow本质上只是一个图像。在你通过点击或按Tab键将焦点移动到某个字段之前,实际上并没有对应的控件。我还发现DataWindow的iAccessible接口有点奇怪。如果你询问DataWindow当前获得焦点的对象,可能得不到正确的答案。如果你遍历所有子控件,就能找到那个有焦点的控件。如果你能修改源代码,我建议你为DataWindow的控件设置AccessibleName,否则你可能只能通过位置来识别这些控件(这里说的DataWindow控件是指DataWindow内部的控件,而不是DataWindow本身)。如果这是一个MDI应用程序,你可能还会发现找到MicroHelp窗口(类名fnhelpxxx,比如fnhelp110,从主应用窗口中找到)会对确定当前上下文很有帮助。
编辑补充:Sikuli看起来对测试PowerBuilder非常有前景。它的工作原理是通过识别屏幕上的对象,利用保存的屏幕截图片段。也就是说,你需要先截取你想让它找到的屏幕部分的截图。
我有一段时间没用PowerBuilder了,但我猜你想解决的问题和我在为使用SCADA系统(比如Wonderware Intouch)做项目的人们解决的问题类似。
这种应用程序的问题在于,没有API可以获取或设置控件的值。所以用pywinauto的方法是行不通的。
我做了一个小工具,可以模拟用户的操作,并从屏幕截图中获取结果。我使用了PIL和pytesser ORM来分析这些截图。这不是最简单的方法,但效果还不错。
这个工具是开源的,免费提供,可以从我的网站下载(抱歉,网站是法语的)。你只需要一个账户,但也是免费的。只需申请一下就行。
如果你能看懂法语,这里有一篇关于测试基于Intouch的应用程序的文章
抱歉有点自我宣传,但我当时也面临类似的问题没有解决方案,所以我自己写了一个。总之,这个工具是免费的,还是开源的……
我正在尝试编写一个工具,用来自动化基于PowerBuilder的图形用户界面(GUI)。根据我的观察,最好的办法是使用PowerBuilder原生接口(PBNI),然后在你的NVO(非视觉对象)中调用PowerScript代码。
如果你愿意,可以给我发邮件(我的邮箱地址在我的个人资料里),我很想和你交流一下怎么实现这个。