51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 12701|回复: 25
打印 上一主题 下一主题

GUI Map Configuration使用介绍

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-7-30 13:32:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在Winrunner版块经常看到大家询问WR对第三方控件的识别问题,其实遇到的问题都很相近,但无法做到一一对应得回复和解答。于是想到写一篇WRGUI Map Configuration的使用介绍,大家可以参考操作,用来解决自己的问题。
Winrunner对第三方控件的识别的确有许多不足,我想这里面有WR自身识别上的问题,也有其他等原因,例如没有安装对应插件,第三方控件确实很特殊使得对第三方控件的录制语句都是obj_mouse_等依赖屏幕坐标的函数,移植性和拓展性都很差。GUI Map Configuration可以是用来手工定义第三方控件的映射,让WR在一定程度上提高对象的识别。以下以Winrunner8.2为例,介绍如何对Flight事例程序中的Date of Flight控件做自定义的识别:
在不使用GUI Map Configuration的时候录制FlightDate控件会生成obj类的函数语句,表明WR没有正确识别这个控件:


生成语句中的逻辑对象名称也很奇怪:
# Flight Reservation
      
set_window ("Flight Reservation", 11);
      
obj_type ("MSMaskWndClass","111111");


这时我们可以通过在GUI Map Configuration中指定对Flight Date的这个EditBox控件(最接近的就是EditBox类了)的映射,来让WR加强对它的操作。
Tools->GUI Map Configuration在对话框中点击按钮:


Add Class对话框上点击指向的那个按钮,选中Date of Flight控件:




这是Add Class中的Class Name会显示选中控件的类名称:


点击“OK”,这个第三方控件的类将添加到GUI Map Configuration中了,并且类前有一个U,表示是用户自定义(user-defined)


点击编辑按钮,进入这个类的映射及编辑对话框:
可以看到其默认的映射类就是object,所以WR在录制时生成的函数都是obj


这时我们希望它能改变映射的类为EditBox类,所以在Mapped to class下拉框中选中edit类型:


简单起见其他地方不用更改,点击Generated TSL scrīpt框下面的“Paste”按钮,将自动生成的映射语句复制到脚本中去,点击OK关闭对话框。
回到脚本编辑界面里,将这段映射语句放到脚本最开头的地方:
set_class_map("MSMaskWndClass", "edit");
set_record_attr("MSMaskWndClass", "class attached_text", "MSW_id", "location"
);
set_record_method("MSMaskWndClass", RM_RECORD);


将原来操作Date of Flight控件的语句删除掉,重新运行脚本直到操作Date of Flight之前停下,继续录制,这时对Date of Flight重新进行操作,查看生成的函数:
# Flight Reservation
      
set_window ("Flight Reservation", 4);
      
edit_set ("Date of Flight:", "11/11/11");


WR已经将Date of Flight控件识别为edit类型,并能生成正确且更易阅读的语句。
但是这个映射语句只对当前session有效,如果WR重新启动了,且没有再次执行映射语句,则对这个控件的操作还将回到obj函数。一个解决的办法就是将所有这些映射的语句放到“启动脚本”中:
新建一个脚本命名为myinit,将映射语句都复制到脚本中保存。在Tools->General Options->General Startup->Startup test中指向myinit脚本。保存重启Winrunner


再次录制Flight,操作Date of Flight控件,WR会自动将其映射为edit类型。

对于Configuration Class的补充:


1.        Class name中显示的是你选中的控件类名称
2.        Mapped to class中是选择要映射到的标准类,记住要选中相近的类,不然WR生成的语句也不能支持其操作。
3.        Recording Method指明WR将如何记录操作。默认是RecordWR将记录对这个控件的所有操作,Pass Up通常是对窗体的,生成Win_mouse_的函数,As Object指明让WR将控件看成object(在上面的例子里as object和没有正确识别生成的语句一样,都是obj的函数),Ignore将会使WR忽略对这个控件的所有操作,简单说就是录不上了。
4.        Learned Properties中显示指定类型的识别属性,Obligatory属性是必须要学习识别的。Optional属性是备选学习识别,当Obligatory定位后控件不唯一,则使用Optional属性辅助定位。其他的就是没有用到的属性。
5.        Selector的作用是当ObligatoryOptional属性都无法唯一定位一个控件时,使用这个来定位,selector包括locationindex两个,WR帮助中说明它俩的区别,但我个人觉得其实区别不大。

更多信息请参考:Mercury WinRunner User’s Guide P598616

附件:
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2007-7-30 16:41:17 | 只看该作者
好帖,学习中!
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2007-7-30 16:57:48 | 只看该作者
好贴!!!!非常感谢dionysus 的奉献精神!
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2007-7-30 17:47:46 | 只看该作者
好东西,多谢楼主,目前正搞的,^_^
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2007-7-30 21:00:15 | 只看该作者
其实本帖没有什么新的创意,只是介绍了一下WR中GUI Map Configuration的使用,希望能对大家有所帮助sdlkfj2
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2007-7-30 22:09:04 | 只看该作者
哈哈,如果我提前把版主的咚咚写出来,版主会不会给我个精华来着........
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2007-7-30 23:42:04 | 只看该作者
原帖由 liuhuascanf 于 2007-7-30 22:09 发表
哈哈,如果我提前把版主的咚咚写出来,版主会不会给我个精华来着........

会的
ps:本帖不是我自己加的精,我的原则:决不给自己加精,自己的帖子总是有不足之处的sdlkfj1
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2007-7-31 08:30:38 | 只看该作者
非常好的帖子,适合新手学习。
谢谢楼主了。
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2007-7-31 09:31:15 | 只看该作者
有个问题要问问哦,我按这样做了,对象 是映射到为一个BUTTON,请问我在选择类别属性的时候选什么?因为默认的是MSW_ID,用起来有问题,谢谢
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2007-7-31 09:40:20 | 只看该作者
button识别属性中MSW_ID应该是Optional的,作为备选属性出现吧
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2007-7-31 10:41:06 | 只看该作者
谢谢,学习中
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2007-8-8 11:09:24 | 只看该作者
确实,那个MSW_ID很让人头疼
回复 支持 反对

使用道具 举报

该用户从未签到

13#
发表于 2007-8-8 14:55:42 | 只看该作者
貌似不是很懂呢sdlkfj8
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2007-9-4 17:18:09 | 只看该作者
真不错,详细介绍了如何映射,受益匪浅。多谢sdlkfj3
回复 支持 反对

使用道具 举报

该用户从未签到

15#
发表于 2007-9-4 17:36:05 | 只看该作者
“但是这个映射语句只对当前session有效,如果WR重新启动了,且没有再次执行映射语句,则对这个控件的操作还将回到obj函数。一个解决的办法就是将所有这些映射的语句放到“启动脚本”中”

是不是这个意思:这个映射语句放在脚本中,脚本运行时映射就有效,而录制时无效;而放在“启动脚本”中,录制时也会被映射。
回复 支持 反对

使用道具 举报

该用户从未签到

16#
 楼主| 发表于 2007-9-4 21:16:07 | 只看该作者
运行完映射的语句后再次录制控件就会有作用,所以要把映射语句放到启动脚本中,每次自动执行
回复 支持 反对

使用道具 举报

该用户从未签到

17#
发表于 2007-9-5 13:27:13 | 只看该作者
非常好的贴,学习了!!!
斑竹辛苦了
回复 支持 反对

使用道具 举报

该用户从未签到

18#
发表于 2007-12-11 17:08:46 | 只看该作者
非常好的贴子,谢谢
回复 支持 反对

使用道具 举报

该用户从未签到

19#
发表于 2007-12-12 11:25:49 | 只看该作者
受益不浅,贴!
回复 支持 反对

使用道具 举报

该用户从未签到

20#
发表于 2008-4-28 09:19:04 | 只看该作者
我个人不赞成用映射方法,除非特殊情况下才用,一般情况尽量少用.
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-24 18:52 , Processed in 0.083156 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表