Nach SAP-Testobjekten (TestObjects) suchen

Mit Functional Tester können Sie (auch ohne Verwendung der Objektübersicht) nach einem oder mehreren SAP-Testobjekten (TestObjects) suchen, die den angegebenen Suchkriterien entsprechen.

Functional Tester bietet auch Unterstützung für eine Stammtestobjektklasse (RootTestObject), über die ein umfassender Überblick über die getestete Software möglich ist. Zum Aktivieren der SAP-Anwendung für Tests müssen Sie die entsprechende Methode (enableForTesting) für die Stammtestobjektklasse (RootTestObject) aufrufen. Möchten Sie eine globale Suche ausführen, müssen Sie die entsprechende Suchmethode für die Stammtestobjektklasse (RootTestObject) aufrufen. Gültige Werte für das subitem-Element, das dem ersten Argument der Suchmethode entspricht, lauten atProperty, atChild, atDescendant und atList. Es gibt bestimmte Eigenschaften, die sich auf RootTestObject.find beziehen. Dazu gehören u. a. .processName, .processID und .domain. Sie können alle genannten subitem-Elemente und Eigenschaften verwenden. Beispielsweise können Sie das subitem-Element atChild mit der auf SAP festgelegten Eigenschaft .domain verwenden, um die SAP-Domäne zu suchen.

Anmerkung: Weitere Informationen zur Laufzeithistorie der grafischen Benutzeroberfläche von SAP finden Sie in der Dokumenation "SAP GUI Script Framework".

Sobald das SAP-Testobjekt der höchsten Ebene gefunden und zurückgegeben wurde, können Sie das Objekt verwenden, um verschiedene Objekte der Laufzeithierarchie der grafischen Benutzerschnittstelle von SAP zu suchen. Beispiel:

Nachdem Sie das aktive Fensterobjekt abgerufen haben, können Sie die Methode GetChildren auf das zu suchende Hauptfenster-Testobjekt anwenden und im Rahmen der Methode GuiMainWindow mit verschiedenen Objekten interagieren.

Unten ist ein Beispiel dafür aufgeführt, wie Sie Benutzerinteraktionen mit Objekten in der SAP-Anwendung ausführen können. Dieser Mustercode:

  1. Aktiviert die SAP-Anwendung für Tests
  2. Gibt das SAP-Testobjekt zurück, das das Fenster darstellt
  3. Verwendet dieses Objekt, um die Schaltfläche Create Role (Rolle erstellen) in der SAP-Symbolleiste zu suchen, deren Eigenschaft für den Schaltflächennamen auf btn[48] eingestellt ist
  4. Klickt auf die Schaltfläche Create Role (Rolle erstellen)

Beispiel:

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");
		}
	}
}

Wenn die SAP-Anwendung bereits aktiviert ist, müssen Sie sie nicht mehr explizit für Tests aktivieren. Stattdessen können Sie den folgenden Code für die Suche nach der aktivierten SAP-Anwendung verwenden.

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
		}
	}
Sie können auch die API "dynamicfind()" dahingehend anpassen, dass in einem Functional Test-Script nach SAP-Textobjekten gesucht und in einem SAP-Textfeld "setText" ausgeführt wird.
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