4

再利用可能なアクションに次の 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 は「オブジェクトが必要です」というエラーを表示し、詳しく説明することを拒否します。

  • i の先行値は 58 ですが、ループに入る前に 0 に設定しようとしました。
  • final は 6 つの文字列の配列で、それぞれが URL です。すべてに値があります。
  • msgbox(final(2)) の場合、final(2) の値が有効であることがわかります。
  • isobject (最終 (1)) = false
  • final(1) には正しい値があります
  • msgbox(final は何もない) と msgbox(final(1) は何もない) は同じエラーを生成します。

配列がnullのように見えますが、どういうわけか配列にメンバーがいますか? これはどのように可能ですか?QTPは何について話しているのですか?

4

1 に答える 1

8

vbscript 配列にはCountプロパティがないため、使用する必要がありますUBound

x = split("how now brown cow")
' MsgBox x.Count ' error
MsgBox UBound(x) ' 3

.Count最初のループで機能した理由はChildObjects、配列を返さず、COM コレクション オブジェクトを返すことです。に代入するときはステートメントを使用し、 に代入するときはSetステートメントを使用しなければならなかったのもそのためです。linksfinal

于 2009-02-17T19:11:36.067 に答える