<ruby id="h6500"><table id="h6500"></table></ruby>
    1. <ruby id="h6500"><video id="h6500"></video></ruby>
          1. <progress id="h6500"><u id="h6500"><form id="h6500"></form></u></progress>
            • 軟件測試技術(shù)
            • 軟件測試博客
            • 軟件測試視頻
            • 開(kāi)源軟件測試技術(shù)
            • 軟件測試論壇
            • 軟件測試沙龍
            • 軟件測試資料下載
            • 軟件測試雜志
            • 軟件測試人才招聘
              暫時(shí)沒(méi)有公告

            字號: | 推薦給好友 上一篇 | 下一篇

            如何處理軟件測試工具QTP中對象識別的問(wèn)題

            發(fā)布: 2011-3-19 19:05 | 作者: 網(wǎng)絡(luò )轉載 | 來(lái)源: 領(lǐng)測軟件測試網(wǎng)采編 | 查看: 201次 | 進(jìn)入軟件測試論壇討論

            領(lǐng)測軟件測試網(wǎng)

            如何處理軟件測試工具QTP中對象識別的問(wèn)題 

             一.QTP識別對象的原理

              QTP要求先在倉庫文件里定義倉庫對象,里面存有實(shí)際對象的特征屬性的值,運行的時(shí)候,QTP會(huì )根據倉庫對象的特征屬性描述,尋找到實(shí)際對象,然后操作實(shí)際對象。

              倉庫對象TO一般在錄制/編寫(xiě)腳本時(shí)加入倉庫文件,它不僅可以在編寫(xiě)時(shí)進(jìn)行修改,也可以在運行過(guò)程中進(jìn)行動(dòng)態(tài)修改,以匹配實(shí)際對象。

              相關(guān)的幾個(gè)函數有:

              GetTOProperty():取得倉庫對象的某個(gè)屬性的值

              GetTOProperties():取得倉庫對象的所有屬性的值

              SetTOProperty():設置倉庫對象的某個(gè)屬性的值

              GetROProperty():取得實(shí)際對象的某個(gè)屬性的值

              理解了TO的含義,你就可以自由的用SetTOProperty()定義TO,以靈活的操作RO

              比如有個(gè)測試任務(wù),窗口上有很多待檢查的記錄,每條記錄右邊都有一個(gè)Check按鈕,用來(lái)檢查各條記錄。

              記錄個(gè)數不定,所以Check按鈕個(gè)數也就不定,只有一個(gè)Edit顯示記錄個(gè)數。

              我們要對每條記錄進(jìn)行檢查,也就是要點(diǎn)擊每個(gè)Check按鈕。

              但是Check按鈕個(gè)數不定,不好錄制,而且個(gè)數可能也很多(上百個(gè)),即使能一一錄制,那也很麻煩。

              那我有一個(gè)好辦法,只錄制一個(gè)按鈕對象,它設有兩個(gè)特征屬性 label=OK, index=0然后用下面的腳本,就可以完成測試

              buttonNum = CInt(JavaWindow("Test\").JavaEdit("Record Num").GetROProperty("value"))

              For buttonIndex = 0 to buttonNum - 1

              JavaWindow("Test").JavaButton("Check").SetTOProperty("index", buttonIndex)

              JavaWindow("Test").JavaButton("Check").Click

              Next

              或者窗口上有New、Modify、Delete、Check等好幾個(gè)按鈕,要把這幾個(gè)按鈕一一按過(guò)去

              我在對象倉庫里只設置一個(gè)按鈕對象AnyButton,label特征屬性值填任意值,然后用下面腳本執行測試

              JavaWindow("Test").JavaButton("AnyButton").SetTOProperty("label", "New")

              JavaWindow("Test").JavaButton("AnyButton").Click

              JavaWindow("Test").JavaButton("AnyButton").SetTOProperty("label", "Modify")

              JavaWindow("Test").JavaButton("AnyButton").Click

              JavaWindow("Test").JavaButton("AnyButton").SetTOProperty("label", "Delete")

              JavaWindow("Test").JavaButton("AnyButton").Click

              JavaWindow("Test").JavaButton("AnyButton").SetTOProperty("label", "Check")

              JavaWindow("Test").JavaButton("AnyButton").Click

              另外,QTP還支持腳本描述的方法來(lái)定義和訪(fǎng)問(wèn)對象,即不需要在倉庫里定義,也能訪(fǎng)問(wèn)和操作實(shí)際對象

              如上面兩個(gè)任務(wù),可以如下實(shí)現

              1. 不需要在倉庫里定義Check按鈕對象,直接用下面腳本來(lái)實(shí)現測試

              buttonNum = CInt(JavaWindow("Test").JavaEdit("Record Num").GetROProperty("value"))

              For buttonIndex = 0 to buttonNum - 1

              JavaWindow("Test").JavaButton("label:=Check", "index:="+CStr(buttonIndex)).Click

              Next

              2. 不需要在倉庫里定義New、Modify、Delete、Check按鈕對象,直接用下面腳本來(lái)實(shí)現測試

              JavaWindow("Test").JavaButton("label:=New").Click

              JavaWindow("Test").JavaButton("label:=Modify").Click

              JavaWindow("Test").JavaButton("label:=Delete").Click

              JavaWindow("Test").JavaButton("label:=Check").Click

              二.操作對象的原理

              QTP為用戶(hù)提供了兩種操作對象的接口,一種就是對象的封裝接口,另一種是對象的自身接口。

              對象的自身接口是對象控件本身的接口,只要做過(guò)軟件開(kāi)發(fā),使用過(guò)控件的人應該很清楚。

              對象的封裝接口是QTP為對象封裝的另一層接口,它是QTP通過(guò)調用對象的自身接口來(lái)實(shí)現的。

              兩種接口的腳本書(shū)寫(xiě)格式的差別在于:自身接口需要在對象名后面加object再加屬性名或方法名,封裝接口就不用在對象名后面加object.

              比如操作JavaEdit對象,通過(guò)QTP封裝的封裝接口,腳本如下:

              設置JavaEdit的內容:

              JavaDialog("Add NE").JavaEdit("NE Name").Set "NE1"

              讀取JavaEdit的內容:

              msgbox JavaDialog("Add NE").JavaEdit("NE Name").GetROProperty("value")

              如果通過(guò)JavaEdit的自身接口,腳本如下:

              設置JavaEdit的內容:

              JavaDialog("Add NE").JavaEdit("NE Name").object.setText("NE1")

              讀取JavaEdit的內容:

              Msgbox JavaDialog("Add NE").JavaEdit("NE Name").object.getText()

              QTP執行JavaEdit()。Set語(yǔ)句時(shí),是通過(guò)執行JavaEdit()。object.setText()來(lái)實(shí)現的。

              QTP執行JavaEdit()。GetROProperty("value"),是通過(guò)執行JavaEdit()。object.getText()來(lái)實(shí)現的。

              JavaEdit對象的封裝接口Set()和GetROProperty("value"),是QTP封裝JavaEdit對象的自身接口setText()和getText()而得來(lái)的。

              對象的封裝接口是QTP使用的缺省接口,我們錄制出來(lái)的腳本都是使用封裝接口,大家用的也都是封裝接口。

              但是封裝接口不如自身接口豐富,因為QTP只是封裝了部分常用的自身接口嘛。

              所以我們在需要時(shí),可以繞過(guò)封裝接口,直接調用對象的自身接口。

              不過(guò)有些自身接口不夠穩定,在實(shí)踐中偶爾會(huì )出現問(wèn)題,但是概率很少。

              封裝接口有相應功能的話(huà),就盡量用封裝接口吧!

              理解了封裝接口和自身接口的原理,我們就可以更加靈活的操作對象了。

              但是我們怎么知道對象都有哪些封裝接口和自身接口呢?

              其實(shí)很簡(jiǎn)單,用對象查看器(Object Spy)查看對象,在查看窗口里有列出這些接口,包括屬性和方法。

              窗口中間有選擇欄讓你選擇Run-time Object或者Test Object,當你選擇Run-time Object時(shí),它顯示的就是對象的自身接口(自身的屬性和方法)

              當你選擇Test Object時(shí),它顯示的就是對象的封裝接口(封裝的屬性和方法)

            延伸閱讀

            文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/

            TAG: 軟件測試


            關(guān)于領(lǐng)測軟件測試網(wǎng) | 領(lǐng)測軟件測試網(wǎng)合作伙伴 | 廣告服務(wù) | 投稿指南 | 聯(lián)系我們 | 網(wǎng)站地圖 | 友情鏈接
            版權所有(C) 2003-2010 TestAge(領(lǐng)測軟件測試網(wǎng))|領(lǐng)測國際科技(北京)有限公司|軟件測試工程師培訓網(wǎng) All Rights Reserved
            北京市海淀區中關(guān)村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
            技術(shù)支持和業(yè)務(wù)聯(lián)系:info@testage.com.cn 電話(huà):010-51297073

            軟件測試 | 領(lǐng)測國際ISTQBISTQB官網(wǎng)TMMiTMMi認證國際軟件測試工程師認證領(lǐng)測軟件測試網(wǎng)

            老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月
              <ruby id="h6500"><table id="h6500"></table></ruby>
              1. <ruby id="h6500"><video id="h6500"></video></ruby>
                    1. <progress id="h6500"><u id="h6500"><form id="h6500"></form></u></progress>