QTP腳本編程指導教程_第1頁
QTP腳本編程指導教程_第2頁
QTP腳本編程指導教程_第3頁
QTP腳本編程指導教程_第4頁
QTP腳本編程指導教程_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、qtp腳本編寫,qtp識別對象原理,qtp里的對象有兩個概念,一個是test object(簡稱to),一個是runtime object(簡稱ro) to就是是倉庫文件里定義的倉庫對象,ro是被測試軟件的實際對象 qtp識別對象,一般是要求先在對象倉庫文件里定義倉庫對象,里面存有實際對象的特征屬性的值。 然后在運行的時候,qtp會根據腳本里的對象名字,在對象倉庫里找到對應的倉庫對象, 接著根據倉庫對象的特征屬性描述,在被測試軟件里搜索找到相匹配的實際對象,最后就可以對實際對象進行操作了。 倉庫對象to一般在錄制/編寫腳本時加入倉庫文件,它不僅可以在錄制編寫時進行修改, 也可以在運行過程中進行

2、動態(tài)修改,以匹配實際對象。 和to、ro相關的幾個函數有: gettoproperty():取得倉庫對象的某個屬性的值 gettoproperties():取得倉庫對象的所有屬性的值 settoproperty():設置倉庫對象的某個屬性的值 getroproperty():取得實際對象的某個屬性的值,qtp操作對象的原理,qtp為用戶提供了兩種操作對象的接口,一種就是對象的封裝接口,另一種是對象的自身接口。 對象的自身接口是對象控件本身的接口,只要做過軟件開發(fā),使用過控件的人應該很清楚。 對象的封裝接口是qtp為對象封裝的另一層接口,它是qtp通過調用對象的自身接口來實現的。 兩種接口的腳本

3、書寫格式的差別在于: 自身接口需要在對象名后面加object再加屬性名或方法名, 封裝接口就不用在對象名后面加object。 具體格式如下: 對實際對象的操作: 對象.object.自身屬性 對象.object.自身方法() 對象.getroproperty(封裝屬性) 對象.封裝方法() 對倉庫對象的操作: 對象.gettoproperty(封裝屬性) 對象.gettoproperties() 獲取所有封裝屬性的值 對象.settoproperty(封裝屬性, 封裝屬性值,qtp獲取文本框里的值的兩個方法,1.使用用qtp自帶的out值 window(windows internet exp

4、lorer).winobject(internet explorer_server).output checkpoint(internet explorer_server) 然后調用:xxx.set datatable(“internet explorer_server”, dtglobalsheet) 2.使用getroproperty,把對象text的屬性取出來。buttonname=browser(qa home page).page(qa home page).webbutton(submit).gettoproperty(name) 例如獲取文本web文本框的運行時的值: xxx.g

5、ettoproperty(value,qtp獲得隨機數的兩個方法,1.qtp 提供的一個獲取隨機數的函數 取得 1 到 100 之間的一個數 x = randomnumber(0,100) msgbox x 2.使用 randomize 函數來產生隨機數,randomize 用于初始化 rnd 函數 的隨機數產生器。 dim myvalue 初始化隨機數產生器 randomize myvalue = int(10*rnd+0,qtp讀寫本地excel文件,company: http:/ author: chenhuaproduct: 家校網function:不同狀態(tài)的家長和老師登陸查看是否有班

6、級樹date: 2010-01-29 arrrange = readfile(d:officiallogintesting不同狀態(tài)家長和老師登陸的班級樹情況.xls,sheet1) for j = 2 to ubound(arrrange)systemutil.run c:program filesinternet exploreriexplore.exe,http:/ wait(2) browser(title:=南通家校網).page(title:=南通家校網).webedit(html id:=passport).set arrrange(j,2) browser(title:=南通家校

7、網).page(title:=南通家校網).webedit(html id:=password).set arrrange(j,3)browser(南通家校網).page(南通家校網).output checkpoint(南通家校網) browser(title:=南通家校網).page(title:=南通家校網).webedit(html id:=proof_code).set trim(datatable(驗證碼, dtglobalsheet) browser(title:=南通家校網).page(title:=南通家校網).webbutton(value:=登錄).click,把下載的記

8、錄 寫到 excel 保存 dim xlapp dim xlbook dim xlsheet set xlapp = createobject(excel.application) 創(chuàng)建excel對象 set xlbook = xlapp.workbooks.open(d:officiallogintesting不同狀態(tài)家長和老師登陸的班級樹情況.xls) 打開已經存在的excel工件簿文件 xlapp.visible = true 設置excel對象可見(或不可見) set xlsheet = xlbook.worksheets(sheet1) 設置活動工作表 xlsrowcount = x

9、lsheet.usedrange.rows.count xlscolumncount = xlsheet.usedrange.columns.count if(browser(南通家校網).page(南通家校網_2).image(open).check (checkpoint(open) then xlsheet.cells(j, 7) = p 給單元格(row,col)賦值xlsheet.cells(j, 8) = 有班級樹 給單元格(row,col)賦值 xlbook.close (true) 關閉工作簿 xlapp.quit 結束excel對象 set xlapp = nothing 釋

10、放xlapp對象 else xlsheet.cells(j, 7) =f 給單元格(row,col)賦值 xlsheet.cells(j, 8) = 沒有班級樹 給單元格(row,col)賦值 xlbook.close (true) 關閉工作簿 xlapp.quit 結束excel對象 set xlapp = nothing 釋放xlapp對象 end if browser(title:=南通家校網).closenext,輸入: sfilename: excel文件 ssheetname:表單名稱 返回: 包含excel數據的數組function readfile(sfilename,sshe

11、etname) dim oexcel dim osheet dim orange dim arrrange on error resume next 創(chuàng)建excel應用程序對象 set oexcel = createobject(excel.application) if err.number 0 then msgbox 未能初始化excel password=xuexi6;persist security info=true;user id=community_xuexi6;data source=aurora;mode=read; cmd.activeconnection=strcon c

12、md.commandtype =1 以下為執(zhí)行sql ,根據實際情況替換之 cmd.commandtext=select count(*) from spaces set res = cmd.execute() 展示結果 do while not res.eof msgbox(res(0) res.movenext loop 以下為關閉數據庫連接 set res=nothing set cmd.activeconnection=nothing set cmd=nothing,不使用本地數據源連接oracle數據庫2,dim strcon dim res,cmd set res = create

13、object(adodb.recordset) set cmd = createobject(adodb.command) 以下為建立連接 strcon =driver=microsoft odbc for oracle;server=aurora;uid=community_xuexi6;pwd=xuexi6; cmd.activeconnection=strcon cmd.commandtype =1 以下為執(zhí)行sql ,根據實際情況替換之 cmd.commandtext=select count(*) from spaces set res = cmd.execute() 展示結果 do

14、 while not res.eof msgbox(res(0) res.movenext loop 以下為關閉數據庫連接 set res=nothing set cmd.activeconnection=nothing set cmd=nothing,qtp 為描述性編程自動創(chuàng)建注釋,當希望在每一個新建action時都增加一些頭部說明,比如作者、創(chuàng)建日期、說明等. 用action template 來實現最簡單快捷。 方法:用記事本等文本編輯器,輸入如下類似的內容: company: https:/ author:ailan chen product: function: date: dat

15、e然后將文件保存為actiontemplate.mst,并存放到qtp安裝目錄下的dat目錄,檢查被測頁面中對象是否存在,在手工編寫腳本時,常常需要檢查一下頁面中某個個需要測試的對象是否存在,如果對象存在,用例被正常執(zhí)行;否則應設置提示或報錯退出或者報告測試結果。 檢查文本框對象是否存在(通過查源文件找出該對象的name值) if browser(“title:=南通家校網).page( title:=南通家校網).webedit(html id:=passport“).exist then msgbox(“用戶名輸入框存在) else msgbox(“用戶名輸入框不存在) end if,qt

16、p中調用共享文件2個方法,1.利用executefile函數來調用.vbs文件 executefile(“f:test.vbs”) 直接調用執(zhí)行 .vbs文件 2.利用qtp本地共享資源文件(可以調用 *.sql;*.vbs;*.txt 三種后綴文件) dim order order=1 writeorderno order function writeorderno(orderno) dim fso, myfile set fso=createobject(scripting.filesystemobject) set myfile=fso.opentextfile(d:qtp resour

17、cesresult.txt,8,false) myfile.writeline orderno myfile.close end function,qtp的幾種同步等待方法,設置對象的默認等待時間。qtp識別對象時,會有一個默認的等待時間,可以在file-settings-run-object synchronization中設置,默認時間是20秒 2. 使用.sync方法,等待百度這個頁面完全打開,才繼續(xù)執(zhí)行下面操作 browser(“browser”).navigate http:/browser(browser).page(百度).sync 3.wait 等待固定秒數 4.同步點 qtp

18、腳本在執(zhí)行過程中如果遇到同步點,則會暫停腳本的執(zhí)行,直到對象的屬性獲取到了預先設定的值,才開始執(zhí)行下一條腳本,后面單位是毫秒 例如:browser(百度一下,你就知道).page(百度一下,你就知道).webedit(wd).waitproperty visible, true, 100000 5編程實現 do until browser(百度一下,你就知道).page(百度一下,你就知道).webedit(wd).exist() wait(1) loop,qtp檢查鏈接對象的2個方法,1.使用 checkproperty 方法 browser(welcome: mercury tours).

19、page(welcome: mercury tours).link(register).checkproperty (url,http:/ 2.比較link對象的object屬性中的href屬性 href = browser(welcome: mercury tours).page(welcome: mercury tours).link(register).object.href 如果地址不正確,則報告錯誤 if not href =http:/ then reporter.reportevent micfail,link error,href exitaction end if,自動化測試

20、獲取和刪除cookies的方法,1. set document=browser(“taobao”).page(“taobao”).object a= document.cookie document.cookie=”userid=828; expire=”+date.togmtstring(); 2. qtp中的webutil a= webutil.getcookies(url) 獲取cookie webutil.deletecookie(domain,cookies) 刪除cookie webutil.deletecookies 3.原始方法 錄制ie清楚cookies的步驟,單選框的幾個方

21、法,1.獲取當前選擇單選框的index 值 a. browser(百度一下,你就知道).page(百度用戶注冊).webradiogroup(sex).getroproperty(selected item index) b. browser(百度一下,你就知道).page(百度用戶注冊).webradiogroup(sex).getroproperty(value) 2.獲取單選框的長度(就是有幾個選擇項) browser(百度一下,你就知道).page(百度用戶注冊).webradiogroup(sex).getroproperty(items count) 3.獲取單選框的所有值 bro

22、wser(百度一下,你就知道).page(百度用戶注冊).webradiogroup(sex).getroproperty(all items“) 4.設置單選框的選擇 browser(百度一下,你就知道).page(百度用戶注冊).webradiogroup(sex).select 2,復選框的2個方法,1.設置復選框選中 browser(百度一下,你就知道).page(百度個人中心登錄).webcheckbox(mem_pass).set on“ 2.選中某個頁面上的所有復選框 set mydescription = description.create() mydescription(h

23、tml tag).value = input mydescription(type).value = checkbox set checkboxes =browser(“title:=學習樂教育社區(qū)”).page(“title:=學習樂 教育社區(qū)).childobjects(mydescription) numofchildobjs = checkboxes.count for counter=0 to numofchildobjs-1 checkboxes(counter).set on next,腳本回放出錯跳過代碼,在回放腳本的時候,有時因為錯誤導致運行的腳本中斷,不能自動運行。on e

24、rror resume next 遇到錯誤返回到腳本的下一行繼續(xù)執(zhí)行。 on error goto 0 錯誤處理的控制權,平時是由qtp控制的(這個叫默認的),當有on error resume next 時,是交給on error處理,當on error goto 0 時,就換給qtp,datetable簡單操作方法,qtp自動生成的寫法,其中,dtlocalsheet就是當前action的datatable,dtglobalsheet就是global的datatable,col是列名 datatable(col, dtlocalsheet) datatable(col, dtglobals

25、heet) 讀取action2的col列。 datatable(col, action2) 讀取action2的第一列,不管第一列叫什么名字,都能讀 datatable(1, action2) 循環(huán)讀取action2的110列 for i = 1 to 10 msgbox datatable(i, action2) next 表也可以用數字代替,讀取第二個action表的第一列 datatable(1, 2) 使用datetable的一個好處是可以跨action使用數據,不過在一個action里讀取另外一個action的列時要注意另外一個action的當前行 比如你在action1里讀取act

26、ion2的某列,如果action1運行到第二行,你讀取的action2還是第一行的數據,解決辦法就是寫上這句: datatable.getsheet(action2).setcurrentrow(2) 你也可以用getcurrentrow來獲取action1的行,然后再用setcurrentrow來保持兩個action的當前行一致: currrow = datatable.getsheet(action1).getcurrentrow datatable.getsheet(action2).setcurrentrow(currrow,datetable操作方法進階,假設現在有一個excel文件

27、:d:data.xls,里面的具體內容如下:有兩個sheet,第一個叫l(wèi)ogin,第二個叫insertorder; 前qtp的test中有兩個action:loginaction和insertaction。當然該test中對應的datatable應該有三個:global、loginaction和insertaction; 面就詳細的說一下datatable是如何操作這些數據的: datatable.import d:data.xls 將data.xls中第一個叫l(wèi)ogin表單內容導入到test的global表單中,將insertorder表單的內容導入到test的loginaction表單中,

28、依次類推;這個方法比較適合只導入excel中第一個表單的內容 datatable.importsheet d:data.xls,login,loginaction 將data.xls文件中的login表單內容導入到當前test的loginaction表單中 datatable.getsheet(global).setnextrow 設置下一行,紅色表示要操作的表單名字 columncount = datatable.getsheet(global).getparametercount 取得global表單中的總列數 datatable.getsheet(global).deleteparame

29、ter (列名) 運行時向global表單中刪除列 datatable.getsheet(global).setprevrow 設置上一行 cellvalue = datatable.getsheet(global).getparameter(列名) 取得global表單中某列的值,可以這樣寫:datatable.value(列名,表單名字),我喜歡這種寫法 rowcount = datatable.getsheet(global).getrowcount 取得global表單中的總行數 datatable.getsheet(global).setcurrentrow(3) 設置當前行為第3行

30、 datatable.value (列名, 表單名字)=twf 運行時設置某列值,例如datatable.value (username, loginaction)=twf datatable.export d:result.xls 將當前test的所有表單(loginaction和insertorderaction、global)中的所有內容全部導出到result.xls中 datatable.exportsheet d:result.xls,loginaction 將當前test的loginaction表單中的內容導出到d:result.xls文件中,關于時間的2個方法,1.獲得當前時間

31、dim currenttime currenttime = time 2.計算2時間差 datediff function timespace() datediff(d,起始日期,結束日期),其中d代表以天為單位,m以月為單位,h代表小時;now代表當前日期 a=datediff(h,now,2008-8-8) msgbox(a) end function,ie窗口的幾個方法,1.打開 systemutil.run “iexplore.exe” , http:/ 2. 關閉 systemutil.closeprocessbyname(“iexplore.exe”) 3.重新導航 browser

32、(百度一下,你就知道).navigate http:/ 4.刷新 browser(百度一下,你就知道).refresh 5.額外說一個systemutil 方法,屏蔽鼠標鍵盤操作的方法 systemutil.blockinput systemutil.unblockinput,qtp訪問dom,1. qtp支持直接訪問dom(document object model),可以通過dom來訪問html標簽 on error resume next set doc = browser(google).page(google).object 循環(huán)獲取page中的所有對象for each elemen

33、t in doc.all tagname = element.tagname 獲取標簽名 innertext = element.innertext 獲取inner text. 把信息寫入測試結果 reporter.reportevent 0, tagname, innertext next,dictionary object使用,1.在qtp中,可以把dictionary 當成數組來用,而且可以隨時添加數據,而不需要預先定義大小 set dic = createobject(scripting.dictionary) 創(chuàng)建dictionary對象 for iterator = 1 to 3 step 1 添加dictionary的key和value dic.add cstr(iterator),iterator & _value next for iterator = 1 to dic.count step 1 循環(huán)讀取dictionary的key和val

溫馨提示

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

評論

0/150

提交評論