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ì)象都是繼承于GuiTestObjectGuiSubitemTestObject。類(lèi)似ButtonCheckBox這樣的簡(jiǎn)單對(duì)象,自然是繼承于GuiTestObject,而像ListTable這樣的有內(nèi)部子對(duì)象的復(fù)雜對(duì)象,一定是繼承于GuiSubitemTestObject。根據(jù)這一規(guī)律,就可以分別建立你所需要的類(lèi)了。

                  負(fù)責(zé)Button的類(lèi)如下:

          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();
              }
          }

              其他簡(jiǎn)單對(duì)象也可以繼承ToggleGUITestObjectTextScrollTestObject等其他衍生于GuiTestObject類(lèi),這些類(lèi)封裝了很多實(shí)用的方法可以直接使用,具體請(qǐng)參考RFT文檔中的API。

              負(fù)責(zé)TabPane的類(lèi)如下:

          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();
              }
          }

              由上面的例子可以看出來(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

          評(píng)論

          # re: RFT Best Practices - 4. 對(duì)象操作[未登錄](méi) 2009-11-04 09:12 Henry

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

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

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


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


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

          導(dǎo)航

          <2015年8月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          統(tǒng)計(jì)

          常用鏈接

          留言簿(2)

          隨筆分類(lèi)

          隨筆檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 丰镇市| 太仆寺旗| 神池县| 交城县| 柞水县| 阳西县| 元氏县| 丰顺县| 宕昌县| 娱乐| 锡林郭勒盟| 遵化市| 曲阜市| 卢氏县| 佛坪县| 寻甸| 通渭县| 六盘水市| 峨眉山市| 腾冲县| 德格县| 芦溪县| 徐汇区| 山丹县| 华容县| 武邑县| 永寿县| 连城县| 馆陶县| 淅川县| 平乡县| 商河县| 定边县| 福建省| 宁河县| 漯河市| 鄢陵县| 纳雍县| 九寨沟县| 巴林右旗| 南乐县|