Building a SAFS Engine

Last Updated by Carl Nagle:

This document will attempt to explain the Java-based implementation for SAFS engines.  Specifically, how existing classes would be used or subclassed in the creation of a new Java-based engine.  Remember that SAFS engines use STAF for cross-process communication.  It is essential the engine developer become proficient in the use and understanding of what STAF offers.

Goto: Key Definitions, Using and Subclassing, Standardizing Component Recognition.


Key definitions:


Using and Subclassing:

Perhaps the quickest way for an engine developer to see how the above items would be used is to review the Javadoc, review the base classes, then review the subclasses (top of each Javadoc) that have already been done in support of existing engines.  Examples of subclassing exist for the SAFS/RobotJ engine and the SAFS/DriverCommands engine.

On a historical note, the SAFS/RobotJ engine (RJ) was our first Java-based engine and its "hook" mechanism using a "TestScript" and the "RobotJHook" was the model for the general-purpose "JavaHook".

Jump to subclassing JavaHook, TestRecordHelper, LogUtilities, DDGUIUtilities, ProcessRequest/Processors.


Standard Component Recognition:

One of the issues involved when attempting to use multiple testing tools; or when trying to migrate from one tool to another; is that each tool has devised a unique way of specifying or locating application components. Some tools, like IBM Rational Robot and Mercury's WinRunner, allow you to specify a simple string that contains information about the target component.

Other tools, like IBM Rational RobotJ/XDE Tester, require that you provide a valid instance of a proxy "TestObject" or a similar component object--or the component itself--in order to perform an action on the component.

The SAFS framework is evolving a standardized mechanism for specifying, locating, and then retrieving these component references for each tool-specific technology.

Consult the SAFS Component Recognition document for details of implementing support for this in your tool-specific engine.