51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

123
返回列表 发新帖
楼主: 看雪时节
打印 上一主题 下一主题

[求助] 只能识别一次的问题

[复制链接]

该用户从未签到

41#
发表于 2007-10-9 20:16:09 | 只看该作者

回复 39# 的帖子

不好意思,被人拉出去happy了~刚回家,还没吃饭~

可能我在33楼的方法有点问题,昨天想当然的写的,自己没调试。。(BS偶吧~)ChildObjects应该不支持micclass以外的属性吧。。。
另外列举两个方法吧,分别是用来取到一个WebElement对象和取所有符合条件的WebElement对象的集合:
第一:用隐式描述性编程来取单个的对象,也就是你最早使用的方法,但要确定描述的属性能够唯一标识某个对象,否则就会产生错误。它可以与正则表达式一起使用,威力比较大,不过执行速度往往会比较慢(因为要和每个对象都进行比较。。。不适合循环调用)~
Browser("B").Page("P").Frame("F").WebTable("W").WebElement("class:=day|day weekend","innertext:=要选择的天").Click

第二:用ChildObjects来取所有WebElement对象,然后通过一定条件来筛选符合条件的对象
Dim Days(31)
Set oDesc = Description.Create
oDesc("micclass").Value = "WebElement"
Set WebElements = Browser("B").Page("P").Frame("F").WebTable("W").ChildObjects(oDesc)
j = 0
For i = 0 to WebElements.Count - 1
        If WebElements(i).GetROProperty("class") = "day" or WebElements(i).GetROProperty("class") = "day weekend" Then
                Set Days(j) = WebElements(i) '将符合条件的对象逐一存入对象数组Days中
                j = j + 1 'j为存入的对象个数
        End if
Next
这种方法的扩展性就比较强些,可以任意取符合指定条件的对象集合,也可以从集合中随意取出想要的元素

[ 本帖最后由 hsjzfling 于 2007-10-10 15:21 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

42#
发表于 2007-10-10 10:44:43 | 只看该作者
原帖由 看雪时节 于 2007-10-9 11:26 发表
呵呵!问题确实变了,附图中确实是10行,但这个行数是变的,怪我现在做的和附图不同。
由于每个月不同显示的原因,你说的把1-31全部WebElement(没有Link)添加到对象库是不是不现实呢?
现在的这个问题确实匪夷所 ...


你的这个问题已经超越了使用qtp的意义。如果搞得那么复杂干脆就不要用qtp好了。如果你们开发的产品就是这个日历的话咱们另当别论。

还有就是把1-31全部包含到对象库非常可行,一共只有31个对象,或者使用我提供的描述性编程,也无非在1-31之间变化。任何一个月份不会超过31,而你若只适用text作为link的识别对象,对于每个月的1-31日的link对象都能够正确的识别。不会有问题。还有就是对于闰月的情况,比如只有28天之类的,我觉得做太多的容错来测试你的程序已经完全失去使用qtp意义。
你的月份和年份都不是普通的dropdown button我觉得这样的东西去判断然后再操作也同样没有意义。
回复 支持 反对

使用道具 举报

该用户从未签到

43#
 楼主| 发表于 2007-10-10 10:54:27 | 只看该作者

回复 42# 的帖子

我说的问题和我们的项目没什么关系,只不过遇到无法解决的问题很想弄清楚了!
回复 支持 反对

使用道具 举报

该用户从未签到

44#
发表于 2007-10-10 11:14:25 | 只看该作者
本帖最后由 jackymail 于 2010-10-18 09:55 编辑
原帖由 hsjzfling 于 2007-10-9 20:16 发表
不好意思,被人拉出去happy了~刚回家,还没吃饭~

可能我在33楼的方法有点问题,昨天想当然的写的,自己没调试。。(BS偶吧~)ChildObjects应该不支持micclass以外的属性吧。。。
另外列举两个方法吧,分别是用来 ...


micclass以外?所有的可识别属性都可以使用在childobjects..
回复 支持 反对

使用道具 举报

该用户从未签到

45#
发表于 2007-10-10 11:15:13 | 只看该作者
原帖由 看雪时节 于 2007-10-10 10:54 发表
我说的问题和我们的项目没什么关系,只不过遇到无法解决的问题很想弄清楚了!

希望你找到答案。
回复 支持 反对

使用道具 举报

该用户从未签到

46#
发表于 2007-10-10 11:23:43 | 只看该作者

两个取时间的控件应该是一样的,录制的时候你会看到它的index 是不一样的

所以录制时,只需要录制一个,在操作时,设定不同的index,就可以对两个都进行操作了
回复 支持 反对

使用道具 举报

该用户从未签到

47#
 楼主| 发表于 2007-10-10 11:57:06 | 只看该作者
原帖由 hsjzfling 于 2007-10-9 20:16 发表
不好意思,被人拉出去happy了~刚回家,还没吃饭~

可能我在33楼的方法有点问题,昨天想当然的写的,自己没调试。。(BS偶吧~)ChildObjects应该不支持micclass以外的属性吧。。。
另外列举两个方法吧,分别是用来 ...


呵呵,谢谢你还关注,问题看来只能用描述性编程了,也就又回到了我最初的方法了。----你的第一个方法
第二个方法我已经使用过了,呵呵
我现在却更关注与为什么ChileItem方法出这个错的问题上了。
回复 支持 反对

使用道具 举报

该用户从未签到

48#
发表于 2007-10-10 14:39:31 | 只看该作者

回复47# 的帖子

再看了下你在27楼的内容:
原帖由 看雪时节 于 2007-10-8 16:50 发表
Browser("B").Page("P").Frame("F").WebTable("W").ChildItem(myDayRow,myDayColumn,"WebElement",0).Click                        却提示 The test run cannot continue due to an unrecoverable error.缺少对象: 'ChildItem(...)',是因为我这个方法问题?


QTP提示是在某一次执行.ChildItem(...).Click操作的时候找不到ChildItem对象,可以通过输出对象某个属性的方法来进行调试,看看是否程序的逻辑设计有问题,指定的Row,Column在WebTable中所对应的WebElement是否为自己所想要的

Set myDay=Browser("B").Page("P").Frame("F").WebTable("W").ChildItem(myDayRow,myDayColumn,"WebElement",0)

If myDay.GetROProperty("innertext") = iDay and (myDay.GetROProperty("class") = "day" or myDay.GetROProperty("class") = "day weekend") then
   msgbox "找到正确的对象"
   myDay.Click
Else msgbox "未找到正确的对象"
End If
或者直接查看其对象:
msgbox myDay.GetROProperty("innertext")  & vbcrlf & myDay.GetROProperty("class")

[ 本帖最后由 hsjzfling 于 2007-10-10 14:47 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

49#
发表于 2007-10-10 15:18:55 | 只看该作者

回复 44# 的帖子

呵呵~ChildObjects确实可以那样用的,昨天仓促之下尝试的时候不小心犯了个低级错,结果以为是不能那样用。。。后来用其它方法的时候发现修改了那个错,却忘了再试一下ChildObjects了~
QTP封装的对象、方法还是很多的,一个个慢慢研究有点累,需要用哪个方法或某个方法的特定用法的时候才回去认真研究~
已经加了你的MSN,有空可以多交流~
PS:就测试而言,偶还是个刚工作一个月的新手,以后还是有很多不懂的需要请教大家的~
回复 支持 反对

使用道具 举报

该用户从未签到

50#
 楼主| 发表于 2007-10-11 16:01:12 | 只看该作者
to  hsjzfling:
又有新问题了,由于我的OR里只有一个table对象,所以像图中有两个时间选择框的情况下,第二个选择框被打开后,时间依然是第一个在变化,这种情况如何处理呢?而我现在又不想继续添加table对象了,怎么能适应不同的情况呢?
回复 支持 反对

使用道具 举报

该用户从未签到

51#
发表于 2007-10-11 16:32:15 | 只看该作者
如果对象是在不同页面(刷新或者跳转过)的话那很好处理QTP自己能识别,同个页面可以尝试对WebTable对象进行描述性编程,不过不保证一定能行~
建议最好还是老老实实添加对象吧,反正也不是很麻烦~
ps:前几天我也就是为了让对象库简洁好看,就乱搞对象,结果把QTP搞的神经错乱,胡乱认对象了(属性值与对象库中的完全不符合它也认为是一个对象。。。)
回复 支持 反对

使用道具 举报

该用户从未签到

52#
 楼主| 发表于 2007-10-11 16:43:27 | 只看该作者

回复 51# 的帖子

呵呵,因为我们公司很多开发代码都是共享入库,像这些JS之类的东西在很多地方都是直接拿来用的,我想着就是直接把这些对象保存为TSR文件,然后实现方法写成VBS文件以后可以在不同的地方使用。
是不是懒的后果就是这样。呵呵呵
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-9-21 08:32 , Processed in 0.080657 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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