For 循环给出 Object Required 错误
For Loop gives Object Required Error
我对 UFT 和 VB 脚本都比较陌生。
我正在尝试检查 For 循环中 div 的内部文本。
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
这让我在这一行出现对象必需错误
msgbox getData(i).innertext
我的第一个和第二个元素是空白的,而 3、4、5 是非空值。
当我写
msgbox getData(0).innertext
msgbox getData(1).innertext
msgbox getData(2).innertext
它给了我正确的结果
我还需要根据 UFT 中的 "Data" 电子表格检查此数据
任何指针都会非常有帮助。
谢谢,
需要说明:
如你想查询div文本,是否有使用ClassName的理由?如果是这样,您可以使用 getElementsbyTagName 而不是 getElementsByClassName。
但是,我增强了代码并通过函数中的任何标签名称选项调整了查询。给你。
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
你需要做的事情:
您必须迭代字典并获取每个标签的内部文本。
它给你这个错误很可能是因为除了 div 或 div 之外,还有许多具有相同 class 名称的元素。
尝试使用其他一些属性。
我对 UFT 和 VB 脚本都比较陌生。 我正在尝试检查 For 循环中 div 的内部文本。
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
这让我在这一行出现对象必需错误
msgbox getData(i).innertext
我的第一个和第二个元素是空白的,而 3、4、5 是非空值。 当我写
msgbox getData(0).innertext
msgbox getData(1).innertext
msgbox getData(2).innertext
它给了我正确的结果
我还需要根据 UFT 中的 "Data" 电子表格检查此数据 任何指针都会非常有帮助。 谢谢,
需要说明:
如你想查询div文本,是否有使用ClassName的理由?如果是这样,您可以使用 getElementsbyTagName 而不是 getElementsByClassName。
但是,我增强了代码并通过函数中的任何标签名称选项调整了查询。给你。
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
你需要做的事情:
您必须迭代字典并获取每个标签的内部文本。
它给你这个错误很可能是因为除了 div 或 div 之外,还有许多具有相同 class 名称的元素。 尝试使用其他一些属性。