RFT Best Practices - 4. 对象操作

RFT Best Practices - 4. 对象操作

        找到对象之后,就需要对其进行操作了。在对对象进行操作之前,需要了解RFT处理对象的方式。根据RFT的文档,Java对象的关系如下图:


        由此可见,绝大多数的对象都是继承于GuiTestObjectGuiSubitemTestObject。类似ButtonCheckBox这样的简单对象,自然是继承于GuiTestObject,而像ListTable这样的有内部子对象的复杂对象,一定是继承于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();
    }
}

    其他简单对象也可以继承ToggleGUITestObjectTextScrollTestObject等其他衍生于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。如果你能够理解上述处理对象的方法,那么完全可以编写符合自己项目需要的方法,对这些对象进行各种各样的操作。



你可能感兴趣的:(RFT Best Practices - 4. 对象操作)