QTP使用心得——新的开始

发表于:2012-07-26来源:Csdn作者:tulituqi点击数: 标签:qtp
最近换了新的工作,做外包,搞自动化测试,主要是用QTP和QC。可以长期使用QTP了,工作用的是9.0的,家里是9.2的,有一些不一致。比如9.2有个脚本编写工具,9.0没有。

  最近换了新的工作,做外包,搞自动化测试,主要是用QTP和QC。可以长期使用QTP了,工作用的是9.0的,家里是9.2的,有一些不一致。比如9.2有个脚本编写工具,9.0没有。

  我会抽空把自己的心得写上来,老手路过就好了,也许我这些东东的你们都知道了。这都主要是工作中遇到的问题以及解决办法,希望碰到和我同样问题的朋友也能顺利解决问题。目前主要在web应用上。

  QTP心得(都是自己的亲身经历)

  首先介绍一个不错的自动化框架——SAFFRON。下面第一个心得就是通过研究这个框架得来的。用msgbox显示出框架执行的语句,发现原来他都是用下面的写法来定位控件的。有兴趣的可以去学习一下,网上能搜到的。

  1.使用属性定位控件(其实专业的名字叫描述式编程)

  大家录制脚本后可能会得到类似下面的内容:

  Browser("IE").Page("page的名字").WebEdit("文本框").Set "123"

  实际中这些控件的名字可能是变化的,WebEdit可能变得少些,WebElement变的多些。或者没法录制,需要自己手写的,不妨试一下用属性值来定位:

  Browser("micclass:=Browser","title=IE").Page("micclass:=Page","name:=page的名字").WebEdit("micclass:=WebEdit","name:=属性值").Set "123"

  在我印象里,几乎所有的控件都可以这样来写,注意就是这里需要写的是 := (为显示清晰用中文模式输入的符号),这里用到的是冒号等号,别问我为啥,我也不知道。 基本上就是 控件名("micclass:=控件名","属性名:=属性值") 这样来定位。

  2.明明顶级对象名字不同,但用对象库添加的时候却添加到另一个顶级对象中

  不知道大家有没有这样的经历,录制脚本的时候很正常,执行的时候却提示无法找到对象。这时候用Object Spy去查看那个控件,看到可能是顶级的Browser名字和脚本的不一样,手动去添加顶级的Browser也加不进去。他一般是把Page往下的加在另一个Browser下面。已经有的就叫Browser1吧,你想加的那个叫Browser2,这样避免误解。

  解决办法:这个问题主要是对象库默认的属性太少,在你查看对象库的时候,右边会有这个对象的属性,出现上面的情况通常是对象库的Browser1默认的几个属性的值和Browser2的相同,于是我推测是QTP默认这两个是同一个对象。

  建议这时候用Object Spy查看一下Browser2的属性值,肯定有一个和Browser1不同的,这是我们先在对象库里,给Browser1增加一下那个不同的属性,然后再添加Browser2(一般选Page添加就可以,或者加你要的控件,不然直接选Browser级添加会弄进去很多没用的东东),这样就顺利加进来了。完成后,建议把你加的那个属性值删除,有时候不删除也没事,不过我发现那些用Browser1的脚本会出现找不到对象的情况,删除新增的属性值后就没事了。

  3.添加text output value的一个妙法

  也许有人知道,不过我是无意中发现的。在录制脚本的时候可以添加text output value,但是对应的那个控件的值内容却很多,你只想要一部分。如果录制后去添加标准输出值,没法取出你要的值,只能全取到,然后截取字符串。

  text output value只能在录制的时候添加,添加后可以有一个选择text after和text before的选项,text after是你要的字符串之后的字符,text before是你要的字符串前面的字符,有了这两个,就可以准确取到你需要那部分内容。但这是直接取到的还是你的那个控件整个内容的前后字符串,有时候也可能会搞混text after和text before,还要去调试。

  例如:有如下显示(用户名为qitao。为某个WebElement的值):

  添加用户成功:用户名为qitao。

  直接添加text output value,可能会得到text before为 "添加用户成功:",text after为 "",很显然,你得到的值就是 "用户名为qitao。"。但是我只想取到 qitao 这个值,这时候你可以先用鼠标选中qitao,然后再添加text output value,点击选中的qitao,你得到的text before为 "用户名为",text after为 "。" ,有时候可能内容会更多,你可以自己去掉一些多余的,总之这回很直接就取到了你要的这个值。

  给刚刚学习QTP的人的建议:

  1、基础肯定要掌握

  2、建议多了解action重用和参数化部分的内容,因为我们做自动化案例的时候都是要做成API库,说白了就是参数化的可重用action,这样案例直接调用多个action就可以了。

  3、有能力的建议多去熟悉vbs,QTP脚本就是用vbs来编写的。

  4、学习编程思想。比如我们做API库,如果学过编程,把API库也就是参数化的可重用action可以当作是函数,action的参数就是函数的输入输出参数,这样就很容易理解了。

  今天就先写这么多吧,欢迎大家提意见,也欢迎与我交流,在这里留言或给我发邮件,我只要看到肯定会回复的。目前工作原因白天无法上网。

原文转自:http://www.ltesting.net