QTP自动化测试技术领航
本帖最后由 fsweicaixia 于 2013-8-21 16:56 编辑QTP自动化测试技术领航 第476页 脚本,有一句不明
testobjectname = obj.GetToProperty("testObjName")
testObjName是从何而来,是参数PropertyName吗?
紧急问题
'*******************************************************************
'脚本目的:实际值预期值相比较
'创建日期:2013.08.21~ 2013.08.21
'创 建 人:Anna
'描述:函数整理
'*******************************************************************
'@Description Auto Log Generator
'PropertyName obj属性
'ExpectedValue 实际值
Function ValidateProperty(obj,PropertyName,ExpectedValue)
IfCstr(obj.GetROProperty(PropertyName)) = Cstr(ExpectedValue) Then
'成功
On Error Resume Next
testobjectname = obj.GetToProperty("testObjName")
HReport ExpectedValue,obj.GetROProperty(PropertyName),True,"check" + testobjectname + "<" + PropertyName + ">property"
on error goto 0
ValidateProperty = True
Exit function
Else
'失败
On Error Resume Next
testobjectname = obj.GetToProperty("testObjName")
HReport ExpectedValue,obj.GetROProperty(PropertyName),False,"check " + testobjectname + "<" + PropertyName + ">property"
on error goto 0
ValidateProperty = False
Exit function
End If
End Function 本帖最后由 feiyunkai 于 2013-8-22 15:31 编辑
obj.GetToProperty("testObjName")应该是obj.GetToProperty(PropertyName)
个人对该函数的看法:
1、函数中两个Exit function冗余:
原因:ValidateProperty赋值语句执行完成后,该函数已经执行完成,会自动退出函数,后面加Exit function多余)
2、on error goto 0
原因:on error goto 0 的作用是关闭错误处理,而ValidateProperty函数中on error goto 0 后面执行一句赋值语句后整个Function就执行完成,函数执行完成后会自动关闭本函数中的错误处理,所以多余
3、On error resume next冗余且位置不正确:
原因:On error resume next放在If语句上方可以起到相同作用,且能捕获if语句中条件的异常信息。
4、On error resume next未起到应有的作用:
原因:当函数遇到异常时,应该将错误描述(err.description)打印到日志中,方便问题定位
5、obj.GetROProperty(PropertyName)应该先赋值后比较
原因:上面函数中比较时获取一次属性值,打印报告又获取一次,影响效率,所以应先保存属性值
6、日志中没必要打印TO属性
原因:TO中属性是对象被添加到对象库中时的属性,与运行时属性可能会不同,当前函数中只需要打印期望值和实际值就可以了,打印TO属性没有意义。
7、建议:未判断需要获取属性的对象是否存在,若对象不存在则后面的比较将失去意义,所以建议先判断对象是否存在
以下是修改后的函数(日志打印函数未写,以Print代替)
Function ValidateProperty(obj,PropertyName,ExpectedValue)
On Error Resume Next
'Exist后可以根据需要设置超时时间,若不设置则为QTP默认超时时间
If obj.Exist Then
ActualValue=Cstr(obj.GetROProperty(PropertyName))
If ActualValue= Cstr(ExpectedValue) Then
ValidateProperty = True
Else
ValidateProperty = False
End If
else
'调用日志打印函数
print "对象不存在"
End If
'判断代码执行过程中是否有错,有错则打印日志,方便问题定位
If err.number<>0 Then
'调用日志打印函数
print "属性比较出错,错误描述为:【"& err.description &"】"
else
If ValidateProperty=TrueThen
'调用日志打印函数
print "对象属性校验成功,期望值为 :【" & ExpectedValue & "】 实际值为:【" & ActualValue & "】"
elseif
'调用日志打印函数
print "对象属性校验失败,期望值为 :【" & ExpectedValue & "】 实际值为:【" & ActualValue & "】"
End If
End If
End Function 楼上的朋友意见非常好,非常感谢,第6条你误会了,testobjname不是普通的to属性,而是对象库中对象的关键字名称,是不会随着对象变的。这个在查错是非常有用的。呵呵。 回复 3# zzxxbb112
刚才试了下obj.GetToProperty("testObjName")是获取对象库中object properties中的name属性值,又学了一招,谢谢:D 回复 2# feiyunkai
非常感谢,献出您宝贵的时间解释此问题,万分感谢! 知识贴~不错~ 收益了,感谢 :victory: testobjname 关于这个隐藏对象获取的值什么值,GetTOProperty, GetROProperty三者能否详细解释解释 整理了一下脚本
Function ValidateProperty(obj,PropertyName,ExpectedValue)
On Error Resume Next
'Exist后可以根据需要设置超时时间,若不设置则为QTP默认超时时间
If obj.Exist Then
ActualValue = Cstr(obj.GetROProperty(PropertyName))
If ActualValue = Cstr(ExpectedValue) Then
ValidateProperty = True
Else
ValidateProperty = False
End If
else
'调用日志打印函数
print "对象不存在"
End If
'判断代码执行过程中是否有错,有错则打印日志,方便问题定位
If err.number <> 0 Then
'调用日志打印函数
print "属性比较出错,错误描述为:【" & err.description & "】"
else
If ValidateProperty = TrueThen
'调用日志打印函数
print "对象属性校验成功,期望值为 :【" & ExpectedValue & "】 实际值为:【" & ActualValue & "】"
elseif
'调用日志打印函数
print "对象属性校验失败,期望值为 :【" & ExpectedValue & "】 实际值为:【" & ActualValue & "】"
End If
End If
End Function
页:
[1]