圖 3. 在 RFT 中的存儲形式:圖上部的樹型結構,圖下部的屬性列表。

Object map 中被映射的對象使用被存儲的、靜態的、識別屬性和對象層次來識別,因此利用 Object Map 中存儲的對象將能很好的判斷對象所在頁面是否完整。
利用 RFT 錄制功能,將響應頁面的一個對象添加到 Object Map,RFT 會自動為該對象生成查找方法。例如,我們可以針對具體頁面上(能明顯區別開響應頁面與其他頁面的)的特定頁面元素進行識別。在實際測試運行當中,如果該對象能被找到,即證明該頁面已經加載完畢。例如,針對頁面中的一個按鈕 button_XXXbutton(),其返回值為 GuiTestObject 對象,利用 GuiTestObject 的 waitForExistence() 方法會阻塞當前腳本的執行,直到該對象被找到。
RFT 針對該方法提供了兩種接口:
button_XXXbutton().waitForExistence(); 和 button_XXXbutton().waitForExistence(double max_time, double wait_time);
這兩個接口的區別在于 .waitForExistence() 利用在 RFT 中設置的時間來執行,而 waitForExistence(double max_time, double wait_time); 利用在運行時指定的時間來執行。
1, button_XXXbutton().waitForExistence();
該方法的具體阻塞時間可以通過在 RFT 中設定的一個全局變量來控制。步驟為:選擇菜單 WindowPreferencesFunctional TestPlay back 中設置 Maximum time to attempt to find Test Object 的值,其單位為秒,如圖所示。腳本中所有 waitForExistence()方法將默認阻塞所設時間。
圖 4. 默認阻塞所設時間

2,button_XXXbutton().waitForExistence(180, 1);
通過該方法可以在運行時動態設置阻塞時間,并將覆蓋默認值。
采用 Object Map 是 RFT 最基本,最全面支持的方法,它和 RFT 強大的錄制回放功能進行了無縫的集成,下面給出了他的一些優缺點。
優點:利用 Object Map 來查找對象,RFT 將完全匹配對象的屬性和樹狀結構,所以該方法能很準確的匹配到相應頁面元素,同時也能很準確的判斷整個頁面是否下載完畢。
缺點:該方法由于依賴于 Object Map, 向 Object Map 中錄入對象需要手工來實現,而且針對不同的頁面都需要重新錄制一個對象,所以不可避免的存在靜態識別的重用性問題。對于每個不同的頁面,我們都要抓取一個對象到 Object Map 中,這樣在不同頁面中很難做到重用,而且如果頁面結構發生變化還會帶來維護成本高的問題。
文章來源于領測軟件測試網 http://www.k11sc111.com/