增强录制行为

通过扩展 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

Before you begin

processxxxMouseEvent() API

有许多可用的 processxxxMouseEvent() API,用于鼠标事件的主 API 为 processMouseEvent()。可以按照自己的方式扩展 processxxxMouseEvent() API 的测试。以下 processMouseEvent() API 的 Java 和 .Net 实施说明了其余 processxxxMouseEvent() API 的关系。

下面的示例显示了 processMouseEvent() 的 Java 实施:

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);
}

下面的示例展示了 processMouseEvent() 的 .Net 实施:

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 会获取 MouseEvent 详细信息,如事件状态、屏幕坐标和事件数,并且会使用这些详细信息来确定要录制的方法。IMouseActionInfo 的 setMethodSpecification() 方法用于返回 MethodSpecification() 对象作为 processMouseEvent() API 的结果。

MethodSpecification 类

MethodSpecification 对象表示特定事件的正在录制的方法。 方法名称将采用初始化名称,参数将设置为正在传递给 processMouseEvent() 的 IMouseActionInfo 对象。此录制器将选择此方法并针对此给定用户操作进行录制。

Example

以下示例代码扩展了 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);
	}

What to do next

成功开发和部署此代理代码后,录制 click() 和 doubleClick() 方法的方式将被交换。

反馈