教材示例实践之一
下面是模拟书本上的示例进行实际操作时遇到问题后得到的一些感悟:
第一个示例要求如下:
打开IE浏览器,再从51testing网站的主页跳转到51testing网站的论坛。
systemUtil.Run "C:\Program Files (x86)\Internet Explorer\iexplore.exe","www.51testing.com","","" Browser("micClass:=Browser").Navigate("bbs.51testing.com") Browser("micClass:=Browser").Page("micClass:=Page").Sync
上面虽然仅仅是3行代码,但是运行成功颇费了一段时间。
1. 一定要先打开QTP,再打开IE浏览器,这样SPY功能才能识别到IE的控件。因为安装完QTP之后,每次打开IE,浏览器会自动加载BHOManager,而QTP在IE中识别对象是依靠一个叫BHOManager Class的动态链接库来完成的,如果是先打开IE再打开QTP,QTP就不能成功读到BHOManager这个动态链接库而导致QTP识别对象失败。
2. 需要设置Record and Run Settings里Web的运行方式为:Record and run test on any browser
3. systemUtil.Run 如果不指定要运行的浏览器地址,有可能主动打开的不是IE,而是360之类的浏览器。可以查看help文档,阅读此方法的使用参数如何设置。
4. 后面2句是描述性编程,不需要把浏览器控件添加到对象库。如果添加了,运行时会报错:在对象库中找不到你所描述的对象。
第二个示例要求如下
1. 启动IE并进入51testing首页
2. 点击《软件测试论坛》链接,检查当前是否论坛页面
3. 关闭51testing首页
4. 论坛页面内点击《QuickTest Pro》版块链接
5. 点击该板块页面中<51testing软件测试论坛>链接,在出现的下拉框中点击<我要做专家>的链接
6. 在《我要做专家》页面中搜索2个链接,是否存在
最后的成品代码如下:
'启动IE并进入51testing首页 systemUtil.Run "C:\Program Files (x86)\Internet Explorer\iexplore.exe","www.51testing.com","","" '点击《软件测试论坛》链接,检查当前是否论坛页面 Browser("51Testing软件测试网").Page("51Testing软件测试网-主页").Link("软件测试论坛").Click Browser("51Testing软件测试论坛").Page("51Testing软件测试论坛-主页").Sync checkTitle=Browser("51Testing软件测试论坛").Page("51Testing软件测试论坛-主页").GetROProperty("title") If instr(checkTitle,"论坛") <> 0 Then Reporter.ReportEvent micPass,"step 2","passed" else Reporter.ReportEvent micFail,"step 2","fail" End If '关闭51testing首页 'Browser("51Testing软件测试网").Page("51Testing软件测试网-主页").Sync Browser("51Testing软件测试网").Close '注解1 '论坛页面内点击《QuickTest Pro》版块链接 Browser("51Testing软件测试论坛").Page("51Testing软件测试论坛-主页").Link("[QuickTest Professional]").Click wait 2 '点击该板块页面中<51testing软件测试论坛>链接,在出现的下拉框中点击<我要做专家>的链接 Browser("[QuickTest Professional]").Page("[QuickTest Professional]").Link("我要做专家").Click '注解2 '在《我要做专家》页面中搜索2个链接,是否存在 Set oDesc = Description.Create() '创建properties对象 oDesc("micClass").value = "Link" Set Lists =Browser("我要做专家 - 51Testing软件测试论坛").Page("我要做专家 - 51Testing软件测试论坛").WebElement("我要做专家 类型 主题: 全部 精华 |").ChildObjects(oDesc) '注解3 NumberOfLists = Lists.Count() mark = 0 Find1 = "【你来问我来答第48期】:探讨数据库相关的开发和测试技术" Find2 = "[你问我来答第6期]:软件测试之功能测试(已结束)" For i = 0 To NumberOfLists - 1 LinkName = trim(Lists.item(i).GetRoProperty("innertext")) '注解4 'msgbox linkName If LinkName = Find1 or LinkName = Find2 Then mark = mark + 1 End If If mark = 2 Then '已经找到 Reporter.ReportEvent micPass,"found","Passed" Exit for End If If i = NumberOfLists - 1 Then '没找到也写进报告里 Reporter.ReportEvent micFail,"not found","Failed" End If Next '释放对象,从最里面一层开始释放直到最外面一层 Set oDesc = nothing Set lists = nothing
解释几点:
1. 进行非描述性编程时每一个用到的对象都要添加到对象库,否则会出现对象无法识别。
2. 注解1中那一行代码,如果你的IE设置不对,就会执行失败。
假如你的IE打开链接是在当前窗口的新选项卡,那么51testing软件测试网首页和软件测试论坛是在同一个browser下的,所以Browser("51Testing软件测试网")识别失败。你需要把你的IE选项改为:
当他们是在2个不同的窗口下打开时,Browser("51Testing软件测试网").Close才能执行成功。
3. 注解2 链接<我要做专家>需要添加到对象库,这里有个必须要提一下的技巧,因为这个链接是点击<51testing软件测试论坛>后才出现在下拉框中的。如下图:
我们都知道,当使用SPY或者对象库捕获对象时,一旦点击白色手指后就只能抓取对象而无法进行其他任何操作了。但其实点击了白色手指之后,仍然可以通过2种模式切换操作,使得切换后可以停止对控件的抓取,并可以对被测对象进行操作。
A. 半操作模式--CTRL键 支持鼠标点击操作
使用spy或对象库捕获对象后,可以看到鼠标光标是手指状态,此时也是捕获对象的状态。这个时候是不可以进行任何操作的,只能抓取想要的对象。而当我们按住CTRL键不放,就可以做点击操作了。如上图,鼠标光标是手指状态时,我们按住CTRL键,鼠标点击<51testing软件测试论坛>链接,等下拉框出来后,放开CTRL键,再点击<我要做专家>链接,就可以成功地把这个链接加入对象库了。
B.全操作模式--CTRL+ALT键 支持鼠标点击和键盘输入
在处于抓取对象模式的情况下按住CTRL键不放,然后按下ALT键,紧接着先松开CTRL键,再松开ALT键。这样就切换到全操作模式了。比如你可以在百度输入框中输入数据,等模糊匹配下拉选项框出现后,再点击CTRL键然后松开,就返回到抓取对象模式,你再点击想要的下拉选项,就可以完成抓取模糊匹配下拉框对象。
4. 注解3 因为一个页面里有很多个link对象,我们不可能把它们全都添加到对象库中,然后一个个进行匹配。这时候我们要善于将对象库编程与描述性编程混搭。Description对象可以返回包含一组property对象的properties集合对象。property对象由属性名和值组成。
这里把link对象的父对象扩展到WebElement("我要做专家 类型 主题: 全部 精华 |")是因为整个页面的link太多,细化到我们要查找的link所在的最接近父对象是提高查找效率的方法之一。
5. 注解4 这是遍历页面中的link对象,取得它的运行时innertext属性,来跟目标链接进行对比。
左图是注解4中用到的innertext。右图是本次示例中对象库的内容。