我在可重用的操作中有以下VBScript:
'Gather links Browser("1").Navigate "http://InternalWebmail/something/inbox.nsf" set oDesc = Description.Create() oDesc("micclass").Value = "Link" set links = Browser("1").Page("Webmail").ChildObjects(oDesc) Dim links2 links2 = "" 'Filter out irrelevant links For i = 0 To links.Count-1 If lcase(trim(links(i).GetROProperty("text"))) = lcase(trim(DataTable("ExpectedFrom", dtGlobalSheet))) Then links2 = links2 + "," + links(i).GetROProperty("url") End If Next Dim final final = split(mid(links2,2),",") 'Remove leading comma and split into array 'For each link (i.e. for each E-mail received): 'Effectively giving a reusable action an input parameter, I hope For i = 0 To final.Count - 1 'error: Object Required DataTable("url","CheckHeader") = final(i) RunAction "CheckHeader", oneIteration Next
一切都运行得很好,直到我得到片段底部的循环声明.在那里,QTP给了我一个错误"Object Required"并且拒绝详细说明.
虽然我在进入循环之前尝试将其设置为0,但我的前导值为58.
final是一个包含6个字符串的数组,每个字符串都是一个 都有价值.
如果我是msgbox(final(2)),我认为final(2)的值是有效的.
isobject(final(1))= false
final(1)具有正确的值
msgbox(final is nothing)和msgbox(final(1)什么都没有)产生相同的错误.
它看起来好像数组是null但不知何故数组有成员?这怎么可能?QTP在谈论什么?
在vbscript数组中没有Count
属性,你应该使用UBound
x = split("how now brown cow") ' MsgBox x.Count ' error MsgBox UBound(x) ' 3
第.Count
一个循环的原因是ChildObjects
不返回数组,它返回一个COM集合对象.这也是为什么Set
在分配时必须使用语句links
而不是在分配时使用语句的原因final
.