fly_freebird 发表于 2007-7-10 19:11:13

测试中遇到非标准控件怎办?

如题,有哪些办法可以解决WR无法识别非标准控件的问题?

哪位TX有相关学习资料是否可以共享?不甚感激!

liuhuascanf 发表于 2007-7-10 19:23:27

所谓的非标准控件一般就是指的是第三方控件,比如TPanel,TDBEditEh,TDBLookupComboboxEh,TDBGrid。。。都属于第三方控件
第三方控件可以通过手动的方式进行加载
对于wr8以上版本,可以通过tools->gui map configition新增第三方控件;

当然,也可以讲第三方控件通过代码形式写入脚本,然后加载到wr里面,使wr启动时候自动进行加载
可以将脚本路径添加到tools->general option 中的general->startup中
。。。。。。

lantianwei 发表于 2007-7-12 12:32:36

hehe 自问自答!

fly_freebird 发表于 2007-7-12 18:04:44

"也可以讲第三方控件通过代码形式写入脚本,然后加载到wr里面,使wr启动时候自动进行加载"
具体怎么做?

liuhuascanf 发表于 2007-7-12 20:06:26

如果你的版本是8.0的
1.新建一个test实例,比如NewTool
2.tool->gui map configurtion点击"+",弹出新的提示框,learn下控件,比如新的控件名称为
TDBEditEh
3.在classlist下面双击TDBEditEh,弹出一个对话框,将对话框下面generated tsl script拷出来
贴到NewTool下,保存
比如代码如下:
set_class_map("TDBEditEh", "object");
set_record_attr("TDBEditEh", "class regexp_MSW_class label", "attached_text MSW_class", "location");
set_record_method("TDBEditEh", RM_RECORD);

4.一般像这类第三方控件基本都有msw_id,有这个id比较麻烦,在脚本中可以将这个msw_id去掉,以后可以省去不少事情

5.将newtool路径添加到tools->general option 中的general->startup->startup test中的

fly_freebird 发表于 2007-7-16 10:46:41

以下是我录制的一个系统登录的脚本,但运行该脚本时依次弹出2个对话框,要求重新学习TEdit和TEdit_1控件,这是为什么?

set_class_map("TButton", "button");
set_record_attr("TButton", "class label", "MSW_id", "location");
set_record_method("TButton", RM_RECORD);

set_class_map("TEdit", "edit");
set_record_attr("TEdit", "class attached_text", "MSW_id", "location");
set_record_method("TEdit", RM_RECORD);


# 系统登录
        win_activate ("系统登录");
        set_window ("系统登录", 3);
        edit_set ("TEdit", "jl");
        password_edit_set("TEdit_1", "123456");
        button_press ("确认");

# 消息
        set_window ("消息", 0);
        button_press ("确定");

# 系统登录
        set_window ("系统登录", 1);
        button_press ("确认");

[ 本帖最后由 fly_freebird 于 2007-7-16 13:59 编辑 ]

fly_freebird 发表于 2007-7-16 10:51:01

上述问题是否就是你所说的“一般像这类第三方控件基本都有msw_id,有这个id比较麻烦,在脚本中可以将这个msw_id去掉,以后可以省去不少事情”?

如果把MSW_id去掉,会使得set_record_attr函数的参数个数不匹配,怎样解决?

fly_freebird 发表于 2007-7-16 12:48:37

我工作中遇到的系统软件大多都是用C++Builder开发的,其中很多控件都是WR无法识别的,因此必须解决非标准控件的问题!

fly_freebird 发表于 2007-7-16 14:32:47

又仔细看了一遍 liuhuascanf 给出的代码,终于将上述问题解决了!

解决办法:将 Tools -> GUI Map Configuration 中tedit的MSW_id属性状态设置为“Not Used”,然后将regexp_MSW_class的属性设置为“Optional”,重新将Generated TSL script 粘贴到当前的测试脚本中替换掉原来的tedit的脚本,重新运行脚本就不会再提示重新识别TEdit和TEdit_1控件了。

仍存在的疑问:为什么TButton的MSW_id属性设置为“Optional”,运行脚本时没有遇到提示重新识别TButton的问题,而TEdit的MSW_id属性设置为“Optional”就会出现这个问题呢?

fly_freebird 发表于 2007-7-16 20:26:06

C++Builder中的DBGrid控件应该映射到哪种标准控件?

我试着将DBGrid控件定义成一个虚拟对象,但是发现GUI对象检查点不支持虚拟对象,如何利用WR的GUI对象检查点功能测试DBGrid控件中任意单元格里的值呢?

lantianwei 发表于 2007-7-17 09:23:11

原帖由 fly_freebird 于 2007-7-16 20:26 发表 http://bbs.51testing.com/images/common/back.gif
C++Builder中的DBGrid控件应该映射到哪种标准控件?

我试着将DBGrid控件定义成一个虚拟对象,但是发现GUI对象检查点不支持虚拟对象,如何利用WR的GUI对象检查点功能测试DBGrid控件中任意单元格里的值呢?

如果实在不行,你可以考虑用键盘模拟操作,效果还不错!(有个前提:单元格是可编辑的)

liuhuascanf 发表于 2007-7-17 11:49:45

像第三方控件建议不要用虚拟对象,或者说用cb开发的东西尽量不要用,用了以后隐患比较多,我们公司自己的产品也是用cb开发的。
cb中碰到的比较多的控件应该是TwwDBGrid
像类似这种的第三方控件,大部分都是用obj_type()函数进行操作的,其他的函数用的不灵活。
同意楼上,强烈建议使用键盘模拟操作,这样维护就相对方便了不少

fly_freebird 发表于 2007-7-18 08:43:46

obj_type()函数我可以试试,但楼上两位TX说的“键盘模拟操作”是什么?我第一次听说,请指教!

fly_freebird 发表于 2007-7-19 12:46:32

up

liuhuascanf 发表于 2007-7-19 17:05:57

原帖由 fly_freebird 于 2007-7-18 08:43 发表 http://bbs.51testing.com/images/common/back.gif
obj_type()函数我可以试试,但楼上两位TX说的“键盘模拟操作”是什么?我第一次听说,请指教!

简单讲就是中间对前台的操作全部通过键盘操作来实现,不用鼠标!

annayin 发表于 2007-7-21 10:27:45

原帖由 liuhuascanf 于 2007-7-19 17:05 发表 http://bbs.51testing.com/images/common/back.gif


简单讲就是中间对前台的操作全部通过键盘操作来实现,不用鼠标!

厄。。。在WR中怎么使用?sdlkfj1

fly_freebird 发表于 2007-7-23 16:58:41

我自己用C#写了一个测试辅助工具,然后用WR测试这个工具。因为WR无法识别C#中的Button控件,因此,我把它映射到WR的Button标准控件上,并对此Button作如下简单测试(注:下述操作过程是输入数据库服务器IP和数据库名称后点击[连接]按钮测试数据库连接是否成功)。

set_class_map("WindowsForms10.EDIT.app3", "edit");
set_record_attr("WindowsForms10.EDIT.app3", "class attached_text", "MSW_class", "location");
set_record_method("WindowsForms10.EDIT.app3", RM_RECORD);

set_class_map("WindowsForms10.BUTTON.app3", "button");
set_record_attr("WindowsForms10.BUTTON.app3", "class label", "MSW_class", "location");
set_record_method("WindowsForms10.BUTTON.app3", RM_RECORD);


# 通信端帧信息解析工具
        win_activate ("通信端帧信息解析工具");
        set_window ("通信端帧信息解析工具", 12);
        edit_set ("WindowsForms10.EDIT.app3_0", "172.16.50.58");
        edit_set ("WindowsForms10.EDIT.app3_1_1", "RPMSDB");
        obj_mouse_click ("连接", 38, 9, LEFT);

# 提示信息
        set_window ("提示信息", 1);
        button_press ("确定");

为何上述脚本中的 obj_mouse_click ("连接", 38, 9, LEFT); 没有被录制成 button_press("连接"); 呢?

fly_freebird 发表于 2007-7-23 17:01:25

为何C#中的 edit 控件经过映射后WR可以识别,但 button 控件经映射后仍无法识别呢?

fly_freebird 发表于 2007-7-25 08:59:37

UP

dionysus 发表于 2007-7-25 09:21:01

lz把下面的这些映射代码拷贝到一个单独的test脚本中,并在tools->general option->general->startup->startup test中指向这个脚本,重启WR再录制一下看看

set_class_map("WindowsForms10.EDIT.app3", "edit");
set_record_attr("WindowsForms10.EDIT.app3", "class attached_text", "MSW_class", "location");
set_record_method("WindowsForms10.EDIT.app3", RM_RECORD);

set_class_map("WindowsForms10.BUTTON.app3", "button");
set_record_attr("WindowsForms10.BUTTON.app3", "class label", "MSW_class", "location");
set_record_method("WindowsForms10.BUTTON.app3", RM_RECORD);
页: [1] 2
查看完整版本: 测试中遇到非标准控件怎办?