51Testing软件测试论坛

标题: QTP8.2中如何捕捉不可见的object? [打印本页]

作者: beck3000    时间: 2005-4-26 20:01
标题: QTP8.2中如何捕捉不可见的object?
我在测试web程序中发现这样的问题:
有个应该属于QTP中WebEdit类型的对象,首先在录制的过程中,他不可能作为对象被捕捉到,然后在事后定制的过程中,我想把他加入到object repository中,QTP却只能用鼠标选取那些可见的对象,于是乎我使用了最后一招,用鼠标选取父窗口,然后把父窗口的所有子对象全部包含到object repository中,该隐藏的对象仍然无法出现,有没有高人能指点一二。
查看源文件中这个对象是这样的
<input type="hidden" name="checkDate" value="20050426">
如果事后不能把它加入对象库,录制之前应该怎么设置呢?我实验了很多选项,都是不灵。
作者: QA_BAY    时间: 2005-4-27 09:33
从你的说明来看,WEBEDIT应该可以被QTP8.2录制的!
你那个是不是二级菜单!
作者: beck3000    时间: 2005-4-27 10:15
不是菜单啊,只是页面中的文本框,区别在于它是隐藏的
同类的对象,如果没有这个type=hidden,全部都能加入对象库。
作者: QA_BAY    时间: 2005-4-27 11:11
那你的录制时可以点到那个控件吗?
就是说它隐藏,有用什么方法让QTP录制下来!
作者: lovetest6    时间: 2005-5-25 15:07
说得没错哦。呵呵
作者: beck3000    时间: 2005-5-25 22:28
这个问题说来话长,有点解释不清。
我把待测页面简化了一下,打包在这里,望同行们帮忙解决。
详情请见其中的readme。
作者: lovetest6    时间: 2005-5-26 10:08
应该可以通过调整record setting录下来.
但是要参数化,我还真不知道有什么好办法。
呵呵,试试看我的index:=或许能定位到那里。

另外,这个日历是如何负值的呢??
修改那个hidden值,然后在readonly的那个文本框中显示出来么?
作者: beck3000    时间: 2005-5-26 12:01
sorry,那个打包文件可能有些错漏,我又重新压缩了一下。
==========================
如果不能参数化,自动化测试也就失去了意义,所以一定要参数啊。。
至于怎么实现日历的赋值,其实仔细看一下index.htm的源文件就能找到答案,是通过calendar()这个方法,在/style/calendar/calendar.js中。
==========================
可以这么试验一下:
把<input type="hidden" name="checkdate" value="20050406">改为
<input type="text" name="checkdate" value="20050406">,然后选择日期控件,发现右边的文本框会同步更新,以此证明该对象被正确赋值。但录制脚本还是要改为hidden,然后对日期参数化。
作者: QA_BAY    时间: 2005-5-26 12:05
我加多了两句,还是不行.
Browser("测试日志").Page("测试日志").WebEdit("textfield2").Click
Browser("测试日志").Window("Calendar -- 网页对话框").Activate
Browser("测试日志").Window("Calendar -- 网页对话框").Click 583,278
你们看一下,已经Activate之后,那下来就是点啦.
不知道会不会坐标不对呢?
作者: QA_BAY    时间: 2005-5-26 12:13
如果是改成这样那就好办了.
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
作者: someone5    时间: 2005-5-26 12:26
还是没太看明白。
楼主是想把那个日历加到repository中吗?
或者是可以加到repository中,无法记录操作

[ Last edited by someone5 on 2005-5-26 at 12:32 ]
作者: someone5    时间: 2005-5-26 13:16
只能录制到对于按钮的操作,对于具体日期的操作录不到
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
作者: beck3000    时间: 2005-5-26 13:34
标题: To someone5
我是想把<input type="hidden" name="checkdate" value="20050406">这个对象加入repository。
===================================
然后我看到你录制的脚本,你点击了“今天”按钮,如果你选择当天,录制和回放不会有任何问题,因为这绕开了点击日期的操作。但是我关键是要参数化日期作为输入,所以一般情况是不选择当天的。
作者: someone5    时间: 2005-5-26 13:38
了解你的意思了,尝试了一下,点击日期的动作录不到;
尝试采用Virtaul Object,将其转化为Table,也没有用
作者: beck3000    时间: 2005-5-26 13:58
标题: 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中。
==============================================
作者: QA_BAY    时间: 2005-5-26 14:23
直接加入这么一句Browser("测试日志").Page("测试日志").WebEdit("checkdate").Set "2005-06-26",这样我参数化checkdate就简单多了,但关键是checkdate不可能被录制过程捕捉到,事后也无法加入repository中。


你一开始如果没有bookDate,那怎么会有checkdate呢?
首先你有没有了解清楚,checkdate是怎么来的.
然后在页面如果不可见,那QTP是录制不了的.
作者: beck3000    时间: 2005-5-26 15:07
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能捕捉也罢,不能也罢,我只想知道如何参数化日期输入。
作者: QA_BAY    时间: 2005-5-26 15:16
那你只要参数化这一句就行了

Browser("测试日志").Page("测试日志").WebEdit("bookDate").Set "2005-06-26"
作者: beck3000    时间: 2005-5-26 15:49
希望大家看一下我在qtp1.rar中的readme,万分感激
作者: hongtang    时间: 2005-6-5 22:32
标题: 自定义 对象及其属性
次招不行 大哥 就没办法了只有自己弄ADD-IN了
作者: qsj_shao    时间: 2006-12-8 11:22
我先把input改成text然后在对象库里面add这个对象,然后再修改源码把input改成hidden,再将对象库里面checkdate对象只留一个name属性,使用Browser("测试日志").Page("测试日志").WebEdit("checkdate").Set"2006-06-26"可以通过,但在result中显示是使用smart identification mechanism来识别的,result中是这样写的
The smart identification mechanism was invoked.

Reason: object not found.

Original description:
name=checkdate
micclass=WebEdit

Smart Identification Alternative Description:

Base filter properties (3 objects found)
type=text
micclass=WebEdit
html tag=INPUT

Optional filter properties
name=checkdate (Skipped)
html id= (Used, 3 matches)
max length=2147483647 (Used, 1 matches)
default value=20050406 (Ignored)
class= (Ignored)
rows=0 (Ignored)
visible=-1 (Ignored)
看这个result我添加该对象的type属性并修改为hidden,反而识别不了,无法运行了,再将type属性修改为text竟然不需要通过智慧识别就能运行了,这种情况始终无法理解
按照这个思路,我将bookdate的type属性修改为hidden,是无法识别,但通过源码看bookdate和checkdate的type属性是不同的,所以就不知道为什么checkdate通过属性type等于text反而能识别。
作者: mailtolily    时间: 2007-3-16 15:22
up




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2