Procurando por TestObjects SAP

Com o Functional Tester, é possível localizar um ou mais TestObjects SAP que correspondam a um critério de procura específico, mesmo sem usar o Mapa de Objetos.

O Functional Tester suporta uma classe RootTestObject para representar uma visualização global do software que está sob teste. Para ativar o aplicativo SAP para teste, chame o método enableForTesting na classe RootTestObject. Para procurar globalmente, chame o método de localização na classe RootTestObject. Os valores válidos para o subitem, o qual é o primeiro argumento do método de localização, são atProperty, atChild, atDescendant e atList. Há propriedades especiais que se aplicam a RootTestObject.find, incluindo as propriedades .processName, .processID e .domain. Você pode utilizar quaisquer destes subitens e destas propriedades. Por exemplo, para procurar pelo domínio SAP, é possível usar o subitem atChild com a propriedade .domain configurada como SAP.

Nota: Consulte a documentação de Estrutura de Script da GUI do SAP para obter informações adicionais sobre a Hierarquia de Tempo de Execução da GUI do SAP.

Após o Objeto de Teste SAP de nível superior ser localizado e devolvido, é possível usá-lo para localizar vários objetos da hierarquia de tempo de execução da GUI do SAP. Por exemplo:

Assim que tiver o objeto da janela ativa, será possível usar o método GetChildren no objeto de teste da janela principal para localizar e interagir com vários objetos no método GuiMainWindow.

Abaixo, você encontra um exemplo sobre como você pode realizar interações de usuários com objetos na aplicativo SAP. Este código de amostra executa estas ações:

  1. Ativa o aplicativo SAP para teste
  2. Retorna o objeto de teste SAP representando a janela
  3. Usa este objeto para localizar o botão Criar Função cuja propriedade do nome do botão está configurada como btn[48] na barra de ferramentas do SAP
  4. Clica no botão Criar Função

Exemplo:

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) 
	{
		// Procurando por Objetos de Teste SAP por meio de Scripting 
		
		// Isto permite que o SAP seja testado pelo Functional Tester e 
		// retorna todos os objetos de nível superior no domínio SAP
		getRootTestObject().enableForTesting("sapLogon");
		TestObject[] sapApps = getRootTestObject().find(atChild(".domain", "SAP"));
		
		// Obter uma identificação para o Aplicativo SAP a partir do objeto SAP de nível superior
		if(sapApps.length > 0){
			SAPGuiApplicationTestObject theAPP = ((SAPTopLevelTestObject)sapApps[0]).getApplication();
			logInfo("Application Number:" + theAPP.getProperty("Id"));
			
			// Obter uma identificação para a Conexão SAP a partir do objeto de teste do aplicativo SAP
			TestObject[] cons = (TestObject[])theAPP.getProperty("Connections");

			SAPGuiConnectionTestObject con = (SAPGuiConnectionTestObject)cons[0];
			logInfo("Connection Number:" + con.getProperty("Id"));
			
			// Obter uma identificação para a Sessão SAP a partir do objeto de teste da conexão SAP
			TestObject[] sessions = (TestObject[])con.getProperty("Sessions");
			SAPGuiSessionTestObject sess = (SAPGuiSessionTestObject)sessions[0];
			logInfo("Session Number:" + sess.getProperty("Id"));
	
			// Obter uma identificação para a Janela Principal SAP a partir do objeto de teste de sessão SAP
			// e interagir com seus filhos até que o objeto desejado seja localizado
			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)
							{
								// Clique no botão "Criar Função" ("btn[48]") localizado na barra de ferramentas ("tbar[1]")
								button.press();
								logInfo("Clicked on the Create Role button");
								break;
							}
						}
					}
				}
			}
		}else{
			logInfo("SAP Application not found");
		}
	}
}

Se o aplicativo SAP já estiver ativado, não será necessário ativar o aplicativo SAP explicitamente para teste. Em vez disso, você pode utilizar o seguinte código para localizar o aplicativo SAP ativado.

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)
		{
			// Retorna todos os objetos de teste de nível superior no domínio SAP
			TestObject[] sapApps = domains[i].getTopObjects();
				
			// Realizar interações de usuários com os objetos SAP
		}
	}
Também é possível adaptar a API dynamicfind() para localizar objetos de texto SAP em um script de teste funcional e executar setText em um campo de texto do 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