51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

测试开发精英班,通向高级软件测试工程师【周活动】 找茬--心里圈的故事 !【长期招募】博为峰网校招聘兼职讲师!横扫BAT,Python全栈测试开发技能大全
【108期】:我有自动化问题找joykao?【征稿】提交你的测试成绩单! 【专题】用尽一切办法只为让你学好用例 自学软件测试那点事
查看: 3916|回复: 21

[原创] QTP8.2中如何捕捉不可见的object?

[复制链接]

该用户从未签到

发表于 2005-4-26 20:01:19 | 显示全部楼层 |阅读模式
我在测试web程序中发现这样的问题:
有个应该属于QTP中WebEdit类型的对象,首先在录制的过程中,他不可能作为对象被捕捉到,然后在事后定制的过程中,我想把他加入到object repository中,QTP却只能用鼠标选取那些可见的对象,于是乎我使用了最后一招,用鼠标选取父窗口,然后把父窗口的所有子对象全部包含到object repository中,该隐藏的对象仍然无法出现,有没有高人能指点一二。
查看源文件中这个对象是这样的
<input type="hidden" name="checkDate" value="20050426">
如果事后不能把它加入对象库,录制之前应该怎么设置呢?我实验了很多选项,都是不灵。

该用户从未签到

发表于 2005-4-27 09:33:14 | 显示全部楼层
从你的说明来看,WEBEDIT应该可以被QTP8.2录制的!
你那个是不是二级菜单!
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2005-4-27 10:15:55 | 显示全部楼层
不是菜单啊,只是页面中的文本框,区别在于它是隐藏的
同类的对象,如果没有这个type=hidden,全部都能加入对象库。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2005-4-27 11:11:14 | 显示全部楼层
那你的录制时可以点到那个控件吗?
就是说它隐藏,有用什么方法让QTP录制下来!
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2005-5-25 15:07:36 | 显示全部楼层
说得没错哦。呵呵
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2005-5-25 22:28:21 | 显示全部楼层
这个问题说来话长,有点解释不清。
我把待测页面简化了一下,打包在这里,望同行们帮忙解决。
详情请见其中的readme。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2005-5-26 10:08:55 | 显示全部楼层
应该可以通过调整record setting录下来.
但是要参数化,我还真不知道有什么好办法。
呵呵,试试看我的index:=或许能定位到那里。

另外,这个日历是如何负值的呢??
修改那个hidden值,然后在readonly的那个文本框中显示出来么?
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2005-5-26 12:01:46 | 显示全部楼层
sorry,那个打包文件可能有些错漏,我又重新压缩了一下。
==========================
如果不能参数化,自动化测试也就失去了意义,所以一定要参数啊。。
至于怎么实现日历的赋值,其实仔细看一下index.htm的源文件就能找到答案,是通过calendar()这个方法,在/style/calendar/calendar.js中。
==========================
可以这么试验一下:
把<input type="hidden" name="checkdate" value="20050406">改为
<input type="text" name="checkdate" value="20050406">,然后选择日期控件,发现右边的文本框会同步更新,以此证明该对象被正确赋值。但录制脚本还是要改为hidden,然后对日期参数化。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2005-5-26 12:05:32 | 显示全部楼层
我加多了两句,还是不行.
Browser("测试日志").Page("测试日志").WebEdit("textfield2").Click
Browser("测试日志").Window("Calendar -- 网页对话框").Activate
Browser("测试日志").Window("Calendar -- 网页对话框").Click 583,278
你们看一下,已经Activate之后,那下来就是点啦.
不知道会不会坐标不对呢?
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2005-5-26 12:13:08 | 显示全部楼层
如果是改成这样那就好办了.
Browser("Browser").WinListView("SysListView32").Activate "index"
Browser("测试日志").Page("测试日志").WebEdit("bookDate").Click
Browser("测试日志").Window("Calendar -- 网页对话框").Close
Browser("测试日志").Page("测试日志").WebEdit("bookDate").Set "2005-06-26"(加多这一句上去)
Browser("测试日志").Page("测试日志").WebList("educationlever").Select "功能测试"
Browser("测试日志").Page("测试日志").WebList("select").Select "Windows XP"
Browser("测试日志").Page("测试日志_2").Sync
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2005-5-26 12:26:49 | 显示全部楼层
还是没太看明白。
楼主是想把那个日历加到repository中吗?
或者是可以加到repository中,无法记录操作

[ Last edited by someone5 on 2005-5-26 at 12:32 ]
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2005-5-26 13:16:34 | 显示全部楼层
只能录制到对于按钮的操作,对于具体日期的操作录不到
Browser("测试日志").Page("测试日志").WebEdit("bookDate").Click
Browser("测试日志").Window("Calendar -- 网页对话框").Page("Calendar").WebButton("今天").Click
Browser("测试日志").Page("测试日志").WebList("educationlever").Select "功能测试"
Browser("测试日志").Page("测试日志").WebList("select").Select "Windows XP"
Browser("测试日志").Page("测试日志").WebEdit("textfield").Set "255字符1"
Browser("测试日志").Page("测试日志").WebEdit("textarea").Set "1000个字符1"
Browser("测试日志").Page("测试日志").WebEdit("textfield32").Set "255个字符1"
Browser("测试日志").Page("测试日志").WebButton("保存").Click
Browser("测试日志").Page("测试日志_2").Sync
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2005-5-26 13:34:21 | 显示全部楼层

To someone5

我是想把<input type="hidden" name="checkdate" value="20050406">这个对象加入repository。
===================================
然后我看到你录制的脚本,你点击了“今天”按钮,如果你选择当天,录制和回放不会有任何问题,因为这绕开了点击日期的操作。但是我关键是要参数化日期作为输入,所以一般情况是不选择当天的。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2005-5-26 13:38:11 | 显示全部楼层
了解你的意思了,尝试了一下,点击日期的动作录不到;
尝试采用Virtaul Object,将其转化为Table,也没有用
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2005-5-26 13:58:38 | 显示全部楼层

To QA_BAY

谢谢版主
1.加入坐标,确实没法预知坐标和实际日期的一个对应关系,还是不能参数化日期.
2.我看了你的录制脚本,实际上是把日期控件打开又关闭了,没有实际进行选择,而加多这一句:Browser("测试日志").Page("测试日志").WebEdit("bookDate").Set "2005-06-26",我在readme中说了,这个bookDate是假的,他不会存入数据库中,真正有用的是那个隐藏的checkdate.
3.其实我一开始想做的和你一样,就是省略打开关闭日期控件的步骤,直接加入这么一句Browser("测试日志").Page("测试日志").WebEdit("checkdate").Set "2005-06-26",这样我参数化checkdate就简单多了,但关键是checkdate不可能被录制过程捕捉到,事后也无法加入repository中。
==============================================
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2005-5-26 14:23:04 | 显示全部楼层
直接加入这么一句Browser("测试日志").Page("测试日志").WebEdit("checkdate").Set "2005-06-26",这样我参数化checkdate就简单多了,但关键是checkdate不可能被录制过程捕捉到,事后也无法加入repository中。


你一开始如果没有bookDate,那怎么会有checkdate呢?
首先你有没有了解清楚,checkdate是怎么来的.
然后在页面如果不可见,那QTP是录制不了的.
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2005-5-26 15:07:41 | 显示全部楼层
checkdate的来龙去脉我是清楚的,并不是说有了bookDate才会有checkdate,他们是两个input对象,一个是text类型,一个是hidden类型。
index.htm的源文件中有这一句:
<input type="text" name="bookDate" value="" onclick="calendar(bookDate,checkdate,'','../../style/calendar/calendar1.htm')" size="20">
calendar()这个函数同时给bookDate和checkdate对象返回值。
==============================================
可能我误导了大家,这个隐藏对象QTP能捕捉也罢,不能也罢,我只想知道如何参数化日期输入。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2005-5-26 15:16:35 | 显示全部楼层
那你只要参数化这一句就行了

Browser("测试日志").Page("测试日志").WebEdit("bookDate").Set "2005-06-26"
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2005-5-26 15:49:17 | 显示全部楼层
希望大家看一下我在qtp1.rar中的readme,万分感激
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2005-6-5 22:32:00 | 显示全部楼层

自定义 对象及其属性

次招不行 大哥 就没办法了只有自己弄ADD-IN了
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2019-11-14 17:48 , Processed in 0.078404 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2019 Comsenz Inc.

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