上次的第一点其实就是描述式编程,有时候描述式很方便,不过有时候也不方便,比如我下面遇到的问题。当然,这几天还碰到一个日历控件,开始用了笨方法,今天发现好的方法了,拿来分享一下。
QTP心得2
4.ChildObjects的妙用
问题现象:
1) 页面上有一个下拉列表WebList,会根据一个比较随机的条件变为可用或不可用,可用的时候需要选择下拉的选项,郁闷的是可用和不可用的时候控件的name不一样。如果用exist去判断,虽然可以,但是总会出warning。
2) 页面上有2个按钮WebButton,一个确定一个返回,他们的name、text等很多属性值都是一样的(我想XX了那个开发),不同的地方是一大串字符,他把点击按钮调用的函数,style等等很多东西都写在里面,如果用描述式去判断我觉得很麻烦。我后来用了坐标,结果窗口位置一变就识别不到了。
解决办法:
上面两种问题其实都需要另外一种识别控件的方法,常用的几种都无法行得通。于是在查看帮助的时候发现了这个ChildObjects,返回对象中包含的子对象的集合。忽然觉得这个很有用,正好有示例,如下:
Sub ChildObjects_Example()
'The following example uses the ChildObjects method to find all the
'list objects on a Web page, and then to select an item in each list.
Set oDesc = Description.Create()
oDesc("micclass").Value = "WebList"
Set Lists = Browser("Mercury Interactive").Page("Mercury Interactive").ChildObjects(oDesc)
NumberOfLists = Lists.Count()
For i = 0 To NumberOfLists - 1
Lists(i).Select i + 1
Next
End Sub
突然我就想发现了新大陆一样,只要返回了一个同类型的对象集合,然后用这个集合来定位到我要的控件。这里只要判断他是集合里的第几个就行了,而我遇到的问题的控件位置都是固定的。于是使用这个方法顺利解决了。
可以说,这是另一种识别对象的方法,对于难以识别的对象来说,这个方法实在太方便了。具体解决办法,只要根据帮助的内容稍加修改就可以了,这里简单写一下。
Set oDesc = Description.Create()
oDesc("micclass").Value = "WebButton"
Set Lists = Browser("浏览器名字").Page("页面名字").ChildObjects(oDesc)
Lists(0).Click '我要的控件是第一个
'另一个WebList的就是判断那个控件的name是什么,然后就知道现在这个下拉列表是可用还是不可用,就可以继续操作了。
5.给disabled的控件赋值
问题现象:
有一个日历控件,是一个WebEdit,WebEdit的disabled属性是1,不可以写,只能点击弹出日历框,我后来找到控件有规律的地方(这个控件的WebElement的innertext没什么规律可言,只有html id是有规律的day0-day34,固定位置的控件的html id一样。),写了个函数,用描述式编程选定控件,最后得到我要的日期。今天看到另一个系统的老案例,发现人家一句代码就搞定了。
解决办法:
首先,对于disabled为1的WebEdit,不能用Set的,那样会报错。
应该用:Browser("名字").Page("名字").WebEdit("名字").Object.Value = "2008-11-12"
我实在很佩服,这个方法就是看帮助我也找不出来的,于是我就把我的都换掉了,一是怕点日历出错,二是觉得太慢,不如这个快。哈哈。
俗话说久病成医,现在问题解决的多了,自己也有信心了,在组内基本上快成高手了,大家有问题都找我去帮忙解决,说实话,遇到问题很头疼,一定要保持冷静,但是解决问题之后,实在是很高兴,同时也积累了丰富的经验。