RFT Best Practices - 4. 對(duì)象操作
找到對(duì)象之后,就需要對(duì)其進(jìn)行操作了。在對(duì)對(duì)象進(jìn)行操作之前,需要了解RFT處理對(duì)象的方式。根據(jù)RFT的文檔,Java對(duì)象的關(guān)系如下圖:
由此可見(jiàn),絕大多數(shù)的對(duì)象都是繼承于GuiTestObject和GuiSubitemTestObject。類(lèi)似Button和CheckBox這樣的簡(jiǎn)單對(duì)象,自然是繼承于GuiTestObject,而像List和Table這樣的有內(nèi)部子對(duì)象的復(fù)雜對(duì)象,一定是繼承于GuiSubitemTestObject。根據(jù)這一規(guī)律,就可以分別建立你所需要的類(lèi)了。
負(fù)責(zé)Button的類(lèi)如下:
import java.awt.Point;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.rational.test.ft.object.interfaces.GuiTestObject;
import com.rational.test.ft.object.interfaces.TestObject;
public class WButton extends GuiTestObject {
public WButton(TestObject button) {
super(button);
}
public void click() {
super.click();
}
public void click(int x, int y) {
super.click(new Point(x, y));
}
public void doubleClick() {
super.doubleClick();
}
public boolean isEnabled() {
return super.isEnabled();
}
}
其他簡(jiǎn)單對(duì)象也可以繼承ToggleGUITestObject或TextScrollTestObject等其他衍生于GuiTestObject類(lèi),這些類(lèi)封裝了很多實(shí)用的方法可以直接使用,具體請(qǐng)參考RFT文檔中的API。 負(fù)責(zé)TabPane的類(lèi)如下:
import java.util.Vector;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.rational.test.ft.object.interfaces.GuiSubitemTestObject;
import com.rational.test.ft.object.interfaces.TestObject;
import com.rational.test.ft.script.Index;
import com.rational.test.ft.script.Text;
import com.rational.test.ft.vp.ITestData;
import com.rational.test.ft.vp.ITestDataElementList;
import com.rational.test.ft.vp.ITestDataList;
public class WTabbedPane extends GuiSubitemTestObject {
static final Logger logger = LoggerFactory.getLogger("WTabbedPane.class");
public WTabbedPane(TestObject tabbedPane) {
super(tabbedPane);
}
public void clickTab(String tabName) {
this.click(new Text(tabName));
}
public void clickTab(int index) {
this.click(new Index(index));
}
public int getTabCount() {
logger.info("Get tab count");
ITestData data = (ITestData) super.getTestData("list");
ITestDataList list = (ITestDataList) data;
return list.getElementCount();
}
public int findTab(String text) {
logger.info("Find the index of tab {}", text);
Vector contents = this.getAllTabs();
for (int i = 0; i < contents.size(); i++) {
if (contents.get(i).toString().equals(text)) {
return i;
}
}
return -1;
}
public String getTabText(int index) {
logger.info("Get tab text with index {}", index);
Vector contents = this.getAllTabs();
if (index < 0 || index >= contents.size()) {
return null;
}
return (String) contents.get(index);
}
public Vector getAllTabs() {
logger.info("Get all tabs");
ITestDataList dataList = (ITestDataList) super.getTestData("list");
ITestDataElementList elementList = (ITestDataElementList) dataList
.getElements();
return elementList.getElements();
}
}
由上面的例子可以看出來(lái),對(duì)對(duì)象的操作可以分為兩類(lèi):一類(lèi)是施加行為,一類(lèi)是讀取數(shù)據(jù)。對(duì)此,RFT的API給出了詳細(xì)的文檔,例如對(duì)于List對(duì)象,文檔如下:
由此可看出,對(duì)于List對(duì)象,可以通過(guò).class, .classIndex, .itemCount, .itemText, .priorLabel,accessibleContext.accessibleName,name和toolTipText這些屬性進(jìn)行識(shí)別。獲取List對(duì)象后,它支持Text和Index這兩類(lèi)子對(duì)象,可通過(guò)ITestDataList接口獲得全部列表元素和已選列表元素。上面getAllTabs()方法就是用來(lái)獲得所有Tab選項(xiàng)的,可以作為參考。
還有一些更為復(fù)雜的簡(jiǎn)單對(duì)象,如:TextField和Frame,以及復(fù)雜對(duì)象,如:Table和Tree。如果你能夠理解上述處理對(duì)象的方法,那么完全可以編寫(xiě)符合自己項(xiàng)目需要的方法,對(duì)這些對(duì)象進(jìn)行各種各樣的操作。
posted on 2009-04-20 16:44 terrypang 閱讀(1453) 評(píng)論(2) 編輯 收藏 所屬分類(lèi): RFT Best Practices