RFT Best Practices - 4. 對象操作

                  找到對象之后,就需要對其進行操作了。在對對象進行操作之前,需要了解RFT處理對象的方式。根據(jù)RFT的文檔,Java對象的關(guān)系如下圖:


                  由此可見,絕大多數(shù)的對象都是繼承于GuiTestObjectGuiSubitemTestObject。類似ButtonCheckBox這樣的簡單對象,自然是繼承于GuiTestObject,而像ListTable這樣的有內(nèi)部子對象的復(fù)雜對象,一定是繼承于GuiSubitemTestObject。根據(jù)這一規(guī)律,就可以分別建立你所需要的類了。

                  負責(zé)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

              負責(zé)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();
              }
          }

              由上面的例子可以看出來,對對象的操作可以分為兩類:一類是施加行為,一類是讀取數(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

          評論

          # re: RFT Best Practices - 4. 對象操作[未登錄] 2009-11-04 09:12 Henry

          Cool! Thanks!!  回復(fù)  更多評論   

          # re: RFT Best Practices - 4. 對象操作 2015-08-31 07:13 karl

          很好的文章,贊??  回復(fù)  更多評論   


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          <2009年4月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          統(tǒng)計

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 禄丰县| 新津县| 久治县| 博野县| 鸡西市| 青川县| 周宁县| 延寿县| 永顺县| 山东| 策勒县| 奉节县| 仪陇县| 平乐县| 大渡口区| 普兰店市| 图木舒克市| 海宁市| 贵州省| 城口县| 阿图什市| 丽江市| 神池县| 大冶市| 九台市| 丰镇市| 彭州市| 明溪县| 富阳市| 岢岚县| 石泉县| 柯坪县| 突泉县| 闽侯县| 铅山县| 新化县| 重庆市| 建平县| 珠海市| 阜康市| 固阳县|