Ricerca degli oggetti di test SAP

Con Functional Tester, è possibile individuare uno o più TestObject SAP corrispondenti ai criteri di ricerca specificati, anche senza utilizzare la mappa di oggetti.

Functional Tester supporta una classe RootTestObject per rappresentare una vista globale del software sottoposto a test. Per abilitare l'applicazione SAP per i test, si richiama il metodo enableForTesting sulla classe RootTestObject. Per eseguire una ricerca globale, si richiama il metodo find sulla classe RootTestObject. I valori validi per l'elemento secondario, ovvero il primo argomento del metodo di ricerca, includono atProperty, atChild, atDescendant e atList. Esistono delle proprietà speciali che si applicano a RootTestObject.find, comprese le proprietà .processName, .processID e .domain. È possibile utilizzare uno di questi elementi secondari e proprietà. Ad esempio, per cercare il dominio SAP, è possibile utilizzare l'elemento secondario atChild con la proprietà .domain impostata su SAP.

Nota: Per ulteriori informazioni sulla gerarchia di runtime della GUI di SAP, consultare la documentazione relativa al framework di script GUI di SAP.

Una volta trovato e restituito l'oggetto di test SAP di livello superiore, è possibile utilizzare tale oggetto per trovare vari oggetti della gerarchia di runtime della GUI di SAP. Ad esempio:

Una volta ottenuto l'oggetto finestra attivo, è possibile utilizzare il metodo GetChildren nell'oggetto di test finestra principale per trovare e interagire con i vari oggetti sul metodo GuiMainWindow.

Di seguito è riportato un esempio del modo in cui gestire le interazioni utente con gli oggetti nell'applicazione SAP. Questo codice di esempio esegue le seguenti azioni:

  1. Abilita l'applicazione SAP per il test
  2. Restituisce l'oggetto di test SAP che rappresenta la finestra
  3. Utilizza tale oggetto per trovare il pulsante Crea ruolo la cui proprietà relativa al nome del pulsante è impostata su btn[48] nella barra degli strumenti di SAP
  4. Fa clic sul pulsante Crea ruolo

Esempio:

import resources.HandCodingWithEnablementHelper;

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 HandCodingWithEnablement extends HandCodingWithEnablementHelper
{
	/**
	 * Script Name   : HandCodingWithEnablement
	 * Generated     : Sep 5, 2006 10:03:51 AM
	 * Description   : Functional Test Script
	 * Original Host : WinNT Version 5.1  Build 2600 (S)
	 * 
	 * @since  2006/09/05
	 * @author Administrator
	 */
	public void testMain (Object[] args) 
	{
		// Searching for SAP Test Objects through Scripting 
		
		// This enables SAP to be tested by Functional Tester and 
		// returns all top-level test objects in the SAP domain
		getRootTestObject().enableForTesting("sapLogon");
		TestObject[] sapApps = getRootTestObject().find(atChild(".domain", "SAP"));
		
		// Get a handle to the SAP Application from the top-level SAP object
		if(sapApps.length > 0){
			SAPGuiApplicationTestObject theAPP = ((SAPTopLevelTestObject)sapApps[0]).getApplication();
			logInfo("Application Number:" + theAPP.getProperty("Id"));
			
			// Get a handle to the SAP Connection from the SAP Application Test object
			TestObject[] cons = (TestObject[])theAPP.getProperty("Connections");

			SAPGuiConnectionTestObject con = (SAPGuiConnectionTestObject)cons[0];
			logInfo("Connection Number:" + con.getProperty("Id"));
			
			// Get a handle to the SAP Session from the SAP Connection Test Object
			TestObject[] sessions = (TestObject[])con.getProperty("Sessions");
			SAPGuiSessionTestObject sess = (SAPGuiSessionTestObject)sessions[0];
			logInfo("Session Number:" + sess.getProperty("Id"));
	
			// Get a handle to the SAP Main Window from the SAP Session Test Object
			// and iterate over its children till the desired object is found
			SAPTopLevelTestObject mainWnd = (SAPTopLevelTestObject)sess.getProperty("ActiveWindow");			
						
			TestObject[] wndChild = mainWnd.getChildren();
			for (int i=0; i<wndChild.length; i++)
			{
				String name = (String)wndChild[i].getProperty("Name");
				if (name.compareTo("tbar[1]")== 0)
				{
					TestObject[] btn = (TestObject[])wndChild[i].getChildren();
					for (int j = 0; j< btn.length; j++)
					{
						System.out.println("ToolBar Buttons");
						String btnType = (String)btn[j].getProperty("Type");
						if (btnType.compareTo("GuiButton")==0)
						{
							SAPGuiToggleTestObject button = (SAPGuiToggleTestObject)btn[j];
							String btnName = (String)button.getProperty("Name");
							if (btnName.compareTo("btn[48]")== 0)
							{
								// Click on the "Create Role" button ("btn[48]") placed on the toolbar("tbar[1]")
								button.press();
								logInfo("Clicked on the Create Role button");
								break;
							}
						}
					}
				}
			}
		}else{
			logInfo("SAP Application not found");
		}
	}
}

Se l'applicazione SAP è già abilitata, non è necessario abilitarla esplicitamente per il test. Invece, è possibile utilizzare il seguente codice per trovare l'applicazione SAP abilitata.

DomainTestObject domains[] = getDomains();
	for  (int i =0; i < domains.length; i ++)
	{
		DomainTestObject domain = domains[i];
		String name = (String)domain.getName();
		if (name.compareTo("SAP") == 0)
		{
			// Returns all top-level test objects in the SAP domain
			TestObject[] sapApps = domains[i].getTopObjects();
				
			// Perform user interactions with the SAP objects
		}
	}
È anche possibile adattare la API dynamicfind() per trovare gli oggetti di testo SAP in uno script di test funzionale ed eseguire setText in un campo di testo SAP.
public class SAPEditControl extends SAPEditControlHelper {
	/**
	 * Script Name : <b>SAPEditControl</b> Generated : <b>Aug 3, 2011 2:29:57
	 * PM</b> Description : Functional Test Script Original Host : WinNT Version
	 * 5.1 Build 2600 (S)
	 * 
	 * @since 2011/08/03
	 * @author IBM Rational
	 */
	public void testMain(Object[] args) {
		// Define a set of properties for a control (test object) to be searched
		Property Props[] = new Property[4];
		// property and value
		Props[0] = new Property(".class", "Html.TABLE");
		Props[1] = new Property(".customclass", "SAPEditControl");
		Props[2] = new Property(".id", "WD019E-r");
		Props[3] = new Property(".classIndex", "10");

		try {

			// Find and store test objects into array
			TestObject Obj[] = getRootTestObject().find(atDescendant(Props));

			// Perform a click on the very first object.
			((TextGuiSubitemTestObject) Obj[0]).click();

			// Set a text into SAP Edit Control
			((TextGuiSubitemTestObject) Obj[0]).setText("ClaimedAmount");

		} catch (Exception ex) {
			ex.printStackTrace();
		} finally {
			//call unregisterAll to clear reference.
			unregisterAll();
		}
	}

}

Feedback