51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3957|回复: 14
打印 上一主题 下一主题

[求助] QTP中能否实现,自动获取对象,来实现点击操作

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-12-28 16:32:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.想实现的功能
(a) 我一个web 页面中,在查询中 我输入"testing",可以查询到许多相关的图书,但是想让QTP自动的去点击操作,而不要人来操作.
(b) 我想获取所查询的对象某一个值,用GETROPRO方法是失败的,提示对象库没有这个对象
  
我可以将这个对象,在查询到以后,实现让起自动加到对象库中,可以不!
____________________________________________________________________________________________

'启动程序
SystemUtil.Run "iexplore.exe","","C:\Documents and Settings\Administrator\桌面",""
Browser("Browser").WinTreeView("SysTreeView32").Select "Datuu.com Dtmaker"
'登陆
Browser("Browser").Page("Datuu.com").WebEdit("email").Set "jiankong@datuu.com"
Browser("Browser").Page("Datuu.com").WebEdit("passWord").SetSecure "4774a9be2bbf3598900ec3f6611ff7b56c09b185"
Browser("Browser").Page("Datuu.com").Image("imageField").Click 32,17
'进入查询界面
Browser("Browser").Page("Datuu.com_5").Link("图书管理").Click
'查询图书状态为:创建中的图书,查到了,我想让其自动点击第一个查询到的图书,但是没有实现
Browser("Browser").Page("Datuu.com_3").WebList("promulgationstate").Select "创建中"
Browser("Browser").Page("Datuu.com_3").WebButton("查询").Click
Browser("Browser").Page("Datuu.com_4").WebElement("WebTable").Click  '这是那个连接,比如点击 图书名字就可以跳到另外一个页面中
BookName=Browser("Browser").Page("Datuu.com_4").WebElement("prev_3").GetROProperty("innertext") '这个是想获到图书的基本状态的代码,但是每一次都是一样的,是对象库里面的东西.我想每一次查询到不同的书时,也可以获到图书的状态.
msgbox BookName
版主帮个忙,谢谢了.给出个主意吧! 





________________________________________________________

[ 本帖最后由 superfang 于 2007-12-28 16:43 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2007-12-28 16:41:46 | 只看该作者
 上面的问题,好象很麻烦啊.我想还是有高人可以解决的吧! 
  
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2007-12-28 16:52:35 | 只看该作者
(a) 我一个web 页面中,在查询中 我输入"testing",可以查询到许多相关的图书,但是想让QTP自动的去点击操作,而不要人来操作.
答:当然可以,QTP就是用来做这些的.

(b) 我想获取所查询的对象某一个值,用GETROPRO方法是失败的,提示对象库没有这个对象  
我可以将这个对象,在查询到以后,实现让起自动加到对象库中
答:GETROPRO是取指定对象的运行时属性,你连这个对象都还没定位到又怎么能取呢??
     方法:
             1.不用加到对象库中就用描述性编程的方式,把对象的一些用来识别的属性描述到脚本中然后用GETROPRO方法.
             2.你可以预先在对象库中添加一个这类型的对象.运行时用SETTOPRO来更改对象属性识别运行时对象后就可以用这个对象库中的对象来处理了.实际上跟方法1一样.只是方法2多了一步先放到对象库再改,而1是直接用来识别运行时对象.
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2007-12-28 17:03:50 | 只看该作者
答:当然可以,QTP就是用来做这些的.

     但是每一次查询的对象不一样的!!~如果要是加对象的话,每一个对象都要加入进来,那我不要累死了.
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2007-12-28 17:05:19 | 只看该作者
我是想,可以不可以加一个父类,来屏蔽掉它的字类,这样的方法,可以吗!?没有试过,感觉有点不好弄啊..要是可以的话,它下面的每一个字对象都可以识别了吧..不知道可以不!?

  

[ 本帖最后由 superfang 于 2007-12-28 17:07 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2007-12-28 17:16:18 | 只看该作者
可以实现,只是在实现上会有一些限制.
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2007-12-28 17:18:35 | 只看该作者
不是说了可以描述编程,和第二种方法可以解决你不段加的问题了吗?
譬如现在有个EDIT对象,他的TEXT每次都变化,现在TEXT = "A"
1.那么你就可以先预先添加一个EDIT对象,把CLASS的名称加进去,把TEXT加进去(可以不设置值).
加了之后你在每次识别之前就可以用SETTOPRO的方法设置这个对象库中TEXT的值,譬如现在变B了,那么你就SET他的TEXT为"B",然后再用这个对象去识别指定的运行时对象.
2.你可以直接不加到对象库,把他的描述直接放到脚本里,TEXT是每次都变的,你可以将TEXT设置为一个变量放到脚本里,每次识别之前通过修改变量的值来完成.
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2007-12-28 17:27:51 | 只看该作者
我再次强调一点,你要对什么东西做操作你肯定要告诉工具的,要不他怎么知道你要对哪个进行操作,至于怎么告诉他就是你写脚本的技巧了,譬如每次番页都有10个BUTTON,每次番页都不一样的值,那么你要怎么点???你要点BUTTON一定要先定位到具体的BUTTON后才能用CLICK的方法.这些BUTTON有什么区别吗?没有区别,只有BUTTON的lable和位置不一样,所以你完全可以根据这些BUTTON的公共属性(例如CLASSNAME等)+index/location来定位对象,定位之后再获取TEXT或者CLICK都随你的便.这只是其中一个例子,既然TEXT是变化和未知的,你当然不可能用TEXT来定位对象了,那就用其他稳定的属性来识别.如果TEXT虽然是变化但是可以预知的话你就做个参数化什么的都可以解决了,方法是千千万万,灵活使用吧.
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2007-12-28 17:38:54 | 只看该作者

回复 5# 的帖子

QTP的对象库只有父窗口,没有父子类之分,如果真的有所谓父子类,那么运行时QTP肯定报错这个对象不能唯一识别.
但是你的思路是正确的,页面下的这些LIST的公共属性可以拿到,另外QTP提供了对不能唯一识别时的处理方法就是加上身份标识index/location.避开变化的属性来定位.
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2007-12-29 13:17:38 | 只看该作者
感觉你说的蛮有道理的.可是没有calssname 之间的东西.只有class 可是后面的值是空的.
  你帮我看下这个 1. class    WebElement
                                       2. outhtml       <TD onmouseover=nereidFade(this,40,10,10) style="FILTER: alpha(opacity=100)" onclick="profile(1894, 'Y')" onmouseout=nereidFade(this,100,0,10) align=middle bgColor=#ffffff cellspacing="3" cellpadding="0" border="0">旅游探险208 </TD>
                                        3. html tag     TD
                                         4. x,y的座标.
          5.innertext     旅游探险208
  
 你能给我说下,那个可以屏蔽掉,具体的属性.用它们公共的属性.. 我应该选择什么属性呢~!? 
  我试了,座标怎么不好用呢!?同时我也想选择 class name 但是选项中没有啊!
  只有一个class 可是空的,什么都没有!!
   现在真的是的很急!!
  不好弄啊!!
 
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2007-12-29 13:19:54 | 只看该作者
楼上的,你说的方法,都很好的. 但是实现起来不是那么好弄的.     不过你还是蛮牛B的!!哈哈,我想你应该是个boy吧.要是个女孩子,就不好意思了!!!
    
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2007-12-29 14:44:03 | 只看该作者

回复 11# 的帖子


跟我说吗?

首先 I AM A BOY,

你说的那个对象属性大概是这样吧:
1 class    WebElement
2 html tag     TD
3 innertext     旅游探险208
你所有LIST项的区别应该就在innertext上吧,所以
1 class    WebElement
2 html tag     TD
3 location  X
X要由你自己定义的.LOCATION是指在由1和2识别出来的众多对象中(也就是所有查询到的LIST里面的项了),location 0,1,2,3...分别就代表查询出的不同的项了.
PS:如果你可以预知innertext的值,集合正则表达式子,编程控制这些属性的数据等都可以帮助你完成.
回复 支持 反对

使用道具 举报

该用户从未签到

13#
发表于 2007-12-29 14:49:08 | 只看该作者
这只是说明一种思路,我不清楚你说的那些环境是否有其他属性可以代替.
不过可以说的是这类型的东西如果可以作为一个控件来做的话就别自己复杂化了,如果不是控件,那没办法,只能把里面查询出到所有结果都当作具体的独立对象来处理.
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2007-12-29 15:27:45 | 只看该作者
我说的CLASSNAME是指对象的类名的意思,不是说具体工具里属性叫什么,QTP里可能是什么R什么什么CLASS,WINRUNNER就是CLASS,VC++的SPY++里就叫class name ,叫法都不同,但是都同一个意思.
回复 支持 反对

使用道具 举报

该用户从未签到

15#
 楼主| 发表于 2007-12-29 15:51:31 | 只看该作者
有点明白了.谢谢了帅哥!
我再试下看看怎么样!    
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-18 02:26 , Processed in 0.079349 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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