执行脚本以后的结果就是在Log窗口内写8行True,返回True就说明描述的对象存在了,也就说明描述性编程成功了,如图1-191所示。
图1-191
分析。
这段脚本首先用Set将公共部分进行了提炼,这样可以使重复的部分合为一个整体。然后完全还可以进行优化,所以,选择使用With将所有会被复用的代码提炼出来(这里指Baidu),这样整个脚本就显得非常清晰了。
这也是描述性编程常用情况之一的最基本的一个情况:同一个界面中出现很多个相同类别的控件元素。
(2)如果要同时操作浏览器的多个窗口时,怎么做?你想过吗?
通常情况下,都只需要在一个窗口中完成任务。如果同时出现两个窗口的话,QTP就会出错,因为QTP匹配到了大于1个的窗口对象,所以它不知道究竟该对哪个具体对象进行操作了。所以,此时就要用以下这个方法,脚本如下所示:
SystemUtil.Run "C:\Program Files\Internet Explorer\IEXPLORE.EXE" SystemUtil.Run "C:\Program Files\Internet Explorer\IEXPLORE.EXE" Browser("CreationTime:=0").Navigate "http://www.51testing.com" Browser("CreationTime:=1").Navigate http://www.baidu.com |
使用以上代码,QTP就能够分辨出多个浏览器窗口了,当然,也可以使用Index或Location属性,大家可以尝试一下。同时,也可以尝试一下如何将指定的窗口关闭。
另外,当使用Browser ("CreationTime:=-1")的时候,表明当前有且仅有一个浏览器窗口,当只需要一个浏览器的时候,可以使用这个方法来作为判断依据,脚本如下所示:
objBrowser = Browser ("CreationTime:=-1").Exist (0) If objBrowser Then Msgbox "只存在一个浏览器窗口" else Msgbox "存在0个或多个浏览器窗口" End If |
(3)使用描述性编程通过遍历对象完成N个同类控件的操作。
假设有这么一个场景,页面中有几百个输入框,此时如果逐一将这几百个对象添加到对象库是不科学的,使用描述性编程则是一个明智选择。但是,也不能逐一描述,因为效率同样的低。在这种情况下,就可以用描述性编程来遍历页面中的对象,从而最终完成艰巨的任务。百度的高级搜索页面就是一个比较典型的例子,页面中有很多输入框,如图1-192所示。
图1-192
现在要对这些输入框做文章,在每个WebEdit中输入“QTP自动化测试技术领航”这段字符串,实现脚本如下:
'打开网站页面 SystemUtil.Run "C:\Program Files\Internet Explorer\IEXPLORE.EXE",_ "http://www.baidu.com/gaoji/advanced.html" '描述对象 -- WebEdit Set all_oEdit = Description.Create all_oEdit("micClass").value = "WebEdit" '为WebEdit找父对象和祖父对象,并将所有对象“包装”在一起 Set all_oEdits = Browser("micClass:=Browser").Page("micClass:=Page")._ ChildObjects(all_oEdit) '遍历页面中的WebEdit对象,找到一个就输入一串指定的字符串 For i = 0 to all_oEdits.count - 1 Set oEdit = all_oEdits.item(i) oEdit.Set "QTP自动化测试技术领航" Next '最后记得释放所有设置的对象 Set oEdit = Nothing Set all_oEdits = Nothing Set all_oEdit = Nothing |