51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 21508|回复: 66
打印 上一主题 下一主题

[你问我来答第29期]:QTP录制过程中对象未识别的处理办法(已结束)

[复制链接]
  • TA的每日心情
    无聊
    4 天前
  • 签到天数: 1050 天

    连续签到: 1 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2012-12-3 10:33:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


    论坛ID:Jack_loo
    真实姓名:陆小刚
    擅长技术领域:测试管理、QTP
    现任公司:上海博为峰软件技术有限公司
    现任职位:高级讲师
    工作经验:12年
    主题:QTP录制过程中对象未识别的处理办法
    项目经验:LIVAX拍卖网站,IDASS三角银行网上银行系统,上海理想集团SAP项目,上海移动TD-BOSS系统

    各位会员可以在12月10日前以回帖的方式向客座专家提问。

    (请大家围绕本期客座专家的擅长领域进行提问、探讨)

    客座专家将在12月11日—12月31日为大家集中解答。

    机会难得,欢迎大家踊跃提问!

    本帖子中包含更多资源

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

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    4 天前
  • 签到天数: 1050 天

    连续签到: 1 天

    [LV.10]测试总司令

    2#
     楼主| 发表于 2012-12-3 10:41:28 | 只看该作者
    新一期欢迎大家踊跃参加!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3#
    发表于 2012-12-3 13:29:33 | 只看该作者
    QTP不能识别web中常用的第三方控件  采用什么方法
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2015-5-22 10:32
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    4#
    发表于 2012-12-3 13:37:01 | 只看该作者
    支持一下
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
    发表于 2012-12-3 14:55:10 | 只看该作者
    本帖最后由 hyholine 于 2012-12-7 13:25 编辑

    QTP对象可以实例出Dom对象,但是有没有办法将Dom对象转为QTP对象?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
    发表于 2012-12-3 14:59:59 | 只看该作者
    本帖最后由 hyholine 于 2012-12-3 15:01 编辑

    在对象库中存在某个对象,例如:Browser("mybrower").Page("myPage").Webelement("test").waitProperty "visible", true, 5000 , 偶尔执行时提示不支持该对象的方法或属性,偶尔又是可以正常执行。基本可以排除对象不存在的问题。请问该问题如何处理?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-6-9 14:08
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    7#
    发表于 2012-12-3 19:07:46 | 只看该作者
    本帖最后由 千里 于 2012-12-3 19:09 编辑

    专家老师您好:
    如下图的checkbox,我想通过QTP选择任意几条记录。可通过table或者变量的方式作为输入,请问代码要如何实现?能否提供一段相关代码。

    本帖子中包含更多资源

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

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
    发表于 2012-12-3 21:51:17 | 只看该作者
    JAVA对象不能添加到对象库中。我已经加载了JAVA识别插件,用obiect spy 能识别出对象,但是不能添加到对象库中。该对象感觉本来应该是JAVALIST 对象,也就是下拉框,但是银行这边的开发人员将下拉框javalist对象分成java button和java edit,然后我能用obiect spy 识别java button和java edit,但是不能加对象添加到对象库。用描述性编程也不能执行!请问怎么解决?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
    发表于 2012-12-4 12:10:09 | 只看该作者
    回3楼:
    QTP确实基本不能识别大部分第三方控件,处理的方法有以下几种:

    1.这些控件是否完全相同与某些标准控件?如果是,那么可以通过对象映射到方法将第三方控件映射成对应的标准控件,这样QTP会将这些第三方控件当作标准控件来处理。但是WEB应用上这一点用得比较少,因为大部分第三方控件无法映射成标准控件。

    2.对部分在测试中的操作步骤比较少、控件形状不变化的第三方控件,可以通过为它单独做模拟录制的方法来解决。

    3.很多时候flash被识别成webElement,这时对它的click操作无效,既无法录制,手工写代码后执行也无效果,这时需要调整flash的属性,比如删除param name="wmode"这样的属性后就无法被QTP识别为webElement而被识别为winObject了,这样就可以录制出click x,y的脚本,执行执行也可以,通过添加虚拟对象的方法来执行也可以。删属性的方法,既可以让开发人员改源代码,也可以在QTP脚本中执行"对象.object.outerhtml=xxx"的方法动态修改。

    4.如果是加载的已知常见activeX控件,比如excel表格,可以通过set oExcel=这个对象,然后就当一个excel对象来处理。

    5.如果是未知的activex控件或java控件,可以先向开发了解是否有对象的公用方法,如果有,也可以像4一样处理。

    6.最后实在没办法的办法,将这些控件的操作步骤单独录制成一个低模式录制的脚本,由其他正常模式录制的脚本调用。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 2012-12-4 12:30:59 | 只看该作者
    回5楼和6楼:
    不是很明白“Dom对象转为QTP对象”说的什么意思,能否详细一些,或者举个例子,说明你要达到什么效果。总之dom对象是html页面中的对象,QTP中的对象包括了对象库中的测试对象和html页面中的运行时对象,QTP可以直接通过"QTP对象.object.原生属性"的方法来获取属性值或给属性赋值。

    偶尔执行时提示不支持的可能原因有2个,1是有时页面没刷完就开始执行这句脚本,导致对象不存在,也就无法执行这个对象的waitproperty方法,解决方法是browser.sync或者wait 1;另一种可能需要先检查test这个对象在对象库中的属性,也许有时页面中test识别到的是另一个运行时对象,与大部分时候识别到的不是同一个对象,而那个“另一个对象”没有visible属性,导致脚本报错。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
    发表于 2012-12-4 13:08:36 | 只看该作者
    回7楼:
    直接给你脚本的人不是好老师啊,但不给你思路的人也不是好老师,我希望我能成为一个好老师,所以脚本就不提供了,说下思路。
    1. 这种样子的checkbox列表都是动态生成,所以他们一定具有共性,这个共性需要你通过spy去寻找,或者看源代码来寻找。比如发现所有checkbox的id都是readnot,所有name都是chk跟2位数。根据这些共性足以区别于其他任何对象,特别是最上面“序号”前的checkbox。
    2. 如果checkbox总数是动态变化,那就需要先获得总数保存为变量A
    3.如果需要选择的量也是随机数,那就先生成一个随机数,存放在表示选择量大变量B里
    4.建立2个数组arrA(A变量可达到的最大值)和arrB(A变量可达到的最大值)
    5.通过这些checkbox上级对象的childobjects方法可以获得所有checkbox,对这组checkbox遍历for k=0 to checklist.count()-1,如果符合之前发现的属性,就将这个checkbox的index也就是k放到arrA(i)中并i=i+1,也就是对arrA(i)做初始化,使得arrA数组中存放的都是所需要的checkbox的index值
    6.通过循环for i=1 to B,每生成第i个随机数RandomNumber(0,A-i)时先将随机数赋给j,然后arrA(j)的值赋给arrB(i),再通过循环for x=j to A将arrA数组j后面的数通通挪到数组的前一个数据里,循环取到所有随机数在arrB数组里。
    7.最后就是遍历数组arrB,从0到B-1,执行checklist(arrB(j))的set方法,就完成了所需控件的选择。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
    发表于 2012-12-4 13:18:34 | 只看该作者
    继续回7楼:
    3.有个错字,存放在表示选择量的变量B里。
    4.arrA用于存放所有需要的checkbox的index值,arrB用于存放通过随机数产生的那些index值
    5.就是介绍了如何保存所有checkbox的index值到arrA的方法。
    6.就是介绍了如何保存随机index到arrB的方法。是通过随机产生一个值,把它作为arrA数组的序号将该数组中数据保存到arrB中,然后将arrA数组中序号后的所有数据往前挪,也就是从arrA数组中去掉已经被选走到数据,再重复生成下一个随机数,直到生成所有随机数,那么arrB数组中就是所有随机产生的checkbox。

    总之,很多时候可能通过数组的方法来完成许多循环的事情。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2012-12-4 13:23:29 | 只看该作者
    回8楼:
    既然“obiect spy 能识别出对象”,那怎么回无法加到对象库呢?除非是在录制或回放状态。

    但是要注意一个问题,spy获得对象并存入对象库后,被测程序在运行过程中,可能会动态改变对象的属性值,导致对象无法识别。

    还有,添加对象过程中,如果对象会受鼠标操作的影响,可以使用“ctrl”键。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
    发表于 2012-12-5 17:05:04 | 只看该作者
    1、我现在做的项目是不同条件的查询,就是有下拉框选择,也有文本填写框,我把下拉框的内容都参数化到datatable,用什么方法使我选择不同条件时,可以选择任意一个数值,比如:

    比如我选择测试服务器,下拉菜单任一数值,对应的datatable中csServer,请教下怎么写?
    2、还有一种情况就是当我选择不同的登陆类型,还有相应不同的用户类型,比如我选择登陆用户,右边下拉框有全部、普通用户、精品小区用户和网厅用户四种,这样的代码怎么实现,给个思路。

    本帖子中包含更多资源

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

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15#
    发表于 2012-12-5 23:56:59 | 只看该作者
    下拉选择框只能被识别为edit;下拉框中内容也无法添加到对象库
    上网查到方法:
    1、把下拉框的右方按钮作为对象添加到对象库,类型或为:WebElement
    2、把下拉框的下拉数据选择层作为对象添加到对象库,类型或为:WebElement-------------可是下拉的数据无法添加到对象库中
    3、直接编写脚本:
    //点击右方的下拉按钮,使下拉数据层弹出
    Browser("中国移动资产经管体系").Page("中国移动资产经管体系").Frame("Frame").WebElement("dropclick").Click
    //经由过程html标识获得某一项的选中
    Browser("中国移动资产经管体系").Page("中国移动资产经管体系").Frame("Frame").WebElement("innertext:=启用","html  tag:=DIV").Click
    4、到这里,我们就选中了下拉选项中的“启用”

    -------------可是下拉的数据无法添加到对象库中
    请问怎么解决
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16#
    发表于 2012-12-6 07:58:15 | 只看该作者
    场景:学习qtp时,录制"发新话题"场景
    步骤:不输入"分类",直接点击“发新话题“,为什么没有"你没有选择主题 的类别,请修改"的webElement元素显示呢,是否是IE哪里设置问题?
    如图:
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17#
    发表于 2012-12-6 08:10:53 | 只看该作者
    场景:学习qtp时,录制"发新话题"场景
    步骤:不输入"分类",直接点击“发新话题“,为什么没有"你没有选择主题 的类别,请修改"的webElement元素显示呢,是否是IE哪里设置问题?
    如图:

    主题地址:http://www.51testing.com/?uid-13 ... space-itemid-830432
    图片地址:http://www.51testing.com/images/ ... 264094&remote=0
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    18#
    发表于 2012-12-6 10:14:59 | 只看该作者
    回14楼:

    你对用datatable做参数化的理解上有偏差。

    datatable为QTP提供了循环使用数据的方法。datatable上的一行数据用于测试脚本的一次执行,第2行数据用于第2次循环执行。

    按照你做的datatable,脚本在第一次循环时,“测试服务器”的数据是“备用”,“所属区域”的数据是“四川省”,“测试类型”是“全部”,“登录类型”和子类型是“全部”与“全部”;跑第2个循环时,“测试服务器”的数据是“绵阳”,“所属区域”的数据是“省公司”,“测试类型”是“下载”,“登录类型”和子类型是“登录用户”与“普通用户”。

    从你描述的意思看,你是想把所有的选择可能都要执行到。如果所有可能的选项可以共用同一个测试步骤的话,我建议你用循环for i = 0 to weblist().GetROProperty("items count")-1来循环执行,这样就能够把每个list的每个选项都跑到,而且你下一个问题也不再是问题了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    19#
    发表于 2012-12-6 10:39:03 | 只看该作者
    回15楼:
    从你的意思看,这个下拉框不是webList,而是2个div,其中1个是可见的div,上面有个按钮,点击后能将一个不可见的div显示出来?前一个div能被qtp抓到,在对象库中叫“dropclick”,后一个div无法被qtp抓到,你只能描述性编程?

    你是想问如何将后一个div抓到对象库中吗?

    如果是这样的话,有这么2种方法:

    1. 在对象库中加对象,选择网页上所有对象,你大部分情况下应该就能找到你需要的对象。将不需要的对象删除。

    2. 在添加对象库中对象时,“ctrl”键可暂时停止对象选择的功能,恢复鼠标操作的功能。你在添加对象的时候,多试一试按住“ctrl”后的效果,你应该能很快试出。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    20#
    发表于 2012-12-6 10:46:52 | 只看该作者
    回16、17楼:
    我特意在灌水论坛试了一下手工测试,不选分类,也没有你说的提示,你能否再试一下?
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-25 04:10 , Processed in 0.186125 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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