2009-02-17 6 views
4

je le VBScript suivant dans une action réutilisable:QTP: Object erreurs obligatoires lorsque l'objet est valide

'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 

Tout fonctionne très bien, jusqu'à ce que je la déclaration de la boucle en bas de l'extrait. Là, QTP me donne une erreur "Object Required" et refuse d'élaborer.

  • J'ai une valeur d'avance de 58, bien que j'ai essayé de le mettre à 0 avant d'entrer dans la boucle. Final est un tableau de 6 chaînes, chacune étant une adresse URL. Tous ont une valeur.
  • Si je msgbox (final (2)), je vois la valeur de final (2) comme étant valide.
  • IsObject (final (1)) = false
  • final (1) présente la valeur correcte
  • msgbox (finale est rien) et msgbox (final (1) est rien) donnent la même erreur.

Il semble que le tableau soit nul mais que le tableau possède des membres? Comment est-ce possible? De quoi parle QTP?

Répondre

8

Dans les tableaux vbscript n'ont pas une propriété Count, vous devez utiliser UBound

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

La raison .Count a travaillé pour la première boucle est que ChildObjects ne retourne pas un tableau, elle retourne un objet de collection COM. C'est aussi pourquoi vous avez dû utiliser l'instruction Set lors de l'affectation à links mais pas lors de l'affectation à final.

+0

Oui, ça a marché; Bien que maintenant je me demande pourquoi cela a fonctionné dans la première boucle. – tsilb

+1

Bon point, j'ai édité ma réponse pour expliquer pourquoi la première boucle a fonctionné. – Motti

+0

Excellente réponse, Motti. – TheBlastOne

Questions connexes