QTP: Object Обязательные ошибки, когда Object действителен - PullRequest
4 голосов
/ 17 февраля 2009

У меня есть следующий 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 выдает ошибку «Требуется объект» и отказывается уточнять.

  • у меня есть ведущее значение 58, хотя я пытался установить его в 0 до входа в цикл.
  • final - это массив из 6 строк, каждая из которых является URL. Все имеют значение.
  • Если я msgbox (final (2)), я вижу значение final (2) как действительное.
  • isobject (final (1)) = false
  • final (1) имеет правильное значение
  • msgbox (final - ничего) и msgbox (final (1) - ничто) выдают ту же ошибку.

Выглядит так, как будто массив равен нулю, но каким-то образом в массиве есть члены? Как это возможно? О чем говорит QTP?

1 Ответ

8 голосов
/ 17 февраля 2009

В массивах vbscript, не имеющих свойства Count, следует использовать UBound

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

Причина, по которой .Count работал в первом цикле, заключается в том, что ChildObjects не возвращает массив, он возвращает объект коллекции COM. По этой же причине вам пришлось использовать оператор Set при присваивании links, но не при присваивании final.

...