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) |
APIs des Typs "processxxxMouseEvent()"
Es sind zwar viele APIs des Typs "processxxxMouseEvent()" verfügbar, doch in erster Linie wird für jedes Mausereignis die API "processMouseEvent()" verwendet. Sie können die übrigen APIs des Typs "processxxxMouseEvent()" auf die gewünschte Art und Weise erweitern. Anhand der folgenden Java- und .NET-Implementierungen der API "processMouseEvent()" wird erläutert, wie die übrigen APIs des Typs "processxxxMouseEvent()" miteinander zusammenhängen.
Das folgende Beispiel zeigt die Java-Implementierung von "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); }
Das folgende Beispiel zeigt die .NET-Implementierung von "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; } } }
Schnittstelle "IMouseActionInfo"
Die API "processMouseEvent()" ruft die Details des Mausereignisses ab, z. B. den Ereigniszustand (EventState), die Bildschirmkoordinaten sowie die Anzahl der Ereignisse, und entscheidet anhand dieser Details, welche Methode aufgezeichnet werden soll. Die Methode "setMethodSpecification()" von "IMouseActionInfo" wird verwendet, um ein MethodSpecification()-Objekt als Ergebnis der API "processMouseEvent()" zurückzugeben.
Klasse "MethodSpecification"
Das MethodSpecification-Objekt stellt die Methode dar, die für ein bestimmtes Ereignis aufgezeichnet wird. Es wird mit dem Methodennamen initialisiert, und der Parameter wird auf das IMouseActionInfo-Objekt festgelegt, das an "processMouseEvent()" übergeben wird. Der Recorder zeichnet mit Hilfe dieser Methode eine bestimmte Benutzeraktion auf.
Der folgende Mustercode stellt die Erweiterung von "processMouseEvent()" in Java dar:
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); }