• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

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

    QTP相關問題的解析

    發布: 2009-11-25 13:43 | 作者: webmaster | 來源: 本站原創 | 查看: 493次 | 進入軟件測試論壇討論

    領測軟件測試網

    QTP相關問題的解析     軟件測試

     

    一、QTP獲取瀏覽器屬性的方法

    獲取瀏覽器屬性的方法:

    Dim obj,tempValue
     ’獲得窗體對象
    set obj = Browser(\"CreationTime:=1\").Page(\"index:=\").Object.parentWindow
     ’獲取瀏覽器的當前語言。
    tempValue = obj.clientInformation.browserLanguage
    print(tempValue)
     ’獲取瀏覽器的名稱。
    tempValue = obj.clientInformation.appName
    print(tempValue)
     ’獲取瀏覽器運行的平臺和版本。
    tempValue = obj.clientInformation.appVersion
    print(tempValue)
     ’獲取用戶的操作系統名稱。
    tempValue = obj.clientInformation.platform
    print(tempValue)
     ’獲取操作系統適用的默認語言。
    tempValue = obj.clientInformation.systemLanguage
    print(tempValue)
     ’獲取瀏覽器的代碼名稱。
    tempValue = obj.clientInformation.appCodeName
    print(tempValue)
     ’獲取指示 CPU 等級的字符串。
    tempValue = obj.clientInformation.cpuClass
    print(tempValue)
     ’獲取表明系統是否處于全局脫機模式的值。
    tempValue = obj.clientInformation.onLine
    print(tempValue)
     ’獲取等同于 HTTP 用戶代理請求頭的字符串。
    tempValue = obj.clientInformation.userAgent
    print(tempValue)

     

    二、QTP測試時應用程序的最大化最小化控制

    在QTP的測試中,在出現bug的地方,我們想通過截圖留下證據,但是有時候可能網頁不是最大化,使得我們截到了無關緊要的圖像,在這里提供一些方法,可以盡量避免這種現象。

    1.截圖可以
    使用QTP自帶的函數例如
    只截取page,不包括上面的工具及導航欄
    Browser(\"社內システム\").Page(\"社內システム\").CaptureBitmap(\"D:\\1.bmp)
    整個瀏覽器
    Browser(\"社內システム).CaptureBitmap(\"D:\\1.bmp)
    由于這種截圖只是一屏幕,不能截取到整個page
    所以,有時候我們也可以使用一些開源的截圖工具,這樣效果比較好。 
    2.在截圖之前先同步。針對于頁面來說就是
    Browser(\"社內システム\").Page(\"社內システム\").Sync 
    3.截圖之前先最大化。
    應用程序的操作:
    winObject.Maximize   ---最大化
    winObject.Minimize    ---最小化
    winObject.Restore     ---返回到更菜的大小
    瀏覽器的操作:
    winObject.FullScreen   --- 效果如同F11的最大化
    winObject.Minimize       ---最小化

     。.針對于網頁的最大化我們深入的學習一下,winObject.FullScreen 其效果如同F11的最大化,不是我們通常使用的最大化,有時候截圖需要規范,要用到通常的最大化怎么辦呢?
      其實瀏覽器(IE)對于操作系統來講,也是一個應用程序,我們可以變相的實現“通常的最大化”
    Dim hwnd
    hwnd = Browser(\"Browser\").GetROProperty(\"HWND\")
    ’msgbox cstr(hwnd)
    ’將瀏覽器最大化
    Window(\"hwnd:=\" & hwnd).Maximize
    Browser(\"Browser\").Navigate \"http://www.google.com/\"
    ’回復瀏覽器剛才的大小
    Window(\"hwnd:=\" & hwnd).Restore
    ’最小化瀏覽器
    Window(\"hwnd:=\" & hwnd).Minimize
    這樣我們變通的實現了IE的最大化,最小化,同事也能夠還原到原來的大小。

     

    三、QTP:FileSystemObject基礎知識

    在QTP測試中,比較本地的兩個文件是不是相同,需要使用VBScript的FileSystemObject對象,在此作簡要的概述
    (一).基礎FileSystemObject
    1.     創建 FileSystemObject 對象
    Dim fso
    Set fso = CreateObject(\"Scripting.FileSystemObject\")
      Scripting 是類型庫的名字,而 FileSystemObject 則是想要創建的對象的名字。
      要用 FileSystemObject (FSO) 對象模式來編程,則:使用 CreateObject 方法來創建 FileSystemObject 對象。 
      FSO 對象模式包含在 Scripting 類型庫中,該庫位于 Scrrun.dll 文件中。因而,要使用 FSO 對象模式,必須把 Scrrun.dll 放在 Web 服務器的適當系統目錄中。
    2.     使用方法:
      訪問現有驅動器、文件和文件夾
    GetDrive()、GetFolder()、GetFile()、CreateFolder()、CreateFile()、CreateTextFile ()、OpenTextFile()、FolderExists(url)、DeleteFolder(url)、MoveFolder(src,to)、FileExists(url)、CopyFile()、MoveFile()、DeleteFile()、
    例如:
    Dim fso, f1
    Set fso = CreateObject(\"Scripting.FileSystemObject\")
    Set f1 = fso.GetFile(\"c:\\test.txt\")
    3.     訪問屬性:
    Name、Path、Size、Type、DateLastModified(上一次修改的文件時間)
    (二).FSO的一些特殊功能
    1.        GetSpecialFolder Method 返回特定的Windows文件夾的路徑:
      Windows安裝目錄;Windows系統目錄;Windows臨時目錄 
      FSO.GetSpecialFolder([0, 1, or 2])  
    2.        GetTempName Method 返回一個隨機產生的文件或者目錄名字,用于存儲臨數據
    3.        GetAbsolutePathName Method 返回文件夾的絕對路徑(類似于Server.MapPath)。
    比如,FSO.GetAbsolutePathName(\"region\") 將返回類似于下面的結果:\"c:mydocsmyfolder egion\" 
    4.        GetExtensionName Method 返回路徑中最后部分的擴展名 (比如:FSO.GetExtensionName(\"c:docs est.txt\") 將返回txt) 
    5.        GetBaseName and GetParentFolder Methods 返回路徑中最后部分的父文件夾 (比如:FSO.GetParentFolder (\"c:docsmydocs\") 將返回’docs’) 
    6.        Drives Property 返回所有本地可用驅動器的集合,用于建立資源瀏覽器樣的用戶接口。

     

    四、QTP對象的識別與操作

    (一)、QTP識別對象的原理
      QTP里的對象有兩個概念,一個是Test Object(簡稱TO),一個是Runtime Object(簡稱RO)。
      這兩個概念從字面上不大好理解,也容易混淆。
      但從實際作用上來看,應該說TO就是是倉庫文件里定義的倉庫對象,RO是被測試軟件的實際對象。
      QTP識別對象,一般是要求先在對象倉庫文件里定義倉庫對象,里面存有實際對象的特征屬性的值。
      然后在運行的時候,QTP會根據腳本里的對象名字,在對象倉庫里找到對應的倉庫對象,
      接著根據倉庫對象的特征屬性描述,在被測試軟件里搜索找到相匹配的實際對象,最后就可以對實際對象進行操作了。
      倉庫對象TO一般在錄制/編寫腳本時加入倉庫文件,它不僅可以在錄制編寫時進行修改,
      也可以在運行過程中進行動態修改,以匹配實際對象。

    和TO、RO相關的幾個函數有:
      GetTOProperty():取得倉庫對象的某個屬性的值
      GetTOProperties():取得倉庫對象的所有屬性的值
      SetTOProperty():設置倉庫對象的某個屬性的值
      GetROProperty():取得實際對象的某個屬性的值

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

      比如有個測試任務,窗口上有很多待檢查的記錄,每條記錄右邊都有一個Check按鈕,用來檢查各條記錄。
      記錄個數不定,所以Check按鈕個數也就不定,只有一個Edit顯示記錄個數。
      我們要對每條記錄進行檢查,也就是要點擊每個Check按鈕。
      但是Check按鈕個數不定,不好錄制,而且個數可能也很多(上百個),即使能一一錄制,那也很麻煩。

      那我有一個好辦法,只錄制一個按鈕對象,它設有兩個特征屬性 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等好幾個按鈕,要把這幾個按鈕一一按過去
      我在對象倉庫里只設置一個按鈕對象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還支持腳本描述的方法來定義和訪問對象,即不需要在倉庫里定義,也能訪問和操作實際對象 [Page]

      如上面兩個任務,可以如下實現
      1. 不需要在倉庫里定義Check按鈕對象,直接用下面腳本來實現測試


    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按鈕對象,直接用下面腳本來實現測試

    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操作對象的原理
      QTP為用戶提供了兩種操作對象的接口,一種就是對象的封裝接口,另一種是對象的自身接口。

      對象的自身接口是對象控件本身的接口,只要做過軟件開發,使用過控件的人應該很清楚。
      對象的封裝接口是QTP為對象封裝的另一層接口,它是QTP通過調用對象的自身接口來實現的。

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

    具體格式如下:
      對實際對象的操作:
          對象.object.自身屬性
          對象.object.自身方法()
          對象.GetROProperty(\"封裝屬性\")
          對象.封裝方法()

      對倉庫對象的操作:
          對象.GetTOProperty(\"封裝屬性\")
          對象.GetTOProperties()      ’獲取所有封裝屬性的值
          對象.SetTOProperty(\"封裝屬性\", \"封裝屬性值\")

      比如操作JavaEdit對象,通過QTP封裝的封裝接口,腳本如下:
      設置JavaEdit的內容:
         JavaDialog(\"Add NE\").JavaEdit(\"NE Name\").Set \"NE1\"
      讀取JavaEdit的內容:
         msgbox JavaDialog(\"Add NE\").JavaEdit(\"NE Name\").GetROProperty(\"value\")

      如果通過JavaEdit的自身接口,腳本如下:
      設置JavaEdit的內容:
         JavaDialog(\"Add NE\").JavaEdit(\"NE Name\").object.setText(\"NE1\")
      讀取JavaEdit的內容:

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

      QTP執行JavaEdit().Set語句時,是通過執行JavaEdit().object.setText()來實現的。
      QTP執行JavaEdit().GetROProperty(\"value\"),是通過執行JavaEdit().object.getText()來實現的。
      JavaEdit對象的封裝接口Set()和GetROProperty(\"value\"),是QTP封裝JavaEdit對象的自身接口setText()和getText()而得來的。

      對象的封裝接口是QTP使用的缺省接口,我們錄制出來的腳本都是使用封裝接口,大家用的也都是封裝接口。[Page]
      但是封裝接口不如自身接口豐富,因為QTP只是封裝了部分常用的自身接口嘛。
      所以我們在需要時,可以繞過封裝接口,直接調用對象的自身接口。
      不過有些自身接口不夠穩定,在實踐中偶爾會出現問題,但是概率很少。
      封裝接口有相應功能的話,就盡量用封裝接口吧!

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

      但是我們怎么知道對象都有哪些封裝接口和自身接口呢?
      其實很簡單,用對象查看器(Object Spy)查看對象,在查看窗口里有列出這些接口,包括屬性和方法。
      窗口中間有選擇欄讓你選擇Run-time Object或者Test Object,
      當你選擇Runtime Object時,它顯示的就是對象的自身接口(自身的屬性和方法)
      當你選擇Test Object時,它顯示的就是對象的封裝接口(封裝的屬性和方法)

    (注意:GetROProperty訪問的是實際對象的封裝接口,GetTOProperty訪問的是倉庫對象的封裝接口,
                兩者訪問的都是對象的封裝接口,即Object Spy窗口里選Test Object時顯示的屬性。
                不要以為GetROProperty訪問的是自身接口,即Object Spy窗口里選Run-time Object時顯示的屬性。
                QTP里的Test Object/Run-time Object的概念太容易讓人混淆了!
                它既用來區分倉庫對象和實際對象,又用來區分對象的封裝接口和自身接口。

      明白了這些,你還等什么呢?快拿起對象查看器,看看對象都有哪些封裝接口和自身接口,肆意的操作它,玩弄它吧!

    比如執行
      JavaDialog(\"Add NE\").JavaEdit(\"NE Name\").object.setVisible(false)
      你的JavaEdit對象就當場消失不見了。!

     

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: qtp QTP 解析


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

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>