web对象识别的时候遇到一难题了,求大侠帮忙~
大家好,在这里求教了。我在做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
顶~
上对象的截图~ 其实你的思路是没问题的,这样的问题用索引来解决就挺好,只是实现方法需要再完善一下。你可以用描述性编程找出所有的image:transPlus,然后使用索引定位你要操作的那个对象即可。这样做挺方便,只是有一个问题可能需要楼主注意一下,这里所说的索引不一定就是你说的那个index。我记得QTP里的index是一个全局编号,例如页面上有10个按钮,10个图片,那么最后一个图片的index有可能就是20;我说的索引是指在同类型的对象对列中指定对象的位置,还是刚才的例子,最后一个图片的索引应该是9(因为队列里第一个元素的索引都是从0开始)。如果我记错了,就当我没说吧 可以尝试一下从父对象入手,在其子对象中查找你的目标对象,取到后可尝试点击操作。 谢谢两位给的意见,我考虑了下2楼的建议,如果尝试用查找所有image:transPlus, 这个可以确定的,但是你指的索引时绝对位置吗?如果实现相对位置的话,这个索引的值不是还会变化吗?
3楼的说的简洁了点,我还是有点不明白。。。。:) 如果当前页面增加了一个节点,索引也会动态变化。不过这样也不影响操作吧?只要知道要操作的是第几个就行了 主要是对象Ordinal identifier, index就发生了动态变化,所以不能用INDEX或者location去确定具体的对象了 1. 可以从所有的image对象中查找,但是有个问题是不容易确定你的目标对象,因为它和后边的label不容易间建立关联,所以用通常会考虑使用index定位。
但同时带来的风险是会由于image对象的增加从而扰乱原有顺序。
2. 可以看到它的直接父对象是个webtable,那么你就可以尝试在table中搜索你要寻找的这个image对象。因为table潜在的已经给你建立了关联,就是你的目标image对象和后边关联的label是在同一行当中的。这可能需要你多写5-10行代码来查找它。
[ 本帖最后由 RayTM 于 2009-6-9 17:39 编辑 ]
回复 8# 的帖子
从截图来看,整个树形控件是在webtable中,而不是每个节点对应webtable的一行吧? 原帖由 RayTM 于 2009-6-9 17:36 发表 http://bbs.51testing.com/images/common/back.gif1. 可以从所有的image对象中查找,但是有个问题是不容易确定你的目标对象,因为它和后边的label不容易间建立关联,所以用通常会考虑使用index定位。
但同时带来的风险是会由于image对象的增加从而扰乱原有顺序。
2 ...
这个也是我疑惑的。。。为什么截图上显示image时webtable的下一级,但是放到库里的时候却是page下面直接是image,没有webtable这一级了。。。
所以在webtable上操作image好像是不可行的,倒是可以查出在webtable上面有多少个image。
不过index的开始和结束都不是在这个webtable上面的image对象,所以知道了count好像也很难确定到哪个image吧?
回复 9# 的帖子
每个节点是webtable的一行应该是 而且如果我手动的吧image对象放到webtable下面的话,是识别不到image的。 原帖由 zbsczh 于 2009-6-9 17:48 发表 http://bbs.51testing.com/images/common/back.gif这个也是我疑惑的。。。为什么截图上显示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 编辑 ]
回复 13# 的帖子
这个方法还是基于webtable这个对象来操作的吗回复 3# 的帖子
对这个情况有点无语, 技术不到家,好像只有用绝对位置的方法才能解决,因为每个"+"旁是有唯一标示的文本对象的,不是是可以通过绑定对象属性的方法来解决 原帖由 zbsczh 于 2009-6-10 12:15 发表 http://bbs.51testing.com/images/common/back.gif这个方法还是基于webtable这个对象来操作的吗
是的。是从它的父对象入手的。
回复 15# 的帖子
你说的对,每个"+"image对象对应一个文本对象。所以考虑从它们共同的父对象入手。这两个对象的关联就是位于一个webtable中的相同行。回复 17# 的帖子
恩,我尝试下。像第一张图结构中,image是在多层webtable下面,录制完对象,image的直接父对象是page,而webtable却没有被录制进来,需要我手动添加回复 18# 的帖子
是的。有时候你还会发现最靠近image对象的那个webtable用描述性编程也很难定位,由于没有什么有价值的属性。但只要它是稳定的,那就推荐你直接加入到OR中。回复 19# 的帖子
呵呵,加了个父对象,就把image的范围变小了,这样子好像就容易确定了,因为页面上有多处webtable包含多个image, 如果不用webtable做为父对象的话,image之间的index影响无法确定下来。如果用webtable.raw方法的,觉得只是为了识别对象而花很多时间去判断的话也不划算,而且一个脚本里,又多次用到这个对象的操作。。。
页:
[1]
2