Iterazione sugli elementi in un controllo della struttura utilizzando il metodo getTestData

Questo argomento fornisce un esempio di utilizzo del metodo getTestData di Functional Tester per accedere in modo programmatico ai valori sulle sezioni di un controllo della struttura ad albero.

L'esempio riportato di seguito esegue il test dell'applicazione Java Classics:

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) 
	{
		// Avviare l'applicazione Java Classics
		startApp("ClassicsJavaA");
		
		// Frame: ClassicsCD
		tree2().waitForExistence();
		
		//Visualizzare i tipi di dati di test disponibili dalla struttura ad albero
		System.out.println ("Available Tree Data Types: " + tree2().getTestDataTypes());
		
		//Dichiarare le variabili per la struttura ad albero
		ITestDataTree cdTree;
		ITestDataTreeNodes cdTreeNodes;
		ITestDataTreeNode[] cdTreeNode;

		//Variabili di contenimento dei dati della struttura ad albero
		cdTree = (ITestDataTree)tree2().getTestData("tree");
		cdTreeNodes = cdTree.getTreeNodes();
		cdTreeNode = cdTreeNodes.getRootNodes();

		//Stampare il numero totale di nodi
		System.out.println ("Tree Total Node Count: " + cdTreeNodes.getNodeCount());
		System.out.println ("Tree Root Node Count : " + cdTreeNodes.getRootNodeCount());

		//Eseguire l'iterazione sui rami della struttura ad albero; questo è un metodo ricorsivo.
		for (int i = 0;i<cdTreeNode.length;++i)
		showTree(cdTreeNode[i], 0);

		//Chiudere l'applicazione Java Classics
		classicsJava(ANY,MAY_EXIT).close();
		}

		void showTree(ITestDataTreeNode node, int indent)
		{
		//Metodo ricorsivo per stampare i nodi della struttura ad albero con dei corretti rientri.

		//Determinare il numero di tabulazioni da utilizzare per dei corretti rientri della struttura ad albero
		int tabCount = ( indent < tabs.length() ? indent :
		tabs.length() );

		//Stampare il nome del nodo + il numero degli elementi secondari
		System.out.println(tabs.substring(0, tabCount) + node.getNode() + " (" + node.getChildCount() + "children)" );

		//Determinare se il nodo ha degli elementi secondari; richiamare ricorsivamente questo stesso
		//metodo per stampare i nodi secondari.
		ITestDataTreeNode[] children = node.getChildren();
		int childCount = ( children != null ? children.length : 0 );
		for ( int i = 0; i < childCount; ++i )
		showTree(children[i], indent+1);
		}

		//Stringa di tabulazioni utilizzata per i rientri della vista ad albero
		final String tabs = "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t";

}

Sulla prima schermata di questa applicazione c'è un componente Java Swing JTree, che elenca cinque compositori. Il livello successivo in basso elenca i CD disponibili per il compositore selezionato. Il codice in quest'esempio estrae i valori da tutti i rami della struttura ad albero e li visualizza nella finestra della console.

Il primo passo nell'estrazione dei dati consiste nell'utilizzare il metodo getTestData per estrarre i dati dal controllo. Ciò viene effettuato utilizzando la sintassi seguente:

ITestDataTree cdTree;  
cdTree = (ITestDataTree)tree2().getTestData("tree");

Il passo successivo consiste nella creazione di una matrice che contiene tutti i nodi sulla struttura ad albero. Ciò viene eseguito nel modo indicato di seguito:

ITestDataTreeNodes cdTreeNodes;
ITestDataTreeNode[] cdTreeNode;

cdTreeNodes = cdTree.getTreeNodes();//Incapsula i nodi
root.
cdTreeNode = cdTreeNodes.getRootNodes();;//Estrae gli effettivi
nodi root.

Si noti che questo è un processo a due fasi. Occorre innanzitutto utilizzare il metodo getTreeNodes per restituire un oggetto TreeNodes. Si richiama quindi il metodo getRootNodes per estrarre una matrice dei nodi root per la struttura ad albero.

Quando si dispone dei nodi della struttura ad albero, è possibile utilizzare la ricorsione per analizzare ogni nodo per determinarne il valore ed il numero di elementi secondari diretti che contiene. Ciò viene eseguito dal metodo ricorsivo showTree. Un metodo ricorsivo è un metodo che richiama se stesso ed è un metodo efficace per analizzare in modo progressivo una struttura ad albero. Per estrarre il valore del nodo, viene utilizzato il metodo getNode. Per estrarre il numero di elementi secondari contenuto dal nodo, viene utilizzato il metodo getChildCount. In questo esempio, ciò viene eseguito utilizzando il seguente codice:

System.out.println(tabs.substring(0, tabCount) + node.getNode()+" (" + node.getChildCount() + " children)"); 

Notare che la codifica aggiuntiva fornita nel metodo showTree personalizzato serve ad abilitare una stampa formattata utilizzando le tabulazioni per indicare i rientri della struttura ad albero.


Feedback