Searching for SAP TestObjects

Functional Tester supports a means for locating one or more SAP TestObjects matching a specified search criteria, even without using the Object Map.

Functional Tester supports a RootTestObject to represent a global view of the software under test. To enable the SAP application for testing, you invoke the enableForTesting method on the RootTestObject. To perform a global search, you invoke the find method on the RootTestObject. Valid values for the subitem, which is the first argument of the find method, include atProperty, atChild, atDescendant, and atList. There are special properties that apply to the RootTestObject.find, including the .processName, .processID, .domain etc. You can use any one of these subitems and properties. For example, you can use the atChild subitem with the .domain property set to SAP, to search for the SAP domain.

See the SAP GUI Script Framework documentation for more information on SAP's GUI Runtime Hierarchy.

Once the top level SAP Test Object is found and returned, you can use that object to find various objects of SAP's GUI runtime hierarchy. For example:

Once you have the active window object, you can use the GetChildren method on the main window test object to find and interact with various objects on GuiMainWindow.

Listed below is an example on how you can perform user interactions with objects in the SAP application. This sample code:

  1. Enables the SAP application for testing

  2. Returns the SAP test object representing the window

  3. Uses this object to find the Create Role button whose button name property is set to btn[48] on the SAP toolbar.

  4. Clicks on the Create Role button

Example:

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

If the SAP application is already enabled, then you need not enable the SAP application explicitly for testing. Instead, you can use the following code to find the enabled SAP application.

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
    }
  }


Related concepts

Get started with Rational Functional Tester

Related tasks

Calling a script from a functional test script

Maintaining a test object map

Related reference

Test object maps