UFT自动化测试
自動化測試?
靜態自動化:代碼檢測,類似于編譯工具的編譯系統
動態自動化:
? ? ? ? 基于瀏覽器和DOM對象的自動化:selemnium,Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE(7、8、9)、Mozilla Firefox、Mozilla Suite等。這個工具的主要功能包括:測試與瀏覽器的兼容性--測試你的應用程序看是否能夠很好得工作在不同瀏覽器和操作系統之上。測試系統功能--創建回歸測試檢驗軟件功能和用戶需求。支持自動錄制動作和自動生成Net、Java、Perl等不同語言的測試腳本。
? ? ? ? ?基于GUI(圖形用戶界面(Graphical User Interface),簡稱?GUI)的自動化,模擬用戶使用行為,調用api接口程序,實現測試自動化:uft/qtp,執行重復的手動測試,例如要測試哪些功能、操作步驟、輸入數據和期望的輸出數據等。提供符合所有主要應用軟件環境的功能測試和回歸測試的自動化。
UFT/QTP
| 錄制 | 支持 |
| 被測系統 | 支持B/S和C/S |
| 對象識別 | 強 |
| 對象庫 | 支持 |
| IDE | 強 |
| 回放 | 速度快 |
| 腳本編寫 | 方便 |
| 支持語言 | VBScript |
| 函數庫 | 支持 |
| 測試結果 | 支持 |
| 與其他測試工具聯動 | 支持 |
| 自身擴展 | 弱 |
| 價格 | 昂貴 |
1.UFT簡介及腳本錄制
1.1簡介
Unified Functional Testing(UFT)稱為統一功能測試,原名為QuickTest Professional。Unified Functional Testing 11.5將HP QuickTest Professional和HP Service Test整合到一個軟件包中,重新起名為Unified Functional Testing。
Unified Functional Testing以前稱為HP QuickTest Professional(QTP),可為軟件應用程序提供自動化功能和回歸測試。
HPE Unified Functional Testing支持關鍵字和腳本界面,并具有圖形用戶界面。它使用Visual Basic Scripting Edition(VBScript)腳本語言來指定一個測試過程,并操縱被測試應用程序的對象和控件。
1.2腳本錄制
進入軟件前,可以勾選插件,比如:active X,visual basic,然后進入軟件。
- 文件-新建-測試-GUI 測試,輸入名字和位置
- 錄制設置
- 錄制
?
- 操作會被自動錄制為代碼和保存對象到對象庫(但此時生成的代碼不是描述性編程)?
可以使用UFT自帶的“Flight?GUI”練習。
Window("Micro Focus MyFlight Sample").Type "John" Window("Micro Focus MyFlight Sample").Click 218,289 Window("Micro Focus MyFlight Sample").Type "HP" Window("Micro Focus MyFlight Sample").Click 178,349但是實際項目中,請拒絕錄制。因為靠“錄制”是做不了項目的,甚至連一個demo都做不出來。
因為自動化測試項目和軟件開發項目同屬軟件工程學,只有直接編碼才能出色地根據之前的設計思想來完成腳本。如果是靠“錄制+加強”的模式,那就不可能按照前面定制的設計方法和思想來開發測試腳本。
錄制功能更多的是新人學習時的利器。?
2.UFT錄制回放原理
對象,是QT(QuickTester)中操作的基本元素,代表軟件產品中基本的UI組件,例如在WEB或Windows應用中,一個菜單,按鈕,圖形熱點,標簽,輸入框等都是典型的QT對象。通過多種屬性的組合可以定義一個對象,同樣在測試環境中,通過一組屬性可以唯一定義一個對象,QT通過對象屬性在測試環境中定位一個操作的基本元素。任何一個測試腳本語句,都是以一個操作對象為基礎,通過對操作對象測試行為控制,形成測試腳本。
對象庫,是用于儲存被測應用程序界面對象(界面元素)的地方。QuickTester通過對象庫對測試程序的元素進行管理,建立測試腳本時,將測試人員需要操作的對象信息保存到對象庫中。
QT將對象都保存在對象庫,這樣對象可以被集中管理。測試腳本(一個或多個)可以根據自身也許需求隨意調用這些對象來使用,減少冗余。任何需要操作的對象都需要先添加到對象庫中,之后才能執行操作(描述性編程不需要使用對象庫中的對象)。
UFT有兩種回放模式:
- Event模式事件跟蹤,即平時默認的模式。比如.Click方法只是觸發了對象的Click事件,而并未真正通過鼠標光標來進行點擊按鈕
- Mouse模式鼠標跟蹤,使用這種模式回放時我們可以看到鼠標光標是跟著對象走的。
有時候Click事件處理不了,但鼠標點擊卻可以;還有有時候需要使用鼠標右鍵。
可以在Tools-Options-Web-Advanced切換,也可以通過代碼控制(推薦),比如FireEvent "onclick"
UFT支持兩種視圖,一種是Keyword?View(關鍵字視圖),另一種是Expert?View(專家視圖)。
Keyword?View(關鍵字視圖):是一種圖形化的視圖。
Expert?View(專家視圖):對于關鍵字視圖中的每個節點,在專家視圖中都對應一行腳本。也叫腳本視圖,用于取得測試對象的某個屬性的值。
怎樣切換關鍵字視圖和專家視圖?
??
3.對象探測(Object Spy)器使用
參考:QuickTester對象,對象偵測器和對象庫_weixin_30604651的博客-CSDN博客
對象探測器是用來查看對象所支持的方法和屬性。啟動對象探測功能:Tools->Object Spy…。
點擊指針按鈕,然后選擇一個對象。當選擇了Test Object Properties按鈕,屬性標簽頁中就會顯示出所有可得到的TO屬性,并且在方法標簽頁中會顯示所有可獲得的方法,如圖所示:
幾種對象無法識別或識別錯誤的原因
4.TO及RO屬性獲取
4.1 TO,Test Object
To屬性:獲取的是對象的屬性,可以理解為靜態的屬性,在運行時的輸入東西與它無關。
測試對象的屬性是UFT為了識別在測試執行過程中的運行時對象而保留在對象庫中的屬性。GetToProperty/GetToProperties和SetToProperty則分別用于讀取和修改To的屬性值。
??GetToProperty("封裝屬性名")? ?用于取得測試對象的某個屬性的值,?
??GetToProperties? ? 用于取得測試對象的所有屬性的值,
??SetToProperty "封裝屬性名","封裝屬性值"? ?用于設置測試對象的某個屬性的值
4.2 RO,Runtime?Object
Ro屬性:是變的(用戶名框輸入不同的值,這個Ro屬性取出來就是不一樣)
??GetRoProperty方法用于取得運行時對象(實際對象)的某個屬性的值
'x為WebEdit對象運行時的value屬性值
x = Browser("").Page("").WebEdit("").GetROProperty("value")
Msgbox x
F1查看幫助文檔-object model reference for GUI testing-standard window-相應的對象
? ? ?methods:有相應的方法,
5.對象庫
?UFT用對象庫對對象進行管理,記錄的對象和這些對象的屬性都存儲在對象存儲庫中。(描述性編程不需要使用對象庫)
Resources-ObjectRepository
對象是怎樣被添加到對象庫的?
1通過錄制與被測應用程序的交互過程添加,有層次結構
2.手工添加一個或多個對象。Resources-ObjectRepository-AddObject,點擊要添加的對象,以手動添加對象到對象。(如果我們要添加的對象再鼠標點擊后才出現,我們可以先按下Ctrl鍵以臨時屏敝對象選擇模式,一日往備好了要添加的對象,放開Ctr鍵然后再去點擊。如果我們需要在不同應用程序間切換,可以先按住CTRL+ALT組合鍵屏蔽對象選擇模式,然后使用例如ALT+ TAB組合鍵來在不同的應用程序間切換,完成切換后,再次按下CTRL+ALT組合鍵就可以進入對象選擇模式并添加對象)
6.UFT檢查點
6.1標準檢查點
(錄制時插入,不常用)
怎么添加標準檢查的:
添加的檢查點在 資源-對象庫里面管理:
1.可以在這里修改value的值,檢查 value 是不是等于相應的值。
2.也可以判斷檢查點(此時value被改成了空格)
?3.如果用代碼的形式實現,通過GetRO/GetTO(此時刪除了檢查點):
6.2表格檢查點
如果是標準檢查點,選擇的是默認的WebElement:編輯
如果是表格檢查點,選擇WebTable?
?有√表示檢查,雙擊把√去掉表示不檢查
6.3頁面檢查點
選擇想要檢查的頁面,右鍵,插入標準檢查點,選擇Page
load time:加載時間
number of images:頁面中的圖像個數
number of links:頁面中的鏈接個數
?
7.文本輸出值
7.1 圖形化實現
右鍵,插入輸出值
運行結果:
7.2 編程實現
8.UFT參數化
登錄
切換到關鍵字視圖
?編輯姓名/密碼參數
9.Data Table
數據池(DataTable)提供了一種創建數據驅動驅動測試用例的方式,類似于excel電子表格,并可多次循環運行一個操作模塊(Action)。每一個測試用例都有一個全局數據表,所有的操作模塊都可以訪問這個全局數據表。每一個操作模塊都有一個私有的數據表,稱謂局部數據表。
9.1 UFT導入EXCEL文件
(1)新建一個EXCEL文件,存在 C:\FlightCase.xlsx
(2)怎么用UFT從EXCEL中取數據
查找:
DataTable.ImportSheet "參數1",參數2,參數3
把EXcel表格中的數據導入到QTP的datatable中,
其中參數1為要導入的EXCEL文件的絕對路徑;
參數2用于確定要導入的EXCEL文件的第幾個sheet;
參數3用于確定要導入到本的datatable的第幾個表中。
在UFT編輯代碼?
?結果:
9.2 Datatable自動化測試
將測試數據從excel導入,自動化執行,最后再將結果導出到文件。
?代碼:
?修改:加上判斷和異常,執行所有測試用例
??結果:
?
10.UFT同步點應用
當被測應用需要消耗一定的時間來響應一個操作時,可能會出現應用程序控件還沒有準備好,腳本已經執行到了下一步了。這種情況下,UFT通常就會拋出一個錯誤。
同步點就是在測試腳本的特定執行步驟前智能地插入停頓時間或等待時間。
10.1系統設定里,全局的20秒同步
新建或打開一個GUITest,然后去File-setting-run設置objectsynchronizationtimeout,默認20秒。
全局設置,如果超過20秒還找不到,系統就會提示對象無法識別。
Disable smart identification during the run session
10.2 Wait
Wait 5 '等待五秒鐘
10.3 WaitProperty
WaitProperty("屬性名稱",“屬性值”,超時時間ms)
返回類型為boole類型,True或False
比如:object.WaitProperty("text""Insert Done",2000)
比Wait靈活一些
實例:等待按鍵被啟用,最多等5秒
'選擇option1 Browser("..").Page("..").WebList("List").Select("Option1") Browser(".."). Page("..").WebButton("Next").WaitProperty("Enabled",True,5000) '點擊下面的按鈕 Browser("..")Page("..").WebButton("Next").Click10.4 sync
針對B/s結構,瀏覽器加載情況。只有完全加載成功(load完成)后才會執行下一步操作。
'選擇option1 Browser["..").Page("..").WebList("List").Select("Option1") '等待頁面被下載 Browser("..").Sync '點擊下面的按鈕 Browser"..")Page("..").WebButton("Next").Click11.描述性編程
11.1直接應用屬性描述
描述對象的屬性以及屬性值來編程
Browser("micClass:=Browser").Page("micClass:=Page").WebEdit("name:=wd").Set?"UFT自動化測試"
優點:1.節省資源空間,此種方法不需要對象庫里有這個對象 ,若是存在對象庫,會占用資源空間
2.如果是動態對象,難以錄制,可能需要錄制多個,但通過編程-變量可以很簡單地實現
11.2Description 對象
systemutil.Run "url或application路徑"
創建description對象:Set
強制屬性識別
?方法2 :
用記事本寫腳本,后綴名改成.vbs,? executefile"文件路徑"
11.3錄制+description對象實現案例
修改:+description對象
11.4描述性編程和對象庫編程對比
描述性編程
對象庫編程
12.UFT庫函數-局部調用、全局調用
庫函數文件是包含VBScript腳本的純文本格式文件,用來聲明方法、變量、類等。庫函數文件可以用任意后綴名,最常見的是VBS和TXT。庫函數文件可以用來組織存放不同功能的代碼,它提供了在不同的UFT腳本中分享代碼的方法。
局部調用
1.?ExecuteFile
在運行時動態加載庫函數文件,使用ExecuteFile方法。
在一個Action中使用此方法時,庫函數文件及其內容只能在當前Action可見。
本地作用域是指所有在Action中定義的作用區域,不可被此Action之外所訪問。
2.?LoadFunctionLibrary
'動態調用函數庫LoadFunctionLibrary 方式
LoadFunctionLibrary "c:\iquicktest.vbs"
'調用函數庫中的q1方法
Call q1
全局調用
關聯一個全局庫函數文件:Test->Settings...->Resources,添加庫函數文件
Tips:多個庫函數文件加載順序是從下到上,如果有兩個庫函數文件包含相同函數,那么會使用靠近頂部的。
全局作用域是UFT加載所有測試資源和測試恢復庫所在,測試腳本中所有的Action都可以訪問。
執行作用域:
13.環境變量
環境變量是一種非常特殊的變量類型。環境變量是可以貫穿UFT Test 中的每一個 Action,并可供所有 Actions 調用。這些變量值會在UFT運行過程中被初始化,并且會一直持續到腳本運行完畢為止。UFT的環境一般應用于 Actions 之間的信息共享、場景恢復以及函數庫。注意,這里的環境變量與 windows 本身的環境變量并不是一個概念。Windows 環境變量是在本地系統上的所有程序都可訪問到,而 UFT環境變量只是可以在測試腳本運行時才可訪問。
在UFT中有三種類型的環境變量:
13.1Environment對象
通過Environment對象可以訪問到所有環境變量的值。
- Value屬性,既可用于對環境變量進行設置也可用于檢索。我們可以通過此屬性返回任意環境變量的值,但對于用戶自定義環境變量,value屬性只用于賦值。
- ExternalFileName屬性,返回當前已載入的外部環境變量的文件名。
- LoadFromFile方法,載入具體的環境變量文件,需要提供完整文件路徑,并保證XML的語法沒有錯誤。
?13.2內建環境變量(Built-in)
UFT提供的已經規定好的常用配置信息的環境變量,比如當前執行的測試腳本名、測試腳本路徑、操作系統類型、UFT的版本、本地機器名等。
Test-Settings-Environment-built in可以查看當前可使用的內置環境變量。
?可以省略value,簡寫:Environmen("TestName")
Environmen.Value("UserName")? 獲取用戶名
Environmen.Value("TestDir")? ? ? ? 獲取測試腳本所在絕對路徑(不包括后面的 \),會打印到當前文件夾
Environmen.Value("TestName")? ?獲取測試腳本名稱
Environmen.Value("OS")? ? ? ? ? ? ? 獲取環境名稱
Environmen.Value("OSVersion")??獲取環境版本
1.理解用法
?結果:
?2.獲取當前腳本所在路徑(不含測試腳本文件夾)
結果:C:\
?3.把當前腳本定義成一個function
用記事本編輯一個文件
?在action中調用
結果:
?13.3用戶自定義變量-內部
user defined Internal:用戶自定義變量可以在UFT Test腳本中直接定義及保存,并且可以在運行時進行動態修改。
方法1.?Test-Settings-Environment-用戶定義,設置用戶定義變量
然后賦值給變量
13.4用戶自定義變量-外部
user defined external:定義在外部文件中的環境變量。這些變量為只讀且無法在運行時動態修改。在QTP Test腳本中,可以直接通過LoadFromFile方法動態調用外部環境變量文件。
使用XML文件
使用ExternalFileName判斷,使用LoadFromFile導入。
①準備好XML文件
②在?Test-Settings-Environment 導入
?13.5?實戰
需求:?
?代碼:
14.reporter對象
用UFT生成報告
Function VerifySQLData(ConnectionStr,sqlStr,verifyProperty,expectValue)'創建數據庫連接對象Set adoConn = CreateObject("adodb.Connection")'利用數據庫連接字符串打開數據庫adoConn.Open ConnectionStr'執行sql語句并返回對應的結果集Set adoRst = adoConn.Execute(sqlStr)'獲取實際值actualValue = adoRst.Fields.Item(verifyProperty).Value'對比預期值和實際值If cstr(expectValue) = cstr(actualValue) ThenReporter.ReportEvent micPass,"SQL_DATA_CHECK","[actualValue = expectValue =" + cstr(actualValue) +"]"ElseReporter.ReportEvent micFail,"SQL_DATA_CHECK","[expectValue = " + cstr(expectValue) + " actualValue = " + cstr(actualValue) + "]"End If'關閉數據庫adoConn.Close'釋放數據庫對象Set adoConn = NothingEnd Function結果
?
??
參考QTP10的Reporter對象_kuwoleft-CSDN博客
Reporter.ReportEvent?EventStatus?,?ReportStepName?,?Details?[,?ImageFilePath?]
| Argument |
|
| EventStatus |
|
|
|
|
| Details | 測試結果事件的描述。 該字符串將顯示在“測試結果”窗口的步驟詳細信息框中。 |
| ImageFilePath |
|
這樣的話就可以在測試步驟的報告中添加截圖信息,例如:
Browser("Browser").Page("WebPage").Image("MyLogo").CaptureBitmap("MyLogo.bmp")
Reporter.ReportEvent micDone, "Display Logo", "This is my logo", "MyLogo.bmp"
一般在碰到錯誤時,應該把當前屏幕截一下,以便后面查看測試日志時分析和定位出錯的原因,例如下面的代碼所示:
validation1=Browser("WebTours").Page("WebTours").Frame("navbar").Image("Login").Exist(0) If validation1 ThenReporter.ReportEvent micPass, "The Login object exists", "The Login object exists" ElseDesktop.CaptureBitmap "Fail.png",TrueReporter.ReportEvent micFail, "The Login object exists","The Login object doesn't exists","Fail.png" End if '... validation2=Browser("Web Tours").Page("Web Tours").Frame("navbar").Image("SignOff Button").Exist(0) If validation2 ThenReporter.ReportEvent micPass, "The LogOut object exists", "The LogOut object exists" ElseDesktop.CaptureBitmap "Fail.png",TrueReporter.ReportEvent micFail, "The LogOut object exists","The LogOut object doesn't exists","Fail.png" End if也可以不用report對象,自定義測試報告,比如生成HTML或XML的報告。
15.場景恢復功能
在腳本運行中可能會出現一些非預期事件、錯誤、程序崩潰等情況,阻止腳本繼續執行下去,在此情況下腳本可能暫停執行,直到某些界面被操作之后才會繼續執行下去,為了處理這一類事件因此存在場景恢復。
參考引用:UFT入門教程(6)—恢復場景管理器_weixin_33720956的博客-CSDN博客
恢復場景管理器 作用:對不可預知的錯誤進行相應的處理,以保證測試能繼續運行
設置步驟:
- 定義中斷測試運行的觸發事件
- 指定繼續所需的恢復操作
- 選擇恢復后測試運行步驟
- 輸入場景的恢復信息
1.點擊菜單欄“資源”,選擇“恢復場景管理器”
2.選擇“新建場景”
3.新建“向導”
4.選擇觸發事件
(即選擇觸發“場景恢復”的事件,錯誤彈窗或者是按鈕對象為無法點擊狀態等事件)
5.捕獲彈窗
6.選擇繼續測試所需的恢復操作
選擇“鍵盤或鼠標操作”?
7.調整”恢復操作“的順序
勾選“添加另一個恢復操作”將再次進入“添加恢復操作”的界面,直到該項取消勾選
8.選擇恢復后測試運行的操作
根據實際情況自己選
(重復操作步驟,繼續下一步)
9.勾選“向當前測試中添加場景”,則該場景將自動添加至當前測試 (也可通過右鍵”測試“手動關聯)
添加后結果:
16.UFT內置對象
16.1 Crypy對象-字符串加密
此對象主要是通過QTP的SetSecure函數原理來對字符串進行加密,此對象僅提供Encrypy一個方法。
'加密字符串 Dim myVar myVar = Crypt.Encrypt("Tarun Lalwani") msgbox myVarCrypt.Encrypt()方法最終返回的不是每次都相等的。此方法哪怕加密兩次相同的字符串,最終生成的加密內容也是不同的。
例子:加密密碼
加密前:
Browser("Browser").Page("Page").WinEdit("password").Set "tarun"?加密后:
當使用這種安全模式腳本時密碼就不會出現在測試結果里了。
'使用以下腳本創建一個加密字符串 sEncryptepassword = Crypt.Encrypt("tarun") Browser("Browser").Page("Page").WinEdit("password").SetSecure sEncryptepassword16.2 PathFinder對象
此對象主要用來查找文件的絕對路徑。
我們可以決定具體的文件夾作為文件搜索的相對路徑,并可以使用PathFinder.Locate方式搜索此文件夾下具體文件的相對路徑。
- 1
- 2
- 3.jpg
- 2
- a
- b
- c.html
- c.jpg
- b
絕對路徑就是無論從外部還是內部訪問,都能夠通過此路徑找到文件夾。比如:C:/Users/a1394/Desktop/OneDrive/1/2/3.jpg
而相對路徑是相對于自身的,其他位置的文件和路徑,只能通過內部訪問。如果在同一目錄下另一個文件使用c.jpg,那么路徑就是url="c.jpg"。如果我要去找3.jpg的話,就要回到父文件夾的父文件夾,也就是1,此時路徑為?url="../../",此時1文件夾和a文件夾同一級,那么就進入1然后進入2,找到3.jpg,所以最后的路徑為url=../../1/2/3.jpg。
絕對路徑就是寫死的路徑,缺點是換設備會出現路徑找不到問題;
相對路徑就是靈活的路徑,優點是不會因為設備更換出現路徑問題。
例子:
??
16.3 RandomNumber對象
此對象提供了一個可以在兩個數值質檢獲取隨機數的方法。
Value屬性是RandomNumber的默認屬性,因此在腳本中可省略。
'返回一個1-200之間的隨機數X X = RandomNumber.value(1,200)或者
X = RandomNumber(1,200)16.4 SystemUtil對象
此對象用于運行或關閉一些進程。
運行:
Run file,[params],[dir],[op],[mode]
(1)file參數是必須輸入的,被運行的應用程序或者被打開的文件;
(2)params是可選參數,啟動應用程序所需的參數;
(3)dir是可選參數,應用程序或文件的默認工作目錄;
(4)op是可選參數,文件打開的模式,包括open、edit、explore、find、print 5種模式;
(5)mode參數是可選參數,用于指定程序窗口打開時的狀態。
SystemUtil.Run "iexplore.exe"
SystemUtil.Run "iexplore.exe","http://www.yahoo.com"
關閉進程:
(1)CloseDescendentProcesses,用于關閉所有由QTP打開的進程;
SystemUtil.CloseDescendentProcesses
(2)CloseProcessByHwnd,用于關閉包含指定句柄的窗口的進程;
'使用windows窗口句柄關閉進程 hWnd = Browser("Creationtime:=0").GetROProperty("hwnd") SystemUtil.CloseProcessByHwnd hwnd(3)CloseProcessById,用于關閉指定進程ID(PID)的進程;
SystemUtil.CloseProcessByID processID(4)CloseProcessByName,用于關閉指定名稱的進程;
'關閉iexplore.exe進程 numClosed = SystemUtil.CloseProcessByName("iexplore.exe")(5)CloseProcessByWndTitle,用于關閉擁有指定標題的窗口的進程。
'使用正則表達式匹配標題關閉進程 numClosed = SystemUtil.CloseProcessByWndTitle "Microsoft Internet Explorer.*",True '不使用正則表達式匹配標題關閉進程 numClosed = SystemUtil.CloseProcessByWndTitle "Notepad"16.5 WebUtil對象
刪除瀏覽器的cookie
'創建WebUtil對象 Dim oWebUtil Set oWebUtil = CreateObject("Mercury.GUI_WebUtil") '刪除cookies并銷毀對象 oWebUtil.DeleteCookies Set oWebUtil = Nothing17.其他
Run Action
RunAction的用法如下:
RunAction ActionName, [Iteration,Parameters]
ActionName:調用action的名稱
lteration:迭代次數(onelteration和alllterations)其中onelteration是默認設置,也可以用0表示,alllterations也可以用1表示
例子:
(1)Output=RunAction("Action2",onelteration,input1,input2,output1)
(2)ExitAction語句可以用來終止Action2的執行
RunAction “Action2",onelteration
一些操作語句:
ExitAction("The result is :"¶meter(“output"))
Parameter(“name")
Parameter(“output") =Parameter(“Input1")+Parameter(“Input2")
錯誤處理
引發錯誤的原因有很多,例如用戶輸入了錯誤類型的值,或者腳本找不到必需的文件、目錄或者驅動器,我們可以使用循環技術來處理錯誤,但是VBS本身也提供了一些基本技術來進行錯誤的檢測和處理。
1、最常見的錯誤是運行時錯誤,也就是說錯誤在腳本正在運行的時候發生,是腳本試圖進行非法操作的結果。例如零被作為除數。在vbs中,任何運行時錯誤都是致命的,此時,腳本將停止運行,并在屏幕上顯示一個錯誤消息。你可以在腳本的開頭添加
OnError Resume Next
這行語句告訴vbs在運行時跳過發生錯誤的語句,緊接著執行跟在它后面的語句。
發生錯誤時,該語句將會把相關的錯誤號、錯誤描述和相關源代碼壓入錯誤堆棧。
2、雖然OnErrorResumeNext語句可以防止vbs腳本在發生錯誤時停止運行,但是它并不能真正處理錯誤,要處理錯誤,需要在腳本中增加一些語句,用來檢查錯誤條件并在錯誤發生時處理它。
vbscript提供了一個err對象,他有兩個方法clear,raise,5個屬性:description,helpcontext, helpfile,number,source
err對象不用引用實例,可以直接使用,例如:
在腳本運行過程中屏蔽鼠標和鍵盤
BlockInput方法,用于屏蔽輸入;
UnBlockInput方法,用于解除屏蔽。
可以使用這兩個方法防止測試腳本運行過程中被意外的鼠標和鍵盤操作干擾。
總結
- 上一篇: 大四学生发明文言文编程语言,设计思路清奇
- 下一篇: 启动mq命令 linux,RocketM