記録動作の拡張

コントロールに対するユーザー・アクションの記録動作の拡張は、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)
関連タスク
プロキシー・クラスの作成
コントロールのプロパティーの追加
コントロールのデータ型の追加
SubItem による記録動作の拡張
データ駆動の拡張
コントロールの役割の変更
コントロールの認識プロパティーと重みの変更
コントロールのマップ可能性の変更

プロキシー記録 API

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 の詳細、例えば EventState、画面座標、イベントの数などを取得し、それらの詳細に基づいてどのメソッドを記録するかを決定します。 IMouseActionInfo の setMethodSpecification() メソッドは、processMouseEvent() API の結果として MethodSpecification() オブジェクトを戻すために使用されます。

MethodSpecification クラス

MethodSpecification オブジェクトは、特定のイベントについて記録されているメソッドを表します。 これはメソッド名によって初期化され、パラメーターは、processMouseEvent() に渡されている IMouseActionInfo オブジェクトに設定されます。 レコーダーはこのメソッドを選び、特定のユーザー・アクションを記録します。

以下のサンプル・コードは、processMouseEvent() を拡張し、記録動作を変更します。 デフォルトでは、一度クリックすると、click() メソッドが記録されます。 ダブルクリックすると、doubleClick() メソッドが記録されます。 このサンプルでは、click() および doubleClick() メソッドの記録を交換するために processSingleMouseEvent() API がオーバーライドされます。

以下のサンプルは、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() メソッドを記録する方法が交換されます。

フィードバック