SubItem による記録動作の拡張

SubItem は、Functional Tester によって定義される、テスト対象のコントロールの部分です。 単に座標情報を使用するのではなく、SubItem の詳細を使用してユーザー対話を記録することによって最良の結果が得られる場合があります。 座標情報を使用することの欠点は、コントロールの一部をサイズ変更または再配置してからユーザー・アクションを再生するときに、同じ結果を戻さない場合があることです。
始める前に
例えば、列の幅をサイズ変更できるテーブル・コントロールでは、列の幅が変化する場合に座標を使用してクリックを記録しても、再生時には意味を成しません。

Functional Tester には SubItem の事前定義セットがあり、プロキシーは記録の際にそれを使用することができます。 記録時にプロキシーは SubItem をあるポイントで判別し、SubItem の詳細を TestObject のユーザー・アクション・メソッドとともに送ります。 再生時にプロキシーは再び SubItem の座標を判別して、ユーザー・アクションが再生されます。

拡張可能なメソッドが表 1 にリストされています。
表 1. 拡張可能なプロキシー・メソッド
Java .Net
System.Collections.ArrayList GetActionArgs(System.Drawing.Point point) void (IMouseActionInfo action)
System.Drawing.Rectangle GetSubitemRect(Rational.Test.Ft.Script.Subitem subitem) java.awt.Rectangle getScreenPoint (Subitem subitem)

SubItem によるメソッドの記録

イベントを記録する間、ProcessMouseEvent メソッドが呼び出されます。 プロキシーは適切な SubItem を特定のポイントで判別し、その SubItem はイベントの一部として記録されます。
始める前に
以下のコードは、イベントを記録する方法の一例です。
listBox.click(atText("Item1"));

この例では、クリックがイベントです。 atText("Item1") パラメーターは、プロキシーがポイントで検出する subItem です。 .Net の場合、GetActionArgs() API はコントロールの SubItem を 1 つ以上戻します。 どの SubItem を使用するかの判別は、コントロールごとに決まります。

以下の例は、SubItem を使用してメソッドを記録する Java 実装を示しています。

{
	. 
	.
        Vector args = new Vector(20);
	SubItem subItem = null;
	IMouseEventInfo event0 = action.getEventInfo(0);
	Point firstPoint = new Point ( event0.getX(), event0.getY() );
	Point firstPointToList = new Point ( firstPoint.x, firstPoint.y );
	int itemIndex = locationToIndex(firstPointToList);
	String itemText = ((java.awt.List)theTestObject).getItem(itemIndex);
	if (itemText!= null && ! itemText.equals("") )
		 subItem = new Text(item);
	else
		subItem = new Index(atIndex);
	.
	.
	args.addElement(subItem);
	.
	.
	}

以下の例は、SubItem を使用してメソッドを記録する .Net 実装を示しています。

protected override System.Collections.ArrayList GetActionArgs(System.Drawing.Point point)
{
	System.Collections.ArrayList args = new System.Collections.ArrayList() ; 
	Subitem subitem = null ;
	System.Drawing.Point clientPoint = ((Control)theTestObject).PointToClient(point) ;
	int itemIndex = ((ListBox)theTestObject).IndexFromPoint(clientPoint) ;
        string itemText = ((ListBox)theTestObject).GetItemText(item);

	if (itemText == null || itemText.Length == 0)
	{
	        // item has no text so generate an index
		subitem = new Rational.Test.Ft.Script.Index(itemIndex) ;
	}
	if ( subitem != null )
	{
		args.Add(subitem) ;
	}

	return args ;
}

SubItem によるメソッドの再生

再生時にプロキシーは、ユーザー・アクションを再生するために SubItem の画面座標を見つける必要があります。
始める前に

以下の例は、SubItem を使用してメソッドを再生する Java 実装を示しています。

public void click(MouseModifiers modifiers, Subitem subitem)
{
	.
	.
	Point pt = this.getScreenPoint(subitem);
	new Screen().click( modifiers, pt);
	.
	.
}

public java.awt.Rectangle getScreenPoint (Subitem subitem) 
{
	int index = getItemIndex(subitem);
	if ( index == -1 )
		return null;
        java.awt.Rectangle rectCell = getCellBounds(index);
	java.awt.Rectangle rectScreen = this.getScreenRectangle();
	return new java.awt.Rectangle 
	( rectScreen.x + rectCell.x, rectScreen.y + rectCell.y, 
	  rectCell.width, rectCell.height );

}

以下の例は、SubItem を使用してメソッドを記録する .Net 実装を示しています。

protected override System.Drawing.Rectangle GetSubitemRect(Rational.Test.Ft.Script.Subitem subitem)
{
	int index = GetItemIndex(subitem) ;		
	return ((ListBox)theTestObject).GetItemRectangle(index) ;
}
次のタスク
このプロキシー・コードを正常に開発してデプロイした後、記録されたメソッドに適切な SubItem が付与され、期待通り再生されるようになります。

フィードバック