레코딩 동작 개선

processMouseEvent() API를 확장하여 제어에서 사용자 조치의 레코딩 동작을 개선할 수 있습니다. Functional Tester 프레임워크는 제어에서 마우스 이벤트가 발생하면 processMouseEvent() API를 호출합니다. processMouseEvent() API는 마우스 조치를 위해 레코드해야 하는 메소드를 Functional Tester 프레임워크에 알립니다.
예를 들어, 단추 제어를 클릭하면 button().click() 메소드가 레코드됩니다. 프록시의 processMouseEvent() API를 확장하여 이 동작을 수정하고 자세한 정보를 추가할 수 있습니다. 이 API는 GUI 프록시에서만 사용할 수 있습니다.
표 1에 나열되어 있는 메소드를 확장할 수 있습니다.
표 1. 확장 가능한 프록시 메소드
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

processxxxMouseEvent() API

여러 processxxxMouseEvent() API를 사용할 수 있지만 모든 마우스 이벤트에 사용되는 기본 API는 processMouseEvent()입니다. 나머지 processxxxMouseEvent() API는 사용자가 원하는 방식으로 확장할 수 있습니다. 다음 processMouseEvent() API의 Java 및 .Net 구현에서는 나머지 processxxxMouseEvent() API가 관련되어 있는 방식에 대해 설명합니다.

다음 예제에서는 Java에서 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);
}

다음 예제에서는 .Net에서 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 인터페이스

processMouseEvent() API는 EventState, 화면 좌표 및 이벤트 수와 같은 MouseEvent 세부사항을 획득하며 이러한 세부사항을 사용하여 레코드할 메소드를 결정합니다. processMouseEvent() API의 결과로서 MethodSpecification() 오브젝트를 리턴하는 데 IMouseActionInfo의 setMethodSpecification() 메소드가 사용됩니다.

MethodSpecification 클래스

MethodSpecification 오브젝트는 특정 이벤트에 사용하도록 레코드 중인 메소드를 나타냅니다. 이 오브젝트는 메소드 이름을 사용하여 초기화되고 매개변수는 processMouseEvent()에 전달되는 중인 IMouseActionInfo 오브젝트에 설정됩니다. 레코더가 이 메소드를 선택하여 주어진 사용자 조치에 맞게 레코드합니다.

다음 샘플 코드에서는 processMouseEvent()를 확장하여 레코딩 동작을 변경합니다. 기본적으로 한 번 클릭하는 경우 click() 메소드가 레코드됩니다. 두 번 클릭하면 doubleClick() 메소드가 레코드됩니다. 다음 샘플에서는 processSingleMouseEvent() API를 대체하여 click()과 doubleClick() 메소드의 레코딩을 스왑합니다.

다음 샘플은 Java에서 processMouseEvent()를 확장하는 것을 나타냅니다.

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);
	}
이 프록시 코드를 정상적으로 개발하여 배치하고 나면 click() 및 doubleClick() 메소드를 레코드하는 방식이 스왑됩니다.

피드백