《精通QTP—自動(dòng)化測(cè)試技術(shù)領(lǐng)航》

場(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), 步驟名稱, 詳細(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可自由編寫;

ReportEvent可將截圖寫在測(cè)試報(bào)告中。

自定義驗(yàn)證點(diǎn)HTML模式腳本:

截圖到測(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ū)分大小寫。

Global Sheet

? ? ?1. Global Sheet是一個(gè)全局變量,有幾行數(shù)據(jù)(中間有行為空也會(huì)執(zhí)行),程序就要回放幾次,不用寫循環(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屬性我們只能嘗試改變對(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)景恢復(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類型,必須使用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,變量類型為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)境變量文件的路徑名稱, environment.ExternalFileName?


函數(shù)資源庫(kù)Library Files

資源池靜態(tài)調(diào)用

1、首先創(chuàng)建了一個(gè)test.txt文件,寫入函數(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ù)寫在txt文件中,也可以在QTP中File ——> New ——> Function Library中編寫。

動(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ù)操作類似,只是路徑不同,若有兩人及以上同時(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è)置為True表示覆蓋同路徑下相同名稱文件;

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ì)象控件類名, 一般填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命令

該命令的作用是模擬鍵盤操作,將一個(gè)或多個(gè)按鍵指令發(fā)送到指定的Windows窗口來(lái)控制應(yīng)用程序,是WshShell對(duì)象的方法。

例子:SetWshShell?=CreateObject("WScript.Shell")

WshShell.SendKeys"Happy Birthday!"

特殊功能鍵說(shuō)明:

Shift:+

Ctrl : ^

Alt ?:%

+號(hào):{+}

回車:{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)百度百科:

http://baike.baidu.com/link?url=YSylKSEg-DC3uSQ0D6qUOA9GMi8XOdIq-LAheE42D0CO1gorCZCQwoozX7PW6L2871RWkb-TUFxfeTCSc8pV5K

函數(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í),需注意大小寫,可使用lCase或uCase將字符串裝換成小寫或大寫。

循環(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ì)很嚴(yán)謹(jǐn),可以不申明變量直接使用。變量、方法、函數(shù)和對(duì)象的引用是不區(qū)分大小寫的,申明多個(gè)同類型變量,可用逗號(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í)只有一種變量類型,在實(shí)際使用中需要使用類型轉(zhuǎn)換函數(shù)來(lái)轉(zhuǎn)變成相應(yīng)的變量類型。

? ? ?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ì)象,同一類型結(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ù),是人為事先填寫進(jìn)去的;

Run-time Data Table —— 在QTP執(zhí)行過(guò)程中,將測(cè)試數(shù)據(jù)填寫到Data Table中,運(yùn)行結(jié)束,測(cè)試數(shù)據(jù)就消失,但可在測(cè)試報(bào)告中看到。如下代碼將“test”傳入Global Sheet的A列中:

? ? ? ? ? ? ? ?DataTable.Value("A","Global")="test"

同界面有多個(gè)相同控件

場(chǎng)景:界面上有很多相同類型的控件,需要做檢查,如對(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方法

? ? ?獲取同類型對(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ì)象類型為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ò)字。

描述性編程的兩種寫法

若對(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:此模式錄制所有鍵盤和鼠標(biāo)的精確操作,模擬錄制模式錄制下來(lái)的腳本文件比較大,且不可由QTP進(jìn)行編輯,回放時(shí)改變了屏蔽分辨率或窗口/屏幕位置回放就會(huì)失敗。前提是開(kāi)啟正常錄制模式。有相對(duì)于指定窗口和相對(duì)于屏幕錄制

低級(jí)錄制模式Low Level Recording:錄制鼠標(biāo)和鍵盤的所有操作,對(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"


手寫代碼的方式及小技巧

一、步驟生成器

打開(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ù)中拖到專家視圖中。

四、QTP編程過(guò)程的小技巧

1、垂直分割選?。涸赒TP11.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)擊和鍵盤輸入。先按住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)用程序更新。同類型的空間可隨意更新,但不同種類的對(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ì)象的名稱,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ì)象操作所用到的值;

? ? ? ? ? 注釋:添加的注釋語(yǔ)句。

? ? ? ??1、導(dǎo)出測(cè)試步驟:在關(guān)鍵字視圖中,右擊“Documentation”或其他標(biāo)題都可,選擇“Copy Documentation to Clipboard”可以到處測(cè)試步驟文檔,生成測(cè)試用例,用于指導(dǎo)手工測(cè)試的進(jìn)行;

? ? ? ? ? 2、添加注釋:在關(guān)鍵字視圖中,列名為Comment的列,可在該列中為每個(gè)測(cè)試步驟添加注釋;

? ? ? ? ? 3、插入檢查點(diǎn)、插入新的測(cè)試步驟等等。

專家視圖: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ì)象的層次和名稱到對(duì)象庫(kù)中尋找相同名稱的測(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的解釋,見(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è)接口,程序員可以編寫代碼獲取瀏覽器的行為。

? ? ?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)啟方法:

可錄制鍵盤和鼠標(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ì)回放失敗,將所有父類對(duì)象錄制未Windows測(cè)試對(duì)象,將所有的其他對(duì)象錄制為WinObject測(cè)試對(duì)象。

模擬錄制與低級(jí)錄制區(qū)別 P42

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容