【原创随笔】QTP对象中无默认index属性使用SetTOProperty方法的办法
Posted on 2012-04-10 09:01 James Cai 阅读(1360) 评论(0) 收藏 举报对于拥有index属性的对象来说,我们可以轻松的使用SetTOProperty函数进行遍历操作
但是并不是所有的对象都拥有index属性,下面的两种方法可以解决没有index属性而需要进行遍历操作的问题
1.For循环+描述性编写
案例对象:linkCosAcdy,操作链接‘选择’
案例说明:linkCosAcdy对象没有index属性,分析属性后,有规律可循的参数就只有html id:grvCollegialAuditAdvisorArrange_ctl02_linkBtn
案例操作:
页面中类似的操作链接的html id属性中均按照ctl03,ctl04排序,所以我们使用for循环+描述性编写解决
iRowCount=Browser("平台").Page("平台").Frame("mainFrame").WebTable("学号").RowCount
For i=2 to iRowCount
If Browser("平台").Page("平台").Frame("mainFrame").Link("html id:=grvCollegialAuditAdvisorArrange_ctl0"&i&"_linkBtn").GetROProperty("text")="选择"
Then
With Browser("平台").Page("平台").Frame("mainFrame")
.Link("html id:=grvCollegialAuditAdvisorArrange_ctl0"&i&"_linkBtn").Click
2.For循环+添加index属性
与上面同样的案例,在不使用描述性编程的情况下可以在Ordinal identifier的type,value中选择index,并赋予值为0
但是需要注意的是,由于linkCosAcdy对象天生没有index属性,所以在编写代码的过程中不能使用SetTOProperty(index,i),为什么呢?因为QTP在识别对象的时候,当你操作过第一个linkCosAcdy对象后,QTP在页面中就无法识别它了(因为使用的name改变了),QTP再识别linkCosAcdy对象时,它的index依然是0,不会自动变成1!但是相同的linkCosAcdy对象index依然按照0,1,2..排序下去,只是第一个发生了变化


所有代码如下:
For i=0 to iRowCount-1
Browser("平台").Page("平台").Frame("mainFrame").Link("linkCosAcdy").SetTOProperty "index",0
If Browser("平台").Page("平台").Frame("mainFrame").Link("linkCosAcdy").GetROProperty("text")="选择" Then
With Browser("平台").Page("平台").Frame("mainFrame")
.Link("linkCosAcdy").Click
.WebEdit("texTeacherName").Set datatable("AcdyName","Global")
.WebButton("wbtSaveAcdy").Click
End With
Browser("平台").Dialog("来自网页的消息").WinButton("确定").Click
End If
Next
浙公网安备 33010602011771号