{
return new TextGuiTestObject(getMappedTestObject("text_q"));
}
protected GuiTestObject button_search()
{
return new GuiTestObject(getMappedTestObject("button_search"));
}
腳本回放時,Rational Functional Tester利用"專用測試對象圖"進行靜態識別,可以從瀏覽器這個頂級容器開始,層層深入地定位到指定的某個對象。但這種呆板的對象查找方式也留下了很大的隱患:Web頁面里層次結構的變化屢見不鮮,而這種變化對于對象的查找而言,有著致命的影響。在這種模式下要想適應頁面層次結構的變化,只能重新錄制對象,生成新的"專用測試對象圖"。代價如此之大的維護方式使得自動化測試幾乎沒有可行性。
因此必須要將對象的識別同具體的"專用測試對象圖"分開,實現對象的動態識別。頁面對象都有一個共同的父類:com.rational.test.ft.object.interfaces.TestObject,而它的方法find(Subitem properties)正是用來在某個特定范圍內查找滿足條件的所有對象。借助它,我們可以對SearchLotusLinkHelper 進行改造,使其與"專用測試對象圖"不再緊密地耦合在一起。
改造后,回放過程中所需要用到的頁面對象都是在當前瀏覽器中即時查找得到的。通過目標對象的類型和某個屬性值來定位目標對象,脫離了"專用測試對象圖"中樹形結構的約束。SearchLotusLinkHelper的部分內容如下:
protected GuiTestObject document_htmlDocument() {
return new GuiTestObject(findTestObjectInBrowser(".class","Html.HtmlDocument",null,null));
}
protected TextGuiTestObject text_q() {
return new TextGuiTestObject(findTestObjectInBrowser(".class","Html.INPUT.text",".id","q"));
}
protected GuiTestObject button_search() {
return new GuiTestObject(findTestObjectInBrowser(".class","Html.INPUT.image",".value","Search"));
}
protected GuiTestObject link_httpWwwLotusCom() {
return new
GuiTestObject(findTestObjectInBrowser(".class","Html.A",".text","http://www.lotus.com/"));
}
protected TestObject findTestObjectInBrowser(String property1, String value1, String property2,
String value2)
{
TestObject[] foundTOs ;
//在當前瀏覽器頁面中查找
if(null==property2)
foundTOs = browser_htmlBrowser().find(atDescendant(property1,value1)) ;
else
foundTOs = browser_htmlBrowser().find(atDescendant(property1,value1,property2,value2)) ;
//如果沒有找到滿足條件的TestObject
if(foundTOs.length<1)
{
throw new com.rational.test.ft.ObjectNotFoundException("Can NOT find TestObject with
"+property1+"<"+value1+">,"+property2+"<"+value2+">");
}
文章來源于領測軟件測試網 http://www.k11sc111.com/