GetCellData(I,J)函数的问题
本帖最后由 lilinuo_2011 于 2011-2-14 14:45 编辑最近一直有一个问题困扰着我,以下是用qtp进行自动化测试时碰到的一个问题:
Browser("TCC Control").Page("TCC Control").WebList("userName").Select "ADMIN"
Browser("TCC Control").Page("TCC Control").WebEdit("password").SetSecure "4d54dd6a5e4979de98068a8fee420eb0936a"
Browser("TCC Control").Page("TCC Control").WebButton("登录").Click
Browser("TCC Control_2").Dialog("Windows Internet Explorer").WinButton("是(Y)").Click
Browser("TCC Control").Page("TccBus SystemEsb").Frame("menuFrame").Link("方法访问日志管理").Click
Browser("TCC Control").Page("TccBus SystemEsb").Frame("bodyFrame").WebEdit("startTime").Set "2011-01-04 00:00:00"
Browser("TCC Control").Page("TccBus SystemEsb").Frame("bodyFrame").WebEdit("endTime").Set "2011-01-26 00:00:00"
Browser("TCC Control").Page("TccBus SystemEsb").Frame("bodyFrame").WebButton("查询").Click
Set obj = Browser("TCC Control").Page("TccBus SystemEsb").Frame("query_frame").WebTable("WebTable")
'获取表格的行数
RowCount =obj.RowCount
For I = 2 To RowCount
For J = 1 To obj.ColumnCount(I)
Dim ExampleName
'获取表格中的某个单元格的数据
ExampleName = obj.GetCellData(I,J)
Msgbox ExampleName
Next
Next
Browser("TCC Control").Page("TccBus SystemEsb").Sync
Browser("TCC Control").Close
Browser("TCC Control").Dialog("Windows Internet Explorer").WinButton("确定").Click
但是问题是:“方法访问日志管理”界面的表格,qtp的函数GetCellData(I,J)
会报出“未指定的错误”,代码本身应该并没有问题并没有问题…
但不清楚怎么解决,前提是GetCellData(I,J)的I和J都是没有问题的,obj.RowCount和obj.ColumnCount(I)取得也都没有问题......我都开始怀疑是否是QTP本身的一个BUG,目前使用的QTP版本是9.2,操作系统使用的是Microsoft Windows XP Professional 版本 2002 Service Pack 3 ,ie版本:7.0.5730.13......
这个问题初步判断是和开发写得界面有关,想问一下碰到如此复杂的界面如何使用脚本进行自动化测试,遍历表格中的所有数据,因为用目前的方式看来读取是有困难的... 我觉的没问题 不只是一层webtable吧
GetCellData的参数能不能输入4个坐标来定位?我忘了。。
或者用其他方法获取吧,spy找到这些值的公共属性后用 index来定位 dim 干嘛在循环里边呢? 移到外边,还有 出错是 i j 值是多少?
是不是 在取第一个值的时候 就报错了? 确实是在取第一个值时报错的...
这个问题初步判断是由于网页中存在多个table,而且每个table标签的属性相仿,qtp在识别的时候识别到第一个table后找不到我所要的cell单元的原因造成的...
问题现在就变成了在不更改开发代码的情况下如何在多层table存在的界面中使用getcelldata()获得我所想要的数据?因为用描述性编程貌似也是会找到多个对象的...
本来想通过
set webtable= Description.Create()
webtable("html tag").Value = "TABLE",但是一碰到
webtable("html tag").Value = "TABLE"
就一直报出:General run error的错误
然后想用
NUM = Browser("TCC Control").Page("TccBus SystemEsb").Frame("query_frame").ChildObjects().Count()
for i = 1 to num
.....
next
来定位我想要的那个table,但是到
NUM = Browser("TCC Control").Page("TccBus SystemEsb").Frame("query_frame").ChildObjects().Count()
就报错了... 但是,有一点,我仍然比较困惑的是既然
RowCount和obj.ColumnCount(I)都能取正确,说明这个obj是识别正常的,但是为什么到它要用到getcelldata()函数的时候却发生了问题?? 具体失败的代码如下:
Dim oWebTableDesc
Set oWebTableDesc = Description.Create()
oWebTableDesc("html tag").value = "TABLE"
Set oTableList = Browser("TCC Control").Page("TccBus SystemEsb").Frame("query_frame").ChildObjects(oWebTableDesc)
for i=0 to oTableList.Count()-1
print oTRAndTDList (i).GetROProperty("html tag")
Next Set obj = Browser("TCC Control").Page("TccBus SystemEsb").Frame("query_frame").WebTable("WebTable")
index = obj.GetROProperty("source_index")
msgbox index
.....
Dim ExampleName
Set objReal = Browser("TCC Control").Page("TccBus SystemEsb").Frame("query_frame").WebTable("source_index:=" & index)
For I = 2 To RowCount
For J = 1 To obj.ColumnCount(I)
'获取表格中的某个单元格的数据
ExampleName = objReal.GetCellData(I,J)
Msgbox ExampleName
Next
Next
也会在ExampleName = objReal.GetCellData(I,J)
处报出“未指定的错误”,msgbox index
输出的是5~~ 本帖最后由 lilinuo_2011 于 2011-2-15 13:31 编辑
还有一点,大家都知道,我们平时需要查看对象的封装属性可以打开qtp的spy,然后选择我们需要查看的对象,SPY中即会显示出此对象的属性。
但是我要getcelldata的这个表格,我用spy去获取时properties和methods都是空,是不是这个也会造成qtp在识别对象时的问题?????
Object Spy定位到你要的那张表,properties和methods都是空?截个图看看. 你为啥非要用html tag这个属性?micclass加上text不能定位么?
webtable("html tag").Value = "TABLE",但是一碰到
webtable("html tag").Value = "TABLE" 我找了个我这边的环境试了下, 这么写可以输出表格上的value的, 代码如下:
Set obj1= Browser("CreationTime:=0").Page(":=").Frame("name:=businessfrm").WebTable("html tag:=TABLE", "Index:=1")
For i=2 to obj1.RowCount
For j=1 to obj1.ColumnCount(i)
aaa=obj1.GetCellData(i,j)
msgbox "aaa="&aaa
Next
Next
不过spy看的时候property和methods都有的, 不知LZ的情况为啥看到的是空的 Set obj = Browser("TCC Control").Page("TccBus SystemEsb").Frame("query_frame").WebTable("WebTable")
micclass = obj.GetROProperty("micclass")
text = obj.GetROProperty("text")
....
Dim ExampleName
Set objReal = Browser("TCC Control").Page("TccBus SystemEsb").Frame("query_frame").WebTable("micclass:="&micclass,"text:="&text)
For I = 2 To objReal.RowCount
For J = 1 To objReal.ColumnCount(I)
'获取表格中的某个单元格的数据
ExampleName = objReal.GetCellData(I,J)
Msgbox ExampleName
NEXT
NEXT
结果在For I = 2 To objReal.RowCount
报出如下的错误:
Cannot identify the object "[ WebTable ]" (of class WebTable). Verify that this object's properties match an object currently displayed in your application.
Line (59): "For I = 2 To objReal.RowCount". LZ还是需添加index来识别吧 Set obj = Browser("TCC Control").Page("TccBus SystemEsb").Frame("query_frame").WebTable("WebTable")
index = obj.GetROProperty("index")
msgbox index
.....
Dim ExampleName
Set objReal = Browser("TCC Control").Page("TccBus SystemEsb").Frame("query_frame").WebTable("index:=" & index)
For I = 2 To RowCount
For J = 1 To obj.ColumnCount(I)
'获取表格中的某个单元格的数据
ExampleName = objReal.GetCellData(I,J)
Msgbox ExampleName
Next
Next
是无效的,msgbox index
输出的是空...我怀疑用index是否有效...我连x/y都尝试过了,也无效,x=0,y=0 回复 15# lilinuo_2011
index属性是不能用GetROProperty来输出的
LZ要么用for循环把webtable("html tag:=TABLE","index:="&i)一个个输出试试 index是不能用GetROProperty("index") 来获取的。
另外,你那边为什么表的properties和methods都是空这才是问题所在。properties为空,就导致了用描述性编程来识别的那张表时的失败。 我让开发发生类似问题的另一个界面中在table标签中加入id属性后,因为该界面改动更为简单,然后仍然没有解决类似问题...
Browser("TCC Control").Page("TCC Control").WebList("userName").Select "ADMIN"
Browser("TCC Control").Page("TCC Control").WebEdit("password").SetSecure "4d5a2ba03734c17e19ff325597acb45621e6"
Browser("TCC Control").Page("TCC Control").WebButton("登录").Click
Browser("TCC Control_2").Dialog("Windows Internet Explorer").WinButton("是(Y)").Click
Browser("TCC Control").Page("TccBus SystemEsb").Frame("menuFrame").Image("展开/折叠").Click
Browser("TCC Control").Page("TccBus SystemEsb").Frame("menuFrame").Link("运行情况").Click
Browser("TCC Control").Page("TccBus SystemEsb").Frame("bodyFrame").Link("更多......").Click
Set obj = Browser("TCC Control").Page("TccBus SystemEsb").Frame("bodyFrame_2").WebTable("html id:=_table3")
'获取表格的行数
RowCount =obj.RowCount
For I = 2 To RowCount
For J = 1 To obj.ColumnCount(I)
'获取表格中的某个单元格的数据
ExampleName = obj.GetCellData(5,5)
msgboxExampleName
Next
Next
Browser("TCC Control").Page("TccBus SystemEsb").Frame("bodyFrame_2").Link("下页").Click
Browser("TCC Control").Page("TccBus SystemEsb").Sync
Browser("TCC Control").Close
Browser("TCC Control").Dialog("Windows Internet Explorer").WinButton("确定").Click
在“ExampleName = obj.GetCellData(5,5)”还是碰到了类似的报错问题:未指定的错误
真不知道怎么去解决这个问题... 1楼主真是的,干嘛纠结于webtable,
spy下,单元格,看看对象层次结构是什么?
2再有,就是新建个对象库,将webtalbe加入,然后看属性是什么? 都有那些属性。
有的时候,spy的时候,属性不全,这样可以看都有那些属性,
3假如,没有属性,那么 看看单元格的层次结构,然后描述编程,找到该对象,取值,不久ok了?
继续交流! 楼主,最好是,将页面,放上来,这样大家可以帮你看看源代码。
一张图片说明不了什么问题,
页:
[1]
2