致力于软件自动化测试的研究和探索

关于WinRunner处理不识别对象的四种方法

上一篇 / 下一篇  2008-07-08 17:42:53 / 个人分类:蓝天测试

查看( 2466 ) / 评论( 11 )
WinRunner(以下简称WR)的实际项目中,对象不识别的情况非常频繁,但如何去处理这些对象,可能有些朋友还不知道一些技巧,因此想借此文跟大家分享一些东西,希望对大家有用。
n7f&L:bL,y0     在做自动化测试项目时处理WR的不识别对象时,我一般按四步走:1 加载相关插件 2 对象映射 3 自定义函数 4 自定义插件/建虚拟对象51Testing软件测试网I(Q(l l@xF@A}
     首先说一下为什么要这么处理,1 加载相关插件,这主要是因为加载插件的速度最快,效果也最好(优先级最高) 2 对象映射,这主要是因为你可以牵一发而动全身,全局性很好(优先级排第二) 3 自定义函数,这主要是因为自定义函数的灵活性比较大,可操作性强 4 自定义插件,也就是通俗的讲通过编写DLL来实现工具的扩展,因为其技术难度比较大,而且效果也不是非常好(除非你有深厚的Windows底层编码能力),但插桩类的自定义插件会好些,所以只有当前三个办法失效的情况下才采用;而建虚拟对象,和自定义插件并列最后,主要是因为他的移植性不好,但如果前三种方法失效并扩展DLL自己有技术又有难度,那么我更推荐用虚拟对象。51Testing软件测试网Q*o6Alp"j [$s.bX
      然后我们来详细说说如何进行操作:
0K*s+aaTw0      1 加载相关插件 在启功WR时会出现一个插件选择窗体,可以选择你想要的插件,如果没有,可以到WR的主界面的Tools\General Options\Startup 里面的Display Add-in Manager,勾选上这个选项后就可以在下次打开WR时弹出插件加载提示了。
e6z}?1mD:U0      2 对象映射,在WR的主界面里选择TOOLS-Gui Map Configuration->Add->将手型按钮指向你所要映射的对象上后单击,然后点OK,回到Gui Map Configuration界面点Confige,到Confige Class界面对映射的对象进行一个配置,比如映射到的目标对象类,这里大家要注意一点:当前要进行映射的对象必须有目标对象类的基本特征,例如你不可以把一个编辑框映射到按扭上去;还有我们一般会把MSM-ID删掉,因为他老是会变,导致脚本回放不成功。这里配置的主要原则是用尽量少的属性描述唯一的对象,最后需要把Generated TSL scrīpt里的内容拷贝到固定位置,比如你的测试工程的初始化代码文件里,为什么要拷贝到那里呢?因为如果你不保存,以后你每次更换WR环境时都要再进行同类的配置,非常的烦琐。51Testing软件测试网n4QZsZ
      3 自定义函数 这里主要分两块:相对坐标和键盘模拟,相对坐标的思想是取到特定对象的相对坐标,然后通过坐标对对象进行各种操作;而键盘模拟则是通过模拟敲击键盘来实现对对象的操作(前提条件是对象必须可以被键盘操作到)。这里我给两个实例:
.A-u9Pm A }WO0#********************************************************************************************************
"EKcx4{Vk*a0#51Testing软件测试网7uD'N/m ^K.M:r
#  Descrīption---------This function is used to LEFT Click an Object   51Testing软件测试网 Q2zpzB*v'oJ
#
wrI0pS3eZ0#  Parameter-----------win---WindowName,obj---ObjectName
`F3h/@(o @T~0#
)Tv(f9{A'{6Gs0#  Return Value-------None51Testing软件测试网6Y ?wuqI
#51Testing软件测试网G@%[V7e
#  Tester----------------LantainWei
!^&Y ?%K[fcd0#
P\l k:b0#********************************************************************************************************
krM X3A!l:R0public function Obj_LClick(in win,in obj)
`6q-E5Q @4\Gy%Z-V0{51Testing软件测试网[g)d*_\$Q
       auto obj_width,obj_height;51Testing软件测试网6A+Q@-t#k
       set_window(win);51Testing软件测试网i9H f#KE$H^I
       obj_get_info(obj,"width",obj_width);
cU-w"CKPNYr0       obj_get_info(obj,"height",obj_height);51Testing软件测试网 Kd#l ^0b k
       obj_mouse_click(obj,int(obj_width/2),int(obj_height/2),LEFT);51Testing软件测试网#T+x,K\D i)vk
}51Testing软件测试网1pS7[;w5Ii9Gz
51Testing软件测试网5CZl.zIl%k
#********************************************************************************************************
P'i1}/n%Q2jl0#
6j|4K,y3Re3cO0#  Descrīption---------This function is used to select item from a list51Testing软件测试网/|2hy8}8Vb
#51Testing软件测试网I2tpg@4Wa
#  Parameter-----------obj ---ObjectName, sItem ---Item which you want selected
gk2GN3s bF$n,`'u f0#51Testing软件测试网WF{4]A4y&C N
#  Return Value-------None
z,O-L;\@.zx*O0#51Testing软件测试网pNs Ia$O h
#  Tester----------------LantainWei
4D k z@{R i c0#
Y"umwc7g0#********************************************************************************************************
:JyE9zU|Z0public function List_Select(obj,sItem)
FB`/~\M/?0{
nd*oZ`$E4Ev%q0    auto sText;51Testing软件测试网5{ DJ&]F_!aG
    obj_get_text(obj,sText);51Testing软件测试网y5Y W5zT.ro
    while(match(sText,"*"&sItem&"*")==0)
~)R,ba(?wb_0    {51Testing软件测试网/}&q0~L_v Ax
        obj_type(obj,"<kDown>");51Testing软件测试网5Loem W`E
        obj_get_text(obj,sText);51Testing软件测试网P+p y oNHV
    }51Testing软件测试网"\u O S m!|
}51Testing软件测试网 oO#l L5k a

2B2{(MT!@}0     4 自定义插件 该方法涉及到的方面比较多,这次就不细说,下次我再整理一下,再写一篇关于自定义插件的文章,这次主要讲一下虚拟对象的创建。具体的操作我就不细说,大家可以参看WR的帮助,这里我只想告诉大家注意一点:你要创建的虚拟对象必须有你虚拟成的类的基本特性,具体的解释和映射相似。51Testing软件测试网 w7q-fPw(k!R B(w
     最后我想说明的一点,不要盲目崇拜脚本的通用性,可移植性。比如有时你可以通过一个简单的坐标设置就可以操作到对象,那就没有必要再写一大堆脚本来操作对象,虽然这样做通用性和可移植性上去了,但维护性和成本也同样上去了。自动化测试的目的降低成本,快速准确测试,任何背离这两项原则的大家都可以放弃,所以以上方法大家还需要根据实际项目来进行对待。51Testing软件测试网:x ^I x4Ct/f,S
     大家如果对以上内容有任何问题或建议,欢迎与本人交流,我的MSN是lantian.wei@hotmail.com,QQ是2368-35793。51Testing软件测试网:C*|:e0Z-S0O

M!f*| D;H0[本帖最后由 lantianwei 于 2008-7-8 10:28 编辑]

TAG: 蓝天测试

flying-kite的个人空间 flying-kite 发布于2008-07-08 10:37:30
谢谢楼主分享,总结的很好,对象不识别是个老大难的问题啊。
dabie发布于2008-07-08 16:05:20
太感谢了
一步一脚印 hjjlearning 发布于2008-07-08 17:55:12
写的非常好,对象识别一直让让我郁闷
melanqy发布于2008-07-12 11:38:27
感谢楼主分享,学习了
mxlly发布于2008-07-17 15:08:37
楼主我这还是不行啊。。怎么办呢,,
蘭婲⿺朶 lanfish319 发布于2008-07-17 18:29:47
留名,~虽然那现在无法完全理解!
学会洒脱的个人空间 学会洒脱 发布于2008-08-03 23:00:06
知道,但还是谢谢
yammiqiang发布于2010-02-04 14:43:34
ljthanks
hautkoe发布于2012-03-31 10:43:09
有种豁然开朗的感觉,还没试,感觉可以,初学者,DELPHI,第三方插件,就是上面所说的问题,老提示找不到。烦了两天了。谢谢谢谢,试试去!
神话和现实 langchaogc 发布于2012-04-06 13:41:02
自动化测试的目的降低成本,快速准确测试,任何背离这两项原则的大家都可以放弃,所以以上方法大家还需要根据实际项目来进行对待。 ------前面的一般人也写的出来,就是这句,我最认同。楼主高手!
xin_晴的个人空间 xin_晴 发布于2013-05-13 16:25:05
顶起
我来说两句

(可选)

Open Toolbar