Recherche d'objets de test SAP

Avec Functional Tester, vous pouvez rechercher un ou plusieurs objets de test (TestObjects) SAP répondant à des critères spécifiques, même sans utiliser la mappe d'objets.

Pour représenter une vue globale du logiciel en cours de test, Functional Tester prend en charge une classe d'objet de test racine, RootTestObject. Pour permettre le test de l'application SAP, vous devez appeler la méthode enableForTesting sur la classe RootTestObject. Pour effectuer une recherche globale, vous devez invoquer la méthode find sur RootTestObject. Les valeurs admises pour le sous-élément, qui correspond au premier argument de la méthode find, sont atProperty, atChild, atDescendant et atList. Des propriétés spéciales s'appliquent à RootTestObject.find, notamment les propriétés .processName, .processID et .domain. Vous pouvez utiliser l'un de ces sous-éléments ou l'une de ces propriétés. Par exemple, pour rechercher le domaine SAP, vous pouvez utiliser le sous-élément atChild avec la propriété .domain associée à la valeur SAP.

Remarque : Pour plus d'informations sur la hiérarchie d'exécution de l'interface graphique de SAP, reportez-vous à la documentation SAP GUI Script Framework.

Une fois que l'objet de test SAP de niveau supérieur est trouvé et renvoyé, vous pouvez utiliser cet objet pour trouver différents objets de la hiérarchie d'exécution de l'interface graphique SAP. Par exemple :

Une fois que vous disposez de l'objet correspondant à la fenêtre active, vous pouvez utiliser la méthode GetChildren dans l'objet de test de la fenêtre principale pour rechercher et manipuler différents objets sur la classe GuiMainWindow.

L'exemple ci-après explique comment vous pouvez interagir avec des objets de l'application SAP. Cet exemple de code :

  1. Active l'application SAP pour effectuer des tests
  2. Renvoie l'objet de test SAP représentant la fenêtre
  3. Utilise cet objet pour rechercher le bouton Create Role dont la propriété du nom de bouton correspond à btn[48] dans la barre d'outils SAP
  4. Clique sur le bouton Create Role

Exemple :

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) 
	{
		// Recherche d'objets de test SAP via le scriptage 
		
		// Permet à Functional Tester de tester SAP et de renvoyer tous 
		// les objets de test de niveau supérieur du domaine SAP.
		getRootTestObject().enableForTesting("sapLogon");
		TestObject[] sapApps = getRootTestObject().find(atChild(".domain", "SAP"));
		
		// Obtention d'un descripteur pour l'application SAP auprès d'un objet SAP de niveau supérieur
		if(sapApps.length > 0){
			SAPGuiApplicationTestObject theAPP =  ((SAPTopLevelTestObject)sapApps[0]).getApplication();
			logInfo("Application Number:" + theAPP.getProperty("Id"));
			
			// Obtention d'un descripteur pour la connexion SAP auprès d'un objet de   //test d'application SAP
			TestObject[] cons = (TestObject[])theAPP.getProperty("Connections");

			SAPGuiConnectionTestObject con = (SAPGuiConnectionTestObject)cons[0];
			logInfo("Connection Number:" + con.getProperty("Id"));
			
			// Obtention d'un descripteur pour la session SAP auprès d'un objet de test de connexion SAP
			TestObject[] sessions = (TestObject[])con.getProperty("Sessions");
			SAPGuiSessionTestObject sess = (SAPGuiSessionTestObject)sessions[0];
			logInfo("Session Number:" + sess.getProperty("Id"));
	
			// Obtention d'un descripteur pour la fenêtre principale SAP auprès d'un objet de test de session SAP et itération sur ses enfants
			jusqu'à ce que l'objet recherché soit trouvé
			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)
							{
								// Clic sur le bouton "Create Role" ("btn[48]") placé dans la barre d'outils ("tbar[1]")
								button.press();
								logInfo("Clicked on the Create Role button");
								break;
							}
						}
					}
				}
			}
		}else{
			logInfo("SAP Application not found");
		}
	}
}

Si l'application SAP est déjà activée, il est inutile de l'activer explicitement à des fins de test. A la place, vous pouvez utiliser le code suivant pour rechercher l'application SAP activée.

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)
		{
			// Renvoie tous les objets de test de niveau supérieur dans le domaine SAP
			TestObject[] sapApps = domains[i].getTopObjects();
				
			// Interactions avec les objets SAP
		}
	}
Vous pouvez également adapter l'API dynamicfind() pour rechercher des objets de texte SAP dans un script de test fonctionnel et effectuer setText dans une zone de texte 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();
		}
	}

}

Retour d'informations