精通QTP——自動(dòng)化測(cè)試技術(shù)領(lǐng)航 2.1_第1頁(yè)
精通QTP——自動(dòng)化測(cè)試技術(shù)領(lǐng)航 2.1_第2頁(yè)
精通QTP——自動(dòng)化測(cè)試技術(shù)領(lǐng)航 2.1_第3頁(yè)
精通QTP——自動(dòng)化測(cè)試技術(shù)領(lǐng)航 2.1_第4頁(yè)
精通QTP——自動(dòng)化測(cè)試技術(shù)領(lǐng)航 2.1_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、2.1  VBScript在項(xiàng)目中的應(yīng)用階段要點(diǎn) Option Explicit的使用。 VBScript基礎(chǔ)知識(shí)解析。 10個(gè)在實(shí)際項(xiàng)目中常用的VBS函數(shù)。 類(lèi)在VBS中的應(yīng)用。 擴(kuò)展內(nèi)容:VBS的SendKeys方法。2.1.1  請(qǐng)培養(yǎng)代碼規(guī)范的好習(xí)慣從第2章開(kāi)始,讀者要學(xué)習(xí)或者說(shuō)積累的是更多實(shí)際項(xiàng)目中的經(jīng)驗(yàn)和遇到各種項(xiàng)目時(shí)的不同的解決思路。由于QTP的腳本語(yǔ)言是基于VBS的,因此VBS對(duì)于學(xué)習(xí)自動(dòng)化測(cè)試還是起到了相當(dāng)大的作用,VBS作為QTP的官方腳本語(yǔ)言,則是我們?cè)谧鲰?xiàng)目時(shí)必不可免的要經(jīng)常使用的。所以,作者將VBS的學(xué)習(xí)放在第2章的第1章節(jié),旨在打開(kāi)從QTP使用到

2、利用QTP做實(shí)際項(xiàng)目的這扇大門(mén)。首先,認(rèn)識(shí)一下VBS,它又稱(chēng)VBScript,是Visual Basic Script的簡(jiǎn)稱(chēng),即Visual Basic腳本語(yǔ)言。VBScript可以通過(guò)Windows腳本宿主調(diào)用COM,因而可以使用Windows操作系統(tǒng)中可以被使用的程序庫(kù),如可以使用Microsoft Office的庫(kù)、WSH、AOM等。當(dāng)然它也可以使用其他程序和操作系統(tǒng)本身的庫(kù)。因此,學(xué)習(xí)VBScript對(duì)于測(cè)試人員來(lái)說(shuō)非常重要。通常當(dāng)學(xué)習(xí)一門(mén)編程語(yǔ)言時(shí),第一句代碼往往是變量申明,VBScript也是一樣,一起來(lái)看一個(gè)最簡(jiǎn)單的實(shí)例。1定義變量Dim例如:Dim helloworl

3、d  '定義變量helloworld = "QTP自動(dòng)化測(cè)試技術(shù)領(lǐng)航"  '給變量進(jìn)行賦值msgbox helloworld '彈出消息框顯示變量復(fù)制以上代碼,在QTP中或另外保存為helloworld.vbs后直接運(yùn)行,運(yùn)行結(jié)果如圖2-1所示。圖2-1由于VBScript語(yǔ)法不是很?chē)?yán)謹(jǐn),因此,可以不用申明變量就可以直接使用,例如:helloworld = "QTP自動(dòng)化測(cè)試技術(shù)領(lǐng)航"  '給變量進(jìn)行賦值

4、msgbox helloworld '彈出消息框顯示變量這樣就可以省去很多申明變量的時(shí)間,增加代碼開(kāi)發(fā)的速度,但是這樣會(huì)有一個(gè)問(wèn)題,來(lái)看以下這個(gè)腳本:helloworld = "QTP自動(dòng)化測(cè)試技術(shù)領(lǐng)航"  '給變量進(jìn)行賦值msgbox helloword '彈出消息框顯示變量保存以上腳本后運(yùn)行,會(huì)發(fā)現(xiàn)彈出框并沒(méi)有任何數(shù)據(jù),而是一個(gè)空值,如圖2-2所示。圖2-2為什么會(huì)這樣?因?yàn)樵谶@里輸入的helloworld被拼寫(xiě)成了helloword,少了一個(gè)小寫(xiě)“L”,因此才導(dǎo)致打

5、印出來(lái)一個(gè)空值。當(dāng)我們?cè)谏昝骱芏嘧兞康臅r(shí)候很容易發(fā)生類(lèi)似這種錯(cuò)誤,因此,這里就要給代碼中加上顯示申明,這樣才不會(huì)出現(xiàn)上述的這種情況,下面就來(lái)看一下具體怎么使用。2顯示申明Option Explicit  強(qiáng)制所有變量必須先申明才能使用例如:Option Explicit '顯示申明變量Dim helloworld '定義變量helloworld = "QTP自動(dòng)化測(cè)試技術(shù)領(lǐng)航"   '給變量進(jìn)行賦值msgbox helloword 

6、 '彈出消息框顯示變量運(yùn)行以上代碼就可以直接定位問(wèn)題,出現(xiàn)錯(cuò)誤提示“變量未定義”,如圖2-3所示。圖2-3很多讀者在寫(xiě)VBScript時(shí),不喜歡使用顯示申明。其實(shí)顯示申明能夠檢查你的程序,建議大家能夠養(yǎng)成這個(gè)好習(xí)慣。否則在大量的變量面前一定會(huì)束手無(wú)策,簡(jiǎn)單總結(jié)一下它的幾個(gè)優(yōu)點(diǎn)。 顯示申明是腳本編寫(xiě)人員的一種好習(xí)慣。 可以防止很多不必要的錯(cuò)誤發(fā)生,大型項(xiàng)目更加明顯。 減少資源占用。 代碼提示的優(yōu)勢(shì) ,如圖2-4所示。圖2-4總結(jié):作者在此只是舉了一個(gè)Option Explicit的例子,其實(shí)在編寫(xiě)代碼的時(shí)候,處處都應(yīng)該注意代碼規(guī)范和樹(shù)立良好的習(xí)慣,比如多做一些注釋等,這樣對(duì)以后

7、的腳本維護(hù)是有很大的好處的。2.1.2  VBS基礎(chǔ)知識(shí)提煉  VBS的基本語(yǔ)法1變量(1)所有單引號(hào)后面的內(nèi)容都被解釋為注釋。(2)在VBScript中,變量的命名規(guī)則遵循標(biāo)準(zhǔn)的命名規(guī)則,需要注意的是:在VBScript中對(duì)變量、方法、函數(shù)和對(duì)象的引用是不區(qū)分大小寫(xiě)的。在申明變量時(shí),要顯式地申明一個(gè)變量,需要使用關(guān)鍵字Dim來(lái)告訴VBScript創(chuàng)建一個(gè)變量,并將變量名稱(chēng)跟在其后。申明多個(gè)同類(lèi)型變量,可以用逗號(hào)分隔。注意:VBScript中不允許在申明變量的時(shí)候同時(shí)給變量賦值。但是允許在一行代碼內(nèi)同時(shí)對(duì)兩個(gè)變量進(jìn)行賦值,中間用冒號(hào)分隔。(3)VBScript

8、在定義時(shí)只有一種變量類(lèi)型,在實(shí)際使用中需要使用類(lèi)型轉(zhuǎn)換函數(shù)來(lái)將變量轉(zhuǎn)換成相應(yīng)的變量類(lèi)型。Cbool函數(shù)將變量轉(zhuǎn)換成布爾值。Cbyte函數(shù)將變量轉(zhuǎn)換為0255的整數(shù)。Ccur函數(shù)、Cdbl函數(shù)和Csng函數(shù)將變量轉(zhuǎn)換為浮點(diǎn)數(shù)值,前者只精確到小數(shù)點(diǎn)后4位,后兩者要更加精確,數(shù)值的范圍也要大的多。Cdate函數(shù)將變量轉(zhuǎn)換為日期值。Cint函數(shù)和Clng函數(shù)將變量轉(zhuǎn)換為整數(shù),后者的范圍比前者要大的多。Cstr函數(shù)將變量轉(zhuǎn)換為字符串。2數(shù)組數(shù)組的定義與變量非常類(lèi)似,只需要在變量后描述這個(gè)數(shù)組的個(gè)數(shù)和維數(shù)。需要注意的是:數(shù)組在“定義”時(shí)下標(biāo)是從1開(kāi)始的,而在“訪問(wèn)”時(shí)下標(biāo)總是從0開(kāi)始,以數(shù)組定義中數(shù)值減一

9、結(jié)束。也就是說(shuō)如果要定義一個(gè)有十個(gè)數(shù)據(jù)的數(shù)組,將這樣書(shū)寫(xiě)代碼:Dim array(10),同樣,當(dāng)你要訪問(wèn)第五個(gè)元素時(shí),實(shí)際的代碼是array(4)。當(dāng)然,可以通過(guò)不指定數(shù)組的個(gè)數(shù)和維數(shù)來(lái)申明動(dòng)態(tài)數(shù)組。等到數(shù)組的個(gè)數(shù)和維數(shù)固定后,使用關(guān)鍵字ReDim來(lái)改變數(shù)組。注意,在改變數(shù)組的大小時(shí),數(shù)組的數(shù)據(jù)會(huì)被破壞,使用關(guān)鍵字preserve來(lái)保護(hù)數(shù)據(jù)。例如:ReDim“空格”preserve“空格”array“括號(hào)”個(gè)數(shù)“逗號(hào)”維數(shù)“括號(hào)”:ReDim preserve array (x , y )3操作符在VBScript運(yùn)算符中,加減乘除

10、都是常用的符號(hào),乘方使用的是?,取模使用的是Mod。在比較操作符中,等于、小于、大于、小于等于(<=)、大于等于(>=)都與常用的符號(hào)是一致的,而不等于是小于和大于連用(<>)。邏輯運(yùn)算符為:“和”操作AND,“非”操作NOT,“或”操作OR。也可以使用操作符  +  和操作符&來(lái)連接字符串,一般使用&操作符;另外還有一個(gè)比較特殊的操作符Is用來(lái)比較對(duì)象,例如。按鈕對(duì)象,如果對(duì)象是同一類(lèi)型,結(jié)果就是真,如果對(duì)象不是同一類(lèi)型,結(jié)果就是假。4條件語(yǔ)句主要有IfThen語(yǔ)句和Select Case語(yǔ)句兩種形式在IfThen語(yǔ)句中,其基本形式

11、為:If  條件 Then    處理?xiàng)l件的語(yǔ)句End If基本形式只能對(duì)單個(gè)條件進(jìn)行驗(yàn)證,如果有兩個(gè)條件,則需要在基本形式中添加單行語(yǔ)句Else,如果還有更多的條件需要驗(yàn)證,則需要添加語(yǔ)句:ElseIf條件Then以及Else,如下:If  條件 Then    處理?xiàng)l件的語(yǔ)句ElseIf 條件 Then    處理?xiàng)l件的語(yǔ)句Else    處理

12、條件的語(yǔ)句End If在Select Case語(yǔ)句中,其基本形式為:Select  Case  變量   Case  條件值    處理?xiàng)l件語(yǔ)句   Case  條件值    處理?xiàng)l件語(yǔ)句   Case  Else    處理?xiàng)l件語(yǔ)句End  Select注意

13、:在執(zhí)行字符串比較時(shí),需要特別注意大小寫(xiě),一般情況下,在比較前,使用lCase函數(shù)將字符串轉(zhuǎn)換成小寫(xiě),使用uCase函數(shù)將字符串轉(zhuǎn)換成大寫(xiě)。5循環(huán)控制語(yǔ)句循環(huán)控制語(yǔ)句共分ForNext循環(huán)、ForEach循環(huán)、DoWhile循環(huán)、DoUntil循環(huán)、While循環(huán)5種形式。在使用循環(huán)控制語(yǔ)句前,首先要對(duì)循環(huán)條件進(jìn)行判斷,如果循環(huán)次數(shù)是有固定次數(shù)的,那么使用ForNext循環(huán),其結(jié)構(gòu)為:For  計(jì)數(shù)器變量  =  開(kāi)始計(jì)數(shù)值  To  最后計(jì)數(shù)值   執(zhí)行循環(huán)體Ne

14、xt如果是需要對(duì)數(shù)組或?qū)ο蠹现械拿恳粋€(gè)元素進(jìn)行判斷,則需要使用ForEach循環(huán),其結(jié)構(gòu)為:For  Each  循環(huán)計(jì)數(shù)變量  In  要查看的對(duì)象或數(shù)組   執(zhí)行處理語(yǔ)句N(xiāo)ext注:在上述兩種循環(huán)中隨時(shí)可以使用Exit For來(lái)退出循環(huán)。如果希望在條件滿足時(shí)執(zhí)行一段代碼則使用DoWhile語(yǔ)句,結(jié)構(gòu)為:Do  While  條件   執(zhí)行循環(huán)體Loop如果希望在條件不滿足時(shí)執(zhí)行代碼,則使用DoUntil語(yǔ)句,結(jié)

15、構(gòu)為:Do  Until  條件   執(zhí)行循環(huán)體Loop注:在這兩種循環(huán)語(yǔ)句中,是使用Exit Do來(lái)退出循環(huán)的。最后一種循環(huán)語(yǔ)句是條件滿足時(shí)一直執(zhí)行循環(huán),如下:While  條件   執(zhí)行循環(huán)體Wend  錯(cuò)誤處理引發(fā)錯(cuò)誤的原因有很多,例如,用戶輸入了錯(cuò)誤類(lèi)型的值,或者腳本找不到必需的文件或者目錄等,可以使用循環(huán)技術(shù)來(lái)處理錯(cuò)誤,但是VBS本身也提供了一些基本技術(shù)來(lái)進(jìn)行錯(cuò)誤的檢測(cè)和處理。(1)最常見(jiàn)的錯(cuò)誤是運(yùn)行時(shí)錯(cuò)誤,也就是說(shuō)錯(cuò)誤在腳本正在運(yùn)行的時(shí)候發(fā)

16、生,是腳本試圖進(jìn)行非法操作的結(jié)果,例如,0被當(dāng)作為除數(shù)。在VBS中,任何運(yùn)行時(shí)錯(cuò)誤都是嚴(yán)重的,此時(shí),腳本將停止運(yùn)行,并在屏幕上顯示一個(gè)錯(cuò)誤消息。可以在腳本的開(kāi)頭添加On Error Resume Next這行語(yǔ)句,它可以告訴VBS在運(yùn)行時(shí)跳過(guò)發(fā)生錯(cuò)誤的語(yǔ)句,緊接著執(zhí)行跟在它后面的語(yǔ)句。這樣,一旦發(fā)生錯(cuò)誤時(shí),該語(yǔ)句將會(huì)把相關(guān)的錯(cuò)誤號(hào)、錯(cuò)誤描述和相關(guān)源代碼壓入錯(cuò)誤堆棧。(2)雖然On  Error  Resume  Next語(yǔ)句可以防止VBS腳本在發(fā)生錯(cuò)誤時(shí)停止運(yùn)行,但是它并不能真正處理錯(cuò)誤,要處理錯(cuò)誤,需要在腳本中增加一些語(yǔ)句,用來(lái)檢查錯(cuò)誤條件,并在錯(cuò)誤發(fā)生時(shí)處理它

17、。VBScript恰好提供了一個(gè)對(duì)象“err對(duì)象”,它有兩個(gè)方法Clear、Raise,5個(gè)屬性:description、helpcontext、helpfile、number、source、err對(duì)象不用引用實(shí)例,可以直接使用,例如:On  Error  Resume  Next a = 5 b = 0 c = a / b If err.number <> 0 T

18、hen WScript.echo  err.number &"/"& err.description &"/"& err.source End If執(zhí)行一下該腳本,VBS會(huì)詳細(xì)地報(bào)出錯(cuò)誤信息,如圖2-5所示。圖2-52.1.3  常用函數(shù)解析Date  函數(shù)作用:返回當(dāng)前系統(tǒng)日期。語(yǔ)法:Data。參數(shù):無(wú)。示例:Dim MyDateMyDate = Date Msgbox&#

19、160;MyDate使用QTP執(zhí)行以后的結(jié)果如圖2-6所示。圖2-6-函數(shù)實(shí)際項(xiàng)目臆測(cè)&點(diǎn)評(píng)-經(jīng)常需要在自動(dòng)化測(cè)試過(guò)程中寫(xiě)一些的測(cè)試執(zhí)行Log,那么抓取時(shí)間的函數(shù)就相當(dāng)有必要了,也可以用于錯(cuò)誤截圖時(shí)的后綴名。Now  函數(shù)作用:返回當(dāng)前系統(tǒng)時(shí)間。語(yǔ)法:Now。參數(shù):無(wú)。示例:Dim MyNowMyNow = Now Msgbox MyNow使用QTP執(zhí)行以后的結(jié)果如圖2-7所示。圖2-7-函數(shù)實(shí)際項(xiàng)目臆測(cè)&點(diǎn)評(píng)-如果說(shuō)寫(xiě)Log文件,更加推薦本函數(shù),因?yàn)橛芯唧w的時(shí)間而不僅僅只有日期。如果作為錯(cuò)誤截圖,個(gè)人認(rèn)為本函數(shù)相對(duì)就

20、比較不合適一些!畢竟我們都知道圖片的文件名是不能有“:”這種字符的,即使最終去除了這些特殊字符,但是整體的表現(xiàn)力遠(yuǎn)不如前者,同時(shí)也會(huì)顯得很繁瑣!DateDiff  函數(shù)作用:返回兩個(gè)日期之間的間隔。語(yǔ)法:DateDiff (interval, date1, date2)。參數(shù)。interval:通俗地講它就是事先設(shè)一個(gè)時(shí)間比較單位,這個(gè)單位可以且只可以是表2-1中的單位。表2-1                 &#

21、160;      時(shí)間比較單位SettingDescriptionyyyyYearqQuartermMonthyDay of yeardDaywWeekdaywwWeek of yearhHournMinutesSecond注:參數(shù)只能設(shè)置成上表中左邊這一欄的數(shù)據(jù)。date1:比較數(shù)據(jù)1。date2:比較數(shù)據(jù)2。示例:Dim tDateDiff,date1,date2date1 = Nowdate2 = DatetDateDiff = 

22、;DateDiff("d",date1,date2)Msgbox tDateDiff使用QTP執(zhí)行以后的結(jié)果如圖2-8所示。圖2-8注:返回0是正確的,因?yàn)閮蓚€(gè)Date之間的天數(shù)差異是0天,讀者可以自行嘗試其他參數(shù)。-函數(shù)實(shí)際項(xiàng)目臆測(cè)&點(diǎn)評(píng)-作者很興奮地告訴讀者,使用好這個(gè)函數(shù),QTP一樣能做一些簡(jiǎn)單的性能測(cè)試工作!畢竟,這個(gè)函數(shù)可以對(duì)比兩個(gè)事務(wù)間的時(shí)間間距,而且可以精確到以秒為單位!Left  函數(shù)作用:返回字符串最左邊的指定數(shù)量的字符。語(yǔ)法:Left (string, length)。參數(shù)。string:字符串表達(dá)式,其最左邊的字符被返回。如

23、果string參數(shù)中包含Null,則返回Null。length:數(shù)值表達(dá)式,指明要返回的字符數(shù)目。如果是0,返回零長(zhǎng)度字符串("");如果大于或等于string參數(shù)中的字符總數(shù),則返回整個(gè)字符串。示例:Dim MyString, LeftStringMyString = "VBScript"LeftString = Left (MyString, 3)結(jié)果:最終應(yīng)返回VBS-函數(shù)實(shí)際項(xiàng)目臆測(cè)&點(diǎn)評(píng)-如果讀者需要某個(gè)字符串的指定幾個(gè)字符時(shí),就是使用該函數(shù)的時(shí)機(jī)!Righ

24、t  函數(shù)作用:返回字符串最右邊的指定數(shù)量的字符。語(yǔ)法:Right(string, length)。參數(shù)。string:字符串表達(dá)式,其最右邊的字符被返回。如果string參數(shù)中包含Null,則返回Null。length:數(shù)值表達(dá)式,指明要返回的字符數(shù)目。如果是0,返回零長(zhǎng)度字符串("");如果大于或等于string參數(shù)中的字符總數(shù),則返回整個(gè)字符串。示例:Dim MyString, RightStringMyString = "VBSCript"RightString = Right

25、 (MyString, 6)結(jié)果:最終應(yīng)返回SCript區(qū)別在于一個(gè)從左到右,一個(gè)從右到左!Len  函數(shù)作用:返回字符串內(nèi)字符的數(shù)目。語(yǔ)法:Len(string)。參數(shù)。string:任意有效的字符串表達(dá)式。如果string參數(shù)包含Null,則返回Null。示例:Dim MyStringMyString = Len (“VBScript”)最終應(yīng)返回8-函數(shù)實(shí)際項(xiàng)目臆測(cè)&點(diǎn)評(píng)-往往用于對(duì)比兩個(gè)字符串時(shí)的一些特殊業(yè)務(wù)需求,有時(shí)也可以用于代碼調(diào)試。Mid  函數(shù)作用:從字符串中返回指定數(shù)目的字符。語(yǔ)法:Mid

26、(string, start, length)。參數(shù)。string:字符串表達(dá)式,從中返回字符。如果string包含Null,則返回Null。start:string中被提取的字符部分的開(kāi)始位置。如果start超過(guò)了string中字符的數(shù)目,Mid將返回零長(zhǎng)度字符串("")。length:要返回的字符數(shù)。如果省略或length超過(guò)文本的字符數(shù)(包括start處的字符),將返回字符串中從start到字符串結(jié)束的所有字符。示例:Dim MyVarMyVar = Mid ("VB script is 

27、fun!", 4, 6) 結(jié)果:最終應(yīng)返回script-函數(shù)實(shí)際項(xiàng)目臆測(cè)&點(diǎn)評(píng)-比Left和Right智能,它可以在任意位置獲取,但是函數(shù)本身比較繁瑣,建議只在Left和Right函數(shù)不能勝任時(shí)使用。Split  函數(shù)作用。在指定的分隔符參數(shù)出現(xiàn)的所有位置斷開(kāi)string對(duì)象,將其拆分為子字符串,然后以數(shù)組形式返回子字符串。語(yǔ)法:Split (expression, delimiter, count, compare)。參數(shù)。expression:主體字符串,也就是要被拆分處的字符或字符串。delimiter:拆分元素,默認(rèn)是(&quo

28、t;?")。count:Number要放入數(shù)組中的項(xiàng)目數(shù)(可選)。compare:0是二進(jìn)制比較,1是文本比較。0為缺省值。示例:Dim MyString, MyArray, MsgMyString = "VBscriptXisXfun!"MyArray = Split (MyString, "x", -1, 1)返回結(jié)果:' MyArray(0) = "VBscrpt".

29、9; MyArray(1) = "is".' MyArray(2) = "fun!".Msg = MyArray(0) & " " & MyArray(1)Msg = Msg   & " " & MyArray(2)MsgBox Msg使用QTP執(zhí)行

30、以后的結(jié)果如圖2-9所示。圖2-9-函數(shù)實(shí)際項(xiàng)目臆測(cè)&點(diǎn)評(píng)-在測(cè)試中經(jīng)常獲取到一個(gè)關(guān)鍵字符串后想去使用它,比如將獲取到的一個(gè)關(guān)鍵信息寫(xiě)入日志,但如果該信息過(guò)于冗長(zhǎng)或者有些字符串并不想使用它,完全可以使用Split函數(shù)來(lái)解決這類(lèi)問(wèn)題。LTrim、RTrim與Trim  函數(shù)作用:返回不帶前導(dǎo)空格(LTrim)、后續(xù)空格(RTrim)或所有空格(Trim)的字符串副本。語(yǔ)法:LTrim(string)。RTrim(string)。Trim(string)。參數(shù)。string:任意有效的字符串表達(dá)式。如果string參數(shù)中包含Null,則返回Null。示例。Dim MyV

31、arMyVar = LTrim ("   vbscript  ")   'MyVar 包含 "vbscript "MyVar = RTrim ("   vbscript  ")   'MyVar 包含 "   vb

32、script"MyVar = Trim ("   vbscript  ")   'MyVar 包含 "vbscript"-函數(shù)實(shí)際項(xiàng)目臆測(cè)&點(diǎn)評(píng)-假設(shè)我們要獲取一個(gè)元素在頁(yè)面上的值,然后使用這個(gè)值做一些檢查和驗(yàn)證的判斷。但是經(jīng)常會(huì)遇到這樣一個(gè)困擾,打個(gè)比方,我們從觀察的角度上看(通過(guò)Msgbox的方法等),取到的值的確是“qtp”,然后寫(xiě)如下這段很簡(jiǎn)單的判斷代碼:If a =

33、60;"qtp" Then          Reporter.ReportEvent micPass,"檢查變量a的值","等于qtp"Else          Reporter.ReportEvent micFail,"檢查變量a的值","等于qtp"End

34、60;If但是最終驗(yàn)證失敗了,為什么?相信軟件測(cè)試中遇到過(guò)很多次類(lèi)似的問(wèn)題,其實(shí)QTP取下來(lái)的值多了一個(gè)空格,所以導(dǎo)致最后判斷失敗。遇到類(lèi)似的情況,就完全可以用Trim來(lái)解決問(wèn)題。Replace  函數(shù)作用:返回字符串,其中指定數(shù)目的某子字符串被替換為另一個(gè)子字符串。語(yǔ)法:Replace (expression, find, replacewith, compare, count, start)。參數(shù)。expression:必選項(xiàng)字符串表達(dá)式包含要替代的子字符串。find:必選項(xiàng)被搜索的子字符串。replacewith:必選

35、項(xiàng)用于替換的子字符串。start:可選項(xiàng)expression中開(kāi)始搜索子字符串的位置。如果省略,默認(rèn)值為1。在和count關(guān)聯(lián)時(shí)必須用。count:可選項(xiàng)執(zhí)行子字符串替換的數(shù)目。如果省略,默認(rèn)值為-1,表示進(jìn)行所有可能的替換。在和start關(guān)聯(lián)時(shí)必須用。compare:可選項(xiàng)在計(jì)算子字符串時(shí)使用的比較類(lèi)型的數(shù)值。有關(guān)數(shù)值如表2-2所示。如果省略,缺省值為0,這意味著必須進(jìn)行二進(jìn)制比較。表2-2                 

36、          有關(guān)數(shù)值常    數(shù)值描    述vbBinaryCompare0執(zhí)行二進(jìn)制比較vbTextCompare1執(zhí)行文本比較Replace返回值如表2-3所示表2-3                    Replace返回以下值If

37、Replace返回expression為零長(zhǎng)度零長(zhǎng)度字符串("")expression為Null錯(cuò)誤find 為零長(zhǎng)度expression的副本replacewith為零長(zhǎng)度expression的副本,其中刪除了所有由find參數(shù)指定的內(nèi)容start > Len(expression)零長(zhǎng)度字符串count為0expression的副本注:Replace函數(shù)的返回值是經(jīng)過(guò)替換(從由start指定的位置開(kāi)始到expression字符串的結(jié)尾)后的字符串,而不是原始字符串從開(kāi)始至結(jié)尾的副本。示例:Dim MyStringMyStri

38、ng = Replace ("XXpXXPXXp", "p", "Y") '二進(jìn)制比較從字符串左端開(kāi)始。返回 "XXYXXPXXY"。-函數(shù)實(shí)際項(xiàng)目臆測(cè)&點(diǎn)評(píng)-部分特殊需求時(shí)使用。2.1.4  Function VS Sub終極角逐本小節(jié)就來(lái)介紹下VBS中函數(shù)的應(yīng)用,并且此應(yīng)用在平時(shí)編寫(xiě)公共函數(shù)庫(kù)時(shí)經(jīng)常會(huì)被使用到。下面介紹一下VBS中的兩個(gè)函數(shù)。(1)Sub過(guò)程:Sub其實(shí)就是一個(gè)過(guò)程復(fù)用,沒(méi)有返回值。詳解:Sub過(guò)程是

39、包含在Sub和End Sub語(yǔ)句之間的一組VBScript語(yǔ)句,執(zhí)行操作但不返回值。Sub過(guò)程可以使用參數(shù)(由調(diào)用過(guò)程傳遞的常數(shù)、變量或表達(dá)式)。如果Sub過(guò)程無(wú)任何參數(shù),則Sub語(yǔ)句必須包含空括號(hào)()。實(shí)例:Call QtpSub    調(diào)用SubSub QtpSub    Msgbox "我是Sub"End Sub(2)Function  函數(shù):Function是一個(gè)經(jīng)常會(huì)用到的函數(shù),可以有返回值,也有參數(shù)。詳解:Function過(guò)程是包含在

40、Function和End Function語(yǔ)句之間的一組VBScript語(yǔ)句。Function過(guò)程與Sub過(guò)程類(lèi)似,但是Function過(guò)程可以返回值。Function過(guò)程可以使用參數(shù)(由調(diào)用過(guò)程傳遞的常數(shù)、變量或表達(dá)式)。如果Function過(guò)程無(wú)任何參數(shù),則Function語(yǔ)句必須包含空括號(hào)()。Function過(guò)程通過(guò)函數(shù)名返回一個(gè)值,這個(gè)值是在過(guò)程的語(yǔ)句中賦給函數(shù)名的。Function返回值的數(shù)據(jù)類(lèi)型總是Variant。實(shí)例:Dim myNamemyName = QtpFunction("QTP自動(dòng)化測(cè)試技術(shù)領(lǐng)航") 

41、0; '調(diào)用返回函數(shù)給變量Msgbox myNameFunction QtpFunction (tName)  QtpFunction = tName  '返回函數(shù) End Function運(yùn)行結(jié)果如圖2-10所示。圖2-10注意:在QTP中調(diào)用函數(shù)可以使用Call也可以不使用Call,但是一旦使用Call就需要有返回值,即需要給參數(shù)的外面增加一對(duì)括號(hào)。2.1.5  獲取對(duì)象引用GetRef方法在本小節(jié)中,為讀者簡(jiǎn)單介紹一下VBS中的函數(shù)指針,我們都

42、知道函數(shù)指針是程序算法的一部分,它和數(shù)組一樣也需要占用一部分的存儲(chǔ)空間,也都有相應(yīng)的地址。不但可以使用指針變量指向數(shù)組的首地址,同樣也可以使用指針指向函數(shù)代碼的首地址,我們把指向函數(shù)代碼首地址的指針變量稱(chēng)為函數(shù)指針。GetRef:它所提供的功能被稱(chēng)為函數(shù)指針,即它指向了在指定事件發(fā)生時(shí)要執(zhí)行的過(guò)程的地址。實(shí)例:'變量強(qiáng)制申明 Option Explicit '定義變量 Dim new_helloworld '定義helloworld函數(shù) Function helloworld (c

43、ontent)   MsgBox content End Function '使變量new_helloworld指向helloworld函數(shù) Set new_helloworld = GetRef("helloworld") 調(diào)用new_helloworldCall new_helloworld ("QTP自動(dòng)化測(cè)試技術(shù)領(lǐng)航")上面這段代碼是把變量new_helloworld的指針指向helloworld函數(shù)

44、,這樣new_helloworld就具有了helloworld函數(shù)的功能,放到QTP中執(zhí)行以后的結(jié)果如圖2-11所示。圖2-11如圖2-11所示,指針成功指向了helloworld函數(shù),并最終成功調(diào)用了MsgBox方法。2.1.6  類(lèi)的簡(jiǎn)單應(yīng)用“類(lèi)”這個(gè)名詞應(yīng)該是不陌生的,但是很多自動(dòng)化測(cè)試新人往往不知道,其實(shí)在VBScript中一樣可以使用Class“類(lèi)”!而且Class“類(lèi)”在自動(dòng)化測(cè)試中相當(dāng)常用,對(duì)于代碼量增大時(shí),類(lèi)的結(jié)構(gòu)化就充分體現(xiàn)出了它強(qiáng)大的優(yōu)勢(shì),下面就來(lái)看一下類(lèi)的組成部分以及它們的一些用法。1初始化與終結(jié)化的應(yīng)用Class User  &#

45、160; Private Sub Class_Initialize       '當(dāng)這個(gè)類(lèi)被創(chuàng)建時(shí)執(zhí)行    End Sub    Private Sub Class_Terminate       '當(dāng)類(lèi)被銷(xiāo)毀時(shí)執(zhí)行    End Sub E

46、nd Class2Get與Set的應(yīng)用Class User    '*定義變量名*    Private s_name    Private s_age    '*定義Get方法*    Public Property Get name      nam

47、e = s_name    End Property    Public Property Get age      age = s_age    End Property    '*定義Set方法*    Public Prope

48、rty Let name (new_name)      s_name = new_name    End Property   Public Property Let age (new_age)      s_age = new_age    En

49、d Property End Class Set user1 = New user user1.age = "100"  = "拉生" MsgBox "姓名:" ++ " 年齡:" +user1.age把以上這段代碼放入QTP執(zhí)行,結(jié)果如圖2-12所示。圖2-123函數(shù)的應(yīng)用Cl

50、ass User   Sub msgNow     MsgBox now   End Sub   Function msgContent(content)     MsgBox content   End Function End Class Set user1

51、0;= New user user1.msgContent "當(dāng)前何時(shí)?"user1.msgNow把以上這段代碼放入QTP中執(zhí)行,結(jié)果如圖2-14和圖2-13所示。圖2-13圖2-14總結(jié):雖然Class很實(shí)用,但可惜的是在QTP中,目前還不支持Class的編輯,即無(wú)法“點(diǎn)”出Class。因此不得不通過(guò)其他工具編輯完畢以后再放入QTP中。2.1.7  VBS中SendKeys與項(xiàng)目結(jié)合的妙用這個(gè)小節(jié)主要是介紹一下如何使用VBS中的SendKeys命令(這個(gè)命令的作用就是模擬鍵盤(pán)操作,將一個(gè)或多個(gè)按鍵指令發(fā)送到指定Window

52、s窗口來(lái)控制應(yīng)用程序運(yùn)行),巧妙地使用它可以極大地方便我們的常用操作,其使用格式為。object.SendKeys  string其中,“object”表示W(wǎng)shShell對(duì)象;“string”表示要發(fā)送的按鍵指令字符串,需要放在英文雙引號(hào)中,而在按鍵指令字符串中通常又把它分為兩類(lèi)。1基本鍵。一般來(lái)說(shuō),要發(fā)送的按鍵指令都可以直接用該按鍵字符本身來(lái)表示,例如,要發(fā)送字母“q”,使用“WshShell.SendKeys "q"”即可。當(dāng)然,也可直接發(fā)送多個(gè)按鍵指令,只需要將按鍵字符按順序排列在一起即可,例如,要發(fā)送按鍵“qtp”,則可以使用“WshShell

53、.SendKeys "qtp"”來(lái)表示。2特殊功能鍵。對(duì)于需要與Shift、Ctrl、Alt?3個(gè)控制鍵組合的按鍵,SendKeys使用特殊字符來(lái)表示。 Shift:WshShell.SendKeys "+"。 Ctrl:WshShell.SendKeys ""。 Alt:WshShell.SendKeys "%"。由于“+”、“”這些字符用來(lái)表示特殊的控制按鍵了,那又如何表示這些按鍵呢? 很簡(jiǎn)單,只要用大括號(hào)括住這些字符即可,例如。要發(fā)送加號(hào)“+”,可使用“WshShell.SendKeys "+&qu

54、ot;”另外,對(duì)于一些不會(huì)生成字符的控制功能按鍵,也同樣需要使用大括號(hào),把按鍵的名稱(chēng)“括起來(lái)”,例如,要發(fā)送回車(chē)鍵,需要用“WshShell.SendKeys "ENTER"”表示,發(fā)送向下的方向鍵用“WshShell.SendKeys "DOWN"”表示,其他的比如。 Space:WshShell.SendKeys " "。 :WshShell.SendKeys "RIGHT"。 :WshShell.SendKeys "UP"。 F1:WshShell.SendKeys "F1&qu

55、ot;。注意:如果需要發(fā)送多個(gè)重復(fù)的單字母按鍵,不必重復(fù)輸入該字母,SendKeys允許使用簡(jiǎn)化格式進(jìn)行描述,使用格式為“按鍵  數(shù)字”。例如,要發(fā)送10個(gè)字母“q”,則輸入“WshShell.SendKeys "q 10"”即可。大致的語(yǔ)法都已經(jīng)了解了,其實(shí)其他的按鍵都是遵循這些法則的,接下來(lái)讓我們來(lái)看看一些使用Sendkeys的實(shí)例。實(shí)例一:按F5鍵刷新桌面:Dim WshShell , Path , iSet WshShell = WScript.CreateObject(&qu

56、ot;WScript.Shell")WshShell.SendKeys "F5"實(shí)例二:自動(dòng)重啟電腦:Set WshShell = CreateObject("WScript.Shell")WshShell.SendKeys "ESCu"WshShell.SendKeys "R"實(shí)例三:?jiǎn)?dòng)任務(wù)管理器:Set WshShell = CreateObject("WScript.Shell")WshS

57、hell.SendKeys "+ESC"實(shí)例四:在記事本中輸入“Happy Birthday!”字樣并保存為birth.txt:Dim WshShellSet WshShell = WScript.CreateObject("WScript.Shell")WshShell.Run "notepad"WScript.Sleep 1500    wait 1.5 secondWshShell.AppActiva

58、te "無(wú)標(biāo)題 - 記事本"WshShell.SendKeys "H"WScript.Sleep 500WshShell.SendKeys "a"WScript.Sleep 500WshShell.SendKeys "p"WScript.Sleep 500WshShell.SendKeys "p"WScript.Sleep 500WshShell.SendKeys "y"WScript.Sleep 500WshShell.SendKeys " "WScript.Sleep 500WshShell.SendKeys "B"WScript.Sleep 500WshShell.SendKeys "i"WScript.Sleep 500WshShell.SendKeys "r"WScript.Sleep

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論