Miglioramento del funzionamento della registrazione

È possibile migliorare il funzionamento della registrazione di un'azione utente su un controllo estendendo l'API processMouseEvent(). Il framework Functional Tester richiama l'API processMouseEvent() quando si verifica un evento del mouse su un controllo. L'API processMouseEvent() API indica al framework Functional Tester il metodo da registrare per l'azione del mouse.
Prima di iniziare
Ad esempio, quando si fa clic su un controllo del pulsante, viene registrato il metodo button().click(). È possibile modificare questo comportamento e aggiungere ulteriori informazioni estendendo l'API processMouseEvent() del proxy. Questa API è disponibile solo per i proxy GUI.
È possibile estendere i metodi elencati in Tabella 1:
Tabella 1. Metodi proxy estensibili
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 di registrazione proxy

Prima di iniziare

API processxxxMouseEvent()

Sono disponibili diverse API processxxxMouseEvent(), ma l'API principale che viene utilizzata per un evento mouse è processMouseEvent(). È possibile estendere il resto delle API processxxxMouseEvent() nel modo desiderato. Le seguenti implementazioni Java e .Net dell'API processMouseEvent() spiegano come sono correlate il resto delle API processxxxMouseEvent().

L'esempio seguente mostra l'implementazione Java di 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);
}

L'esempio seguente mostra l'implementazione .Net di 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;
		}
	}
}

Interfaccia IMouseActionInfo

L'API processMouseEvent() ottiene i dettagli MouseEvent, come EventState, coordinate dello schermo, numero di eventi, e li utilizza per decidere il metodo registrato. Il metodo setMethodSpecification() di IMouseActionInfo viene utilizzato per restituire un oggetto MethodSpecification() come risultato dell'API processMouseEvent().

Classe MethodSpecification

L'oggetto MethodSpecification rappresenta il metodo che viene registrato per un determinato evento. È inizializzato con il nome del metodo e il parametro è impostato sull'oggetto IMouseActionInfo passato a processMouseEvent(). Il registratore assume questo metodo e registra una determinata azione utente.

Esempio
Il seguente codice di esempio estende processMouseEvent() per modificare il funzionamento della registrazione. Per impostazione predefinita, quando si fa clic una volta, viene registrato il metodo click(). Quando si fa doppio clic, viene registrato il metodo doubleClick(). In questo esempio, l'API processSingleMouseEvent() viene sovrascritta per invertire la registrazione dei metodi click() e doubleClick().

L'esempio seguente rappresenta l'estensione di 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 RFT
	MethodSpecification methodSpec = MethodSpecification.proxyMethod(this, method,null);
		
         // The method for the user action is set here
	action.setActionMethodSpecification(methodSpec);
	}
Operazioni successive
Una volta sviluppato e distribuito con esito positivo questo codice proxy, la modalità di registrazione dei metodi click() e doubleClick() viene scambiata.

Feedback