閱讀301 返回首頁    go 技術社區[雲棲]


QTP自動化測試之VBScript基礎

要想使用QTP進行自動化測試,必須了解VBScript這門語言,對於使用過ASP或VB開發的人來說,VBScript已經再熟悉不過了,但是沒有接觸過VBScript的同學也不要灰心,因為這門語言簡單易學。

1. VBScript利器 
2. Hello World 
3. 數據類型 
4. 變量 
5. 常數 
6. 運算符

1. VBScript利器

子曰:工欲善其事,必先利其器。學習一門語言自然是離不開工具及文檔,有好的工具及文檔在手,學習起來也會得心應手。在此,我推薦大家一個很不錯的編輯工具——VbsEdit,該工具既能編輯代碼,又可調試代碼,有不錯的智能提示,還有很多示例代碼。可惜不是免費使用,不過網上已經有綠色版,您可以搜索下載。若你已經安裝了QTP,那麼使用QTP工具也是一個不錯的選擇。參考文檔可以使用在線版《Microsoft Windows腳本技術》,也可以從網上搜索下載CHM文件。

2. Hello World

每種語言的入門都是一樣,從簡單的Hello World開始,我們也不例外。如何使用VBScript來彈出一個對話框顯示Hello World問候語呢?很簡單,代碼如下:

  1. MsgBox("Hello world!")  
  2. MsgBox "Hello world!"  
  3. result = MsgBox("Hello World!", vbOKOnly, "Greeting")  
  4. MsgBox "Hello World!", vbOKOnly, "Greeting"  

既然在此出現的第一個函數是MsgBox,那麼就簡單介紹一下該函數,其簽名如下:

  1. MsgBox(prompt[, buttons][, title][, helpfile, context])  

主要參數:

  • prompt:為要顯示的消息,其他帶[]參數為可選參數;
  • buttons:為顯示對話框按鈕及類型,默認值為0,即隻顯示“確定”按鈕;
  • title:為對話框標題欄文字。

MsgBox函數也有返回值,當你點擊確定或取消按鈕時,其返回的值是不一樣的。其他詳細內容,大家可以去查閱參考文檔,這裏就不逐一說明。

3. 數據類型

VBScript隻有一種數據類型——Variant,它是根據上下文來判斷是數字還是字符串。因為Variant是VBScript中唯一的數據類型,所以它也是VBScript中所有函數的返回值的數據類型。為了進一步區分數據類型,它包含如下數據子類型:

子類型 描述
Empty 未初始化的Variant。對於數值變量,值為0;對於字符串變量,值為零長度字符串 ("")。
Null 不包含任何有效數據的Variant
Boolean 包含True或False。
Byte 包含0到255之間的整數。
Integer 包含-32,768到32,767之間的整數。
Currency -922,337,203,685,477.5808到922,337,203,685,477.5807。
Long 包含-2,147,483,648到2,147,483,647之間的整數。
Single 包含單精度浮點數,負數範圍從-3.402823E38到-1.401298E-45,正數範圍從1.401298E-45到3.402823E38。
Double 包含雙精度浮點數,負數範圍從-1.79769313486232E308到-4.94065645841247E-324,正數範圍從4.94065645841247E-324到1.79769313486232E308。
Date (Time) 包含表示日期的數字,日期範圍從公元100年1月1日到公元9999年12月31日。
String 包含變長字符串,最大長度可為20億個字符。
Object 包含對象。
Error 包含錯誤號。

您可以使用轉換函數(CInt,CStr等等)來轉換數據的子類型。另外,可使用VarType函數返回數據的Variant子類型。

4. 變量

4.1. 變量聲明

變量聲明有兩種方式——顯式與隱式,顯式使用Dim、Public、Private語句進行聲明,隱式直接使用變量名。使用隱式聲明方式的習慣不好,因為這樣有時會由於變量名拚錯而導致程序運行出現意外,因此,最好在每個腳本開始第一行使用Option Explicit語句強製顯式聲明所有變量。聲明示例如下:

  1. Option Explicit  
  2. Dim i, conn   '聲明多個變量時用逗號隔開  
  3. Public UserName, Password  
  4. Private m_id  

注意:在VBScript中,變量名是不區分大小寫,即userName與UserName是指同一個變量。

4.2. 命名規則

VBScript中變量命名是有其規則標準的,變量命名必須遵循:

  • 第一個字符必須是字母。
  • 不能包含嵌入的句點。
  • 長度不能超過255個字符。
  • 在被聲明的作用域內必須唯一。

4.3. 作用域與存活期

變量的作用域由聲明它的位置所決定。如果在過程中聲明的,則隻有該過程可以使用,即過程級變量;如果在過程之外聲明的,則該變量可以被腳本中所有過程所使用,即Script級變量。

變量所存在的時間為存活期。Script級變量的存活期為從被聲明開始,直到腳本運行結束為止;過程級變量的存活期僅是過程被調用執行開始到結束的時間。不同的過程可以使用相同的變量名,因為局部變量隻有聲明它的過程才能識別。

4.4. 變量賦值

給變量賦值很簡單,使用等號進行賦值,等號左邊為變量名,右邊為變量值。若該變量是對象引用級別的,則需使用Set語句。示例代碼如下:

  1. Dim i, conn, ui  
  2. i = 0  
  3. Set conn = CreateObject("ADODB.Connection")  
  4. Set ui = New UserInfo  

4.5. 標量與數組

隻包含一個值的變量成為標量變量;有時候為了方便將一組相關值賦給一個變量,則成為數組變量。區別標量與數組的唯一方式是聲明時數組變量名後麵帶有括號()。變量聲明就不說了,前麵已經提到,這裏我們看看怎樣聲明一維數組及多維數組(最大60維——:)隻要您能夠理解)。

  1. Dim a(9), table(2, 3)  
  2. a(0) = 1  
  3. ...  
  4. a(9) = 11  
  5. MsgBox(a(1))   '輸出數組變量值  
  6.   
  7. table(0, 0) = 1  
  8. ...  
  9. table(2, 3) = 10  

我們也可以聲明動態數組(在運行腳本時大小發生變化的數組),使用Dim或ReDim語句,但括號中不包含任何數字。要使用動態數組,必須隨後使用ReDim確定維數和每一維的大小。若同時使用Preserve關鍵字,則在重新調整大小時保留數組的內容。

  1. Dim count, a()  
  2. count = 9  
  3. ReDim a(count)  
  4. ReDim Preserve a(10)  

5. 常數

常數在VBScript中是表示不變的值,用於代替數字或字符串。其內部定義了許多常數,都是以vb開頭,例如在Hello World程序中涉及到的MsgBox常數“vbOKOnly”。除了MsgBox常數外,還有顏色常數、比較常數、日期和時間常數等等,詳見參考文檔。

內部自帶常數,我們可以直接使用。當自帶常數不能滿足我們的需求時,我們也可以自定義常數,在VBScript中是使用Const語句來定義常數,該語句的簽名如下:

  1. [Public | PrivateConst constname = expression  

主要參數:

  • constname:為常數名稱,為了區分常數與變量,最好有一套自己的命名規則,這裏推薦字母全大寫,單詞間用下劃線分割;
  • expression:文字或其他常數,或包括除 Is 外的所有算術運算符和邏輯運算符的任意組合。

常數默認是Public級別,您也可以指定為Private級別,在同一行中聲明多個常數需要用逗號分割,常數聲明中不能使用變量、自定義函數及內部函數。下麵是常數的一些示例代碼:

  1. Const PI = 3.14   '常數默認為公有。  
  2. Private Const STEP_APPLY = "Apply"   '定義私有常數。  
  3. Const STEP_APPLY = "Apply", PI  = 3.14   '在一行上定義多個常數。  

6. 運算符

VBScript有一套完整的運算符,包括算術運算符、比較運算符、連接運算符和邏輯運算符。當表達式中含有多個運算符時,它們的運算優先級是:算術運算符 > 比較運算符 > 邏輯運算符。所有比較運算符的優先級相同,算術運算符和邏輯運算符的優先級如下所示:

6.1. 算術運算符

描述 符號
求冪 ^
負號 -
*
/
整除 \
求餘 Mod
+
-
字符串連接 &

字符串連接 (&) 運算符不是算術運算符,但是在優先級順序中,它排在所有算術運算符之後和所有比較運算符之前。

6.2. 邏輯運算符

描述 符號
邏輯非 Not
邏輯與 And
邏輯或 Or
邏輯異或 Xor
邏輯等價 Eqv
邏輯隱含 Imp

6.3. 比較運算符

描述 符號
等於 =
不等於 <>
小於 <
大於 >
小於等於 <=
大於等於 >=
對象引用比較 Is

Is 運算符是對象引用比較運算符。它並不比較對象或對象的值,而隻是進行檢查,判斷兩個對象引用是否引用同一個對象。

 

7. 條件語句

VBScript中可以使用以下條件語句:

  • If…Then…Else語句
  • Select Case語句

7.1. If…Then…Else語句

If…Then…Else語句結構如下:

  1. If condition Then statements [Else elsestatements]  

或者使用塊形式

  1. If condition Then  
  2.     [statements]  
  3. [ElseIf condition-n Then  
  4.     [elseifstatements]] . . .  
  5. [Else  
  6.     [elsestatements]]  
  7. End If  

主要參數:

  • condition:為一個(多個)數值或字符串表達式,其運算結果為True或False,若condition為Null,則被視為False。
  • statements:為condition等於True時執行的一條或多條(以冒號分開)語句。

對於短小簡單的測試,可以使用單行形式(第一種語法),但塊形式(第二種語法)提供了比單行形式更強的結構化與適應性,比較容易閱讀、維護及調試。

  1. '1. 條件為True時  
  2. '單行形式  
  3. Dim myDate  
  4. myDate = #2011-9-8#   '日期時間字符串需用#括起來  
  5. If myDate < Now Then myDate = Now  
  6. '塊形式  
  7. If i = 100 Then  
  8.     c = True  
  9.     i = 0  
  10. End If  
  11.   
  12. '2. 條件為True和False時  
  13. If user.UserName = "admin" Then  
  14.     showAdminPage = True  
  15. Else  
  16.     showAdminPage = False  
  17. End If  
  18.   
  19. '3. 對多個條件判斷  
  20. If value = 0 Then  
  21.     MsgBox(0)  
  22. ElseIf value = 1 Then  
  23.     MsgBox(9999)  
  24. Else  
  25.     MsgBox("輸入不合法!")  
  26. End If  

7.2. Select Case語句

語法結構如下:

  1. Select Case testexpression  
  2.     [Case expressionlist-n  
  3.         [statements-n]] . . .  
  4.     [Case Else expressionlist-n  
  5.         [elsestatements-n]]  
  6. End Select  

主要參數:

  • testexpression:任意數值或字符串表達式。
  • statements:當testexpression與expressionlist-n中的任意部分匹配時,執行的一條或多條語句。

Select Case結構提供了If...Then...ElseIf結構的另一個變通形式,功能與If...Then...ElseIf類似,但可以使代碼更加簡練易讀,它與Case語句關聯使用。

  1. Dim value : value = 5   '多條語句在一行,需用冒號分開  
  2. Select Case value  
  3.     Case 0:  
  4.         MsgBox(0)  
  5.     Case 1:  
  6.         MsgBox(9999)  
  7.     Case Else  
  8.         MsgBox("輸入不合法!")  
  9. End Select  

8. 循環語句

VBScript中可以使用以下循環語句:

  • Do...Loop語句
  • While...Wend語句
  • For...Next語句
  • For Each...Next語句

8.1. Do…Loop語句

當(或直到)條件為True時循環,語法結構如下:

當條件為True時重複執行某語句塊。

  1. Do [{While | Until} condition]  
  2.     [statements]  
  3.     [Exit Do]  
  4.     [statements]  
  5. Loop  

當條件變為True之前重複執行某語句塊。

  1. Do  
  2.     [statements]  
  3.     [Exit Do]  
  4.     [statements]  
  5. Loop [{While | Until} condition]  

主要參數:

  • condition:數值或字符串表達式,其值為True或False。如果condition為Null,則condition被當作False。
  • statements:當condition為True時被重複執行的一條或多條命令。

Exit Do可以退出循環體,循環可以嵌套使用。

  1. Do Until response = vbNo  
  2.     myNum = Int(6 * Rnd + 1)   '產生1到6之間的隨機數  
  3.     response = MsgBox(myNum & "想要另一個數嗎?", vbYesNo)  
  4. Loop  
  5.   
  6. Dim check, counter  
  7. check = True : counter = 0  
  8. Do  
  9.     Do While count < 20  
  10.         counter = counter + 1  '增加計數器  
  11.         If counter = 10 Then  
  12.             check = false  
  13.             Exit Do   '終止內循環  
  14.         End If  
  15.     Loop  
  16. Loop Until Not check  

8.2. While…Wend語句

當條件為True時循環,語法結構如下:

  1. While condition  
  2.     [statements]  
  3. Wend  

主要參數:

  • condition:數值或字符串表達式,其值為True或False。如果condition為Null,則condition被當作False。
  • statements:當condition為True時被重複執行的一條或多條命令。

While…Wend沒有Exit語句,從頭一直循環到尾,若要在中途退出,則需用Do…Loop語句。

8.3. For…Next語句

指定循環次數,使用計數器重複運行語句,語法結構如下:

  1. For counter = start To end [Step step]  
  2.     [statements]  
  3.     [Exit For]  
  4.     [statements]  
  5. Next  

主要參數:

  • counter:用做循環計數器的數值變量。這個變量不能是數組元素或用戶自定義類型的元素。
  • start:counter的初值。
  • end:counter的終值。
  • step:counter的步長。如果沒有指定,則step的默認值為1。

8.4. For Each…Next語句

對於集合中的每項或數組中的每個元素,重複執行一組語句,語法結構如下:

  1. For Each element In group  
  2.     [statements]  
  3.     [Exit For]  
  4.     [statements]  
  5. Next [element]  

主要參數:

  • element:用來枚舉集合或數組中所有元素的變量。對於集合,element可能是Variant變量、通用Object變量或任意指定的Automation對象變量。對於數組,element隻能是Variant變量。
  • group:對象集合或數組的名稱。

9. 過程

在VBScript中,過程被分為兩類:Sub過程和Function過程。

9.1 Sub過程

語法結構如下:

  1. [Public [Default] | PrivateSub name [(arglist)]   
  2.     [statements]  
  3.     [Exit Sub]  
  4.     [statements]  
  5. End Sub  

主要參數:

  • Public:表示Sub過程可被所有腳本中的所有其他過程訪問。
  • Default:隻與Class塊中的Public關鍵字連用,用來表示Sub過程是類的默認方法。如果在類中指定了不止一個Default過程,就會出錯。
  • Private:表示Sub過程隻可被聲明該過程的腳本中的其他過程訪問。
  • name:Sub的名稱,遵循標準變量命名規則。
  • arglist:代表在調用時要傳遞給Sub過程的參數的變量列表。用逗號隔開多個變量。其語法為:[ByVal | ByRef] varname[()],ByVal表示該參數是按值傳遞的,ByRef表示該參數按引用傳遞,varname代表參數的變量名稱。

如沒有顯式地指定使用Public或Private,則Sub過程默認為Public。調用Sub過程時,隻需輸入過程名及所有參數值,參數值之間使用逗號分隔。不需使用Call語句,但如果使用了此語句,則必須將所有參數包含在括號之中。調用Sub過程的兩種方式。一種使用Call語句;另一種則不使用。兩種方式效果相同,如:Call MySub(a, b)或MySub a, b。

9.2 Function過程

語法結構如下:

  1. [Public [Default]| PrivateFunction name [(arglist)]  
  2.     [statements]  
  3.     [name = expression]  
  4.     [Exit Function]   
  5.     [statements]  
  6.     [name = expression]  
  7. End Function  

主要參數:

  • Public:表示Function過程可被所有腳本中的所有其他過程訪問。
  • Default:隻與Class塊中的Public關鍵字連用,用來表示Function過程是類的默認方法。如果在類中指定了不止一個Default過程,就會出錯。
  • Private:表示Function過程隻可被聲明該過程的腳本中的其他過程訪問。
  • name:Function的名稱,遵循標準變量命名規則。
  • arglist:代表在調用時要傳遞給Function過程的參數的變量列表。用逗號隔開多個變量。其語法為:[ByVal | ByRef] varname[()],ByVal表示該參數是按值傳遞的,ByRef表示該參數按引用傳遞,varname代表參數的變量名稱。

如沒有顯式地指定使用Public或Private,則Function過程默認為Public。調用Function過程時,函數名必須用在變量賦值語句的右端或表達式中,如:b = MyFunction(a)。要從函數返回一個值,隻需將值賦給函數名。在過程的任意位置都可以出現任意個這樣的賦值。

9.3 Sub與Function的區別

  • Sub沒有返回值,而Function有返回值。
  • Sub不能放在表達式中,而Function可以。

 

 

QTP自動化測試之VBScript對象

VBScript作為腳本語言不僅能夠編寫簡單的腳本,而且還能夠創建及使用對象編寫複雜的腳本,如Class對象,數據字典,操作文件夾及文件,錯誤處理,正則表達式等等。

1. Class對象
2. Dictionary對象
3. FileSystemObject對象
4. Err對象
5. RegExp對象

1. Class對象

使用Class語句可以創建一個對象,可以為它編寫字段、屬性及方法,它隻有兩個對象事件——InitializeTerminate。首先來看一個簡單的Class示例:

  1. Class User  
  2.     '私有字段,也可以使用Public語句定義公有字段  
  3.     Private m_UserName  
  4.     Private m_Profile  
  5.   
  6.     'Initialize事件相當於構造函數  
  7.     Private Sub Class_Initialize  
  8.         m_UserName = Empty   '設置UserName初始值為空字符串  
  9.     End Sub  
  10.   
  11.     'Terminate事件相當於析構函數  
  12.     Private Sub Class_Terminate  
  13.         Set m_Profile = Nothing   '將對象設置為Nothing,銷毀對象  
  14.     End Sub  
  15.   
  16.     'Property Get語句,獲取屬性值或對象引用,Default隻與Public一起使用,表示該屬性為類的默認屬性  
  17.     Public Default Property Get UserName  
  18.         UserName = m_UserName  
  19.     End Property  
  20.     'Property Let語句,設置屬性值  
  21.     Public Property Let UserName(newUserName)  
  22.         m_UserName = newUserName  
  23.     End Property  
  24.   
  25.     Public Property Get Profile  
  26.         Set Profile = m_Profile  
  27.     End Property  
  28.     'Property Set語句,設置屬性對象引用  
  29.     Public Property Set Profile(newProfile)  
  30.         Set m_Profile = newProfile  
  31.     End Property  
  32.   
  33.     'ToString方法  
  34.     Public Function ToString()  
  35.         ToString = "Hello! " & Me.UserName   'Me相當於C#中的this關鍵字  
  36.     End Function  
  37. End Class  

用VBScript創建的對象並不是真正的麵向對象,它不能繼承和實現多態,但是在QTP對象模型Utility中,提供了一個RegisterUserFunc方法可以覆寫對象的方法,但這也不是真正意義上的麵向對象。Class及其成員如何創建,上麵已經簡單介紹過,若要對其中的一些語句進一步了解,還需要去仔細閱讀一些參考文檔。下麵我們來看看如何調用對象,在《VBScript基礎上》變量賦值中也已經提到過。

  1. Dim u                  '定義對象變量名,注意變量名不能與類名相同,即使是大小寫不同  
  2. Set u = New User       '創建對象用New語句  
  3. u.UserName = "known"   '給屬性賦值  
  4. MsgBox u.ToString()    '調用方法  

2. Dictionary對象

Dictionary是存儲數據鍵和項目對的對象,其主要屬性有Count、Item、Key,主要方法有Add、Exists、Items、Keys、Remove、RemoveAll。下麵是該對象的一個綜合示例:

  1. '定義並創建Dictionary對象,使用CreateObject創建並返回自動化對象的引用  
  2. Dim d  
  3. Set d = CreateObject("Scripting.Dictionary")  
  4.   
  5. '向Dictionary對象中添加鍵值對  
  6. d.Add "a""Known"    'Add方法第一個參數是Key值,第二個是Item值  
  7. d.Add "b""Christina"  
  8. d.Add "c""test"  
  9. d.Add "d""fuck"  
  10. Call ShowDictionary(d)  
  11.   
  12. '遍曆Dictionary對象,更改Item值  
  13. For i = 0 To d.Count - 1     'Count返回Dictionary對象中的項目數  
  14.     If d.Exists("c"Then    'Exists判斷Dictionary對象中是否存在指定關鍵字  
  15.         d.Item("c") = "Test" 'Item返回Dictionary對象中指定Key的Item值  
  16.     End If  
  17. Next  
  18. d.Remove("d")  'Remove從Dictionary對象中刪除一個關鍵字,項目對。  
  19. Call ShowDictionary(d)  
  20.   
  21. '輸出Dictionary對象所有鍵值  
  22. Sub ShowDictionary(dic)  
  23.     Dim str, a  
  24.     a = dic.Items  'Items返回一個包含所有Item值的數組  
  25.     For i = 0 To dic.Count - 1  
  26.         str = str & a(i) & vbCrlf  
  27.     Next  
  28.     MsgBox(str)  
  29. End Sub  

3. FileSystemObject對象

FileSystemObject對象可以操作驅動器、文件夾及文件,其對象模型包含下麵的對象和集合。

對象/集合 描述
FileSystemObject 主對象。包含用來創建、刪除和獲得有關信息,以及通常用來操作驅動器、文件夾和文件的方法和屬性。和該對象相關聯的許多方法,與其他 FSO 對象中的方法完全相似;它們是為了方便才被提供的。
Drive 對象。包含用來收集信息的方法和屬性,這些信息是關於連接在係統上的驅動器的,如驅動器的共享名和它有多少可用空間。請注意,"drive" 並非必須是硬盤,也可以是 CD-ROM 驅動器,RAM 磁盤等等。並非必須把驅動器實物地連接到係統上;它也可以通過網絡在邏輯上被連接起來。
Drives 集合。提供驅動器的列表,這些驅動器實物地或在邏輯上與係統相連接。Drives 集合包括所有驅動器,與類型無關。要可移動的媒體驅動器在該集合中顯現,不必把媒體插入到驅動器中。
File 對象。包含用來創建、刪除或移動文件的方法和屬性。也用來向係統詢問文件名、路徑和多種其他屬性。
Files 集合。提供包含在文件夾內的所有文件的列表。
Folder 對象。包含用來創建、刪除或移動文件夾的方法和屬性。也用來向係統詢問文件夾名、路徑和多種其他屬性。
Folders 集合。提供在 Folder 內的所有文件夾的列表。
TextStream 對象。用來讀寫文本文件。

FileSystemObject對象所有屬性、方法及對象和集合的詳細說明,您可以查閱參考文檔,因為內容比較多,我們就看一個簡單的示例,直觀地來了解一下該對象的使用,該示例是將一個文件複製到指定文件夾下。

  1. '定義並創建對象  
  2. Dim fso, filePath, folderPath  
  3. Set fso = CreateObject("Scripting.FileSystemObject")  
  4. filePath = "C:\\Test.txt"  
  5. folderPath = "D:\\Test"  
  6. Call MoveFile(filePath, folderPath)  
  7.   
  8. '將文件移動到指定文件夾  
  9. Sub MoveFile(sourceFile, targetFolder)  
  10.     Dim file, fileName  
  11.     '獲取文件對象  
  12.     Set file = fso.GetFile(sourceFile)  
  13.     '判斷目標文件夾是否存在  
  14.     If Not fso.FolderExists(targetFolder) Then  
  15.         fso.CreateFolder(targetFolder)  
  16.     End If  
  17.     '將文件移動到目標位置  
  18.     file.Move(targetFolder & "\\" & file.Name)  
  19. End Sub  

4. Err對象

Err對象是一個具有全局範圍的內部對象,不必在代碼中創建它的實例,含有關於運行時錯誤的信息。主要屬性有Description、HelpContext、HelpFile、Number、Source,主要方法有Clear、Raise,其屬性及方法的詳細說明詳見參考文檔。下麵的示例說明了Err對象的用法:

  1. '示例1:  
  2. On Error Resume Next  
  3. Err.Raise 6  '產生溢出錯誤  
  4. MsgBox("Error #" & CStr(Err.Number) & " " & Err.Description)  
  5. Err.Clear  
  6.   
  7. '示例2:  
  8. '定義數據庫連接  
  9. Dim conn  
  10. Set conn = CreateObject("ADODB.Connection")  
  11. conn.BeginTrans  '開始事務  
  12.   
  13. ...  
  14.   
  15. '提交數據庫事務錯誤處理  
  16. On Error Resume Next  
  17. If conn.Errors.Count > 0 Then  
  18.     conn.RollbackTrans  '回滾事務  
  19. Else  
  20.     conn.CommitTrans    '提交事務  
  21. End If  
  22. Err.Clear  

5. RegExp對象

RegExp是正則表達式對象,提供簡單的正則表達式支持功能。主要屬性有Global、IgnoreCase、Pattern,主要方法有Execute、Replace、Test,其屬性及方法的詳細說明詳見參考文檔。下麵的示例說明了RegExp對象的用法:

  1. Function RegExpTest(patrn, strng)  
  2.     Dim regEx, match, matches            '建立變量。  
  3.     Set regEx = New RegExp               '建立正則表達式。  
  4.     regEx.Pattern = patrn                '設置模式。  
  5.     regEx.IgnoreCase = True              '設置是否區分字符大小寫。  
  6.     regEx.Global = True                  '設置全局可用性。  
  7.     Set matches = regEx.Execute(strng)   '執行搜索。  
  8.     For Each match in matches            '遍曆匹配集合。  
  9.         retStr = retStr & "Match found at position "  
  10.         retStr = retStr & match.FirstIndex & ". Match Value is '"  
  11.         retStr = retStr & match.Value & "'." & vbCRLF  
  12.     Next  
  13.     RegExpTest = retStr  
  14. End Function  
  15.   
  16. MsgBox(RegExpTest("is.""IS1 is2 IS3 is4"))  

 

VBScript之Eval函數與Execute語句(Array.ForEach的實現)

每當使用C#中的Array.ForEach時,感覺很爽。最近在做QTP自動化測試時,偶然在QTP自帶示例中看到一段代碼可以動態調用方法,於是先喜若狂,著手改編了一下,寫了一個VBScript版的Array.ForEach功能,使用起來確實不錯。其實關鍵的一個地方就在於使用了VBScript中的Eval函數。首先我們來看看Eval函數的作用。

1. Eval函數

Eval函數主要是計算一個表達式的值並返回結果。其簽名如下:

  1. [result = ]Eval(expression)  

參數如下:

  • result:可選項。是一個變量,用於接受返回的結果。如果未指定結果,應考慮使用Execute語句代替。
  • expression:必選項。可以是包含任何有效VBScript表達式的字符串。

在VBScript中,x = y可以有兩種解釋。第一種方式是賦值語句,將y的值賦予x。第二種解釋是測試x和y是否相等。如果相等,result為True;否則result為False。Eval方法總是采用第二種解釋,而Execute語句總是采用第一種。下麵是Eval函數的簡單示例:

  1. Dim a, b  
  2. a = 1  
  3. b = 2  
  4. MsgBox Eval("a + b")  

2. Excute語句

執行一個或多個指定的語句。其簽名如下:

  1. Execute statements  

所需要的statements參數是一個字符串表達式,其中包含一個或多個要執行的語句。如果要在statements參數中包含多條語句,應使用冒號或嵌入的分行將其分隔開。下麵是Execute語句的簡單示例:

  1. Dim a, b, c, d  
  2. a = 1  
  3. b = 2  
  4. Execute "c = a + b : d = a + c"  
  5. MsgBox c  
  6. MsgBox d  

3. 自定義ForEach函數

ForEach函數有兩個參數,一個是數組變量,一個是遍曆方法名稱。其實現代碼如下:

  1. Sub ForEach(source, method)  
  2.     Dim i, current  
  3.     For i = 0 To UBound(source)  
  4.         If IsObject(source(i)) Then '判斷數組元素是否為對象  
  5.             Set current = source(i)  
  6.         Else  
  7.             current = source(i)  
  8.         End If  
  9.         Eval(method & "(current)"'調用遍曆方法  
  10.     Next  
  11. End Sub   

遍曆一個整數數組的示例:

  1. '顯示數組元素方法  
  2. Function ShowValue(val)  
  3.     MsgBox val  
  4. End Function  
  5.   
  6. Dim i, arr(10)  
  7. '給數組元素賦值  
  8. For i = 0 To 10  
  9.     arr(i) = i  
  10. Next  
  11. '調用ForEach遍曆  
  12. Call ForEach(arr, "ShowValue")  

遍曆一個對象數組的示例:

  1. '用戶類  
  2. Class User  
  3.     '用戶屬性  
  4.     Public UserName, Email  
  5.   
  6.     'ToString方法  
  7.     Function ToString()  
  8.         ToString = Me.UserName & " : " & Me.Email  
  9.     End Function最後更新:2017-04-03 05:39:54

      上一篇:go 【算法小總結】最大連續子序列和最大連續子矩陣的關係與實現
      下一篇:go 使用HashMap對象傳遞url參數實用工具類