QTP工做原理的學習心得

一直認爲學習一個工具必定要學會它的本質和原理才能真正的有所收穫,否則工具換掉或者工具被淘汰就會很尷尬,又要從頭學習。當你學會了本質,其餘的工具學習起來也會很快的,而且從開發的角度去思考問題,更容易學習好一個工具。最近學習了幾天的QTP,對QTP的原理有一個簡單的認識,和你們分享下。
      我的認爲QTP的腳本運行其實就是一組對象有組織的執行本身的方法,最終完成一個流程的過程。當打開一個web時,想要腳本可以模擬人來操做整個流程,那多就要求這個腳本可以識別人的每個操做,而人的操做其實是對web頁面上控件的操做,因此只要QTP的腳本可以識別人操做過的控件就能夠模擬人的操做流程,而web頁面上的控件都是QTP腳本中的對象,也就是說只有QTP腳本中的對象可以被惟一的識別出來,就能夠模擬人的整個操做流程。而QTP又是如何識別對象的呢?
       對象識別原理就是獲取hwnd,而後判斷ui屬性,逐個判斷,而後逐層遞歸,最後獲取每一個對象的全部層面的屬性,跟對象庫裏的屬性進行比較,匹配則應用。也就是說在你添加一個對象到對象倉庫中的時候,該對象的主要屬性都被保存到對象庫中了,回放QTP腳本的時候實際上就是在被測試軟件中尋找指定的對象,而後按照這些對象指定的方法去完成一個動做,而這些方法就是把windows win32中、web上的一些activex控件中的方法和微軟控件對外的接口中的一些方法進行封裝,成爲qtp本身的方法。對於任何一個add-in都是先找到人家的對外接口,而後拿過來封裝,須要的時候去調用接口事件,也就成爲了QTP的動做。
      因此QTP腳本回放實際上就是要作兩個步驟:1)識別出要操做的對象控件。2)識別出對象控件後來完成該對象控件指定的方法。
      在QTP識別對象的時候是按照對象的惟一屬性來區分的,有時候QTP對象倉庫保存的對象屬性是不徹底的,致使兩個很類似的對象不可以識別出來,這樣腳本就會報錯,或者說對象倉庫中對象的屬性每次都是變化的,那麼每次回放腳本也會和對象倉庫中保存的不一致致使腳本報錯。這裏介紹一個很好用的web對象的屬性——object屬性。
      QTP支持直接訪問DOM,能夠經過DOM來訪問HTML標籤。在QTP中,訪問DOM是經過使用page測試對象的object屬性來進一步訪問的,這樣就能夠訪問到很底層的對象屬性,能夠用底層的對象屬性來惟一區分web頁面上的對象控件,這樣就可以解決一些關於對象識別的錯誤。
   用page頁中的Link對象舉例說明object屬性:
   Browser(」網易」).Page(」網易」).Link(」VIP收費郵箱」).CheckProperty 「URL」,」 http://vip.163.com/
   其中使用了CheckProperty方法來對比Link對象的URL屬性是否等於指定的地址( http://vip.163.com/),也能夠用Link對象的object屬性中的herf屬性來對比,代碼以下:
   herf = Browser(」網易」).Page(」網易」).Link(」VIP收費郵箱」).Object.href
   If not herf = 「 http://vip.163.com/」 Then
      reporter.ReportEvent micFail, http://vip.163.com/, herf
   End If
相關文章
相關標籤/搜索