6

我无法让我的测试用例正确运行。

问题出在下面的代码中,确切地说是第一个 if 语句。QTP 抱怨需要一个对象

For j=Lbound(options) to Ubound(options)
    If options(j).Contains(choice) Then
        MsgBox("Found " & FindThisString & " at index " & _
        options.IndexOf(choice))
    Else
        MsgBox "String not found!"
    End If
Next

当我检查数组时,我可以看到它已正确填充,并且 'j' 也是正确的字符串。对此问题的任何帮助将不胜感激。

4

4 回答 4

16

VBScript 中的字符串不是对象,因为它们没有成员函数。应该使用该InStr函数来搜索子字符串。

For j=Lbound(options) to Ubound(options)
    If InStr(options(j), choice) <> 0 Then
        MsgBox("Found " & choice & " at index " & j
    Else
        MsgBox "String not found!"
    End If
Next
于 2012-08-09T11:35:06.653 回答
15

检查字符串数组是否包含值的一种简洁方法是结合FilterUBound函数:

If Ubound(Filter(options, choice)) > -1 Then
    MsgBox "Found"
Else
    MsgBox "Not found!"
End If

缺点:你没有找到元素所在的索引

优点:它很简单,您可以使用通常的包含和比较参数来指定匹配条件。

于 2014-09-03T04:09:14.187 回答
0
Function CompareStrings ( arrayItems , choice )
For i=Lbound(arrayItems) to Ubound(arrayItems)

' 0 - for binary comparison "Case sensitive
' 1 - for text compare not case sensitive
If StrComp(arrayItems(i), choice , 0) = 0 Then

MsgBox("Found " & choice & " at index " & i

Else

MsgBox "String not found!"

End If

Next

End Function
于 2014-01-21T13:58:58.083 回答
-1

嗨,如果您检查数组中的确切字符串而不是子字符串,请使用 StrComb,因为如果使用 InStr,那么如果 array = "apple1" 、 "apple2" 、 "apple3" 、 "apple" 和choice = "apple" 那么所有将返回 pass for每个数组项。

Function CompareStrings ( arrayItems , choice )

For i=Lbound(arrayItems) to Ubound(arrayItems)

    ' 1 - for binary comparison "Case sensitive
    ' 0 - not case sensitive
    If StrComp(arrayItems(i), choice , 1) = 0 Then

    CompareStrings = True
    MsgBox("Found " & choice & " at index " & i

    Else

    CompareStrings = False
    MsgBox "String not found!"

    End If

Next

End Function
于 2014-01-21T13:05:04.377 回答