RFT Best Practices - 4. 對象操作
找到對象之后,就需要對其進行操作了。在對對象進行操作之前,需要了解RFT處理對象的方式。根據(jù)RFT的文檔,Java對象的關(guān)系如下圖:
由此可見,絕大多數(shù)的對象都是繼承于GuiTestObject和GuiSubitemTestObject。類似Button和CheckBox這樣的簡單對象,自然是繼承于GuiTestObject,而像List和Table這樣的有內(nèi)部子對象的復(fù)雜對象,一定是繼承于GuiSubitemTestObject。根據(jù)這一規(guī)律,就可以分別建立你所需要的類了。
負責(zé)Button的類如下:
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();
}
}
其他簡單對象也可以繼承ToggleGUITestObject或TextScrollTestObject等其他衍生于GuiTestObject類,這些類封裝了很多實用的方法可以直接使用,具體請參考RFT文檔中的API。 負責(zé)TabPane的類如下:
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();
}
}
由上面的例子可以看出來,對對象的操作可以分為兩類:一類是施加行為,一類是讀取數(shù)據(jù)。對此,RFT的API給出了詳細的文檔,例如對于List對象,文檔如下:
由此可看出,對于List對象,可以通過.class, .classIndex, .itemCount, .itemText, .priorLabel,accessibleContext.accessibleName,name和toolTipText這些屬性進行識別。獲取List對象后,它支持Text和Index這兩類子對象,可通過ITestDataList接口獲得全部列表元素和已選列表元素。上面getAllTabs()方法就是用來獲得所有Tab選項的,可以作為參考。
還有一些更為復(fù)雜的簡單對象,如:TextField和Frame,以及復(fù)雜對象,如:Table和Tree。如果你能夠理解上述處理對象的方法,那么完全可以編寫符合自己項目需要的方法,對這些對象進行各種各樣的操作。
posted on 2009-04-20 16:44 terrypang 閱讀(1454) 評論(2) 編輯 收藏 所屬分類: RFT Best Practices