獲取瀏覽器屬性的方法: 編程
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的測試中,在出現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的最大化,最小化,同事也可以還原到原來的大小。函數
在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裏的對象有兩個概念,一個是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經過調用對象的自身接口來實現的。
兩種接口的腳本書寫格式的差異在於:
自身接口須要在對象名後面加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對象就當場消失不見了!!!