使用 getTestData 方法來反覆存取樹狀結構控制項中的項目

本主題提供範例來說明如何使用 Functional Tester 的 getTestData 方法來存取樹狀結構控制項分支上的值。

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


意見
(C) Copyright IBM Corporation 2000, 2007. All Rights Reserved.