谁能阻止少年武士赴死,他们听不到,斗士的剑一挥出,必会听到战败者的哀嚎。

总结描述性编程

上一篇 / 下一篇  2012-10-26 16:38:38 / 个人分类:QTP

整个项目录制完了,也都可以跑起来了
但是录制的东西很依赖对象库测试环境不同就会导致些新的小问题 需要不断去修改下
有没一劳永逸的方法呢?一直在思考....


项目现在闲着,反正俺闲着也是闲着,就想研究研究用描述性语言来更新之前的脚本
看似容易 其实工作量蛮大的 问题也不少
在使用描述性语言之前,要去对象库去看看各个对象一般是靠什么属性来识别的 如何能够用最少的属性来唯一识别出该对象呢?


方法只有一个,就是spy出这些对象属性 然后try again and again...
如果运行时候还是提示找不到这些对象时候,可以增加或减少一些属性,刚开始俺以为属性越多越好 越容易唯一识别一个对象,其实不然,就像人A和B,大家都是人,共同属性就不需要再描述了,加上个名字或者两者最不相同的地方 你这样告诉第三个人,他就会懂得区分哪个是A和B了;反之,如果你告诉第三个人A和B很多相同的特征,只会增加他对这些的吃力辨认,而且还可能会导致他更迷惑了而已,嘿嘿。。。


属性越多时候还会给以后的维护带来麻烦,如果开发那边改了对象某个属性就可能会导致这边需要不断修改了
当然对象这些属性的利用是有一定规律的,一般来说每个对象都有属于自己的特殊属性的;


下面有些小技巧是自己使用这么久来总结出来的:
一.描述格式:Testobj("属性:=xxx1","属性2:=xxxx2"....) '注意各个属性间是逗号,每个属性用双引号括起来,刚开始俺经常犯拼写对象名字或缺少符号等低级错误,每次都要找小之之来帮找这些错误,真是对不起他的时间;当局者迷,当出现这些错误时候找其他人来看最有效,当然杜绝这种浪费时间的情况出现就是养成好的编码习惯,而且要认真 细心 再细心
1.当出现提示某父对象找不到的提示时候,用Exist来进行一层层判断,看这些层的对象是否都正确。。。
例如:要对一WebElement进行Click,但是提示找不到该对象时候,先分析看是否该WebElement对象描述不对,如果不是就可能是它的父对象不对,那样就需要对它的上层父对象进行一一判断了
Browser("name:=号码百事通个人助理_地区管理员").Page("title:=号码百事通个人助理_地区管理员").WebElement("innertext:=13570537460").Click
判断:
首先判断最顶层:

msgbox Browser("name:=号码百事通个人助理_地区管理员").exist   ,如果存在则会打印出值:1


其次.继续判断第2层:

msgbox Browser("name:=号码百事通个人助理_地区管理员").Page("title:=号码百事通个人助理_地区管理员").exist 


再次.继续判断第3层:

msgbox Browser("name:=号码百事通个人助理_地区管理员").Page("title:=号码百事通个人助理_地区管理员").WebElement("innertext:=13570537460").exist

2.用With......end with 来简化代码,这样还可以使得以后某父对象修改了某属性 只需要改一句就可以了
例如:
with Browser("name:=号码百事通个人助理_地区管理员").Page("title:=号码百事通个人助理_地区管理员")
     .obj("innertext:=13570537460").Click
     .obj(xxxx).set
在相同的父关系中,只需要用 .来开始该对象的描述,是否可以偷很多懒呢 嘿嘿

3.对于一系列的对象,如果该对象名字、ID....等都一样,QTP会按顺序分配给这些对象个index值,在对象属性中加一个 "index:= X"就可以去识别了
小马gg的解释:index其实就是一个索引,如果你在页面中相同的属性能找到多个对象,那么index可以指定你要访问第几个对象
经过俺的试验,用spy无论是在RO或TO都找不到对象的index值,但是可以把你需要的对象添加到Object Repository对象库中就可以看
到该对象对应的index值了

4.适当的使用wait来等待对象的出现,否则某些操作会因为太快一飞而过导致失败的

二、使用Description对象
该对象的妙用在于不能准确描述出某对象的属性,可以指定其他属性来找到该对象,然后返回该对象包含的所有属性,再去利用其他属性
首先需要创建Description:
Set myDecription=Description.Create()
然后对Description对象添加描述属性
myDecription("name").value="objname"
myDecription("text").value="objtext"
然后使用就可以使用myDecription描述出来的对象了
.obj(myDecription).action

俺在项目中喜欢用Description对象来捕捉那些弹出提示窗口的静态文本
If tipWin.WinButton("确定").exist(1) then                ' 弹出提示,出现提示框为True,如果不出现=false
   Set myStatic=Description.Create()
    myStatic("nativeclass").Value="Static"
    Set myObject=exceptWin.ChildObjects(myStatic)    '获得该窗口的所有子对象
  erro_repeat=myObject(0).GetRoProperty("text")     '抓出静态文本
   tipWin.WinButton("确定").Click               
   msgbox erro_repeat
else


TAG:

 

评分:0

我来说两句

Open Toolbar