Enhancing the recording behavior
You can enhance the recording behavior for a user action on a control
by extending the processMouseEvent()
API. Rational® Functional Tester framework
calls the processMouseEvent()
API when a mouse event happens
on a control. The processMouseEvent()
API tells the Rational® Functional Tester framework
which method has to be recorded for the mouse action.
Before you begin
button().click()
method
is recorded. You can modify this behavior and add more information by extending
the processMouseEvent()
API of the proxy. This API is available
only for GUI proxies.Java | .Net |
---|---|
void processMouseEvent(IMouseActionInfo action) | void ProcessMouseEvent(IMouseActionInfo action) |
void processSingleMouseEvent(IMouseActionInfo action) | void ProcessPreDownMouseEvent(IMouseActionInfo action) |
void processHoverMouseEvent(IMouseActionInfo action) | void ProcessPreUpMouseEvent(IMouseActionInfo action) |
void ProcessHoverMouseEvent(IMouseActionInfo action) |
Proxy recording APIs
Before you begin
processxxxMouseEvent()
APIs
There
are many processxxxMouseEvent() APIs available, but the main API that
is used for any mouse event is processMouseEvent(). You can extend the rest
of the processxxxMouseEvent() APIs the way you want. The following Java™ and
.Net implementations of the processMouseEvent() API explain how the rest of
the processxxxMouseEvent() APIs are related.
The following example shows the Java implementation of processMouseEvent():
public void processMouseEvent(IMouseActionInfo action)
{
int eventState = action.getEventState();
if ( eventState == IMouseActionInfo.PRE_DOWN ||
eventState == IMouseActionInfo.PRE_UP ||
eventState == IMouseActionInfo.POST_UP )
processSingleMouseEvent(action);
else if ( eventState == IMouseActionInfo.HOVER )
processHoverMouseEvent(action);
}
The following example shows the .Net implementation of processMouseEvent():
public override void ProcessMouseEvent(IMouseActionInfo action)
{
switch (action.GetEventState())
{
case MouseActionStates.PRE_DOWN:
if (action.GetClickCount() == 1)
ProcessPreDownMouseEvent(action);
break;
case MouseActionStates.PRE_UP:
// if one click, and it's not a drag, then, we're Done(no need to processPreUpMouseEvent)
if (action.GetClickCount() != 1 || action.IsDrag())
ProcessPreUpMouseEvent(action);
break;
case MouseActionStates.HOVER:
ProcessHoverMouseEvent(action);
break;
}
}
}
IMouseActionInfo interface
The processMouseEvent() API obtains the MouseEvent details, such as EventState, screen coordinates, and number of events, and uses these details to decide which method is recorded. The setMethodSpecification() method of IMouseActionInfo is used to return a MethodSpecification() object as a result of the processMouseEvent() API.
MethodSpecification class
The MethodSpecification object represents the method that is being recorded for a particular event. It is initialized with the method name and the parameter is set to the IMouseActionInfo object that is being passed to processMouseEvent(). The recorder picks up this method and records for a given user action.
Example
The following sample represents extending the processMouseEvent() in Java:
import com.rational.test.ft.domain.IMouseActionInfo;
import com.rational.test.ft.sys.MethodSpecification;
.
.
public void processSingleMouseEvent(IMouseActionInfo action)
{
String method = null;
int clicks = action.getClickCount();
if (clicks == 1)
// usually when clicks == 1, the method is click, now we've changed to method to doubleClick
method = "doubleClick"; //method = "click";
else if (clicks == 2)
// usually when clicks == 2, the method is doubleClick, now we've changed to method to click
method = "click"; // method = "doubleClick";
else
method = "nClick";
// The method to be recorded is represented using this class in Functional Tester
MethodSpecification methodSpec = MethodSpecification.proxyMethod(this, method,null);
// The method for the user action is set here
action.setActionMethodSpecification(methodSpec);
}