Aperfeiçoando o Comportamento de Gravação

Você pode aperfeiçoar o comportamento de gravação para uma ação do usuário em um controle estendendo a API processMouseEvent(). A estrutura do Functional Tester chama a API processMouseEvent() quando ocorre um evento de mouse em um controle. A API processMouseEvent() chama a estrutura do Functional Tester na qual o método deve ser gravado para a ação do mouse.

Antes de Iniciar

Por exemplo, quando você clica em um controle de botão, o método button().click() é gravado. Você pode modificar esse comportamento e incluir mais informações estendendo a API processMouseEvent() do proxy. Essa API está disponível apenas para proxies da GUI.
Você pode estender os métodos listado em Tabela 1:
Tabela 1. Métodos de Proxies Extensíveis
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 de Gravação de Proxy

Antes de Iniciar

APIs processxxxMouseEvent()

Há muitas APIs processxxxMouseEvent() disponíveis, mas a API principal usada para qualquer evento de mouse é processMouseEvent(). Você pode estender o restante das APIs processxxxMouseEvent() da forma que desejar. As implementações Java e .Net da API processMouseEvent() a seguir mostram como o restante das APIs processxxxMouseEvent() estão relacionadas.

O seguinte exemplo mostra a implementação 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);
}

O seguinte exemplo mostra a implementação .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:
		// Com apenas um clique, sem arrastar, concluímos (não há necessidade de processPreUpMouseEvent)
			if (action.GetClickCount() != 1 || action.IsDrag())
				ProcessPreUpMouseEvent(action);
				break;
		case MouseActionStates.HOVER:
			ProcessHoverMouseEvent(action);
			break;
		}
	}
}

Interface IMouseActionInfo

A API processMouseEvent() obtém os detalhes de MouseEvent, como EventState, coordenadas de tela e números de eventos, e usa esses detalhes para decidir qual método será gravado. O método setMethodSpecification() de IMouseActionInfo é usado para retornar um objeto MethodSpecification() como resultado da API processMouseEvent().

Classe MethodSpecification

O objeto MethodSpecification representa o método que está sendo gravado para um determinado evento. Ele é iniciado com o nome do método e o parâmetro é definido para o objeto IMouseActionInfo que está sendo transmitido a processMouseEvent(). O gravador seleciona esse método e o registra para uma determinada ação do usuário.

Exemplo

O código de amostra a seguir estende o processMouseEvent() para alterar o comportamento de gravação. Por padrão, quando você clica uma vez, o método click() é gravado. Quando você dá um clique duplo, o método doubleClick() é gravado. Nesta amostra, a API processSingleMouseEvent() é substituída para trocar a gravação dos métodos click() e doubleClick().

A seguinte amostra representa estender o processMouseEvent() em 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)
                  // geralmente quando clicks == 1,  o método é click; agora alteramos o método para doubleClick
		method = "doubleClick"; //método = "click";
	else if (clicks == 2)
                  // geralmente quando clicks == 2,  o método é doubleClick; agora alteramos o método para click
		method = "click"; // método = "doubleClick";
	diferente 
		method = "nClick";
	
	// O método a ser gravado é representado usando esta classe em RFT
	MethodSpecification methodSpec = MethodSpecification.proxyMethod(this, method,null);
		
         // O método para a ação do usuário é definido aqui
	action.setActionMethodSpecification(methodSpec);
	}

O que Fazer Depois

Depois de desenvolver e implementar este código de proxy com êxito, o modo como os métodos click() e doubleClick() são gravados é trocado.

Feedback