下列範例測試 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 方法中所提供的其他程式碼,可以用標籤來產生格式化列印,以呈現樹狀結構的縮排效果。