2012-08-09 144 views
5

我無法正確運行測試用例。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」也是正確的字符串。 任何有關這個問題的幫助將不勝感激。

+0

'options'的內容是什麼?是這些字符串,某種測試對象(如果是的話)? – Motti 2012-08-09 09:52:36

+0

我正在填充如下所示的選項: 'options(0)=「welcome」'這是字符串,如果我是正確的。 它是一個固定大小的陣列。 – L337BEAN 2012-08-09 09:58:46

回答

13

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 
+0

啊是的。這解釋了我遇到的問題。感謝您提供豐富的答案。 – L337BEAN 2012-08-09 12:15:50

-2

你好,如果你在陣列中使用StrComb檢查精確的字符串沒有子字符串,因爲如果使用InStr函數那麼如果數組=「apple1」,「apple2」,「apple3」,「蘋果」和選擇=「蘋果「然後所有人都會爲每個陣列項目返回通過。

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 
+0

應該使用常量vbTextCompare/vbBinaryCompare(http://msdn.microsoft.com/en-us/library/05z4sfc7%28v=vs.84%29.aspx);而不是(錯誤!)幻數。在循環中設置返回值*是沒有意義的。 – 2014-01-21 13:31:46

+0

對不起..你是對的...還有特殊的循環...謝謝 – 2014-01-21 13:55:00

+0

對不起..你是對的循環...但我已經嘗試傳遞0和1它似乎工作正常..我認爲,而不是vbTextCompare/vbBinaryCompare 0和1工作正常..謝謝 – 2014-01-21 14:07:09

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 
+0

現在你的函數不是函數,你仍然不使用常量。請刪除此「答案」並更正以前的答案(包含指向StrComp()的有價值指針)。 – 2014-01-21 14:09:59

10

一個簡潔的方式來檢查字符串數組包含一個值是將FilterUBound功能組合:

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

缺點:你沒有得到的指標,其中元素被發現

優點:它很簡單,你有通常的包含和比較參數來指定匹配標準。

+1

如果我正確理解文檔,這個解決方案的問題是Filter將返回所有選擇是子字符串的元素。例如。使用包含「Dune」,「Dunebug」,「Blah」和choice =「Dune」的數組時,它將返回兩個項目。 – 2016-04-06 13:26:59

相關問題