QTP个人总结

上一篇 / 下一篇  2009-07-05 16:31:23 / 个人分类:QTP

  • 文件版本: V1.0
  • 开发商: 本站原创
  • 文件来源: 本地
  • 界面语言: 简体中文
  • 授权方式: 免费
  • 运行平台: Win9X/Win2000/WinXP
   工具软件一段时间不用就容易手生,有个备份整理以后复习都事半功倍。之前就打算好好弄一下一直拖着没动笔。网上QTP学习资料大把大把,那些基础的理论东西看过就过了,实践才是王道,操作几个小时胜过看一天的说明文档。这里列一些我在用QTP时遇到印象比较深刻的问题和解决方案,其他的小问题属于QTP熟练操作的范畴就不赘述了。因为项目需要接触了差不多三个月的QTP,自知离QTP高手还有段距离,学无止尽,有学习QTP的朋友欢迎发表高见大家互相进步~

dE$}:Y3p#x;_b0  1、QTP自带函数print

] E5X2Ak't"m051Testing软件测试网 uucf;wu

  调试代码的时候一般习惯用Debug或者Msgbox函数。监视变量运行时的值用Msgbox,个人感觉不方便的一点就是每次在msgbox窗口弹出来后,脚本会暂停执行,等到鼠标点确定后窗口才会关闭继续运行后续脚本,真的很烦,做自动化测试的时候我真的是已经懒到不愿意动一根手指头。某天无意发现QTP自带的函数print也可以实现查看变量信息,窗口是非模式的,运行时变量值在QuickTest Print Log窗口上输出但脚本不用停下来等,而且可以在一个session运行完了之后查看所有需要监视的变量值。51Testing软件测试网? };T)buL/V0k

y o Z,q/qWb`vkK0  Eg:51Testing软件测试网w2~r%n!JI%EXe6@E

51Testing软件测试网"_4p tQ Fd)Y

  Dim p51Testing软件测试网4c0F"k?X Ve J*R.q6\

"u M+UhNM0Fxl/qK&`[0  p=Browser("xx").page.("xx").webedit("object_name").GetROProperty("value")

AR4oU/V2x@s#_0

&c rol4Zc,sRaXo-Q0  print p51Testing软件测试网/z'm%R$_,s/gp$` p-jq

51Testing软件测试网{9r8F,c9H

  2、calender控件51Testing软件测试网(|q:R T,Yb

*Iz7O!S5s+x ThK0  一般日期格式字段是同时支持手填日期格式的text field和用鼠标点日历控件选择。但是在DMPOD系统里发现部分日期格式的字段居然disable了用户手动输入的属性,只能靠点日历控件来选择日期。结果录到的脚本全变成了img.click,无法回放。查了很久突然某一天找到了办法,绕过这个控件,强制转换它的属性值。

0[;cx5G7T)]m;]0k@051Testing软件测试网/wu5yz-Z~

  Eg:

HoxX9h6R051Testing软件测试网I y*uREq M

  Dim var_object51Testing软件测试网(HH}#m0J#YXL

R0]'T%zP0g:z'A0  Set var_object=Browser("xx").page("xx").webedit("calendar_name").Object

1T0n;k UrMFm051Testing软件测试网7_ f+v&F` u B{ N @

  Var_object.readonly=false51Testing软件测试网4},F cxUQG-d

51Testing软件测试网 ch9@g^)?7m

  Browser("xx").page("xx").webedit("calendar_name").set "4/24/2009"

oos_ v051Testing软件测试网7z3s)A f2UaB;?

  3、homepage menu51Testing软件测试网+N?Tb[

-ei0v9Ey7HnDYO0  曾经困扰了我很久。Homepage dropdown menu 需要鼠标移动到主菜单名上才会显示子菜单目录,click子菜单目录进入页面。QTP总是无法捕捉到鼠标移动带出子菜单目录这个操作,解决办是用mouseover。51Testing软件测试网6JW*E&f+p

51Testing软件测试网 vA0PAb/s#Ms0c$i

  Eg:51Testing软件测试网}&L0s)sejP

@gC_vb0  Browser("xx").page("xx").webelment("homepage menu name").FireEvent "onMouseOver"51Testing软件测试网${3f$v#JA R U \

51Testing软件测试网_p*Dk8o Nt7`

  Browser("xx").page("xx").webelment("sub menu name").Click

Z}[W)`/u%fO0

Tu"~-HH/vC0  4、自定义checkpoint51Testing软件测试网3Io \8[Y4YI e d\

b6~8eS*a0  在页面提交保存后,自定义设置一个检查点,通过判断某个变量值是否满足预期,如果是,则保存成功,如果不是则保存失败。

}!~*b+o,`Oh051Testing软件测试网1Yqh|%SR p*G

  Eg:51Testing软件测试网SY3_u-Du#[5S

/D+F4t+Gx_0s,w'P0  If Browser("xx").page.("xx").webedit("object_name").GetROProperty("value")="AA" Then

E)B1ZE6v*w S051Testing软件测试网%hY7Rw-`#b6d&A{

  Reporter.ReportEvent micPass,"AA checkpoint","page is saved successfully"

$P@Xvz"d@%z0

#_ {N}W(KKz0  Else Reporter.ReportEvent micFail,"AA checkpoint","page is not saved successfully"51Testing软件测试网o O%Eli1J.FUd

*{ jW`jn(_7gu2l0  End If

V4q6GC'Do*q0

DV$b |4G4@)E0  5、编程性描述语言识别对象

~4h!x O f(s2`5NIN051Testing软件测试网%SrQ)v^ zx;`

  刚开始一段时间,一直不知道QTP除了用对象库识别对象外,还可以用编程性描述语言。后来查了网上的资料才明白过来。

:\%{3H!^+s1@sy0

5t/sA1s\.L0  第一种方法:51Testing软件测试网#e'w$W(Lx

51Testing软件测试网&v*O+gt6~/rT

  Browser("CreationTime:=0").Page("index:=1").WebEdit("name:=" & edit).Set "ha"51Testing软件测试网U-YwW7_7A%AZ

|H[X s#Dv_#G e0  我没有尝试过,总感觉不如对象库来的方便,在对象库中可以直接选择和修改用来识别对象的属性,以及highlight object等功能。

%Z9Av2\3^"{C1o zTe0

Ak\ ]${#~v9xs0  第二种方法:51Testing软件测试网$\d#}cB C'Q

51Testing软件测试网:A{g;M7{2C|)`,KA jq

  碰到过一个Case是,页面上table A里的checkbox元素数量每次运行时都是不相同的,随着页面上另一个对象B的值而改变,对象B的值又是参数化的,最后造成checkbox数量运行前无法预知。操作时又需要每次都选上所有的checkbox。最后用这种识别对象方法可以顺利实现。

5Pp`I1u:]051Testing软件测试网 UXGt'V o$l?+f

  Public function SelectAllCheckBox()51Testing软件测试网 p;Y m-X c s

$e\ U)r:qF$q%h8t0  Set NewObject = Description.Create '创建满足下面三个条件的对象集

e9pb5Wc(Q051Testing软件测试网0wva(tK6G9J yWD

  NewObject("micclass").value ="WebCheckBox"

0N2]q-?k1Hb0

x+t0C_ D&[i0A0  NewObject("html tag").value="INPUT"51Testing软件测试网 U(} iF0^ P

N2_7Z&z3eGYI0  NewObject("class").value = "checkBox_class"51Testing软件测试网._6Tu D6D t'nD#H4j

d$iDhxu8g Q u0  Set NewObjects = Browser("xx").Page("xx").ChildObjects(NewObject) '实际运行时的对象51Testing软件测试网K#H.ZSHhM n|P%}

6Q/xP9l1DB+a0  Numbers = NewObjects.Count 'checkbox的个数

Goz9_ {I051Testing软件测试网xs"uuA

  For i = 0 to NewObjects.count –1 '循环51Testing软件测试网.w"CHPw^"o

c+k}Y0I~0  NewObjects(i).Set "ON" '每一个checkbox都set on51Testing软件测试网"O7aX6WV_mW-qPJT

51Testing软件测试网z&p9PgcY$n6\

  Next

E8KV B#~%j#Yj051Testing软件测试网U)J:x&UN

  End Function

.o?#rW,vU+h%y*d0

n~[A eW @{qT~g0  6、相对路径

X:bUe M5n051Testing软件测试网_!{,R"\7@L;i*`W

  Setting: Tool--option--folder51Testing软件测试网 zrn"O/NaN+R

h7e GBH0  经常有action调用别的test里的action或者外部vbs文件,访问功能库和环境变量,这时使用相对路径可以保存有效的路径信息,提高了脚本可移植性。因为脚本文件是需要复制到别的机器共享给其他同事用的。

0_-C z7{P [051Testing软件测试网#W[r0{wAZ~ }

  7、正则表达式对象库里对每个对象都可以设置是否用正则表达式来参数化识别。脚本里也可以用。51Testing软件测试网9IM` kB,xZ0A

51Testing软件测试网t5C7S6f2Ml7I1AMfF

  当时的case是,页面提交保存完了会自动生成一个文档号,文档号是需要输出到data table里,但是那个字段developer在设计的时候居然用了一个webelment的类而且字段值居然是整个table的name,如“xyz—ABC20090101”,我只要后面的文档号前面的“xyz—”是多余的,需要拿到这个对象值后转换成正确的字符串格式才能输出到data table里。

(R l\)hF;u+`0

H?3B!\yMyi0  Eg:

1Ct2VTU0

^2Ly\1T([`7^0  Function regEXfun(patrn,strng)51Testing软件测试网1Y.L+Ur@|4hu

l)`'js-_c8P9a0  Dim regEX,Match,Matches

:O(T Mv^'e(}0

Wq5\'J~ d'[2q X:[.U-M0  Set regEX = New RegExp

8A-Sm3ln+]#~iXQ051Testing软件测试网?8G)@ s| S

  regEX.Pattern=patrn

Dv:o(Z1Jzt)^(C.b!B0

JSfVH.E8tp0  regEX.IgnoreCase=False51Testing软件测试网 WV$S?5{`Lw'z

51Testing软件测试网#[2S)h$S wM \Ai

  Set Matches =regEX.Execute(strng)

,Tp-m#@!Hp*q L-D-W0

,v O5g2MB7Re0  Set Match=Matches(0)

~3R*[2`q)y051Testing软件测试网/B*z3HwQMD

  RetStr=Match.value

8x5K!H@,Udfg051Testing软件测试网^8S!h.Sn

  regEXfun=RetStr51Testing软件测试网4V X}y1v\cqb)Q

8JX'~hL i%g4\A!a'J(j0  End Function

iY9g.ZXh0

!LQ#yN2Xt0  Dim preNO,newNO51Testing软件测试网V0]'@f a8QS^0|

51Testing软件测试网T5h1s|F T:~J"f

  preNO=Browser("xx").Page("xx").WebElement("NO").GetROProperty("innertext")

|"o*i2x9r _)T5p0

3^kC Skh0  newNO=regEXfun("ABC……..",preNO) '虽然每次NO都不一样,但是格式是固定的:字符串长度总是11位,以ABC开始,后面的数字是随机,所以用ABC来匹配字符串51Testing软件测试网 j@4d lrjU

OCfp2\'lJnh-c0  DataTable.Value("NO",dtGlobalSheet)=newNO

"C\{ln&M0

U-PI)`(y-h0HL-] {0  8、密码51Testing软件测试网%l*X,U'N/lZ

51Testing软件测试网`.M.{ I1e|

  如果登录页面的密码数据来源是data table,那么要提前准备密码。显然只能用明文,比如123456,但是QTP录制输入密码时自动生成的脚本是用SetSecure的方法生成一大串密文,如果这样每次改密码的时候都要用密文到data table里,很郁闷,这种case时只要手动把SetSecure改为Set就OK啦~

bj)h z"oc gHf0

7}l7t!}6m@0Ls3s%@0  9、waitproperty

)sV \B&eI0U%t@!t"G1bM5A0

9| cq6cG9j7~,L@_0  在用QTP的过程中,有时因为要等待某个对象的值出现,加上wait()方法.

!E/Z5G gL7c,}0

jgD*^4kb$zP0  但是wait里的时间参数,是根据经验估计出来的, 这个对象每次运行时可能需要load的时间不一样,有时候9秒有时候3秒,只好设置成wait(10),让QTP等10秒,但是如果对象在10秒内已经load完,QTP还是会继续等到10秒后才往下继续执行,浪费了很多时间.有个办法是用waitproperty 方法.这样这个对象在10内出现的话,QTP就会继续往下执行脚本,不用等完10秒。

hD/i,aeOn+vn1V051Testing软件测试网Ppz[K"Da @

  Browser("xx").Page("xx").WebButton("abc").WaitProperty "visible",true,1051Testing软件测试网!d7G(YG&t,V%{9I"B

51Testing软件测试网#I-U'P'I a Y MC-{y

10.自动关闭msgbox51Testing软件测试网c\,E jho

os3p,N-Pd0i)Dx0Dim i
V Lq)tL%Ow{U0Dim res,WSH
z;xUf4b xo M0Set WSH=Createobject("WScript.Shell")
BkKNh"t,G q"F0Set Msg=Description.create()51Testing软件测试网.W m Dfi B^
 res = WSH.Popup("Closed after 2 seconds.", 2)  '代替msgbox "Closed after 2 seconds"
4a1A J yTc0E7fL1H0 Set WSH = Nothing
,L-nBxjrE0

9n;{vN!G T$u1}051Testing软件测试网"bGN&i v+k4c

 

Z8u,V(I CV0

TAG:

测试之路 引用 删除 trancy   /   2009-08-08 17:02:21
 

评分:0

我来说两句

Open Toolbar