对SetTOProperty的印象一直停留在和GetTOProperty、GetROProperty、GetROProperties这几个方法差不多的认知,没有使用过,当然也就没有研究。这几天在网上看了些关于QTP的资料,又重新把SetTOProperty认识了一遍。
相对于GetTOPerperty和GetROProperty,这两个的关系还是比较好弄明白的,前者是指对象库中对象的属性,后者则是运行时对象的属性。
比如一个WebEdit,在QTP添加对象时,其Value属性就是空,然后再给Page中的WebEdit输入一个值”a”,那么运行GetTOPerperty ”value”的值就是空,因为对象库里为空,而运行GetROProperty “value”值为”a”,因为运行时对象的Value为”a”;
下面来说SetTOProperty,其实也就是给测试对象设置属性,通常用于多个相同对象时的属性赋值,如下是我写的简单的html页面:
打开后就是四个文本框,这四个文本框,从QTP识别来看,属性都相同,都是WebEdit。那么如何来区分这四个WebEdit呢,我们就可以用SetTOProperty方法。
代码如下:
Set Mydes=Description.Create()
Mydes("html tag").Value="INPUT"
Set oPage=Browser("Browser").Page("Page").ChildObjects(Mydes)
For i=0 to oPage.count-1
Browser("Browser").Page("Page").WebEdit("WebEdit").SetTOProperty "index",i
Browser("Browser").Page("Page").WebEdit("index:="&i).highlight
Next
这样只需要在对象库中添加一个WebEdit对象,就可以依次highlight到所有WebEdit,当然也可以依次给各个WebEdit赋值。
就像网上提到的一个例子,一个Page下有好几个输入框,每个输入框旁边都有一个Check Button,这个Check Button的数量是未知的,有可能几十个,也有可能上百个,每个Check Button的属性都相同,那么怎么办呢,同样也可以采用SetTOProperty的方法,只需要添加一个Check Button对象在对象库中即可,代码大同小异。
另外,我们可以对TO Set Property,那么怎么对RO Set Property呢?
显示对于WebEdit,有现成的方法可以调用,那就是WebEdit.Set;那么对于其他的一些对象呢?比如WebElement,并不支持Set方法,那么我们就可以通过给Object的属性赋值,来达到Set方法同样的效果。
比如,如下是163邮箱的写信界面,通过Spy发现收件人栏识别为WebElement
那么我们就可以采用如下方法给收件人栏赋值:
Browser("Page").Page("Page").Frame("index").WebElement("输入对方手机号,就能给他发邮件").Object.innerText=”xxxxxxx”
同样实现了赋值的效果,收件人显示为:
恩,今天先这些,过几天继续。。。。