注:原文最早是发表在www.automationqa.com上面的,后来因为网站被黑而文章内容消失了,希望csdn别被黑了。
关于转载:本文为原创文章,欢迎转载,但转载需要标注出处以及保证内容的完整性,请理解写作的寂莫和苦处。
关于版权:本文不得应用于以赢利为目的的任何场景,否则本人保留相应的权利。
全文下载:http://www.docin.com/p-1910330544.html
实在惭愧,原计划的写作进度被我的懒散打断了,离上次写文章已有10几天了,惭愧啊!
前几天,陈能技先生说有位朋友想跟我交流关于自动化测试的一些心得。我本想去见他的,可周六又加了班,所以就跟他说周日来我这儿。说出这个计划后,我一直觉得有些不妥,因为深圳市区离我这儿挺远的,不熟悉路线的话,坐车会浪费很多时间。周日早晨,我还在床上睡懒觉的时候,这位朋友就打电话说已经出发了。起来洗涮之后,看了看要交流的题纲,调试了几个例子,就一直等着。果然,这位朋友由于我告知线路的失误,直到10:00才到。然后我们开始按照题纲进行了一些交流,交流的过程令我非常愉快,同时我也对这位朋友的测试知识的广度和深度十分佩服。通过与他工作经历以及工作感想的交流,让我非常折服他那种“认准目标,决不放弃”的精神。同时我也十分的惭愧,因为我总是半途而废。交流结束之后,送走了这位朋友,望着渐渐离去的公交车,竞有一丝不舍,友人难寻,不远几十公里长途跋涉来我这里只为交流的友人在当今如此浮躁的社会就更难寻找了。仅以上面的文字来记住与这位朋友认识的日子,并让我在以后的日子里记住这位朋友,朋友的名字叫:李亥峻。
还是回到QTP的Web对象的共有方法和对象的介绍吧。
今晚我们来看看这三个方法:
方法名: object .GetROProperty (Property, [PropertyData])
作用:返回测试对象(TO)的属性的值
参数:property,属性;[PropertyData],属性的数据来源,可选(没见到相关资料介绍此参数的妙用)。
方法名: object .GetTOProperties
作用:返回某个仓库对象(RO)所有的属性以及属性值,并做为对象供其它调用
方法名: object .GetTOProperty (Property)
作用:返回仓库对象(RO)的属性的值
参数:property,仓库对象中的某个属性
细心的朋友会发现,这里有两个不同的名称,一个是测试对象,一个是仓库对象,那么什么是测试对象,什么是仓库对象呢?
测试对象:Run Object,QTP在回放时运行的对象,也就是应用程序的实际对象。通俗点说,就是女人没有画妆时的样子。
仓库对象:Test Object,QTP存储在对象库中以供回放的对象,也就是QTP通过“杀鱼的故事”之后,存储的对象。跟上面对应的讲的话,这就是女人画了妆时的样子。
相信大家对女人画没画妆之后的主要变化,还是很有心得的吧。
首先,不管女人画还是没有画妆,她都是女人。所以从根本上说,RO和TO对于对象这个概念来说,没有什么区别。
最后,女人画妆和没有画妆,还是有区别的,区别当然主要在于脸,画了妆之后的女人,也许她妈都认不到了,所以脸就是女人的一个重要属性。对于TO来说,TO在QTP跟她画了妆之后,也许应用程序都不再认识了。
我想通过上面的介绍,大家已经很清楚RO和TO的区别了吧,区别就在于其属性的值可能会不一样,因为不一样,所以在应用程序测试时,如果你使用的是从TO中获得的属性( object .GetTOProperty ( Property )),那么你的判断(或QTP检查点)就可能出错(认错了女儿),于是QTP为了不让你认错女儿,这时又叫了一个第三方认证机构来证明(比如公证处),于是就又有了 object .SetTOProperty Property,Value 方法。
方法名:
object
.SetTOProperty
Property,
Value
作用:设置TO对象的属性为某某个属性值
参数:property,属性;value属性的值
那么这几种有关属性的操作在Web自动化测试脚本中有何作用呢?
我们先来看看
object
.GetTOProperties(是指取出录制对象的所有属性)。说句实话,在我做的自动化项目中,使用这个方法的机会很少,所以也只能简单介绍一下面的这个方法,让我们一起了解其含义。
Sub GetTOProperties_Example()
设置需要某对象的对象去获取该对象的所有属性值
SetLinkObject = Browser("Index").Page("index").Link("Allkind of")
获取该对象的所有值,返回为某对象
SetProps = LinkObject.GetTOProperties
拥有的属性的个数
PropsCount= Props.Count
获取所有相同对象的Name和Value属性的值
Fori = 0 To PropsCount – 1
PropName= Props(i).Name
PropValue= Props(i).Value
输出
MsgBoxPropName & " = " & PropValue
End Sub
再来看看
object
.GetROProperty(获取某个对象的属性值),该方法在实际自动化测试过程中使用相当广泛,比如有下面这些地方将会经常使用。
1、检查某输入框的maxlength属性的值是否设定在预定范围内。
我们在测试过程中,经常会遇到要去检查某输入框的字符长度的检查,麻烦的情况是我们一个一个地去输值,一直计算到累加的字符末尾始终为一个固定时停止,然后去获得字符串长度,而有来判断其输入框的最大maxlength值。但如果对html约有了解的话,我们可以通过判断其maxlength属性的值来做到这一点。
2、判断RadioButton或者CheckBox等控件点击后是否为true值,以判断其点击操作是否成功。
3、获得下拉框的items count或text(似乎是此属性)的值。往往我们通过判断下拉框items count是否大于1来决定脚本是否继续执行(为0时,一般显示为请选择)。获取其text值,其实获取的是下拉框所有值的集合,这时我们可以通过RegExpTest函数来判断是否拥有其它地方所添加的内容。
4、输入内容未添加时,获取输入框的value值与您所给定的值进行比较,以保证其输入的内容正确。
5、结合childObject方法,返回某确定的惟一对象,如QTP帮助文档中的实例。注意此实例在我们自己封装QTP方法以构建自己的二次语言时非常有用,其主要用途当然是通过ChildObject和GetRoProperty能够返回某惟一对象。
'Create a description object tohelp retrieve all WebEdit objects in a specific page.
Set oDesc = Description.Create()
oDesc("micclass").Value = "WebEdit"
'Retrieveall WebEdit objects in this page
Set EditCollection = Browser("Book a Flight:Mercury").Page("Book a Flight: Mercury").ChildObjects(oDesc)
NumberOfEdits= EditCollection.Count
'Search fora specific WebEdit and set its value
For i = 0 To NumberOfEdits - 1
IfEditCollection(i).GetROProperty("name") = EditToSearch Then
EditCollection(i).Set ValueToSet
End If
Next
End Sub
Set oDesc = Description.Create()
oDesc("micclass").Value = "WebEdit"
'Retrieveall WebEdit objects in this page
Set EditCollection = Browser("Book a Flight:Mercury").Page("Book a Flight: Mercury").ChildObjects(oDesc)
NumberOfEdits= EditCollection.Count
'Search fora specific WebEdit and set its value
For i = 0 To NumberOfEdits - 1
IfEditCollection(i).GetROProperty("name") = EditToSearch Then
EditCollection(i).Set ValueToSet
End If
Next
End Sub
6、获取当前操作对象的值,以供其它对象使用。该方法也经常使用,比如添加某内容后,这些内容都显示在某个WebElement中。当离开该页面到其它页面(该页面显示的内容应与前面的内容显示一致)时,我们就可以将前面所获取的WebElement的innertext值,与现在的页面中的WebElement值进行比较,以确定内容相同。
。。。。。。
以上例子只是简单的示举,
object
.GetROProperty在实际运用中还有许多方法,关键就在于你是如何使用它的。可以这么说,该方法是QTP能进行“自动测试”的支柱之一。
再来看看
object
.GetTOProperty(获取仓库对象中的某属性值)。该方法在某种程序上也可以如GetROProperty方法来使用,但是我是不推介如此的,原因当然主在于TO与RO的区别。该方法实际运用常常是结合Object.SetTOProperty(设置某对象的属性的值)来使用的。使用这两种方法的良好结合,可以解决仓库对象中属性的值写死的窘迫,如下面的例子:
'示例,如果某对象的 value值与指定的值不同,则设定该对象的值为所指定的值
FunctionsetTTOProperty(obj,pointvalue)
Ifobj.GetTOProperty("value")<> pointvalue then
obj.SetTOProperty "value", pointvalue
end if
End Function
''示例:返回某指定属性的对象
FunctionObjSetTOProperty(obj, pointvalue )
If obj.GetTOProperty("value")<> pointvalue then
obj.SetTOProperty "value", pointvalue
end if
''将某更改后的仓库对象进行返回,以便宜继续操作
ObjSetTOProperty=obj
End Function
今晚就到这此吧!最近天气太潮湿,蚊子太多了,该死!
文青山
2011-5-15