http://www.blogjava.net/terrypang/archive/2009/04/20/266576.html
找到对象之后,就需要对其进行操作了。在对对象进行操作之前,需要了解RFT处理对象的方式。根据RFT的文档,Java对象的关系如下图:
由此可见,绝大多数的对象都是继承于GuiTestObject和GuiSubitemTestObject。类似Button和CheckBox这样的简单对象,自然是继承于GuiTestObject,而像List和Table这样的有内部子对象的复杂对象,一定是继承于GuiSubitemTestObject。根据这一规律,就可以分别建立你所需要的类了。
负责Button的类如下:
package
framework.widgets;
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。
负责TabPane的类如下:
package
framework.widgets;
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();
}
}
由上面的例子可以看出来,对对象的操作可以分为两类:一类是施加行为,一类是读取数据。对此,RFT的API给出了详细的文档,例如对于List对象,文档如下:
由此可看出,对于List对象,可以通过.class, .classIndex, .itemCount, .itemText, .priorLabel,accessibleContext.accessibleName,name和toolTipText这些属性进行识别。获取List对象后,它支持Text和Index这两类子对象,可通过ITestDataList接口获得全部列表元素和已选列表元素。上面getAllTabs()方法就是用来获得所有Tab选项的,可以作为参考。
还有一些更为复杂的简单对象,如:TextField和Frame,以及复杂对象,如:Table和Tree。如果你能够理解上述处理对象的方法,那么完全可以编写符合自己项目需要的方法,对这些对象进行各种各样的操作。