2016-11-15 1 views
1

Je suis relativement nouveau à UFT ainsi que le script VB. J'essaie de vérifier le texte interne de divs à l'intérieur de la boucle For.For Loop donne Object Required Erreur

set getData = Browser("Browser").Page("Page").Object.getElementsByClassName("ClassName") 
'Below line outputs 5' 
msgbox getData.length-1 
'output innertext for all these divs' 
For i=0 to getData.length-1 
     msgbox getData(i).innertext 
Next 

Cela me donne objet Erreur nécessaire sur cette ligne

msgbox getData(i).innertext 

Mon premier et 2ème élément est vide alors que 3,4,5 sont des valeurs non vides. Quand j'écris

msgbox getData(0).innertext 
msgbox getData(1).innertext 
msgbox getData(2).innertext 

Il me donne des résultats appropriés

De plus, je dois vérifier ces données contre une feuille de calcul « données » dans UFT Les pointeurs seraient très utiles. Merci,

+0

'Pour Chaque chose en collection' est un moyen de faire une boucle dans un tableau ou une collection. 'thing' (que vous pouvez appeler n'importe quoi,' obj' peut-être) est le contenu du tableau ou un objet si une collection. –

+0

J'ai également essayé - Pour chaque myData dans getData msgbox myData.innertext .. cela ne fonctionne pas non plus. Il dit, Objct ne supporte pas cette propriété ou méthode à Pour chaque ligne – phpfreak

+0

Par conséquent, découvrez ce que vous avez. Sur vos données faites un 'VarType' et IsEmpty etc. sur votre chose. –

Répondre

1

Précisions nécessaires:

Comme vous souhaitez interroger div texte, est-ce une raison d'utiliser ClassName? Si tel est le cas, vous pouvez utiliser getElementsbyTagName à la place de getElementsByClassName.

Cependant, j'ai amélioré le code et l'adaptation de la requête par n'importe quelle option de nom de tag dans la fonction. Voici.

Dim objResultsDictionary 

Set objResultsDictionary = GetTextContentFromHtmlTag(Browser("title:=Welcome: Mercury Tours").Page("title:=.*"),"div","") 
Msgbox objResultsDictionary.Count 

Result:8 

Set objResultsDictionary = GetTextContentFromHtmlTag(Browser("title:=Welcome: Mercury Tours").Page("title:=.*"),"ClassName","mouseOut") 
Msgbox objResultsDictionary.Count 

Result = 11 

Public Function GetTextContentFromHtmlTag(ByVal BrowserObject,ByVal TagName,ByVal TagValue) 
    Dim objDictionary 
    Dim objCollection 
    Set objDictionary = CreateObject("Scripting.Dictionary") 
    Select Case UCase(TagName) 
     Case "DIV" 
      Set objCollection = BrowserObject.Object.getElementsByTagName(TagName) 
     Case "CLASSNAME" 
      Set objCollection = BrowserObject.Object.getElementsByClassName(TagValue) 
    End Select 
    intDivCount = objCollection.Length 
    If intDivCount > 0 Then 
     For intCounter = 0 To intDivCount 
      If IsObject(objCollection(intCounter)) Then 
       strTagInnerText = objCollection(intCounter).innerText 
       If strTagInnerText <> "" Then 
        objDictionary.Add intCounter,strTagInnerText 
       End If 
      End If 
     Next 
    End If 
    Set GetTextContentFromHtmlTag = objDictionary 
End Function 

Qu'est-ce que vous avez à faire:

Vous devez itérer le dictionnaire et obtenir le InnerText de chaque balise.

+0

Je vais essayer, ça va marcher comme je veux. – phpfreak

0

Il vous donne cette erreur très probablement parce que, il existe divers éléments avec le même nom de classe que div ou divs. Essayez d'utiliser d'autres propriétés.