2016-11-15 9 views
1

私はVBスクリプトと同様にUFTも比較的新しいです。 Forループ内のdivのinnertextをチェックしようとしています。Forループでオブジェクトに必要なエラーが発生する

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 

これは3,4,5が空値でありながら、私の第一及び第二の要素は空白である私は、この行に必要なエラーオブジェクト

msgbox getData(i).innertext 

を与えます。私は

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

を書くとき それは私に適切な結果を与える

私はさらに任意のポインタは非常に参考になるUFT の「データ」のスプレッドシートに対して、このデータを確認する必要があります。 おかげで、必要な

+0

「For each thing in collection」は、配列またはコレクションをループする方法です。 'thing'(これはおそらく' obj'と呼ぶことができます)は、配列の内容、またはコレクションの場合はオブジェクトです。 –

+0

私も試しました - getDataの各myDataについて msgbox myData.innertext ..それも動作しません。 ObjctはFor Each行でこのプロパティまたはメソッドをサポートしていません。 – phpfreak

+0

したがって、あなたが持っているものを見つけてください。あなたのデータでは、あなたのものに 'VarType'とIsEmptyなどを行います。 –

答えて

1

明確化:

あなたはdivのテキストを照会したいと思いとしては、いかなる理由がクラス名を使用することですか?そうであれば、getElementsByClassNameの代わりにgetElementsbyTagNameを使用できます。

しかし、コードを拡張し、関数内の任意のタグ名オプションでクエリを適合させました。どうぞ。

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 

あなたは何をすべきか:

あなたは辞書を反復処理し、各タグのInnerTextプロパティを取得する必要があります。

+0

私はそれを試してみる、それは私が望むように動作するように見えます。 – phpfreak

0

これはおそらく、divやdiv以外の同じクラス名を持つさまざまな要素があるためです。 他のプロパティを使用してみてください。

関連する問題