場(chǎng)景恢復(fù)Recovery Scenarios
設(shè)置場(chǎng)景恢復(fù):
Resources ——> Recovery Scenario Manager新增顿痪,具體參照向?qū)гO(shè)置衫哥;
在File ——> Settings ——> Recovery中進(jìn)行添加鸟召,Activate recovery scenarios中應(yīng)選擇“On error”怜校。
不能場(chǎng)景恢復(fù)的情況:
測(cè)試腳本中含有的對(duì)象不在對(duì)象庫(kù)中佳头;
VBScript腳本語(yǔ)言自身錯(cuò)誤鹰贵;
當(dāng)MsgBox切斷測(cè)試。
官方提供的場(chǎng)景恢復(fù)文件:安裝目錄\recovery\WebRecovery.qrs
Reporter函數(shù) ReportEvent方法
語(yǔ)法:Reporter.ReportEvent 狀態(tài), 步驟名稱(chēng), 詳細(xì)說(shuō)明, [截圖路徑]?
ReporterEvent后面必須跟一個(gè)空格畜晰,micPass對(duì)應(yīng)數(shù)字0砾莱,micFail對(duì)應(yīng)數(shù)字1,micDone對(duì)應(yīng)數(shù)字2凄鼻,micWarning對(duì)應(yīng)數(shù)字3.
狀態(tài)優(yōu)先級(jí)從高到低排列:micFail>micWarning>micPass>micDone
與CheckProperty區(qū)別:
CheckProperty只有Pass和Fail兩種狀態(tài)腊瑟,ReportEvent有四種;
CheckProperty檢查屬性块蚌,ReportEvent可檢查各種代碼邏輯闰非;
CheckProperty的步驟名和詳細(xì)說(shuō)明是系統(tǒng)自動(dòng)生成的,ReportEvent可自由編寫(xiě)峭范;
ReportEvent可將截圖寫(xiě)在測(cè)試報(bào)告中财松。
截圖到測(cè)試報(bào)告中:
FileName3="E:\zlp\3.png"
Browser("個(gè)人空間管理").Page("個(gè)人空間管理").CaptureBitmap FileName3,True
IfROValue="123456"Then
Reporter.ReportEvent micPass,"第三步檢驗(yàn)訪問(wèn)密碼","驗(yàn)證實(shí)際輸入訪問(wèn)密碼是否與設(shè)定一致:成功",FileName3
Else
Reporter.ReportEvent micFail,"第三步檢驗(yàn)訪問(wèn)密碼","驗(yàn)證實(shí)際輸入訪問(wèn)密碼是否與設(shè)定一致:失敗",FileName3
EndIf
Data Table
在QTP11.5版本中首先需要雙擊列名,輸入數(shù)據(jù)表列名纱控,默認(rèn)列名是為空的辆毡。
語(yǔ)法:
? ? ?DataTable.Value(列名,Sheet名)
? ? ?或
? ? ?DataTable(列名甜害,Sheet名)到逊,會(huì)自動(dòng)出現(xiàn)代碼提示所有當(dāng)前(Local Sheet)Sheet下的列名宙攻。
注意:Sheet名區(qū)分大小寫(xiě)辕近。
Global Sheet
? ? ?1. Global Sheet是一個(gè)全局變量欢伏,有幾行數(shù)據(jù)(中間有行為空也會(huì)執(zhí)行)主慰,程序就要回放幾次,不用寫(xiě)循環(huán)語(yǔ)句鲫售;
? ? ?2. 若Global Sheet中有多行數(shù)據(jù)共螺,即使沒(méi)有使用該Sheet,有幾行數(shù)據(jù)腳本就會(huì)執(zhí)行幾遍情竹;
? ? ?3. 打開(kāi)File—>Settings—>Run藐不,設(shè)置Data Table iterations數(shù)據(jù)表迭代,Global Sheeet受該設(shè)置控制鲤妥;
Local Sheet
1. Local Sheet是局部變量佳吞,且不受Data Table iterations數(shù)據(jù)表迭代,無(wú)論有多少行數(shù)據(jù)棉安,都只運(yùn)行一次底扳;
? ? ?2. Local Sheet不能將值傳遞給另一個(gè)腳本或另一個(gè)Action。
? ? ?3. 下圖的設(shè)置時(shí)針對(duì)Local Sheet下的測(cè)試數(shù)據(jù)贡耽。
區(qū)別:
Global Sheet執(zhí)行所有行衷模,是執(zhí)行所有腳本,如有多個(gè)Action蒲赂,則每個(gè)Action都會(huì)執(zhí)行阱冶;
Local Sheet是只執(zhí)行自身的Action多次;
如Global Sheet開(kāi)啟所有行滥嘴,Action1開(kāi)啟所有行:則執(zhí)行Global Sheet第一行木蹬,Action1執(zhí)行所有行;Global Sheet 執(zhí)行第二行若皱,Action1執(zhí)行所有行镊叁。
Object Identification對(duì)象識(shí)別
QTP自動(dòng)化測(cè)試原理:
? ? ?(1)轉(zhuǎn)化:封裝真實(shí)被測(cè)對(duì)象并轉(zhuǎn)化為QTP對(duì)象到對(duì)象庫(kù);
? ? ?(2)對(duì)比:對(duì)比對(duì)象庫(kù)里的對(duì)象鑒別屬性和與形式的真是被測(cè)對(duì)象的鑒別屬性走触;
? ? ?(3)匹配:對(duì)比后若一致晦譬,則說(shuō)明對(duì)象成功匹配并可繼續(xù)對(duì)該真實(shí)被測(cè)對(duì)象進(jìn)行后續(xù)操作,如果兩者不一致則報(bào)錯(cuò)互广,提示為對(duì)象無(wú)法識(shí)別敛腌。
Object Identification對(duì)象識(shí)別:Tools—>Object Identification
? ? ?在Object Identification對(duì)話框中設(shè)置的屬性,在對(duì)象庫(kù)中可查看到惫皱。Mandatory Properties(強(qiáng)制屬性)該區(qū)域設(shè)置的屬性像樊,在被測(cè)對(duì)象與對(duì)象庫(kù)匹配時(shí),只要有一個(gè)屬性不一致就會(huì)報(bào)錯(cuò)旅敷。Assistive Properties(輔助屬性)凶硅,QTP默認(rèn)所有的對(duì)象模型在這個(gè)區(qū)域都沒(méi)有屬性。
? ? ?QTP11.5版本中扫皱,在Object Identification中增加或刪除Mandatory Properties足绅,對(duì)已存在對(duì)象庫(kù)中的對(duì)象屬性是沒(méi)有影響的,只有之后增加的對(duì)象屬性才會(huì)有改變韩脑。
順序標(biāo)識(shí)符
Index索引- 指示該對(duì)象在應(yīng)用程序代碼中相對(duì)于其他描述都相同的其他對(duì)象的顯示順序氢妈,index順序標(biāo)識(shí)是從左到右進(jìn)行的。
? ? ?1) 在"相同描述的對(duì)象"出現(xiàn)多個(gè)的情況下就一定有index,在一個(gè)對(duì)象現(xiàn)有"描述屬性"已經(jīng)能唯一標(biāo)識(shí)一個(gè)對(duì)象的情況下,index是不會(huì)出現(xiàn)的段多。此時(shí)的index屬性QTP里面標(biāo)識(shí)為"none"首量;
? ? ?2)?index在對(duì)象是唯一的情況下,沒(méi)有任何意義和價(jià)值;
? ? ?3)當(dāng)index,CreationTime屬性在對(duì)象庫(kù)中為none的時(shí)候,不能使用SetTOProperty賦值index屬性进苍,賦值能夠成功加缘,但是無(wú)法使用賦值后index屬性來(lái)正確識(shí)別對(duì)象;
? ? ?4)index屬性是QTP自己標(biāo)識(shí)的.和程序編程里的index無(wú)關(guān)觉啊,index屬性的生成是按照相同對(duì)象出現(xiàn)的順序來(lái)排列的拣宏,就是用ChildObjects方法獲得的對(duì)象集合中item(i)索引的順序;
? ? ?5)?index屬性我們只能?chē)L試改變對(duì)象庫(kù)中的,不能改變實(shí)際對(duì)象
Location位置- 指示該對(duì)象在父窗口杠人、框架或?qū)υ捒蛑邢鄬?duì)于其他描述都相同的其他對(duì)象的顯示順序勋乾,location順序標(biāo)識(shí)是用上到下進(jìn)行的。
CreationTime-?僅對(duì)瀏覽器對(duì)象生效嗡善,按對(duì)象產(chǎn)生時(shí)間先后順序排列辑莫。
自動(dòng)化測(cè)試介紹
1、概念
自動(dòng)化測(cè)試是以程序測(cè)試程序罩引,以代碼體現(xiàn)思想各吨,以腳本的運(yùn)行代替手工測(cè)試的過(guò)程。
2袁铐、優(yōu)勢(shì)
快速揭蜒、高效、可完成手工測(cè)試相當(dāng)困難或無(wú)法完成的測(cè)試昭躺、可重復(fù)性等忌锯。
回歸側(cè)四更方便、可靠领炫;
可運(yùn)行更多偶垮、更繁瑣的測(cè)試,且快速帝洪、高效似舵;
可執(zhí)行一些對(duì)于手工測(cè)試來(lái)說(shuō)相當(dāng)困難或根本做不到的測(cè)試;
更好地利用資源葱峡,使資源的使用更有價(jià)值砚哗;
具有一致性和可重復(fù)性的特點(diǎn);
自動(dòng)化定華測(cè)試腳本完全具有復(fù)用性砰奕;
使軟件更有信任度蛛芥;
多環(huán)境下測(cè)試提鸟。
3、不足
永遠(yuǎn)不能代替手工測(cè)試仅淑;
無(wú)法完全保證測(cè)試的正確性称勋;
發(fā)現(xiàn)的bug遠(yuǎn)少于手工測(cè)試;
成本大涯竟。
4赡鲜、適合項(xiàng)目(人力資源不考慮)
項(xiàng)目周期長(zhǎng),系統(tǒng)版本多庐船;
需求變更不頻繁银酬;
測(cè)試對(duì)象可被自動(dòng)化工具識(shí)別;
需反復(fù)測(cè)試的項(xiàng)目筐钟。
5揩瞪、何時(shí)引入
項(xiàng)目只有在經(jīng)歷了完整的系統(tǒng)測(cè)試后才具備基本引入自動(dòng)化測(cè)試的條件。
6盗棵、流程
可行性分析壮韭、測(cè)試需求分析(需要確定測(cè)試覆蓋率以及自動(dòng)化測(cè)試粒度,測(cè)試用例的篩選)纹因、制定測(cè)試計(jì)劃(時(shí)間人員安排等)喷屋、設(shè)計(jì)(框架、用例)瞭恰、腳本開(kāi)發(fā)屯曹、執(zhí)行(環(huán)境搭建、執(zhí)行腳本)惊畏、提交測(cè)試產(chǎn)物恶耽、腳本維護(hù)。
說(shuō)明:自動(dòng)化測(cè)試需要回歸原點(diǎn)颜启,即執(zhí)行完的場(chǎng)景需要恢復(fù)到執(zhí)行前的初始狀態(tài)偷俭,否則會(huì)出現(xiàn)第一次腳本執(zhí)行正確,第二次報(bào)錯(cuò)的情況缰盏。
場(chǎng)景恢復(fù):自定義函數(shù)RecoveryFunction
場(chǎng)景恢復(fù)自定義行數(shù)RecoveryFunction涌萤,該函數(shù)在幫助文檔中未說(shuō)明。
使用該函數(shù)的例子:
打開(kāi)Recovery Scenario Manager口猜,新建一個(gè)場(chǎng)景恢復(fù)文件负溪;
選擇Test run error,如下圖济炎,下一步后選擇any error川抡;
選擇Function call自定義場(chǎng)景恢復(fù)函數(shù);
選擇一個(gè)空文件须尚,如為Recovery.txt ,輸入函數(shù)內(nèi)容:
選擇Stop the test run崖堤,并輸入場(chǎng)景名稱(chēng)侍咱,完成該場(chǎng)景恢復(fù)的設(shè)置。
RecoveryFunction1函數(shù)有四個(gè)參數(shù)Object, Method, Arguments, retVal密幔。
Object:自動(dòng)映射當(dāng)前錯(cuò)誤的QTP封裝測(cè)試對(duì)象放坏,輸入對(duì)象庫(kù)中的LogicName;
Method:輸入測(cè)試對(duì)象的方法老玛;
Arguments:自動(dòng)映射當(dāng)前錯(cuò)誤的所有參數(shù),Arguments是一個(gè)數(shù)組钧敞,使用join連接數(shù)組蜡豹;
retVal:自動(dòng)映射當(dāng)前錯(cuò)誤的具體錯(cuò)誤信息,retVal是Long類(lèi)型溉苛,必須使用DescribeResult方法進(jìn)行轉(zhuǎn)化镜廉。
Function RecoveryFunction1(Object, Method, Arguments, retVal)
print Object.GetTOProperty("testobjName")
print Method
print?join(Arguments,"")
print?DescribeResult?(Result)
End Function
自動(dòng)化模型對(duì)象AOM
AOM:Automation Object Model。
? ? ?VB愚战、C#和JavaScript語(yǔ)言都能調(diào)用AOM來(lái)自動(dòng)調(diào)用QTP娇唯,QTP安裝程序中已經(jīng)注冊(cè)了一個(gè)核心DLL文件的COM(二進(jìn)制可執(zhí)行程序),位于安裝文件夾BIN目錄下的QTObjectModel.dll寂玲。
以下為在VBSEdit工具中引用QTObjectModel.dll:
打開(kāi)VBSEdit塔插,Tools ——> References ——>Add;
引用完后拓哟,創(chuàng)建AOM對(duì)象想许,就會(huì)有相應(yīng)的代碼提示。
以下為啟動(dòng)到關(guān)閉QTP的腳本
'創(chuàng)建AOM對(duì)象
Setqtapp=CreateObject("Quicktest.Application")
'啟動(dòng)QTP
qtapp.Launch
'設(shè)置為可見(jiàn)
qtapp.Visible=True
'新建一個(gè)test腳本
qtapp.New
'為Action1設(shè)置執(zhí)行腳本為msgbox 0
qtapp.Test.Actions("Action1").SetScript"msgbox 0"
'執(zhí)行測(cè)試腳本
qtapp.Test.Run
'退出QTP断序,關(guān)閉
qtapp.Quit
'釋放對(duì)象
Setqtapp=nothing
執(zhí)行以上代碼時(shí)流纹,系統(tǒng)中會(huì)出現(xiàn)一個(gè)QTAutomationAgent.exe的進(jìn)程,代碼執(zhí)行完后自動(dòng)關(guān)閉违诗。但擋在調(diào)試代碼或做非法終止以上代碼的行為而最終未能將代碼執(zhí)行到完畢的話漱凝,此進(jìn)程不會(huì)自動(dòng)關(guān)閉,這樣會(huì)導(dǎo)致第二次創(chuàng)建AOM對(duì)象報(bào)錯(cuò)“遠(yuǎn)程過(guò)程調(diào)用失敗”(我未遇到)诸迟,需要手動(dòng)關(guān)閉該進(jìn)程茸炒。
注意:在QTP中直接創(chuàng)建AOM對(duì)象是會(huì)報(bào)錯(cuò)的,當(dāng)開(kāi)啟一個(gè)QTP后不能再開(kāi)啟另一個(gè)亮蒋,報(bào)錯(cuò)如下圖:
可使用?Setqtapp=GetObject("","Quicktest.Application")扣典,實(shí)際沒(méi)必要這樣操作。
保留對(duì)象Utility Objects
保留對(duì)象:就是QTP本身預(yù)留的一些可用對(duì)象慎玖,打開(kāi)QTP這些對(duì)象就會(huì)實(shí)例化贮尖,即為對(duì)象開(kāi)辟內(nèi)存空間。
Crypt:加密模塊保留對(duì)象
Crypt.Encrypt("需要加密的字符串") ?相當(dāng)于QTP的Password Encoder工具功能趁怔。
Desktop:桌面保留對(duì)象
桌面截屏desktop.CaptureBitmap “文件名”,true or False(默認(rèn)為False湿硝,表示若文件存在不覆蓋)
MercuryTimes:計(jì)時(shí)保留對(duì)象
PathFinder:路徑保留對(duì)象
PathFinder.Locate("需要查找的文件名")薪前,要在Tools ——> Options ——> GUI testing ——> Folders中設(shè)置查找的路徑,獲取到的是完整的絕對(duì)路徑关斜。
RandomNumber:隨機(jī)數(shù)保留對(duì)象
RandomNumber.Value(開(kāi)始數(shù)字,結(jié)束數(shù)字)示括,開(kāi)始數(shù)字<=結(jié)束數(shù)字,且包含了開(kāi)始和結(jié)束數(shù)字痢畜,急閉區(qū)間垛膝。
隱藏保留對(duì)象:在幫助文檔和Complete word中都找不到,隱藏在注冊(cè)表中丁稀,HKEY_CURRENT_USER ——> Software ——> Mercury Interactive ——> QuickTest Professional ——> MicTest ——> ReservedObjects
環(huán)境變量 Environment Variables
QTP默認(rèn)環(huán)境變量位置:File ——> Settings ——> Environment吼拥,變量類(lèi)型為Bulit-in,即內(nèi)置變量线衫。
Valid only during the test run:表示只有在腳本運(yùn)行的時(shí)候QTP才能知道的動(dòng)態(tài)變量凿可。
部分默認(rèn)環(huán)境變量說(shuō)明:
? ? ? ? ? ActionIteration:返回當(dāng)前運(yùn)行的Action跌倒的數(shù)據(jù)行號(hào)(指中當(dāng)前Action的Datatable 數(shù)據(jù)表中的行號(hào))。
? ? ? ? ? TestIteration:返回當(dāng)前運(yùn)行的測(cè)試迭代的數(shù)據(jù)行號(hào)(指Global Datatable中的行號(hào))授账。
環(huán)境變量常見(jiàn)使用:
? ? ?截圖命名可為:TestName+ActionName+Time+自定義ID
? ? ?截圖放置的路徑可為:TestDir枯跑,返回當(dāng)前測(cè)試的絕對(duì)路徑,不包括最后的“\”
動(dòng)態(tài)獲取環(huán)境變量使用Environment對(duì)象白热,該對(duì)象包含三個(gè)方法:ExternalFileName敛助、LoadFromFile和Value。
Value
?????一是獲取環(huán)境變量的值:
如 environment.Value("ActionName")
?????二是為環(huán)境變量賦新值:在自定義環(huán)境變量時(shí)使用棘捣。
? ? 2.LoadFromFile:動(dòng)態(tài)加載自定義環(huán)境變量辜腺, environment.LoadFromFile “文件路徑”。
? ? ?手動(dòng)加載自定義環(huán)境變量 的方法:File ——> Settings ——> Environment乍恐,選擇User-defined评疗。
3.ExternalFileName:返回加載外部環(huán)境變量文件的路徑名稱(chēng), environment.ExternalFileName?茵烈。
函數(shù)資源庫(kù)Library Files
資源池靜態(tài)調(diào)用
1百匆、首先創(chuàng)建了一個(gè)test.txt文件,寫(xiě)入函數(shù)呜投;
2加匈、在QTP中選擇File ——> Settings ——> Resources項(xiàng),將test.txt添加進(jìn)資源池仑荐,彈出的對(duì)話框?yàn)檫x擇絕對(duì)路徑還是相對(duì)路徑雕拼;
3、使用步驟生成器F7(Design ——>Step Generator)選擇Functions粘招,Library functions并選擇函數(shù)即可啥寇;
4、或者使用complete word,快捷鍵ctrl+space辑甜;
5衰絮、以上是把函數(shù)寫(xiě)在txt文件中,也可以在QTP中File ——> New ——> Function Library中編寫(xiě)磷醋。
動(dòng)態(tài)調(diào)用
1猫牡、語(yǔ)法: executefile "文件的路徑(支持相對(duì)路徑)"
加載多個(gè)庫(kù)文件
假設(shè)test.vbs中存在多個(gè)動(dòng)態(tài)調(diào)用的語(yǔ)句,在Resource中手動(dòng)加載這個(gè)文件邓线,就可以達(dá)到加載多個(gè)庫(kù)文件的作用淌友。
調(diào)用QC中的函數(shù)庫(kù)操作類(lèi)似,只是路徑不同骇陈,若有兩人及以上同時(shí)打開(kāi)同一份函數(shù)資源文件亩进,只有先打開(kāi)的那位有修改的資格,后一位需要等前一位退出編輯并等待一個(gè)緩存時(shí)間后缩歪,才能進(jìn)行修改。
QTP11.5破解
來(lái)源網(wǎng)址:?http://www.cnblogs.com/juddhu/archive/2012/01/18/2325795.html
http://www.cnblogs.com/juddhu/archive/2012/01/18/2325795.html
1谍憔、刪除C:\ProgramData\SafeNet Sentinel目錄匪蝙;
2、F:\Program Files\HP\Unified Functional Testing\bin?執(zhí)行instdemo.exe习贫。
封裝對(duì)象在注冊(cè)表中的位置
? ? ?下圖中使用GetROProperty獲取Class Name逛球,輸出結(jié)果為空,GetROProperty("micClass")輸出結(jié)果為WebEdit苫昌,原因可查看QTP封裝屬性的注冊(cè)表位置颤绕,運(yùn)行regedit打開(kāi)注冊(cè)表,進(jìn)入如下位置:
HKEY_CURRENT_USER —> Software?—>?Mercury Interactive?—>?QuickTest Professional?—>?MicTest?—>?Attributes
即可看到所有QTP封裝的屬性
比較日期方法
來(lái)源網(wǎng)址:?http://www.cydtest.com/?p=1528
Date:輸入日期格式為 2015-5-29
需要比較的日期為:2015年05月29日
方法一:
Dday=split(date,"-")
Iflen(Dday(1))=1Then ? ???'或與10比較祟身,如Dday(1)<10
? ? ? ?Dmonth="0"&Dday(1)
ElseDmonth=Dday(1)
EndIf
Iflen(Dday(2))=1Then
? ? ? ?Ddate="0"&Dday(2)
ElseDdate=Dday(2)
EndIf
myDate=Dday(0)&"年"&Dmonth&"月"&Ddate&"日"
方法二:
myDate=year(now)&"年"&string(2-len(month(now)),"0")&month(now)&"月"&string(2-len(day(now)),"0")&day(now)&"日"
string(number,character)返回number個(gè)character奥务,返回N個(gè)字符,若character為字符串袜硫,則返回N個(gè)字符串的第一個(gè)字符氯葬。
方法三:
myDate?=year(date)?&right("0"?&month(date),2)?&right("0"?&day(date),2)
VBS常用字符串函數(shù)
1. Date函數(shù)
? ? 語(yǔ)法:Data,返回當(dāng)前系統(tǒng)日期婉陷。
2. Now函數(shù)
? ? ?語(yǔ)法:Now帚称,返回當(dāng)前系統(tǒng)日期時(shí)間。
3. DateDiff函數(shù)
? ? ?語(yǔ)法:DateDiff(interval時(shí)間單位,date1,date2)秽澳,返回兩個(gè)日期之間的間隔闯睹。
4. Left函數(shù)
? ? ?語(yǔ)法:Left(string,length),從最左邊返回指定數(shù)量的字符串担神,若length為0楼吃,則返回"",若length大于等等于string總長(zhǎng)度,則返回整個(gè)字符串所刀。
5. Right函數(shù)
? ? ?語(yǔ)法:Right(string,length)衙荐,返回字符串最右邊指定數(shù)量的字符串。
6. Len函數(shù)
? ? ?語(yǔ)法:Len(String)浮创,返回字符串的長(zhǎng)度忧吟,即字符數(shù)量。
7. Mid函數(shù)
? ? ?語(yǔ)法:Mid(string,start[,length])斩披,從字符串返回指定位置指定長(zhǎng)度的字符串
8. Split函數(shù)
? ? ?語(yǔ)法:Split(expression[,delimiter[,count[,compare]]])
Split(要拆分的字符串[,拆分元素(拆分后被去掉)[,返回的拆分字符串?dāng)?shù)量(-1表示返回所有溜族,若為2則返回2個(gè)子字符串)[,默認(rèn)為0是二進(jìn)制比較,1是文本比較]]])
在指定的分隔符參數(shù)出現(xiàn)的所有位置斷開(kāi)字符串垦沉,將其拆分為子字符串煌抒,然后以數(shù)組的形式返回子字符串。
? ? ?如:myarray=split("xunbodaxunshangx123asd","x",-1,0)
? ? ? ? ? ? 結(jié)果:myarray(0)到myarray(3)分別為 ? 空字符串“”厕倍,unboda寡壮,unshang 和?123asd
9. LTrim,Rtrim與Trim函數(shù)
? ? ?語(yǔ)法:LTrim(string),返回不帶前導(dǎo)空格(LTrim)讹弯,后續(xù)空改(Rtrim)或所有空格(Trim)的字符串副本况既。
10. Replace函數(shù)
? ? ?語(yǔ)法:Replace(expression,find,replacewith[,compare[,count[,start]]])
Replace(原始字符串,被搜索的子字符串组民,用于替換的字符串[,(默認(rèn)為0二進(jìn)制比較棒仍,1為文本比較)[,(執(zhí)行替換的數(shù)量,默認(rèn)為-1臭胜,進(jìn)行所有替換)[,(開(kāi)始搜索子字符串的位置莫其,默認(rèn)為1.再喝count關(guān)聯(lián)時(shí)必須使用)]]])
如: mystring?=replace("qweasdqw","q","11") ? mystring為 ?11weasd11w
11. Instr函數(shù)
? ? ?語(yǔ)法:InStr([start, ]string1, string2[, compare]) 在字符串1中查找字符串2,并返回位置耸三。
? ? ?InStr([開(kāi)始查找的位置, ]字符串1, 要查找的字符串2[, compare])?乱陡,找不到返回0。
? ? ?例子:
SearchString?="XXpXXpXXPXXP"' String to search in.
SearchChar?="P1"' Search for "P".
MyPos?=Instr(4, SearchString, SearchChar,1)' A textual comparison starting at position 4. Returns 6.
MyPos?=Instr(1, SearchString, SearchChar,0)' A binary comparison starting at position 1. Returns 9. ?
12.String
? ? ?語(yǔ)法:string(number,character)返回number個(gè)character仪壮,返回N個(gè)字符蛋褥,若character為字符串,則返回N個(gè)字符串的第一個(gè)字符睛驳。
Web控件
Browser & Page
Navigate方法:在瀏覽器中打開(kāi)一個(gè)特定的網(wǎng)址烙心;
Sync方法:等待瀏覽器完成當(dāng)前的頁(yè)面的工作;
CaptureBitmap:object.CaptureBitmap FullFileName, [OverrideExisting]乏沸,圖片格式只能是.png或.bmp淫茵,OverrideExisting默認(rèn)為False,設(shè)置為T(mén)rue表示覆蓋同路徑下相同名稱(chēng)文件蹬跃;
FullScreen:將瀏覽器全屏匙瘪。
WebTable
ColumnCount(Row)取列數(shù)铆铆,必須要加行號(hào);
RowCount取行數(shù)丹喻;
GetCellData獲取指定單元格(行薄货,列)的值;
ChildItem:虛擬一個(gè)對(duì)象碍论,使它成為WebTable的一個(gè)子對(duì)象谅猾。語(yǔ)法:object.ChildItem (Row, Column, MicClass, Index)
object.ChildItem (表格的行號(hào), 虛擬對(duì)象的列, 要虛擬的對(duì)象控件類(lèi)名, 一般填0)
Data Table實(shí)用方法
1. 動(dòng)態(tài)增加新列并賦值,腳本運(yùn)行完則恢復(fù)原樣
DataTable.GlobalSheet / LocalSheet .AddParameter"列名","值"
2. 動(dòng)態(tài)增加新行并賦值鳍悠,需要先設(shè)置列名
'設(shè)置Global sheet中新增為第幾行
DataTable.GetSheet("Global/Action1").SetCurrentRow(5)
? ? ?'給“列名”列第5行賦值為Row5
DataTable("列名","Global/?Action1")="Row5"
或者
? ???只適用于Local Sheet税娜,還是需要第一個(gè)語(yǔ)句,要不然不管設(shè)置第幾行都會(huì)是給第一行賦值
? ? ?DataTable.GetSheet("Action1").SetCurrentRow(5)
'給第N列第5行賦值為Row5
DataTable.Value("第幾列",5)="Row5"
3. 動(dòng)態(tài)獲取DataTable中指定列的值藏研,獲取的是Global Sheet中該列的所有值敬矩,Action1為該列第一行的值。
獲取列值?=?DataTable("列名","Global/Action1")
? ?或
獲取列值?=?DataTable(1(表示第一列),"Global/Action1")
4. 動(dòng)態(tài)獲取DataTable中指定行的值
獲取某列某行值=DataTable.GetSheet("Global/Action1").GetParameter("列名").ValueByRow(行數(shù))
5. 動(dòng)態(tài)獲取當(dāng)前行好設(shè)置當(dāng)前行
? ? ?GetCurrentRow ?
? ? ?SetCurrentRow()
6. 獲取Data Table總行數(shù)
DataTable.GetSheet("Global/Action1").GetRowCount
7. 將Excel中內(nèi)容導(dǎo)入Sheet中蠢挡,不能打開(kāi)xlsx的文件弧岳,可不用修改列名,默認(rèn)Excel中第一行為列名
? ?DataTable.Import(FileName)?
DataTable.ImportSheet(FileName, Excel中第一個(gè)Sheet(Sheet名或數(shù)字), "Global/Action1")
SendKeys命令
該命令的作用是模擬鍵盤(pán)操作业踏,將一個(gè)或多個(gè)按鍵指令發(fā)送到指定的Windows窗口來(lái)控制應(yīng)用程序缩筛,是WshShell對(duì)象的方法。
例子:SetWshShell?=CreateObject("WScript.Shell")
WshShell.SendKeys"Happy Birthday!"
特殊功能鍵說(shuō)明:
Shift:+
Ctrl : ^
Alt ?:%
+號(hào):{+}
回車(chē):{ENTER}
向下:{DOWN}
Space:“ ”雙引號(hào)內(nèi)輸入空格
F1:{F1}
發(fā)送多個(gè)相同的字符:{按鍵 數(shù)字}堡称,如{qwe 5}表示輸入5個(gè)qwe
WScript.WshShell對(duì)象
? ? ?WScript對(duì)象
WScript對(duì)象是Windows腳本宿主對(duì)象模型層次結(jié)構(gòu)的根對(duì)象。它不需要在調(diào)用其屬性和方法之前進(jìn)行實(shí)例化艺演,并且始終可在任何腳本文件中使用却紧。
? ? ?WScript對(duì)象允許:
? ? ?創(chuàng)建對(duì)象;
? ? ?連接對(duì)象胎撤;
? ? ?與對(duì)象斷開(kāi)連接晓殊;
? ? ?同步事件;
? ? ?一編程方式停止腳本執(zhí)行伤提;
? ? ?將信息輸出到默認(rèn)輸出設(shè)備(Windows對(duì)話框或命令控制臺(tái))巫俺。
WScript.WshShell對(duì)象
? ? ?WshShell對(duì)象可以運(yùn)行程序、操作注冊(cè)表肿男、創(chuàng)建快捷方式介汹、訪問(wèn)系統(tǒng)文件夾、管理環(huán)境變量舶沛。
AppActivate 激活一個(gè)應(yīng)用程序窗口嘹承。
CreateShortcut 創(chuàng)建并返回 WshShortcut 對(duì)象。
Exec 在子命令窗口中運(yùn)行一個(gè)應(yīng)用程序如庭,提供訪問(wèn)StdIn/StdOut/StdErr流叹卷。
ExpandEnvironmentStrings 擴(kuò)展 PROCESS 環(huán)境變量并返回結(jié)果字符串。
LogEvent 添加一個(gè)事件到日志文件。
Popup 顯示包含指定消息的消息窗口骤竹。
RegDelete 從注冊(cè)表中刪除指定的鍵或值帝牡。
RegRead 從注冊(cè)表中返回指定的鍵或值。
RegWrite 在注冊(cè)表中設(shè)置指定的鍵或值蒙揣。
Run 創(chuàng)建新的進(jìn)程靶溜,該進(jìn)程用指定的窗口樣式執(zhí)行指定的命令。
SendKeys 發(fā)送一個(gè)或多個(gè)按鍵到活動(dòng)窗口鸣奔。
具體見(jiàn)百度百科:
函數(shù)指針GetRef方法
GetRef:指向在指定事件發(fā)生時(shí)要執(zhí)行的過(guò)程的地址墨技。
例子:
Dimoutput
? ? ?Functionout(string)
msgboxstring
? ? ?EndFunction
? ? ?'output指針指向out函數(shù)地址
? ? ?Setoutput=GetRef("out")
? ? ?'output具有了out函數(shù)的功能
? ? ?Calloutput("Success!")
VBS錯(cuò)誤處理(未完)
1)On Error Resume Next,在腳本開(kāi)頭添加該語(yǔ)句挎狸,告訴VBS在運(yùn)行時(shí)跳過(guò)發(fā)生錯(cuò)誤的語(yǔ)句扣汪。這樣一旦發(fā)生錯(cuò)誤,該語(yǔ)句將會(huì)把相關(guān)的錯(cuò)誤號(hào)锨匆、錯(cuò)誤描述和相關(guān)源代碼壓入錯(cuò)誤堆棧崭别。
2)VBS的err對(duì)象
VBS條件和循環(huán)語(yǔ)句
條件語(yǔ)句If......Then和Select Case
If條件Then
????處理語(yǔ)句
ElseIf條件Then
????處理語(yǔ)句
Else
EndIf
SelectCase變量
Case條件值
????處理語(yǔ)句
Caseelse
????處理語(yǔ)句
EndSelect
注意:在執(zhí)行字符串比較時(shí),需注意大小寫(xiě)恐锣,可使用lCase或uCase將字符串裝換成小寫(xiě)或大寫(xiě)茅主。
循環(huán)控制語(yǔ)句
For......Next循環(huán) 可使用Exit For來(lái)退出循環(huán);
? ? ? ? ? Do......While 和 Do......Until循環(huán) 可使用Exit do來(lái)退出循環(huán)土榴;
? ? ? ? ? While循環(huán)诀姚。
VBS基礎(chǔ)知識(shí)
1. 定義變量 —— Dim
? ?VBS語(yǔ)法不會(huì)很?chē)?yán)謹(jǐn)仓洼,可以不申明變量直接使用伦吠。變量、方法榜贴、函數(shù)和對(duì)象的引用是不區(qū)分大小寫(xiě)的矢赁,申明多個(gè)同類(lèi)型變量糯笙,可用逗號(hào)分隔。不允許在申明變量時(shí)給變量賦值撩银。允許在一行代碼內(nèi)同時(shí)對(duì)兩個(gè)變量進(jìn)行賦值给涕,中間用冒號(hào)分隔。
2. 顯示申明 —— Option Explicit ?
? ? ?強(qiáng)制所有變量必須先申明才能使用额获。
3. 注釋
? ? ?單引號(hào)后的內(nèi)容都被解釋為注釋够庙。
4. VBS在定義時(shí)只有一種變量類(lèi)型,在實(shí)際使用中需要使用類(lèi)型轉(zhuǎn)換函數(shù)來(lái)轉(zhuǎn)變成相應(yīng)的變量類(lèi)型抄邀。
? ? ?Cbool轉(zhuǎn)布爾值首启;
? ? ?Cbyte轉(zhuǎn)換為0~255的整數(shù);
? ? ?Ccur撤摸、Cdbl毅桃、Csng都是轉(zhuǎn)浮點(diǎn)型褒纲;
? ? ?Cdate轉(zhuǎn)換為日期值;
? ? ?Cint和Clng轉(zhuǎn)換為整數(shù)钥飞;
? ? ?Cstr轉(zhuǎn)換為字符串莺掠。
5. 數(shù)組
? ?數(shù)組的定義只需要在變量后描述這個(gè)數(shù)組的個(gè)數(shù)和維數(shù),定義時(shí)下標(biāo)是從1開(kāi)始读宙,而在訪問(wèn)時(shí)下標(biāo)是從0開(kāi)始彻秆。
定義數(shù)組: Dim array(10), 可不知道個(gè)數(shù)和維數(shù)申明動(dòng)態(tài)數(shù)組 Dim array()结闸,可使用ReDim來(lái)改變數(shù)組唇兑,在改變數(shù)組的大小時(shí),數(shù)組的數(shù)據(jù)會(huì)被破壞桦锄,使用關(guān)鍵字preserve來(lái)保護(hù)數(shù)據(jù)扎附,如ReDimpreservearray(1個(gè)數(shù),2維數(shù))。
6.操作符
? ? ?乘方使用^,取模使用Mod结耀,不等于使用<>
? ? ?邏輯運(yùn)算符:和—>and留夜,非—>not,或—>or
? ? ?&用來(lái)連接字符串图甜;Is用來(lái)比較對(duì)象碍粥,同一類(lèi)型結(jié)果為真,反之為假黑毅。
CheckProperty方法
語(yǔ)法:對(duì)象.CheckProperty("屬性名"嚼摩,“預(yù)期屬性值”,[“延時(shí)”])
用于檢查真實(shí)對(duì)象的屬性與期望的屬性是否一致
Call Action的3種方式
Call to Existing Action調(diào)用現(xiàn)有操作
選擇At the end of the test測(cè)試結(jié)束時(shí)矿瘦,被調(diào)用的Action是當(dāng)前Test的一個(gè)Action枕面;若選擇After the current step,被調(diào)用的Action屬于當(dāng)前Action的一個(gè)步驟匪凡,及成為當(dāng)前Action的一個(gè)子Action,出現(xiàn)一行代碼:RunAction"Action1 [DataTable參數(shù)化]", oneIteration(進(jìn)行一次迭代)掘猿。
? ? ?在調(diào)用外部Action后病游,QTP會(huì)自動(dòng)添加該Action的Sheet,只讀稠通。
? ? ?調(diào)用外部腳本的根本原因是便于維護(hù)衬衬,只要修改調(diào)用的腳本,其他調(diào)用改腳本的地方都會(huì)相應(yīng)的修改掉改橘。
Call to New Action調(diào)用新操作
? ? ?可新建1級(jí)Action或基于1級(jí)Action新建2級(jí)滋尉、3級(jí)的Action。
Call to Copy of Action調(diào)用操作副本
? ? ?復(fù)制Action飞主,把外部Action的對(duì)象庫(kù)和代碼都復(fù)制過(guò)來(lái)狮惜。
Action的重用操作
? ? ?在下圖Action Properties中需要勾選Reusable action可重用操作高诺,腳本才能被共享和調(diào)用。
非重用型:只能被存儲(chǔ)它的Test調(diào)用碾篡,且只能被調(diào)用一次虱而;
重用型:咳喲多次被存儲(chǔ)它的Test或別的Test調(diào)用;
外部型:一個(gè)存儲(chǔ)在別的Test中的可重用型Action开泽,只能在調(diào)用它的Test中只讀牡拇。
Test Data Table 和 Run-time Data Table
Test Data Table —— 在Data Table中事先準(zhǔn)備好的固定的測(cè)試數(shù)據(jù),是一組靜態(tài)數(shù)據(jù)穆律,是人為事先填寫(xiě)進(jìn)去的惠呼;
Run-time Data Table —— 在QTP執(zhí)行過(guò)程中,將測(cè)試數(shù)據(jù)填寫(xiě)到Data Table中峦耘,運(yùn)行結(jié)束剔蹋,測(cè)試數(shù)據(jù)就消失,但可在測(cè)試報(bào)告中看到贡歧。如下代碼將“test”傳入Global Sheet的A列中:
? ? ? ? ? ? ? ?DataTable.Value("A","Global")="test"
同界面有多個(gè)相同控件
場(chǎng)景:界面上有很多相同類(lèi)型的控件滩租,需要做檢查,如對(duì)多個(gè)button進(jìn)行點(diǎn)擊操作利朵,全都添加進(jìn)對(duì)象庫(kù)也是工作量比較大的律想。
方法一:使用SetTOProperty,如下列子中(百度首頁(yè))添加“新聞”的鏈接按鈕到對(duì)象庫(kù)中绍弟,之后使用SetTOProperty 可對(duì)其他鏈接按鈕進(jìn)行click操作技即。
Browser("百度一下,你就知道_2").Page("百度一下樟遣,你就知道").Link("新聞").SetTOProperty"text","地圖"
Browser("百度一下而叼,你就知道_2").Page("百度一下,你就知道").Link("新聞").Click
Browser("百度一下豹悬,你就知道_2").Page("百度一下葵陵,你就知道").Link("新聞").SetTOProperty"text","視頻"
Browser("百度一下,你就知道_2").Page("百度一下瞻佛,你就知道").Link("新聞").Click
方法二:使用SetTOProperty脱篙,設(shè)置index方法
? ? ?獲取同類(lèi)型對(duì)象的數(shù)量
? ? ?SetTOProperty "index",i
關(guān)于index可參考?Object Indectification對(duì)象識(shí)別
方法三:使用描述性編程
? ? ?如父對(duì)象.Link("name:=XXX").Click
如有多個(gè)瀏覽器窗口可使用Browser("CreationTime:=[0,1]")
Browser("CreationTime:=1")表明當(dāng)前有且僅有一個(gè)瀏覽器窗口。
方法四:描述性編程
? ? ?給注冊(cè)百度賬號(hào)界面上的所有文本框中輸入數(shù)字“123”
'創(chuàng)建描述性編程對(duì)象
Setalledit=description.Create
'對(duì)象類(lèi)型為WebEdit
alledit("micClass").value="WebEdit"
'獲取父對(duì)象下所有的WebEdit子對(duì)象
SetallChild=Browser("注冊(cè)百度帳號(hào)").Page("注冊(cè)百度帳號(hào)").ChildObjects(alledit)
'allChild.count為WebEdit對(duì)象的數(shù)量
Fori?=0ToallChild.count-1
'Item(i)中i為對(duì)象的index
Setedit=allChild.Item(i)
edit.set"123"
Next
'釋放所有設(shè)置的對(duì)象
Setalledit=nothing
SetChildnum=nothing
Setedit=nothing
意思如下:
Browser("注冊(cè)百度帳號(hào)").Page("注冊(cè)百度帳號(hào)").webedit("index:=0").Set"123"
Browser("注冊(cè)百度帳號(hào)").Page("注冊(cè)百度帳號(hào)").webedit("index:=1").Set"123"
或者
Fori?=0To1
Browser("注冊(cè)百度帳號(hào)").Page("注冊(cè)百度帳號(hào)").webedit("index:="&i).Set"234"
Next
對(duì)象庫(kù)編程與描述性編程比較
對(duì)象庫(kù)編程特點(diǎn):
可通過(guò)Complete Word伤柄,步驟生成器等方式高效編程绊困;
腳本中引用同一個(gè)對(duì)象多次,修改對(duì)象名字适刀,只需要在對(duì)象庫(kù)中對(duì)對(duì)象進(jìn)行更名即可秤朗,腳本會(huì)自動(dòng)更新;
有關(guān)于對(duì)象庫(kù)的各種工具笔喉。
描述性編程特點(diǎn):
不用維護(hù)對(duì)象庫(kù)取视;
可完成一些特殊需求硝皂;
沒(méi)有Complete Word,易打錯(cuò)字贫途。
描述性編程的兩種寫(xiě)法
若對(duì)象沒(méi)有添加到對(duì)象庫(kù)中吧彪,這個(gè)時(shí)候使用對(duì)象庫(kù)編程已無(wú)法實(shí)現(xiàn),可使用描述性編程的方法丢早。描述性編程是通過(guò)代碼中描述每個(gè)對(duì)象的屬性和屬性值來(lái)識(shí)別對(duì)象姨裸,描述性編程可描述的屬性都是封裝接口的屬性。
形式一:對(duì)象名(“屬性名:=屬性值”)
如: Browser("micClass:=Browser").page("micClass:=Page").WebEdit("name:=wd").set "test"
描述多個(gè)屬性使用逗號(hào)隔開(kāi)
如:?Browser("micClass:=Browser").page("micClass:=Page").WebEdit("name:=wd","html tag:=INPUT").set "test"
注意:若父對(duì)象描述了怨酝,子對(duì)象一定要描述傀缩。子對(duì)象描述,父對(duì)象不描述农猬,前提是父對(duì)象在對(duì)象庫(kù)中赡艰。
形式二:使用Description對(duì)象
? ? ?使用Description對(duì)象可返回包含一組Property對(duì)象的Properties集合對(duì)象,Property對(duì)象由屬性名和值組成斤葱。其實(shí)就是將對(duì)象的屬性和屬性值的描述封裝在一個(gè)特殊的Description對(duì)象中慷垮。
如:
SetObjBrowser=Description.Create()
ObjBrowser("micClass").value="Browser"
SetObjPage=Description.Create()
ObjPage("micClass").value="Page"
SetObjWebEdit=Description.Create()
ObjWebEdit("html tag").value="INPUT"
ObjWebEdit("name").value="wd"
Browser(ObjBrowser).Page(ObjPage).WebEdit(ObjWebEdit).Set"test"
'釋放對(duì)象
SetObjBrowser=nothing
SetObjPage=nothing
SetObjWebEdit=nothing
QTP11.5的四種錄制方式
正常錄制模式Standard Windows recording?:默認(rèn)的錄制模式。
模擬錄制模式Analog Recording:此模式錄制所有鍵盤(pán)和鼠標(biāo)的精確操作揍堕,模擬錄制模式錄制下來(lái)的腳本文件比較大料身,且不可由QTP進(jìn)行編輯,回放時(shí)改變了屏蔽分辨率或窗口/屏幕位置回放就會(huì)失敗衩茸。前提是開(kāi)啟正常錄制模式芹血。有相對(duì)于指定窗口和相對(duì)于屏幕錄制
低級(jí)錄制模式Low Level Recording:錄制鼠標(biāo)和鍵盤(pán)的所有操作,對(duì)對(duì)象的位置要求非常嚴(yán)格楞慈,錄制的對(duì)象都以Windows和WinObject形式存在幔烛,按照屏幕上的x坐標(biāo)和y坐標(biāo)錄制對(duì)象。
洞察錄制模式Insight recording:根據(jù)保存的截圖來(lái)識(shí)別對(duì)象囊蓝。
常見(jiàn)的對(duì)象無(wú)法識(shí)別的處理方法(未完)
解決方法:
? ? ?1)設(shè)置虛擬對(duì)象饿悬,不方便以后維護(hù),工具—>虛擬對(duì)象聚霜;
? ? ?2)使用相對(duì)坐標(biāo)配合WSH定位對(duì)象狡恬;
? ? ?3)使用DOM組件接口應(yīng)用技術(shù),只可用于Web項(xiàng)目
P132頁(yè)俯萎,PDF是145
封裝屬性與自身接口屬性
封裝接口是對(duì)象的不完全屬性傲宜,有些對(duì)象的屬性值是封裝接口無(wú)法獲取到的运杭;
運(yùn)行時(shí)對(duì)象RO可看見(jiàn)自身接口的所有屬性夫啊,而對(duì)象庫(kù)中的測(cè)試對(duì)象TO只可看見(jiàn)被封裝的接口;
封裝屬性是不能修改實(shí)際運(yùn)行時(shí)的對(duì)象的辆憔,只能獲取屬性的值撇眯,而調(diào)用自身接口可以报嵌;
封裝屬性是支持TO和RO,自身接口只支持RO熊榛。
調(diào)用自身接口:
? ? ?1)對(duì)象.Object.自身屬性:
如Browser("百度一下锚国,你就知道").Page("百度一下,你就知道").WebButton("百度一下").Object.innerText="百度百度" ?玄坦,將WebButton("百度一下")的自身接口屬性innerText設(shè)為“百度百度”血筑。
? ? ?2)對(duì)象.Object.自身方法。
自身接口不但可以設(shè)置運(yùn)行時(shí)屬性的值煎楣,同樣也可以獲取運(yùn)行時(shí)對(duì)象的自身接口的屬性值豺总。
使用封裝接口進(jìn)行賦值操作:
Browser("百度一下,你就知道").Page("百度一下择懂,你就知道").WebEdit("wd").Set"test"
使用自身接口方式:
Browser("百度一下喻喳,你就知道").Page("百度一下,你就知道").WebEdit("wd").Object.value="test"
手寫(xiě)代碼的方式及小技巧
一困曙、步驟生成器
打開(kāi):設(shè)計(jì)—>Step Genertor步驟生成器或者使用快捷鍵F7
二表伦、Complete Word方式
? ? ?查看:編輯—>格式—>Complete Word完成單詞,快捷鍵為Ctrl+Space慷丽,因該快捷鍵優(yōu)先認(rèn)定為中/英文切換蹦哼,需要先對(duì)語(yǔ)言欄進(jìn)行設(shè)置,修改之后需要重啟電腦盈魁。
三翔怎、對(duì)象拖動(dòng)生成方法
? ? ?QTP11.5是直接從對(duì)象存儲(chǔ)庫(kù)中拖到專(zhuān)家視圖中。
四杨耙、QTP編程過(guò)程的小技巧
1赤套、垂直分割選取:在QTP11.5中是通過(guò)同時(shí)按下Ctrl+Alt珊膜,然后鼠標(biāo)左鍵進(jìn)行選擇容握,選中垂直柱后,輸入需要修改的內(nèi)容即可车柠。
2剔氏、代碼換行符:_?
如:Browser("百度一下,你就知道").Page("百度一下竹祷,你就知道")._
WebEdit("wd").Set"123"
3谈跛、顯示參數(shù)提示:編輯—>格式—>參數(shù)信息:Ctrl+Shift+Space。
4塑陵、With...End With:用來(lái)提煉公共部分感憾,如每句代碼中前半段相同,可用With簡(jiǎn)化代碼令花,可嵌套使用with阻桅。
? ? ?如:
withBrowser("百度一下凉倚,你就知道").Page("百度一下,你就知道")
.WebButton("百度一下").Click @@ hightlight id_;_Browser("百度一下嫂沉,你就知道").Page("百度一下稽寒,你就知道")
.WebEdit("wd").Set"123"@@ hightlight id_;_Browser("百度一下,你就知道").Page("百度一下趟章,你就知道").WebEdit("wd")
Endwith
5杏糙、冒號(hào),用于連接不相干的兩句或多句代碼使其合成一句蚓土,位于同一行搔啊。
對(duì)屬性操作的方法
GetTOProperty()
獲取對(duì)象庫(kù)中某個(gè)對(duì)象的某個(gè)屬性值;
對(duì)象.GetTOProperty("封裝屬性名")北戏。
GetTOProperties()
獲取對(duì)象庫(kù)中某個(gè)對(duì)象的所有屬性值负芋,獲取的是一個(gè)數(shù)組;
對(duì)象.GetTOProperties()嗜愈;
例子:
SetProperties?=?Browser("百度一下旧蛾,你就知道").Page("百度一下,你就知道").WebButton("百度一下").GetToProperties()
PropertiesCount?=?Properties.Count
print"對(duì)象總計(jì)存在"&PropertiesCount&"個(gè)封裝屬性"
Fori?=1ToPropertiesCount-1
PropName?=?Properties(i).Name
PropValue?=?Properties(i).Value
print PropName&"="&PropValue
Next
SetProperties?=Nothing ? ? ?'釋放對(duì)象
輸出:
SetTOProperty
修改對(duì)象庫(kù)中某個(gè)對(duì)象的某個(gè)屬性的值蠕嫁,修改是臨時(shí)性的锨天,只在腳本運(yùn)行時(shí)有效,一旦腳本運(yùn)行結(jié)束剃毒,對(duì)象庫(kù)中的值就會(huì)還原病袄;
對(duì)象.SetTOProperty "封裝屬性名","封裝屬性值";
使用SetTOProperty方法赘阀,后面的參數(shù)不需要加括號(hào)益缠,因?yàn)樗鼪](méi)有返回值。
GetRoProperty()
獲取實(shí)際在運(yùn)行時(shí)的某個(gè)對(duì)象的某個(gè)屬性值(不是從對(duì)象庫(kù)中獲然)幅慌,一般用于動(dòng)態(tài)獲取實(shí)際運(yùn)行時(shí)的屬性和預(yù)期的測(cè)試數(shù)據(jù)進(jìn)行比對(duì);
對(duì)象.GetRoProperty("封裝屬性名")
注意:若需要比較如編輯框的value值轰豆,需要先獲取對(duì)象庫(kù)中的值胰伍,再獲取運(yùn)行時(shí)對(duì)象的值,做比對(duì)酸休;Value值會(huì)獲取獲取目前編輯框中的值骂租。
Test Object和Run-time Object
測(cè)試對(duì)象(TO)是被添加到對(duì)象庫(kù)中的對(duì)象,即庫(kù)中對(duì)象斑司;運(yùn)行時(shí)對(duì)象(RO)是被測(cè)試軟件實(shí)際所運(yùn)行的對(duì)象渗饮,即軟件運(yùn)行中的對(duì)象。
? ? ?TO和RO都是QTP封裝的對(duì)象,使用QTP封裝好的屬性抽米,但RO也可以調(diào)用自身接口的屬性。
? ? ?TO測(cè)試對(duì)象是為了識(shí)別RO運(yùn)行時(shí)對(duì)象而存在的糙置。
對(duì)象偵測(cè)Object Spy
打開(kāi)方式:
Tools—>Object Spy云茸;
工具欄中的Object Spy圖標(biāo);
對(duì)象庫(kù)中也可打開(kāi)谤饭。
1. Properties(屬性)選項(xiàng)卡
Native Properties(即圖中本地):對(duì)象控件自身接口的屬性标捺;
Identification Properties(標(biāo)識(shí)):QTP為該對(duì)象控件封裝的屬性。
2. Operations(操作)
? ? ?對(duì)象自身和QTP封裝的操作和方法揉抵。
3. 半操作模式:Ctrl鍵亡容,支持點(diǎn)擊。使用Spy點(diǎn)擊白色手指后冤今,鼠標(biāo)光標(biāo)為手指狀闺兢,即捕獲對(duì)象的狀態(tài)。按住Ctrl鍵不放戏罢,可做鼠標(biāo)點(diǎn)擊動(dòng)作屋谭,放開(kāi)Ctrl回到捕獲狀態(tài)。
4. 全操作模式:Ctrl+Alt鍵龟糕,支持鼠標(biāo)點(diǎn)擊和鍵盤(pán)輸入桐磁。先按住Ctrl不放,再按下Alt鍵讲岁,然后先松開(kāi)Ctrl再松開(kāi)Alt鍵我擂,這樣就切換到券操作模式。按下Ctrl并松開(kāi)回到捕獲狀態(tài)缓艳。
QTP運(yùn)行模式
打開(kāi)Tool—>Options—>GUI測(cè)試—>測(cè)試運(yùn)行:
以QC方式調(diào)用執(zhí)行腳本校摩,運(yùn)行模式是Fast;
Normal方式運(yùn)行時(shí)阶淘,腳本左側(cè)有黃色箭頭秧耗;
Normal方式可設(shè)置時(shí)間間隔,單位為毫秒舶治。
對(duì)象存儲(chǔ)庫(kù)管理器Object Repository Manager
打開(kāi)方式:Resources—>Object Repository Manager
即公共對(duì)象庫(kù)分井,是一套管理對(duì)象庫(kù)的模塊。
打開(kāi)外部對(duì)象文件后霉猛,是不能進(jìn)行編輯的尺锚,需要點(diǎn)擊Enable Editing按鈕,如上圖惜浅。
Object Repository Comparison Tool對(duì)象存儲(chǔ)庫(kù)比較工具瘫辩,用于分析兩個(gè)對(duì)象庫(kù)文件之間的差異。
Object Repository Merge Tool對(duì)象存儲(chǔ)庫(kù)合并工具,
對(duì)象庫(kù)Object Repository
打開(kāi)方式Resources —>Object Repository或Ctrl+R:
? ? ?通過(guò)圖中標(biāo)記處伐厌,可進(jìn)行Action的切換承绸,來(lái)查看和添加不同Action下的對(duì)象。若腳本調(diào)用了外部Action挣轨,也可以切換到外部Action军熏,對(duì)外部Action只有查看對(duì)象的權(quán)限。
如果剪切/復(fù)制的是父對(duì)象卷扮,那么粘貼后荡澎,其子對(duì)象會(huì)被一起剪切/復(fù)制過(guò)去,刪除操作也一樣晤锹;
復(fù)制子對(duì)象摩幔,粘貼后,只是子對(duì)象被復(fù)制鞭铆。
1) Ctrl+F或編輯—>查找和替換:可進(jìn)行查找對(duì)象或衡,并將對(duì)象的屬性值替換掉。
2) 加號(hào)按鈕Add Object to Local:添加對(duì)象车遂,當(dāng)子對(duì)象被添加時(shí)薇宠,其父對(duì)象會(huì)一起被添加到對(duì)象庫(kù)中。添加父對(duì)象子對(duì)象不會(huì)被添加艰额。
3) 對(duì)象更新:見(jiàn)圖中標(biāo)識(shí)圖標(biāo)或?qū)ο蟆?gt;從應(yīng)用程序更新澄港。同類(lèi)型的空間可隨意更新,但不同種類(lèi)的對(duì)象空間無(wú)法更新柄沮。
4) Highlight in Application見(jiàn)圖中標(biāo)識(shí)回梧,選中對(duì)象后,點(diǎn)擊該按鈕祖搓,可高亮對(duì)象狱意。能高亮說(shuō)明對(duì)象本身能被識(shí)別。
5) 對(duì)于從外部加載的對(duì)象庫(kù)(關(guān)聯(lián)存儲(chǔ)庫(kù)中)拯欧,可選擇對(duì)象Copy to local详囤,復(fù)制到本地。Copy to local镐作,copy父對(duì)象藏姐,祖父對(duì)象會(huì)跟過(guò)去,子對(duì)象不會(huì)该贾。
6)下圖中導(dǎo)出并替換本地對(duì)象羔杨,實(shí)際效果是導(dǎo)出對(duì)象并自動(dòng)替換成副對(duì)象(自動(dòng)將導(dǎo)出的對(duì)象添加到關(guān)聯(lián)存儲(chǔ)庫(kù)中)來(lái)使用。
修改對(duì)象庫(kù)中對(duì)象的名稱(chēng)杨蛋,QTP會(huì)自動(dòng)更新代碼兜材。
關(guān)聯(lián)存儲(chǔ)庫(kù)Associate Repositories
打開(kāi)方式:Resourse—>Associate Repositories
從外部導(dǎo)入的對(duì)象庫(kù)理澎,只讀。
動(dòng)態(tài)對(duì)象庫(kù)加載:
RepositoriesCollection.Add"E:\zlp\QTP\123.tsr"
一旦執(zhí)行到這句代碼會(huì)觸發(fā)加載外部對(duì)象庫(kù)文件曙寡,效果和手動(dòng)添加一致糠爬,但是動(dòng)態(tài)加載生命周期很短,腳本執(zhí)行介紹它也就結(jié)束了举庶。
智能識(shí)別Smart Identification
? ? ?智能識(shí)別:從Object Identification對(duì)話框中可看到對(duì)于所有的Web對(duì)象模型都是默認(rèn)勾選智能識(shí)別的执隧,這里的智能識(shí)別針對(duì)的是某一個(gè)具體對(duì)象。
? ? ?對(duì)智能識(shí)別屬性進(jìn)行設(shè)置灯变,左側(cè)的基本篩選屬性是即時(shí)生效的,即智能識(shí)別會(huì)首先判斷這些屬性捅膘,而右側(cè)的可選屬性只有當(dāng)左側(cè)屬性列表中的屬性全部使用后仍沒(méi)有識(shí)別到的情況下才會(huì)生效添祸,QTP會(huì)根據(jù)可選屬性列表中的屬性按照設(shè)定好的屬性順序來(lái)一個(gè)個(gè)進(jìn)行只能識(shí)別,直到匹配到一個(gè)為止寻仗,若所有備用的屬性都不能識(shí)別到則QTP會(huì)報(bào)錯(cuò)刃泌。
? ? ?智能識(shí)別是按照順序?qū)σ粋€(gè)個(gè)屬性進(jìn)行判斷,直到匹配到其中的一個(gè)屬性署尤。
Tools—>Object Identification:
File—>Settings—>Run:
? ? ?Run中的智能識(shí)別是總開(kāi)關(guān)耙替,一旦勾選,則不會(huì)進(jìn)行智能識(shí)別曹体。開(kāi)啟Run中的智能識(shí)別俗扇,開(kāi)啟Object Identification中某個(gè)對(duì)象的智能識(shí)別,則在運(yùn)行中對(duì)該對(duì)象可進(jìn)行智能識(shí)別箕别。
QTP兩種視圖
關(guān)鍵字視圖:Keyword View
? ? ? ? ? 是圖形化的視圖铜幽。
? ? ? ? ? Item(項(xiàng)):記錄所有對(duì)象; ?
? ? ? ? ? Operation(操作):該對(duì)象的操作串稀;
? ? ? ? ? Value(值):對(duì)象操作所用到的值除抛;
? ? ? ? ? Documentation:對(duì)象操作所用到的值;
? ? ? ? ? 注釋?zhuān)禾砑拥淖⑨屨Z(yǔ)句母截。
? ? ? ??1到忽、導(dǎo)出測(cè)試步驟:在關(guān)鍵字視圖中,右擊“Documentation”或其他標(biāo)題都可清寇,選擇“Copy Documentation to Clipboard”可以到處測(cè)試步驟文檔喘漏,生成測(cè)試用例,用于指導(dǎo)手工測(cè)試的進(jìn)行华烟;
? ? ? ? ? 2陷遮、添加注釋?zhuān)涸陉P(guān)鍵字視圖中,列名為Comment的列垦江,可在該列中為每個(gè)測(cè)試步驟添加注釋?zhuān)?/p>
? ? ? ? ? 3帽馋、插入檢查點(diǎn)搅方、插入新的測(cè)試步驟等等。
專(zhuān)家視圖:Expert View
? ? ? ? ?腳本開(kāi)發(fā)的視圖绽族。
切換方法:查看—>關(guān)鍵字視圖/編輯器
QTP兩種回放模式
QTP的兩種回放模式是:
Event模式事件跟蹤
Mouse模式鼠標(biāo)跟蹤
? ? ?Event模式就是平時(shí)默認(rèn)使用的模式姨涡,觸發(fā)對(duì)象的相應(yīng)事件,而不是通過(guò)鼠標(biāo)光標(biāo)來(lái)進(jìn)行點(diǎn)擊等操作吧慢。Mouse模式回放時(shí)能看到鼠標(biāo)光標(biāo)是跟著對(duì)象走的涛漂。
切換回放模式:
Tools—>Options—>Web—>Advanced中Run settings下的Replay type:
用代碼控制回放模式:
Setting.WebPackage(“ReplayType”) = 1或2
1代表Event事件跟蹤模式,2代表Mouse鼠標(biāo)跟蹤模式检诗。
QTP回放機(jī)制
? ? ?回放機(jī)制原理:QTP從腳本中讀取到該對(duì)象匈仗,并根據(jù)對(duì)象的層次和名稱(chēng)到對(duì)象庫(kù)中尋找相同名稱(chēng)的測(cè)試對(duì)象,在對(duì)象庫(kù)中找到相應(yīng)地測(cè)試對(duì)象并獲得該測(cè)試對(duì)象的屬性逢慌,然后根據(jù)這個(gè)測(cè)試對(duì)象的屬性悠轩,在運(yùn)行的網(wǎng)頁(yè)或應(yīng)用程序中進(jìn)行匹配,尋找運(yùn)行時(shí)的對(duì)象攻泼。如果成功匹配上火架,再根據(jù)腳本中記錄的該對(duì)象的方法、動(dòng)作和參數(shù)值進(jìn)行應(yīng)用忙菠,如未能匹配上何鸡,則在超過(guò)等待時(shí)間后報(bào)錯(cuò),腳本即宣布運(yùn)行失敗牛欢。
對(duì)回放設(shè)置的菜單:
File—>Settings—>Run:
? ? ?2. File—>Settings—>Web:等待網(wǎng)頁(yè)加載的最大值骡男,默認(rèn)為60s,超過(guò)60s就會(huì)執(zhí)行下一步傍睹,找不到對(duì)象報(bào)錯(cuò)洞翩。
錄制相關(guān)功能
1、Record?and Run Settings:錄制與運(yùn)行設(shè)置焰望。在QTP11.5中的位置Record---->Record?and Run Settings骚亿。
上圖中程序參數(shù)(Program arguments):打開(kāi)應(yīng)用時(shí)設(shè)置特定的參數(shù),我的理解是如在windows命令行中打開(kāi)應(yīng)用后臺(tái)添加的參數(shù)熊赖。
Include descendant processes:包括子進(jìn)程来屠。
2、Web Event Recording Configuration:Web事件錄制設(shè)置震鹉。在QTP11.5中的位置:Record---->Web Event Recording Configuration俱笛,只能應(yīng)用于B/S架構(gòu)系統(tǒng),如設(shè)置級(jí)別為高传趾,則能錄制鼠標(biāo)懸停事件迎膜。
QTP插件 Add-in
Add-in Manager(插件管理器),默認(rèn)自帶三個(gè)插件浆兰,如下圖所示:
? ? ?Add-in是用來(lái)識(shí)別對(duì)象控件磕仅,所以插件的選擇和被測(cè)對(duì)象控件有關(guān)珊豹。對(duì)于Web測(cè)試而言,與項(xiàng)目具體使用的語(yǔ)言沒(méi)有多大關(guān)系榕订。但是對(duì)于Windows桌面應(yīng)用程序而言店茶,插件的選擇和開(kāi)發(fā)語(yǔ)言是有關(guān)系的,QTP有相應(yīng)的Add-in對(duì)應(yīng)不同語(yǔ)言的桌面應(yīng)用程序劫恒。
說(shuō)明:使用QTP測(cè)試網(wǎng)頁(yè)贩幻,先打開(kāi)QTP,再打開(kāi)測(cè)試網(wǎng)頁(yè)两嘴,以免QTP無(wú)法識(shí)別對(duì)象丛楚。因?yàn)槊看未蜷_(kāi)瀏覽器都會(huì)加載BHOManager,QTP識(shí)別對(duì)象是依靠BHOManager Class動(dòng)態(tài)鏈接庫(kù)來(lái)完成憔辫,若先打開(kāi)瀏覽器再打開(kāi)QTP趣些,QTP不能成功讀到BHOManager Class動(dòng)態(tài)鏈接庫(kù),從而導(dǎo)致對(duì)象識(shí)別的失敗螺垢。
關(guān)于BHO的解釋?zhuān)?jiàn)文章“BHO 瀏覽器輔助對(duì)象”
BHO 瀏覽器輔助對(duì)象
? ? ?BHO:Browser Helper Object喧务,瀏覽器輔助對(duì)象赖歌,是微軟推出的作為瀏覽器對(duì)第三方程序員開(kāi)放交互接口的業(yè)界標(biāo)準(zhǔn)枉圃,通過(guò)代碼可進(jìn)入瀏覽器領(lǐng)域的“交互接口(INTERACTIVED Interface)。通過(guò)這個(gè)接口庐冯,程序員可以編寫(xiě)代碼獲取瀏覽器的行為孽亲。
? ? ?BHO對(duì)象依托于瀏覽器主窗口。這意味著一旦一個(gè)瀏覽器窗口產(chǎn)生展父,一個(gè)新的BHO對(duì)象實(shí)例就要生成返劲。任何BHO對(duì)象與瀏覽器實(shí)例的生命周期是一致的。其次栖茉, BHO僅存在于Internet Explorer 4.0及以后版本中篮绿。
QTP三種錄制模式 需要再補(bǔ)充
QTP的三種錄制模式分別是:正常錄制侈玄、模擬錄制和低級(jí)錄制柱查。
正常錄制
開(kāi)啟方法:
即默認(rèn)的錄制模式呆贿,通過(guò)識(shí)別對(duì)象屬性來(lái)錄制卿堂。
模擬錄制
開(kāi)啟方法:
可錄制鍵盤(pán)和鼠標(biāo)的精確操作棒动,鼠標(biāo)的運(yùn)動(dòng)軌跡瞒斩。錄制下來(lái)的文件比較大元暴,而且不可以由QTP進(jìn)行編輯匈挖。若回放時(shí)苍鲜,改變了屏幕的分辨率或窗口/屏幕位置思灰,回放就會(huì)失敗。
低級(jí)錄制
開(kāi)啟方法:
記錄坐標(biāo)的位置混滔,在回放時(shí)對(duì)象的坐標(biāo)有一點(diǎn)改變就會(huì)回放失敗洒疚,將所有父類(lèi)對(duì)象錄制未Windows測(cè)試對(duì)象歹颓,將所有的其他對(duì)象錄制為WinObject測(cè)試對(duì)象。
模擬錄制與低級(jí)錄制區(qū)別 P42