부속 항목을 사용한 레코딩 동작 개선

부속 항목은 Functional Tester에서 정의한 테스트할 제어의 일부입니다. 일부 경우 좌표 정보만 사용하여 레코딩하기보다 부속 항목 세부사항을 사용해서 사용자 상호작용을 레코딩하여 최상의 결과를 얻을 수 있습니다. 좌표 정보를 사용하는 경우의 단점은 제어의 일부 크기를 조정하거나 다시 배열하는 경우 사용자 조치 재생 시 동일한 결과가 리턴되지 않을 수 있다는 것입니다.
예를 들어, 열 너비를 조정할 수 있는 표 제어의 경우 열 너비가 변경되면 좌표를 사용하여 클릭을 레코딩하는 것은 재생 시 아무 의미가 없습니다.

Functional Tester에는 사전 정의된 일련의 부속 항목이 있으며 레코딩 시 프록시에서 이를 사용할 수 있습니다. 레코딩 중에 프록시가 한 지점에서 부속 항목을 판별하여 부속 항목 세부사항을 TestObject의 사용자 조치 메소드와 함께 송신합니다. 재생 시 프록시가 다시 부속 항목의 좌표를 판별하며 사용자 조치가 재생됩니다.

표 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)

부속 항목을 사용한 레코딩 메소드

이벤트를 레코딩하는 동안 ProcessMouseEvent 메소드가 호출됩니다. 그런 다음 프록시가 특정 지점에서 적합한 부속 항목을 판별하며 이 부속 항목은 이벤트의 일부로 레코드됩니다.
다음 코드는 이벤트를 레코드하는 방법의 예입니다.
listBox.click(atText("Item1"));

이 예제에서 클릭이 해당 이벤트입니다. atText("Item1") 매개변수는 해당 위치에서 프록시가 찾는 부속 항목입니다. .Net의 경우, GetActionArgs() API는 제어의 부속 항목을 하나 이상 리턴합니다. 사용할 부속 항목을 판별하는 일은 제어에 따라 다릅니다.

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

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

부속 항목을 사용하는 재생 메소드

사용자 조치를 재생하려면 재생 시 프록시가 부속 항목의 화면 좌표를 찾아야 합니다.

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

}

다음 예제에서는 .Net에서 부속 항목을 사용하여 재생 메소드를 구현하는 것을 보여줍니다.

protected override System.Drawing.Rectangle GetSubitemRect(Rational.Test.Ft.Script.Subitem subitem)
{
	int index = GetItemIndex(subitem) ;		
	return ((ListBox)theTestObject).GetItemRectangle(index) ;
}
이 프록시 코드를 정상적으로 개발하여 배치하고 나면 레코드된 메소드가 적합한 부속 항목을 갖게 되며 예상대로 재생이 수행됩니다.

피드백