51Testing软件测试论坛
标题:
无聊,发个根据字段名称找到其对应的Web控件的小方法
[打印本页]
作者:
mstiunicon
时间:
2008-7-8 17:33
标题:
无聊,发个根据字段名称找到其对应的Web控件的小方法
Function webEditObj(pageObj, fieldName)
'功 能:根据指定的页面文字,找到其所对应的WebEdit输入框,默认查找页面上符合条件的第一个输入框
'传入参数: pageObj 页面对象
' fieldName 要查找的字段信息,注意不要添加冒号,本方法会自动添加中文或英文的冒号
'实现步骤:1 根据传入的字段名称,找到包含该字段的WebTable对象
' 2 根据WebTable对象,找到包含指定字段信息的单元格,记录其行数和列数
' 3 列数+1 就是要找的输入框所在的单元格
'使用方法:
' Set curPage = Browser("creationTime:=1").Page("index:=0")
' webEditObj(curPage,"客户名称").Set "01-0003"
Set descObj = description.Create()
descObj("html tag").value = "table"
descObj("innertext").value =".*"& fieldName&"(:|:).*"
Set allDescObjs = pageObj.childObjects(descObj)
objsCount = allDescObjs.count()
For i= 0 to objsCount-1
Set webTableObj = allDescObjs(i)
webTableObj.highLight
rows = webTableObj.rowCount
For rowNO =1 to rows
cols = webTableObj.columnCount(rowNO)
For colNO = 1 to cols
temp = webTableObj.getCellData(rowNO,colNO)
reporter.ReportEvent micDone,rowNO&","&colNO,temp
If (trim(temp) = fieldName&":") or (trim(temp) = fieldName&":") Then
Set webEditObj = webTableObj.childItem(rowNO,colNO+1,"WebEdit",0)
Exit Function
End If
Next
Next
Next
End Function
Function webObj(pageObj,objClass, fieldName,indexNO)
'功 能:根据指定的页面文字,找到其后一个单元格的指定的Web控件。如果页面上有多个相同名字的页面文字,则根据indexNO来查找
'传入参数:pageObj 页面对象
' objClass 目标控件的类别。如,webEdit,webList....
' fieldName 要查找的字段信息,注意不要添加冒号,本方法会自动添加中文或英文的冒号
' indexNO 如果页面上有多个相同文字的字段,默认取第一个,如果指定了indexNO,那么取指定的第indexNO个字段
'实现步骤:1 根据传入的字段名称,找到包含该字段的WebTable对象
' 2 根据WebTable对象,找到包含指定字段信息的单元格,记录其行数和列数
' 3 列数+1 就是要找的输入框所在的单元格
'使用方法:
' Set curPage = Browser("creationTime:=1").Page("index:=0")
' webObj(curPage,"WebList","担保品类别",0).select 1
Set descObj = description.Create()
descObj("html tag").value = "table"
descObj("innertext").value =".*"& fieldName&"(:|:).*"
Set allDescObjs = pageObj.childObjects(descObj)
objsCount = allDescObjs.count()
For i= 0 to objsCount-1
Set webTableObj = allDescObjs(i)
rows = webTableObj.rowCount
For rowNO =1 to rows
cols = webTableObj.columnCount(rowNO)
For colNO = 1 to cols
temp = webTableObj.getCellData(rowNO,colNO)
If (trim(temp) = fieldName&":") or (trim(temp) = fieldName&":") Then
If label = indexNO Then
Set webEditObj = webTableObj.childItem(rowNO,colNO+1,objClass,0)
Exit Function
else
label = label+1
End If
End If
Next
Next
Next
End Function
复制代码
作者:
假装不在
时间:
2008-7-8 23:44
谢谢楼主的奉献精神,学习学习。
楼主,
1,好像写少了个frame中的对象,你这个只是针对了page页面的obj
2,好像写少了对象的可否输入的判断,如果对象为不可输入,在你那句set 的时候,就会抛错了。
3,descObj("innertext").value =".*"& fieldName&"(:|:).*"
这句后边好像是多余的,你把它的值设置为支持正则表达式就可以了。
4,感觉....好像....,是不是可以这么写呢?
Browser("creationTime:=1").Page("index:=0").WebList("index:=0").select 1
为什么不这么写呢?考虑到中文和英文的不同页面的切换,通用性更好,以及既然你都去查它后台的innertext,那怎么不查下index直接确认就好呢?
大家一起讨论讨论,进步进步
作者:
mstiunicon
时间:
2008-7-9 11:10
1 如果页面中有frame的话,传入的pageObj就可以包含Frame对象,如:
set curPage = Browser("creationTime:=0").Page("inde:=0").Frame("name:=XXX")
WebEditObj(curPage,"客户编号").set "xxxx"
2 WebEditObj()这个方法的返回值,是一个WebEdit对象,其使用方法和browser().Page().WebEdit()的使用是一样的,所以判断是否为只读,需要自己来判断
3 descObj("innertext").value =".*"& fieldName&"(:|:).*"
WebEditObj()这个方法,是为了去查找指定字段后面一个单元格中的WebEdit对象。现在的被测系统中,字段名称后面是要求加上中文的冒号的,但是在实际的页面中,经常会有一些前导空格或者后面的空格,所以在前面加了".*"。fieldName是字段名称,传入参数,根据这个关键字来定位WebEdit对象的。
4 index不是Web对象的属性,它只是一个辅助识别的坐标信息,好像不能通过程序来找到index的值。
这次写的两个方法,都不需要去指定Web对象的name属性,而是根据页面上的文字信息来查找,这样可以根据Demo来编写脚本,虽然这样做意义不太大。
作者:
假装不在
时间:
2008-7-9 11:53
我问题可能比较多。
如果是多个table的情况,也就是table下再包括了一个table好像就没办法用了....
很多情况都是table下再有一个table的,这样的情况不可避免的。
作者:
假装不在
时间:
2008-7-9 17:50
讨论才会进步,大家怎么好像都只看不顶呢,一起讨论讨论对自己也不错的。
作者:
mstiunicon
时间:
2008-7-9 17:55
呵呵,代码会遍历所有的Table,如果是Table嵌套table的话,只有最里面的Table才是真正要找的,代码中实际上也做了一些无用功,把那些外围的Table也遍历了。经过测试,这段代码经过几个遍历后,是可以找到目标单元格的。
作者:
假装不在
时间:
2008-7-9 18:02
我早上4了下,好像多table 的情况是会出错的。不知道是不是我操作有误呢,所以才问了这个问题。
作者:
海海豚
时间:
2019-1-22 10:56
谢谢分享,先码后看
作者:
qqq911
时间:
2019-1-22 11:29
感谢分析
作者:
jingzizx
时间:
2019-1-22 12:06
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2