51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4562|回复: 20
打印 上一主题 下一主题

[求助] web对象识别的时候遇到一难题了,求大侠帮忙~

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-6-9 17:06:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,在这里求教了。
我在做web自动化测试的时候录取一个对象 Image "+", 当前页面有多个"+"对象,而且属性都是一样,录取的属性都是通过Index的方法来识别的。
如果在这个页面增加一条记录的话"+"对象会增加一个,所有"+"对象的index会发生变化,所以不能通过index和location方法来识别。
我尝试用相对坐标的方法,但是这个对象的上一层是Page, Page好像不支持 click的方法。
我也用过录制虚拟对象的方法,但是好像也还是基于"+"这个对象的,应该也是行不通。
不知道哪位大侠又这方面的经验,告诉小弟,不胜感激。。
上点图和代码
录取的对象都是Image类型的。
Image("ExpandednessOfCollateralAssets"), Image("ExpandednessOfAssetHoldingsAndValuation")现在都只有通过index的方法来识别

Browser("Reports").Page("SavedReports").Image("ExpandednessOfCollateralAssets").Click
Browser("Reports").Page("SavedReports").Image("ExpandednessOfAssetHoldingsAndValuation").Click

本帖子中包含更多资源

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

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

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2009-6-9 17:08:19 | 只看该作者

顶~

上对象的截图~

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2009-6-9 17:13:24 | 只看该作者
其实你的思路是没问题的,这样的问题用索引来解决就挺好,只是实现方法需要再完善一下。
你可以用描述性编程找出所有的image:transPlus,然后使用索引定位你要操作的那个对象即可。这样做挺方便,只是有一个问题可能需要楼主注意一下,这里所说的索引不一定就是你说的那个index。我记得QTP里的index是一个全局编号,例如页面上有10个按钮,10个图片,那么最后一个图片的index有可能就是20;我说的索引是指在同类型的对象对列中指定对象的位置,还是刚才的例子,最后一个图片的索引应该是9(因为队列里第一个元素的索引都是从0开始)。如果我记错了,就当我没说吧
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2009-6-9 17:17:45 | 只看该作者
可以尝试一下从父对象入手,在其子对象中查找你的目标对象,取到后可尝试点击操作。
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2009-6-9 17:24:04 | 只看该作者
谢谢两位给的意见,我考虑了下2楼的建议,如果尝试用查找所有image:transPlus, 这个可以确定的,但是你指的索引时绝对位置吗?如果实现相对位置的话,这个索引的值不是还会变化吗?
3楼的说的简洁了点,我还是有点不明白。。。。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2009-6-9 17:32:49 | 只看该作者
如果当前页面增加了一个节点,索引也会动态变化。不过这样也不影响操作吧?只要知道要操作的是第几个就行了
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2009-6-9 17:36:45 | 只看该作者
主要是对象Ordinal identifier, index就发生了动态变化,所以不能用INDEX或者location去确定具体的对象了
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2009-6-9 17:36:53 | 只看该作者
1. 可以从所有的image对象中查找,但是有个问题是不容易确定你的目标对象,因为它和后边的label不容易间建立关联,所以用通常会考虑使用index定位。
但同时带来的风险是会由于image对象的增加从而扰乱原有顺序。
2. 可以看到它的直接父对象是个webtable,那么你就可以尝试在table中搜索你要寻找的这个image对象。因为table潜在的已经给你建立了关联,就是你的目标image对象和后边关联的label是在同一行当中的。这可能需要你多写5-10行代码来查找它。

[ 本帖最后由 RayTM 于 2009-6-9 17:39 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2009-6-9 17:45:47 | 只看该作者

回复 8# 的帖子

从截图来看,整个树形控件是在webtable中,而不是每个节点对应webtable的一行吧?
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2009-6-9 17:48:08 | 只看该作者
原帖由 RayTM 于 2009-6-9 17:36 发表
1. 可以从所有的image对象中查找,但是有个问题是不容易确定你的目标对象,因为它和后边的label不容易间建立关联,所以用通常会考虑使用index定位。
但同时带来的风险是会由于image对象的增加从而扰乱原有顺序。
2 ...

这个也是我疑惑的。。。为什么截图上显示image时webtable的下一级,但是放到库里的时候却是page下面直接是image,没有webtable这一级了。。。
所以在webtable上操作image好像是不可行的,倒是可以查出在webtable上面有多少个image。
不过index的开始和结束都不是在这个webtable上面的image对象,所以知道了count好像也很难确定到哪个image吧?
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2009-6-9 17:49:54 | 只看该作者

回复 9# 的帖子

每个节点是webtable的一行应该是

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

该用户从未签到

12#
 楼主| 发表于 2009-6-9 17:54:00 | 只看该作者
而且如果我手动的吧image对象放到webtable下面的话,是识别不到image的。
回复 支持 反对

使用道具 举报

该用户从未签到

13#
发表于 2009-6-9 18:13:52 | 只看该作者
原帖由 zbsczh 于 2009-6-9 17:48 发表

这个也是我疑惑的。。。为什么截图上显示image时webtable的下一级,但是放到库里的时候却是page下面直接是image,没有webtable这一级了。。。
所以在webtable上操作image好像是不可行的,倒是可以查出在webtable上 ...


你调试一下看看:
Function GetImageObj(labelvalue)
        Set ObjWT = Browser("creationtime:=0").page("index:=0").WebTable(attribute:=value)'首先获取image最近的顶层webtable   你也可以把webtable直接加入对象库

        For i= 1 to ObjWT.RowCount
                For j= 1 to ObjWT.ColumnCount(i)
                        index = 0
                        While index < ObjWT.ChildItemCount(i,j,"WebElement")
                                Set ObjL = ObjWT.ChildItem(i, j, "WebElement", 0)
                                If ObjL.GetROProperty("innerhtml") = labelvalue Then'根据label定位行列
                                        Set GetImageObj = ObjWT.ChildItem(i, j, "Image", 0)'在此处获取image对象
                                        Exit Function
                                End If
                        Wend
                Next
        Next
End Function

Set ObjImage = GetImageObj("Report type: Collateral Assets")
ObjImage.Click
Set ObjImage = nothing

[ 本帖最后由 RayTM 于 2009-6-10 14:01 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

14#
 楼主| 发表于 2009-6-10 12:15:49 | 只看该作者

回复 13# 的帖子

这个方法还是基于webtable这个对象来操作的吗
回复 支持 反对

使用道具 举报

该用户从未签到

15#
 楼主| 发表于 2009-6-10 12:20:43 | 只看该作者

回复 3# 的帖子

对这个情况有点无语, 技术不到家,好像只有用绝对位置的方法才能解决,因为每个"+"旁是有唯一标示的文本对象的,不是是可以通过绑定对象属性的方法来解决
回复 支持 反对

使用道具 举报

该用户从未签到

16#
发表于 2009-6-10 13:27:00 | 只看该作者
原帖由 zbsczh 于 2009-6-10 12:15 发表
这个方法还是基于webtable这个对象来操作的吗

是的。是从它的父对象入手的。
回复 支持 反对

使用道具 举报

该用户从未签到

17#
发表于 2009-6-10 13:33:15 | 只看该作者

回复 15# 的帖子

你说的对,每个"+"image对象对应一个文本对象。所以考虑从它们共同的父对象入手。这两个对象的关联就是位于一个webtable中的相同行。
回复 支持 反对

使用道具 举报

该用户从未签到

18#
 楼主| 发表于 2009-6-10 13:47:13 | 只看该作者

回复 17# 的帖子

恩,我尝试下。像第一张图结构中,image是在多层webtable下面,录制完对象,image的直接父对象是page,而webtable却没有被录制进来,需要我手动添加
回复 支持 反对

使用道具 举报

该用户从未签到

19#
发表于 2009-6-10 14:04:28 | 只看该作者

回复 18# 的帖子

是的。有时候你还会发现最靠近image对象的那个webtable用描述性编程也很难定位,由于没有什么有价值的属性。但只要它是稳定的,那就推荐你直接加入到OR中。
回复 支持 反对

使用道具 举报

该用户从未签到

20#
 楼主| 发表于 2009-6-11 11:57:01 | 只看该作者

回复 19# 的帖子

呵呵,加了个父对象,就把image的范围变小了,这样子好像就容易确定了,因为页面上有多处webtable包含多个image, 如果不用webtable做为父对象的话,image之间的index影响无法确定下来。如果用webtable.raw方法的,觉得只是为了识别对象而花很多时间去判断的话也不划算,而且一个脚本里,又多次用到这个对象的操作。。。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-9-25 17:20 , Processed in 0.088060 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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