51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

楼主: yabest
打印 上一主题 下一主题

QTP识别和操作对象的原理(http://www.yabest.net)

[复制链接]

该用户从未签到

21#
发表于 2007-8-20 12:20:42 | 只看该作者
收益匪浅,真的希望LZ多发些这样的帖子sdlkfj2
回复 支持 反对

使用道具 举报

该用户从未签到

22#
发表于 2007-8-20 15:35:39 | 只看该作者
“肆意的操作它,玩弄它吧!”出自强人之口!!!受教了!!有朝一日,偶也可以!!
回复 支持 反对

使用道具 举报

该用户从未签到

23#
发表于 2007-8-21 17:06:22 | 只看该作者
真的不亏为精华~~讲的很清楚,学到了sdlkfj2 向LZ学习并致敬~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

24#
发表于 2007-8-22 18:20:42 | 只看该作者

多谢!

受益非浅!!!
回复 支持 反对

使用道具 举报

该用户从未签到

25#
发表于 2007-8-22 21:47:59 | 只看该作者
太强悍了。。。。。小鸟学习中。。。。
回复 支持 反对

使用道具 举报

该用户从未签到

26#
 楼主| 发表于 2007-8-23 01:09:25 | 只看该作者
原帖由 ppent 于 2007-8-17 15:05 发表
不错,学习一下。
最后的恶作剧很搞笑,有没人找个时间试试,呵呵sdlkfj3


呵呵,QTP可以操作和控制其它软件!掌握其原理后,你也可以“肆意的操作它,玩弄它!”sdlkfj3

来个好玩的,修改新浪首页!你也可以用此搞恶作剧戏弄别人!





修改方法非常简单,只要用QTP新建一个Test,开始录制,打开新浪首页,并点击要修改的图片和文字链接,得到下面的脚本



  1. Browser("新闻中心首页_新浪网").Page("新闻中心首页_新浪网").Image("英国出动战斗机拦截俄战略轰炸机").Click
  2. Browser("新闻中心首页_新浪网_2").Page("新闻中心首页_新浪网").Link("民政部:慈善法列入立法计划").Click
  3. Browser("新闻中心首页_新浪网_2").Page("新闻中心首页_新浪网").Link("不赞成以流浪乞讨为职业").Click
  4. Browser("新闻中心首页_新浪网_2").Page("新闻中心首页_新浪网").Link("裹胁残疾人乞讨属于犯罪").Click
  5. Browser("新闻中心首页_新浪网_2").Page("新闻中心首页_新浪网").Link("今年3.1亿人次遭自然灾害").Click
  6. Browser("新闻中心首页_新浪网_2").Page("新闻中心首页_新浪网").Link("研究给死亡者家属抚慰金").Click

复制代码


然后在此基础上做简单修改,修改后内容如下:


  1. ChangeImage  Browser("新闻中心首页_新浪网").Page("新闻中心首页_新浪网").Image("英国出动战斗机拦截俄战略轰炸机"), "E:\temp\bbb.jpg"
  2. ChangeLinkText  Browser("新闻中心首页_新浪网_2").Page("新闻中心首页_新浪网").Link("民政部:慈善法列入立法计划"), "胡总书记号召全国网民向yabest学习"
  3. ChangeLinkText  Browser("新闻中心首页_新浪网_2").Page("新闻中心首页_新浪网").Link("不赞成以流浪乞讨为职业"), "盛赞他辛勤耕耘、勇于灌水的精神"
  4. ChangeLinkText  Browser("新闻中心首页_新浪网_2").Page("新闻中心首页_新浪网").Link("裹胁残疾人乞讨属于犯罪"), "鼓励大家向他送花"
  5. ChangeLinkText  Browser("新闻中心首页_新浪网_2").Page("新闻中心首页_新浪网").Link("今年3.1亿人次遭自然灾害"), "51testing发生罕见特大水灾"
  6. ChangeLinkText  Browser("新闻中心首页_新浪网_2").Page("新闻中心首页_新浪网").Link("研究给死亡者家属抚慰金"), "上百版面被淹无一幸免"

  7. Function ChangeImage(ImageObject, NewImage)

  8.         ImageObject.Object.src = NewImage
  9.        
  10. End Function

  11. Function ChangeLinkText(LinkObject, NewLinkText)

  12.         LinkObject.Object.outerHtml = replace(LinkObject.Object.outerHtml,   LinkObject.Object.outerText,   NewLinkText)

  13. End Function

复制代码


然后运行QTP,再看看新浪首页,上面已经变成你的图片和文字了!

然后你再指着这个窗口,大呼小叫的给别人看,保管那人。。。sdlkfj3

[ 本帖最后由 yabest 于 2007-8-23 01:45 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
回复 支持 反对

使用道具 举报

该用户从未签到

27#
发表于 2007-8-23 09:17:44 | 只看该作者

ok

ok
回复 支持 反对

使用道具 举报

该用户从未签到

28#
发表于 2007-8-23 12:45:12 | 只看该作者
楼主真的是太厉害了,学习了啊
回复 支持 反对

使用道具 举报

该用户从未签到

29#
发表于 2007-8-23 14:47:08 | 只看该作者
呵呵,赞一个~
回复 支持 反对

使用道具 举报

该用户从未签到

30#
发表于 2007-8-23 15:04:39 | 只看该作者
原帖由 yabest 于 2007-8-16 16:11 发表
比如有个测试任务,窗口上有很多待检查的记录,每条记录右边都有一个Check按钮,用来检查各条记录。
记录个数不定,所以Check按钮个数也就不定,只有一个Edit显示记录个数。
我们要对每条记录进行检查,也就是要点击每个Check按钮。
但是Check按钮个数不定,不好录制,而且个数可能也很多(上百个),即使能一一录制,那也很麻烦。

那我有一个好办法,只录制一个按钮对象,它设有两个特征属性 label=OK, index=0
然后用下面的脚本,就可以完成测试

buttonNum = CInt(JavaWindow("Test").JavaEdit("Record Num").GetROProperty("value"))
For buttonIndex = 0 to buttonNum - 1
  JavaWindow("Test").JavaButton("Check").SetTOProperty("index", buttonIndex)
  JavaWindow("Test").JavaButton("Check").Click
Next


为什么我执行时它只是不停的在点击同一个按钮(录制的那个)


ChangeImage  Browser("新闻中心首页_新浪网").Page("新闻中心首页_新浪网").Image("英国出动战斗机拦截俄战略轰炸机"), "E:\temp\bbb.jpg"

本地路径的图片替换不了,但HTTP的可以,why?
回复 支持 反对

使用道具 举报

该用户从未签到

31#
 楼主| 发表于 2007-8-23 17:49:44 | 只看该作者
原帖由 Yobbo 于 2007-8-23 15:04 发表

为什么我执行时它只是不停的在点击同一个按钮(录制的那个)


那是因为你的窗口里只有一个label=OK的按钮,这时候不管index等于多少,都指向这唯一的label=OK的按钮。
你可以把label=OK这个属性条件去掉。
也可以改为 label=.* (记得要把正则表达式的选项打勾)

本地路径的图片替换不了,但HTTP的可以,why?


这脚本已经简单的不能再简单了,没有问题的。
肯定是你本地图片地址写错了,或者图片格式IE无法识别。可以将本地图片地址输入到IE地址栏里回车查看一下。

[ 本帖最后由 yabest 于 2007-8-23 17:50 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

32#
发表于 2007-8-23 18:16:24 | 只看该作者
单纯的说是与不是让我更加混淆。
其实就是访问不到一些自身接口,只能访问到已经被封装过来的接口?
被封装了得方法属性就显示在test object里面。
是不是,yabest大师

(注意:GetROProperty访问的是实际对象的封装接口,GetTOProperty访问的是仓库对象的封装接口,
            两者访问的都是对象的封装接口,即Object Spy窗口里选Test Object时显示的属性。
            不要以为GetROProperty访问的是自身接口,即Object Spy窗口里选Run-time Object时显示的属性。
            QTP里的Test Object/Run-time Object的概念太容易让人混淆了!
            它既用来区分仓库对象和实际对象,又用来区分对象的封装接口和自身接口。
回复 支持 反对

使用道具 举报

该用户从未签到

33#
发表于 2007-8-23 19:25:50 | 只看该作者
果然是大神啊!!!
回复 支持 反对

使用道具 举报

该用户从未签到

34#
 楼主| 发表于 2007-8-23 21:44:42 | 只看该作者
原帖由 jackymail 于 2007-8-23 18:16 发表
单纯的说是与不是让我更加混淆。
其实就是访问不到一些自身接口,只能访问到已经被封装过来的接口?
被封装了得方法属性就显示在test object里面。
是不是,yabest大师
(注意:GetROProperty访问的是实际对象的封装接口,GetTOProperty访问的是仓库对象的封装接口,
            两者访问的都是对象的封装接口,即Object Spy窗口里选Test Object时显示的属性。
            不要以为GetROProperty访问的是自身接口,即Object Spy窗口里选Run-time Object时显示的属性。
            QTP里的Test Object/Run-time Object的概念太容易让人混淆了!
            它既用来区分仓库对象和实际对象,又用来区分对象的封装接口和自身接口。



也就是说:

对象自身属性的访问比较直接,用 WebButton("..").object.disabled 这样子即可。

对象封装属性的访问比较麻烦,必须用GetROProperty()和GetTOProperty()这两个函数来访问。
实际对象用GetROProperty(),仓库对象用GetTOProperty()。

[ 本帖最后由 yabest 于 2007-8-23 21:50 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

35#
 楼主| 发表于 2007-8-23 21:51:45 | 只看该作者
原帖由 txmsky 于 2007-8-23 19:25 发表
果然是大神啊!!!


呵呵,太搞笑了吧,让人想起跳大神来了sdlkfj3

[ 本帖最后由 yabest 于 2007-8-23 21:59 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

36#
发表于 2007-8-24 11:21:31 | 只看该作者
噢,明白了,用“对象.object.属性”访问的就是对象自身属性,用“对象.GetROProperty("属性")”获得的就是实际对象的封装属性,而用“对象.GetTOProperty("属性")”获得的就是仓库对象的封装属性,在大师的点拨下对概念的理解清晰多了,响应胡总书记的号召,向大师学习!sdlkfj5 sdlkfj3
回复 支持 反对

使用道具 举报

该用户从未签到

37#
发表于 2007-8-24 12:42:57 | 只看该作者

向高手学习
回复 支持 反对

使用道具 举报

该用户从未签到

38#
 楼主| 发表于 2007-8-25 00:52:15 | 只看该作者
原帖由 gzj_06 于 2007-8-24 11:21 发表
噢,明白了,用“对象.object.属性”访问的就是对象自身属性,用“对象.GetROProperty("属性")”获得的就是实际对象的封装属性,而用“对象.GetTOProperty("属性")”获得的就是仓库对象的封装属性,在大师的点拨 ...


嗯,我把这几种相关用法分类列出来,比较有条理点,大家好掌握。

  对实际对象的操作:
      对象.object.自身属性
      对象.object.自身方法()
      对象.GetROProperty("封装属性")
      对象.封装方法()

  对仓库对象的操作:
      对象.GetTOProperty("封装属性")
      对象.GetTOProperties()      ’获取所有封装属性的值
      对象.SetTOProperty("封装属性", "封装属性值")

[ 本帖最后由 yabest 于 2007-8-25 01:01 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

39#
发表于 2007-8-25 17:24:34 | 只看该作者
网页上的     “胡总书记号召全国网民向yabest学习  ”

这个应该是通过QTP回放才能看到这个效果吧?
那就应该有3种对象了:
1对实际对象的操作:
2对仓库对象的操作
3 “真实对象”---非回放的时候看到的
  这3者之间是的大致关系lz可以和我们解释一下不:)
回复 支持 反对

使用道具 举报

该用户从未签到

40#
 楼主| 发表于 2007-8-25 21:31:48 | 只看该作者
原帖由 wasd2615 于 2007-8-25 17:24 发表
网页上的     “胡总书记号召全国网民向yabest学习  ”

这个应该是通过QTP回放才能看到这个效果吧?
那就应该有3种对象了:
1对实际对象的操作:
2对仓库对象的操作
3 “真实对象”---非回放的时候看到的
  这3者之间是的大致关系lz可以和我们解释一下不:)


哪有那么多对象的!你说的真实对象,就是实际对象了!
只不过实际对象在QTP回放后,内容被QTP修改了而已!

仓库对象是实际对象的特征模型,QTP用仓库对象来寻找实际对象。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-14 18:31 , Processed in 0.078931 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表