下列範例測試 Classics Java™ 應用程式:
import resources.GetTreeDataExampleHelper; import com.rational.test.ft.*; import com.rational.test.ft.object.interfaces.*; import com.rational.test.ft.object.interfaces.SAP.*; import com.rational.test.ft.object.interfaces.siebel.*; import com.rational.test.ft.script.*; import com.rational.test.ft.value.*; import com.rational.test.ft.vp.*; /** * Description : Functional Test Script * @author Administrator */ public class GetTreeDataExample extends GetTreeDataExampleHelper { /** * Script Name : GetTreeDataExample * Generated : Jul 14, 2006 4:46:31 PM * Description : Functional Test Script * Original Host : WinNT Version 5.1 Build 2600 (S) * * @since 2006/07/14 * @author Administrator */ public void testMain (Object[] args) { //啟動 Classics Java 應用程式 startApp("ClassicsJavaA"); // 頁框:ClassicsCD tree2().waitForExistence(); //顯示樹狀可用的測試資料類型 System.out.println ("Available Tree Data Types: " + tree2().getTestDataTypes()); //宣告樹狀的變數 ITestDataTree cdTree; ITestDataTreeNodes cdTreeNodes; ITestDataTreeNode[] cdTreeNode; //存放樹狀資料的變數 cdTree = (ITestDataTree)tree2().getTestData("tree"); cdTreeNodes = cdTree.getTreeNodes(); cdTreeNode = cdTreeNodes.getRootNodes(); //印出節點總數 System.out.println ("Tree Total Node Count: " + cdTreeNodes.getNodeCount()); System.out.println ("Tree Root Node Count : " + cdTreeNodes.getRootNodeCount()); //反覆檢查樹狀分支;此為遞迴方法。 for (int i = 0;i<cdTreeNode.length;++i) showTree(cdTreeNode[i], 0); //關閉 Classics Java 應用程式 classicsJava(ANY,MAY_EXIT).close(); } void showTree(ITestDataTreeNode node, int indent) { //遞迴方法,以適當的內縮格式印出樹狀節點。 //決定要使用的標籤數目 - 適當地內縮樹狀 int tabCount = ( indent < tabs.length() ? indent : tabs.length() ); //印出節點名稱 + 子項數目 System.out.println(tabs.substring(0, tabCount) + node.getNode() + " (" + node.getChildCount() + "children)" ); //判斷節點是否為子項;遞迴地呼叫同一個 //方法來印出子節點。 ITestDataTreeNode[] children = node.getChildren(); int childCount = ( children != null ? children.length : 0 ); for ( int i = 0; i < childCount; ++i ) showTree(children[i], indent+1); } //用來內縮樹狀視圖的標籤字串 final String tabs = "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"; }
這個應用程式的第一個畫面是 Java Swing JTree 元件,列出五位作曲家。下一層列出選取的作曲家發行的 CD。此範例的程式碼會從樹狀的所有分支中擷取值,並顯示在主控台視窗中。
擷取資料的第一步是利用 getTestData 方法,從控制項擷取資料。語法如下:
ITestDataTree cdTree; cdTree = (ITestDataTree)tree2().getTestData("tree");
下一步是建立陣列,內含樹狀的所有節點。作法如下:
ITestDataTreeNodes cdTreeNodes; ITestDataTreeNode[] cdTreeNode; cdTreeNodes = cdTree.getTreeNodes();//封裝根節點。cdTreeNode = cdTreeNodes.getRootNodes();;//擷取實際的根節點。
請注意,整個過程分為兩個步驟。首先,您必須利用 getTreeNodes 方法來傳回 TreeNodes 物件。然後,再呼叫 getRootNodes 方法,擷取樹狀的根節點陣列。
取得樹狀節點之後,您利用透過遞回方式來瀏覽每一個節點,判斷內含的直屬子項的值和數目。這是在遞迴方法 showTree 中完成。遞迴方法是呼叫本身的一種方法,在瀏覽樹狀結構時很有效率。為了擷取節點的值,使用 getNode 方法。為了擷取節點內含的子項數目,使用 getChildCount 方法。在範例中,這透過下列程式碼來做到:
System.out.println(tabs.substring(0, tabCount) + node.getNode()+" (" + node.getChildCount() + " children)");
請注意,在自訂的 showTree 方法中所提供的其他程式碼,可以用標籤來產生格式化列印,以呈現樹狀結構的縮排效果。