QTP:检查如果字符串数组包含值

时间:2012-08-09 08:38:12

标签: vbscript automated-tests qtp

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

问题在于下面的代码,第一个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'也是正确的字符串。 对此问题的任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:13)

检查字符串数组是否包含值的简明方法是合并FilterUBound函数:

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

缺点:您没有获得找到元素的索引

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

答案 2 :(得分: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

答案 3 :(得分:0)

@gbonetti-您的代码为以下示例返回“找到”。我认为是因为@Giacomo Lacava提到的原因。

    a = Array("18")

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

答案 4 :(得分:-2)

嗨,如果你检查确切的字符串而不是数组中的子字符串使用StrComb,因为如果使用InStr然后如果array =“apple1”,“apple2”,“apple3”,“apple”和choice =“apple”那么所有将每个数组项的返回传递。

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