Mejora del comportamiento de grabación

El comportamiento de grabación se puede mejorar para una acción de usuario en un control mediante la ampliación de la API processMouseEvent(). La estructura de Functional Tester llama a la API processMouseEvent() cuando un suceso tiene lugar en un control. La API processMouseEvent() indica a la estructura de Functional Tester el método que se debe grabar para la acción del ratón.
Por ejemplo, cuando hace clic en un control de botón, el método button().click() se graba. Para modificar este comportamiento y añadir más información, amplíe la API de processMouseEvent() del proxy. Esta API sólo está disponible para los proxies de la GUI.
Puede ampliar los métodos enumerados en Tabla 1:
Tabla 1. Métodos de proxy ampliables
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)

API de grabación de proxy

API processxxxMouseEvent()

Hay varias API xxxMouseEvent() disponibles, pero la API principal que se utiliza para todos los sucesos de ratón es processMouseEvent(). Puede ampliar el resto de API processxxxMouseEvent() como quiera. Las siguientes implementaciones de Java y .Net de la API processMouseEvent() explican cómo se relacionan el resto de API processxxxMouseEvent().

El siguiente ejemplo muestra la implementación Java de 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);
}

El siguiente ejemplo muestra la implementación .Net de 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;
		}
	}
}

Interfaz IMouseActionInfo

La API processMouseEvent() obtiene detalles de MouseEvent, como EventState, coordenadas de pantalla y el número de sucesos, y utiliza esta información para decidir el método que se graba. El método setMethodSpecification() de IMouseActionInfo se utiliza para devolver un objeto MethodSpecification() como resultado de la API processMouseEvent().

Clase MethodSpecification

El objeto MethodSpecification representa el método que se está grabando para un suceso en particular. Se inicializa con el nombre del método, y el parámetro se establece en el objeto IMouseActionInfo que se pasa a processMouseEvent(). La grabadora recibe este método y graba una determinada acción del usuario.

El siguiente código de ejemplo amplía processMouseEvent() para cambiar el comportamiento de grabación. De forma predeterminada, al hacer clic una vez, el método click() se graba. Al hacer doble clic, el método doubleClick() se graba. En este ejemplo, la API processSingleMouseEvent() wse sustituye para intercambiar la grabación de los métodos click() y doubleClick().

El siguiente código de ejemplo representa la ampliación de processMouseEvent() en 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 RFT
	MethodSpecification methodSpec = MethodSpecification.proxyMethod(this, method,null);
		
         // The method for the user action is set here
	action.setActionMethodSpecification(methodSpec);
	}
Después de desarrollar y desplegar correctamente este código de proxy, se intercambia la forma en que los métodos click() y doubleClick() se graban.

Comentarios