UFT小知識點整理

1、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)瀏覽器

 

2、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       ---最小化 app

  4.針對於網頁的最大化咱們深刻的學習一下,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的最大化,最小化,同事也可以還原到原來的大小。函數

 

3、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 返回全部本地可用驅動器的集合,用於創建資源瀏覽器樣的用戶接口。工具

 

4、QTP對象的識別與操做

(一)、QTP識別對象的原理 


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

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

  理解了TO的含義,你就能夠自由的用SetTOProperty()定義TO,以靈活的操做RO google

  好比有個測試任務,窗口上有不少待檢查的記錄,每條記錄右邊都有一個Check按鈕,用來檢查各條記錄。 
  記錄個數不定,因此Check按鈕個數也就不定,只有一個Edit顯示記錄個數。 
  咱們要對每條記錄進行檢查,也就是要點擊每一個Check按鈕。 
  可是Check按鈕個數不定,很差錄製,並且個數可能也不少(上百個),即便能一一錄製,那也很麻煩。 url

  那我有一個好辦法,只錄制一個按鈕對象,它設有兩個特徵屬性 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對象就當場消失不見了!!!

相關文章
相關標籤/搜索