51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 10554|回复: 51
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-9-29 14:55:00 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
一个界面上有 开始时间 和 结束时间 两个日期选择按钮,点击后 弹出日期选择框。
而选择时间的代码我写在一个Sub里了,我的目的是首先将当前年月得到,然后和要选择的年月进行比较然后点击相应的(上一、下一)年、月按钮,最后点击具体哪天!

当选择任意一个时间按钮选择时间成功后,点击另一个按钮选择时间时,
   报错 The test run cannot continue due to an unrecoverable error
报错代码如下:(目的得到当前年月,如九月,2007)
now=Browser("B").Page("P").Frame("F").WebElement("class:=title","html tag:=TD").GetROProperty("innertext")
   其中WebElement("class:=title","html tag:=TD")是选择框中上方的月,年的信息,如 (九月,2007)

请问怎么样解决?

[ 本帖最后由 看雪时节 于 2007-9-29 16:15 编辑 ]

本帖子中包含更多资源

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

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

使用道具 举报

该用户从未签到

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

回复 51# 的帖子

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

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

回复 44# 的帖子

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

使用道具 举报

该用户从未签到

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 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

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

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


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

使用道具 举报

该用户从未签到

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

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

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

使用道具 举报

该用户从未签到

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

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

使用道具 举报

该用户从未签到

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..
回复 支持 反对

使用道具 举报

该用户从未签到

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

回复 42# 的帖子

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

使用道具 举报

该用户从未签到

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我觉得这样的东西去判断然后再操作也同样没有意义。
回复 支持 反对

使用道具 举报

该用户从未签到

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 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

40#
 楼主| 发表于 2007-10-9 16:32:38 | 只看该作者
没人帮我了吗?
回复 支持 反对

使用道具 举报

该用户从未签到

39#
 楼主| 发表于 2007-10-9 11:26:57 | 只看该作者

回复 38# 的帖子

呵呵!问题确实变了,附图中确实是10行,但这个行数是变的,怪我现在做的和附图不同。
由于每个月不同显示的原因,你说的把1-31全部WebElement(没有Link)添加到对象库是不是不现实呢?
现在的这个问题确实匪夷所思啊!我已经没辙了,还有方法没?
Dim oCount
Set oDesc = Description.Create()
oDesc("innertext").Value = "11"
oDesc("class").Value ="day"    ' 注释:这个值有两个"day"、"day weekend",怎么在这写?用正则表达式吗?
Set WECollection=
Browser("B").Page("P").Frame("F").WebTable("W").ChildObjects(oDesc)
oCount = WECollection.Count-1
WECollection(oCount ).Click
回复 支持 反对

使用道具 举报

该用户从未签到

38#
发表于 2007-10-9 11:08:40 | 只看该作者
原帖由 看雪时节 于 2007-10-9 10:49 发表
Browser("B").Page("P").Frame("F").WebTable("W").RowCount的值等于10,而从界面上可以看到只有9行,所以可能Table里面是不是还套有Table!

你的问题好像变了。
确实是10行,没有隐藏,仔细从头数到尾,是10行。

还有关于具体日期,我觉得如果需要的话,可以把1-31全部的link添加到对象库里,或者
link("html tag:=A","text:="&daynumber).click
回复 支持 反对

使用道具 举报

该用户从未签到

37#
 楼主| 发表于 2007-10-9 10:49:06 | 只看该作者

回复 36# 的帖子

Browser("B").Page("P").Frame("F").WebTable("W").RowCount的值等于10,而从界面上可以看到只有9行,所以可能Table里面是不是还套有Table!
回复 支持 反对

使用道具 举报

该用户从未签到

36#
发表于 2007-10-8 22:04:08 | 只看该作者

回复 27# 的帖子

我刚试着用了下ChildItem方法,用来取WebTable中的对象是没有任何问题的,所以你的ChildItem方法应该是没什么问题。还是那样,将参数都设置为常数调试看看~再有问题那只能是程序其它部分,或者说是被测对象的特殊问题~

明天试好了ChildObejcts方法记得说声~这几天休息,在家闲着也怪无聊的
回复 支持 反对

使用道具 举报

该用户从未签到

35#
 楼主| 发表于 2007-10-8 20:07:27 | 只看该作者
原帖由 hsjzfling 于 2007-10-8 19:59 发表
这样多麻烦。。。
可以先试试看我的方法吧

Set oDesc = Description.Create()
oDesc("micclass").Value = "WebElement"
'这里可以用更多属性来提取1-30号的对象
'比如oDesc("innerhtml") = ""   等等
Set  ...

恩,这个方法不错,我当时也想到用ChildObjects方法,可惜没去用,明天早上试试!~~谢谢
回复 支持 反对

使用道具 举报

该用户从未签到

34#
发表于 2007-10-8 19:59:23 | 只看该作者

回复 33# 的帖子

这样多麻烦。。。
可以先试试看我的方法吧

Set oDesc = Description.Create()
oDesc("micclass").Value = "WebElement"
'这里可以用更多属性来提取1-30号的对象
'比如oDesc("innerhtml") = ""   等等
Set WECollection = Browser("B").Page("P").Frame("F").WebTable("W").ChildObjects(oDesc)
maxDate = WECollection.Count   '这里检查下值是否为当月的天数,若不是就要另做下小处理
WECollection(iDay-1).Click   'iDay为要选择的天
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-27 12:32 , Processed in 0.093136 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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