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。如果你能夠理解上述處理對象的方法,那么完全可以編寫符合自己項目需要的方法,對這些對象進行各種各樣的操作。



          posted on 2009-04-20 16:44 terrypang 閱讀(1453) 評論(2)  編輯  收藏 所屬分類: RFT Best Practices

          評論

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

          Cool! Thanks!!  回復  更多評論   

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

          很好的文章,贊??  回復  更多評論   

          導航

          <2009年11月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          統計

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 庆安县| 克拉玛依市| 小金县| 辽阳县| 色达县| 阜新市| 大方县| 新平| 泰顺县| 万盛区| 张掖市| 若羌县| 南木林县| 射阳县| 靖宇县| 苏尼特右旗| 齐河县| 桑植县| 彩票| 沧州市| 裕民县| 仁怀市| 靖西县| 宜黄县| 阳泉市| 施甸县| 莱西市| 宁蒗| 天全县| 安图县| 罗江县| 鄂托克前旗| 保定市| 兴业县| 伊通| 南陵县| 彭山县| 大埔区| 榆社县| 张家港市| 平乐县|