QTP 一些技巧疑点
上一篇 / 下一篇 2015-01-06 22:36:17 / 个人分类:QTP
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 i = 0 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
TAG: