WEB-QTP随想录—关于食品安全

注:原文最早是发表在www.automationqa.com上面的,后来因为网站被黑而文章内容消失了,希望csdn别被黑了。

关于转载:本文为原创文章,欢迎转载,但转载需要标注出处以及保证内容的完整性,请理解写作的寂莫和苦处。

关于版权:本文不得应用于以赢利为目的的任何场景,否则本人保留相应的权利。


全文下载:http://www.docin.com/p-1910330544.html


首先让我们一起来画个圈圈,然后开始诅咒那些奸商们吧!今天不知吃了啥子,我和老婆肚子疼了一天。靠,在我们生活的范围内,我现在真不知道什么能吃了,更不敢出去乱吃了,可恶的奸商们。


突然想到了曾经我在小店端盘子的事,有一天厨师在炒菜时发现油里面有一只老鼠,所有员工都说把它给倒掉,但老板冷静地把老鼠拿出来,然后对厨师说先用这个,中午我们的菜用那个,于是。。。靠,这些奸商们,在此诅咒一下以前的老板。本以为这种没良心的老板的店生意做不长久,但上次回家却发现这个店5年后生意却更好了,这世界太“卓别林”了。


看看我们的四周吧,毒奶粉、毒腊肉、毒馒头、毒鸡子、毒豇豆等等,谁说中国人没有创新能力,中国人没有勇气,中国人能把发生化学反应的东西做成诱人的食品,并还敢把老鼠等药品泡过的东西让大家品尝,中国人真行!更神奇的是,大家依然还活着,欧阳锋如果在世的话,肯定会自卑而死的,因为我们不用修炼都成东“毒”了。


还是回到今晚的主题吧,今晚我打算再学习并归纳一下 object .ChildObjects ([Description])方法。
方法:object.ChildObjects ([Description])
作用:返回上层对象中拥有指定属性的所有子对象
参数:具有某些属性的对象。注意,你可以使用GetTOPoperties方法或描述性编程来指描述对象。
返回值:一个对象。注意这里返回的是对象,在使用该方法时就需要按以下方法来使用,即Set childobj=object.ChildObjects([Description])

我们首先来看看,用它做的一个例子。

方案:录制一面的操作,打开百度,输入a,点击百度一下,获取所有页面中的link数。

我们先用描述性编程来描述某个对象的属性,关于QTP的描述性编程请在百度里面搜索一下,我想看看介绍也就明白了,在此我也就不做解释了。

方法一:

'在输入框中输入a
With Browser("百度一下,你就知道").Page("百度一下,你就知道")
   .WebEdit("wd").Set "a"
   ''点击百度一下按钮
   .WebButton("百度一下").Click
   .Sync
   ''实现获取页面中所有的link对象的个数
   ''使用描述性编程描述link对象
   Set objlinks=Description.Create
         ''在QTP中html tag的意识是,在网页中标签的名称是什么
         objlinks("html tag").value="A"
         ''经过上面的描述后,objlinks在QTP里的意思就变成了
         ''objlinks这个东东就代表指向标签名称为A的对象
   '利用object.ChildObjects ([Description]),我们可以获得Page页面
   '中所有的对象,注意该方法的返回值也为对象,所以语法应如下
   Set alllinkobjs=.ChildObjects(objlinks)
   '对于对象,QTP提供了count方法,用来输出该对象的个数
   '利用Msgbox 把它打印出来,我的结果为43,当然你的有可能不同,因为
'每次搜索出来的内容可能是不同的
   Msgbox alllinkobjs.count
   '关闭浏览器
   Browser("百度一下,你就知道").Close
   '对新建的对象应及时清空,避免对象遗留后的累加,造成内存的浪费
   set objlinks=nothing
   Set alllinkobjs=nothing

End With

方法二:我们也可以如用GetTOPoperties方法来描述页面中所有的link,请照着我的步骤来执行。

1、将光标指向.WebButton("百度一下").Click 语句上-》在Active Screnn上在“空间”链接,点击右键-》View/Add Object-》OK-》Add to Respository

2、在对象库中,重命令名对象”空间”为“检查链接的个数”-》点击右侧上方绿色的“十”字符号-》选中下图中的三个属性,点击OK


3、将下图中所选区域的value值,清空,并闭对象库


4、将上面的语句中Set alllinkobjs=.ChildObjects(objlinks)注释掉,然后在下面输入下面的语句。

Set alllinkobjs=.ChildObjects(.GetTOProperties("检查链接的个数"))

5、多运行一下,查看结果会发生这个值老是在变化着,至于为什么变我也不太清楚,这个问题留着某位回答吧。

从上面两种方法的使用来看,当然是第一种简单可行得多。当然,我们在项目中使用的时候也常常是使用第一种的方法。

另外有篇文章的内容是很值得我们注意的《浅谈 QTP之识别机制与ChildObjects方法》(url: http://www.51testing.com/?uid-17 ... wspace-itemid-95404)一文讲解了,使用ChildObjects方法获得的对象的个数与getElementsByName方法获得的个数不同的原因。

经常使用该方法在web自动化测试过程中主要在下面这几种情况(个人总结):

1、当页面中对象存在多个相同QTP属性时,使用该方法来获得惟一对象,如下面的伪代码,实现了根据不同的outerHtml的值来查找对象的惟一。为什么要使用outerHtml呢?因为根据我的观察发现,大多数情况下,虽然某些控件的Qtp属性可能会完全相同,但是其outerHtml也就是在页面中的源代码中往往显示是不同的,所以我们可以根据这一属性来寻找惟一的Obj。

onlyStringInOuterHtml,指能在outerHtml中区别其它控件属性中的某些字符串

Function SelectObjOnly(onlyStringInOuterHtml)

    Set oDes=Description.Create

   oDesc("micclass").Value = "WebEdit"

    set objs=Browser().Page().ChildObjects(des)

    注意此处应为objs.count-1,因为下面的对象个数是以数组的下标返回的,所以实际运行的次数应-1

    For i=0 to objs.count-1

    RegExpTest方法,在某个字符串中查找是否今有某字符串,大于0表示找到,该方法的详细代码QTP帮助文档里面有,当然网络上也有,在此省略此方法的介绍。

       If(RegExpTest(onlyStringInOuterHtml,objs(i).GetROProperty(“outerHtml”))>0)

       SelectObjOnly=objs(i)

       Exit For

    End if

    Next

End Function

2、获取WebTable中某行或某列中的对象,这些对象可以是checkBox或者link或者WebEdit等。或者获取页面中的某些对象来进行一次操作,比如点击所有link或者给所有WebEdit赋相同的值等。

下面的例子,例举了如何一次性选中所有的checkBox控件。

Set oDesc = Description.Create()

    oDesc("micclass").Value = "WebCheckBox"

Set Lists = Browser().Page().WebTable().ChildObjects(oDesc)

    NumberOfLists = Lists.Count()

For i = 0 To NumberOfLists – 1

    Lists(i).set "ON"

Next

3、利用该方法的特性来再构建一个所谓的框架

我曾经在学习和实践的过程中利用该函数的属性创建了一个所谓的框架,利用这个框架中的函数完全可以脱离于录制对象库的生成,并使用Excel表来分离对象的属性,数据源也使用Excel来进行读取和存储,另外还有其它一些特性。不过,在使用之后发现对象回收没有做好,QTP在跑一段时间后老死掉,外加判断对象是否存在也没有做好,所以现在还在改进之中,在此也就不说它了,有时间的话我会详细介绍一下它。在此也仅用它来说明,该方法能起到的良好作用。

注意以上给出的方法很有可能运行会出错,至于出错原因我想您还是得仔细推敲一下,并把它改正之。学习的过程有时候在我看来就是不断改正错误的过程,所以让我们拥抱错误吧!

文青山

2011-4-28


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

那美那美

失业了,写文章求吃碗炒面

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值