下面是模擬書本上的示例進行實際操作時遇到問題后得到的一些感悟:
第一個示例要求如下:
打開IE瀏覽器,再從51testing網站的主頁跳轉到51testing網站的論壇。
systemUtil.Run "C:\Program Files (x86)\Internet Explorer\iexplore.exe","www.51testing.com","","" Browser("micClass:=Browser").Navigate("bbs.51testing.com") Browser("micClass:=Browser").Page("micClass:=Page").Sync
上面雖然僅僅是3行代碼,但是運行成功頗費了一段時間。
1. 一定要先打開QTP,再打開IE瀏覽器,這樣SPY功能才能識別到IE的控件。因為安裝完QTP之后,每次打開IE,瀏覽器會自動加載BHOManager,而QTP在IE中識別對象是依靠一個叫BHOManager Class的動態鏈接庫來完成的,如果是先打開IE再打開QTP,QTP就不能成功讀到BHOManager這個動態鏈接庫而導致QTP識別對象失敗。
2. 需要設置Record and Run Settings里Web的運行方式為:Record and run test on any browser
3. systemUtil.Run 如果不指定要運行的瀏覽器地址,有可能主動打開的不是IE,而是360之類的瀏覽器。可以查看help文檔,閱讀此方法的使用參數如何設置。
4. 后面2句是描述性編程,不需要把瀏覽器控件添加到對象庫。如果添加了,運行時會報錯:在對象庫中找不到你所描述的對象。
第二個示例要求如下
1. 啟動IE並進入51testing首頁
2. 點擊《軟件測試論壇》鏈接,檢查當前是否論壇頁面
3. 關閉51testing首頁
4. 論壇頁面內點擊《QuickTest Pro》版塊鏈接
5. 點擊該板塊頁面中<51testing軟件測試論壇>鏈接,在出現的下拉框中點擊<我要做專家>的鏈接
6. 在《我要做專家》頁面中搜索2個鏈接,是否存在
最后的成品代碼如下:
'啟動IE並進入51testing首頁 systemUtil.Run "C:\Program Files (x86)\Internet Explorer\iexplore.exe","www.51testing.com","","" '點擊《軟件測試論壇》鏈接,檢查當前是否論壇頁面 Browser("51Testing軟件測試網").Page("51Testing軟件測試網-主頁").Link("軟件測試論壇").Click Browser("51Testing軟件測試論壇").Page("51Testing軟件測試論壇-主頁").Sync checkTitle=Browser("51Testing軟件測試論壇").Page("51Testing軟件測試論壇-主頁").GetROProperty("title") If instr(checkTitle,"論壇") <> 0 Then Reporter.ReportEvent micPass,"step 2","passed" else Reporter.ReportEvent micFail,"step 2","fail" End If '關閉51testing首頁 'Browser("51Testing軟件測試網").Page("51Testing軟件測試網-主頁").Sync Browser("51Testing軟件測試網").Close '注解1 '論壇頁面內點擊《QuickTest Pro》版塊鏈接 Browser("51Testing軟件測試論壇").Page("51Testing軟件測試論壇-主頁").Link("[QuickTest Professional]").Click wait 2 '點擊該板塊頁面中<51testing軟件測試論壇>鏈接,在出現的下拉框中點擊<我要做專家>的鏈接 Browser("[QuickTest Professional]").Page("[QuickTest Professional]").Link("我要做專家").Click '注解2 '在《我要做專家》頁面中搜索2個鏈接,是否存在 Set oDesc = Description.Create() '創建properties對象 oDesc("micClass").value = "Link" Set Lists =Browser("我要做專家 - 51Testing軟件測試論壇").Page("我要做專家 - 51Testing軟件測試論壇").WebElement("我要做專家 類型 主題: 全部 精華 |").ChildObjects(oDesc) '注解3 NumberOfLists = Lists.Count() mark = 0 Find1 = "【你來問我來答第48期】:探討數據庫相關的開發和測試技術" Find2 = "[你問我來答第6期]:軟件測試之功能測試(已結束)" For i = 0 To NumberOfLists - 1 LinkName = trim(Lists.item(i).GetRoProperty("innertext")) '注解4 'msgbox linkName If LinkName = Find1 or LinkName = Find2 Then mark = mark + 1 End If If mark = 2 Then '已經找到 Reporter.ReportEvent micPass,"found","Passed" Exit for End If If i = NumberOfLists - 1 Then '沒找到也寫進報告里 Reporter.ReportEvent micFail,"not found","Failed" End If Next '釋放對象,從最里面一層開始釋放直到最外面一層 Set oDesc = nothing Set lists = nothing
解釋幾點:
1. 進行非描述性編程時每一個用到的對象都要添加到對象庫,否則會出現對象無法識別。
2. 注解1中那一行代碼,如果你的IE設置不對,就會執行失敗。
假如你的IE打開鏈接是在當前窗口的新選項卡,那么51testing軟件測試網首頁和軟件測試論壇是在同一個browser下的,所以Browser("51Testing軟件測試網")識別失敗。你需要把你的IE選項改為:
當他們是在2個不同的窗口下打開時,Browser("51Testing軟件測試網").Close才能執行成功。
3. 注解2 鏈接<我要做專家>需要添加到對象庫,這里有個必須要提一下的技巧,因為這個鏈接是點擊<51testing軟件測試論壇>后才出現在下拉框中的。如下圖:
我們都知道,當使用SPY或者對象庫捕獲對象時,一旦點擊白色手指后就只能抓取對象而無法進行其他任何操作了。但其實點擊了白色手指之后,仍然可以通過2種模式切換操作,使得切換后可以停止對控件的抓取,並可以對被測對象進行操作。
A. 半操作模式--CTRL鍵 支持鼠標點擊操作
使用spy或對象庫捕獲對象后,可以看到鼠標光標是手指狀態,此時也是捕獲對象的狀態。這個時候是不可以進行任何操作的,只能抓取想要的對象。而當我們按住CTRL鍵不放,就可以做點擊操作了。如上圖,鼠標光標是手指狀態時,我們按住CTRL鍵,鼠標點擊<51testing軟件測試論壇>鏈接,等下拉框出來后,放開CTRL鍵,再點擊<我要做專家>鏈接,就可以成功地把這個鏈接加入對象庫了。
B.全操作模式--CTRL+ALT鍵 支持鼠標點擊和鍵盤輸入
在處於抓取對象模式的情況下按住CTRL鍵不放,然后按下ALT鍵,緊接着先松開CTRL鍵,再松開ALT鍵。這樣就切換到全操作模式了。比如你可以在百度輸入框中輸入數據,等模糊匹配下拉選項框出現后,再點擊CTRL鍵然后松開,就返回到抓取對象模式,你再點擊想要的下拉選項,就可以完成抓取模糊匹配下拉框對象。
4. 注解3 因為一個頁面里有很多個link對象,我們不可能把它們全都添加到對象庫中,然后一個個進行匹配。這時候我們要善於將對象庫編程與描述性編程混搭。Description對象可以返回包含一組property對象的properties集合對象。property對象由屬性名和值組成。
這里把link對象的父對象擴展到WebElement("我要做專家 類型 主題: 全部 精華 |")是因為整個頁面的link太多,細化到我們要查找的link所在的最接近父對象是提高查找效率的方法之一。
5. 注解4 這是遍歷頁面中的link對象,取得它的運行時innertext屬性,來跟目標鏈接進行對比。
左圖是注解4中用到的innertext。右圖是本次示例中對象庫的內容。