QTP一些技巧疑点

http://blog.sina.com.cn/s/blog_632f3ee30100uf98.html
 1、QTP自带函数print 

  调试代码的时候一般习惯用Debug或者Msgbox函数。监视变量运行时的值用Msgbox,个人感觉不方便的一点就是每次在msgbox窗口弹出来后,脚本会暂停执行,等到 鼠标 点确定后窗口才会关闭继续运行后续脚本,真的很烦,做自动化测试的时候我真的是已经懒到不愿意动一根手指头。某天无意发现QTP自带的函数print也可以实现查看变量信息,窗口是非模式的,运行时变量值在QuickTest  Print  Log窗口上输出但脚本不用停下来等,而且可以在一个session运行完了之后查看所有需要监视的变量值。
    Eg:
    Dim  p
    p=Browser("xx").page.("xx").webedit("object_name").GetROProperty("value")
    print  p
    2、calender控件
    一般日期格式字段是同时支持手填日期格式的text  field和用鼠标点日历控件选择。但是在DMPOD系统里发现部分日期格式的字段居然disable了用户手动输入的属性,只能靠点日历控件来选择日期。结果录到的脚本全变成了img.click,无法回放。查了很久突然某一天找到了办法,绕过这个控件,强制转换它的属性值。
    Eg:
    Dim  var_object
    Set  var_object=Browser("xx").page("xx").webedit("calendar_name").Object
    Var_object.readonly=false
    Browser("xx").page("xx").webedit("calendar_name").set  "4/24/2009"
    3、homepage  menu
    曾经困扰了我很久。Homepage  dropdown  menu  需要鼠标移动到主菜单名上才会显示子菜单目录,click子菜单目录进入页面。QTP总是无法捕捉到鼠标移动带出子菜单目录这个操作,解决办是用mouseover。
    Eg:
    Browser("xx").page("xx").webelment("homepage  menu  name").FireEvent  "onMouseOver"
    Browser("xx").page("xx").webelment("sub  menu  name").Click
    4、自定义checkpoint
    在页面提交保存后,自定义设置一个检查点,通过判断某个变量值是否满足预期,如果是,则保存成功,如果不是则保存失败。
    Eg:
    If  Browser("xx").page.("xx").webedit("object_name").GetROProperty("value")="AA"  Then
    Reporter.ReportEvent  micPass,"AA  checkpoint","page  is  saved  successfully"
    Else  Reporter.ReportEvent  micFail,"AA  checkpoint","page  is  not  saved  successfully"
    End  If
    5、编程性描述语言识别对象
    刚开始一段时间,一直不知道QTP除了用对象库识别对象外,还可以用编程性描述语言。后来查了网上的资料才明白过来。
    第一种方法:
    Browser("CreationTime:=0").Page("index:=1").WebEdit("name:="  edit).Set  "ha"
    我没有尝试过,总感觉不如对象库来的方便,在对象库中可以直接选择和修改用来识别对象的属性,以及highlight  object等功能。
    第二种方法:
    碰到过一个Case是,页面上table  A里的checkbox元素数量每次运行时都是不相同的,随着页面上另一个对象B的值而改变,对象B的值又是参数化的,最后造成checkbox数量运行前无法预知。操作时又需要每次都选上所有的checkbox。最后用这种识别对象方法可以顺利实现。
    Public  function  SelectAllCheckBox()
    Set  NewObject  Description.Create  '创建满足下面三个条件的对象集
    NewObject("micclass").value  ="WebCheckBox"
    NewObject("html  tag").value="INPUT"
    NewObject("class").value  "checkBox_class"
    Set  NewObjects  Browser("xx").Page("xx").ChildObjects(NewObject)  '实际运行时的对象
    Numbers  NewObjects.Count  'checkbox的个数
    For  to  NewObjects.count  –1  '循环
    NewObjects(i).Set  "ON"  '每一个checkbox都set  on
    Next
    End  Function
    6、相对路径
    Setting:  Tool--option--folder
    经常有action调用别的test里的action或者外部vbs文件,访问功能库和环境变量,这时使用相对路径可以保存有效的路径信息,提高了脚本可移植性。因为脚本文件是需要复制到别的机器共享给其他同事用的。
    7、正则表达式对象库里对每个对象都可以设置是否用正则表达式来参数化识别。脚本里也可以用。
    当时的case是,页面提交保存完了会自动生成一个文档号,文档号是需要输出到data  table里,但是那个字段developer在设计的时候居然用了一个webelment的类而且字段值居然是整个table的name,如“xyz—ABC20090101”,我只要后面的文档号前面的“xyz—”是多余的,需要拿到这个对象值后转换成正确的字符串格式才能输出到data  table里。
    Eg:
    Function  regEXfun(patrn,strng)
    Dim  regEX,Match,Matches
    Set  regEX  New  RegExp
    regEX.Pattern=patrn
    regEX.IgnoreCase=False
    Set  Matches  =regEX.Execute(strng)
    Set  Match=Matches(0)
    RetStr=Match.value
    regEXfun=RetStr
    End  Function
    Dim  preNO,newNO
    preNO=Browser("xx").Page("xx").WebElement("NO").GetROProperty("innertext")
    newNO=regEXfun("ABC……..",preNO)  '虽然每次NO都不一样,但是格式是固定的:字符串长度总是11位,以ABC开始,后面的数字是随机,所以用ABC来匹配字符串
    DataTable.Value("NO",dtGlobalSheet)=newNO
    8、密码
    如果登录页面的密码数据来源是data  table,那么要提前准备密码。显然只能用明文,比如123456,但是QTP录制输入密码时自动生成的脚本是用SetSecure的方法生成一大串密文,如果这样每次改密码的时候都要用密文到data  table里,很郁闷,这种case时只要手动把SetSecure改为Set就OK啦~
    9、waitproperty
    在用QTP的过程中,有时因为要等待某个对象的值出现,加上wait()方法.
    但是wait里的时间参数,是根据经验估计出来的,  这个对象每次运行时可能需要load的时间不一样,有时候9秒有时候3秒,只好设置成wait(10),让QTP等10秒,但是如果对象在10秒内已经load完,QTP还是会继续等到10秒后才往下继续执行,浪费了很多时间.有个办法是用waitproperty  方法.这样这个对象在10内出现的话,QTP就会继续往下执行脚本,不用等完10秒。
    Browser("xx").Page("xx").WebButton("abc").WaitProperty  "visible",true,10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值