Aufzeichnungsverhalten bei subitem-Elementen verbessern

Die subitem-Elemente sind in Functional Tester definierte Abschnitte des zu testenden Steuerelements. In einigen Fällen erhalten Sie die besten Ergebnisse dadurch, dass Sie die Benutzerinteraktion mit Details der subitem-Elemente (und nicht nur mit den Koordinateninformationen) aufzeichnen. Die Verwendung der Koordinateninformationen ist nämlich mit folgendem Nachteil verbunden: Wenn bei Abschnitten eines Steuerelements die Größe oder die Reihenfolge geändert wird, führt die Wiedergabe der Benutzeraktionen möglicherweise nicht zu identischen Ergebnissen.

Vorbereitende Schritte

Beispiel: In einem Tabellensteuerelement, dessen Spaltenbreite geändert werden kann, ist das Aufzeichnen der Mausklicks mit Koordinate während der Wiedergabe sinnlos, wenn die Spaltenbreite geändert wird.

Functional Tester enthält eine Gruppe vordefinierter subitem-Elemente, die der Proxy beim Aufzeichnen verwenden kann. Während der Aufzeichnung ermittelt der Proxy das subitem-Element an einer Stelle und sendet die entsprechenden Details zusammen mit der Methode der Benutzeraktion für das Testobjekt. Zur Wiedergabezeit ermittelt der Proxy erneut die Koordinate für das subitem-Element, und die Benutzeraktion wird wiedergegeben.

Sie können die in Tabelle 1 aufgelisteten Methoden erweitern:
Tabelle 1. Erweiterbare Proxymethoden
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)

Methoden mit subitem-Elementen aufzeichnen

Während der Aufzeichnung eines Ereignisses wird die Methode "ProcessMouseEvent" aufgerufen. Anschließend ermittelt der Proxy die entsprechenden subitem-Elemente an bestimmten Stellen; diese Elemente werden als Teil des Ereignisses aufgezeichnet.

Vorbereitende Schritte

Der folgende Code ist ein Beispiel für das Verfahren, mit dem das Ereignis aufgezeichnet wird:
listBox.click(atText("Item1"));

In diesem Beispiel ist "click" das Ereignis. Der Parameter atText("Item1") ist das subitem-Element, das der Proxy an der Stelle findet. Im Falle von .NET gibt die API "GetActionArgs()" ein oder mehrere subitem-Elemente des Steuerelements zurück. Die Ermittlung des subitem-Elements, das verwendet werden soll, hängt vom jeweiligen Steuerelement ab.

Das folgende Beispiel zeigt die Java-Implementierung zum Aufzeichnen von Methoden mit subitem-Elementen:

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

Das folgende Beispiel zeigt die .NET-Implementierung zum Aufzeichnen von Methoden mit subitem-Elementen:

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

Methoden mit subitem-Elementen wiedergeben

Während der Wiedergabe muss der Proxy die Bildschirmkoordinate eines subitem-Elements suchen, um die Benutzeraktion wiederzugeben.

Vorbereitende Schritte

Das folgende Beispiel zeigt die Java-Implementierung zum Wiedergeben von Methoden mit subitem-Elementen:

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

}

Das folgende Beispiel zeigt die .NET-Implementierung zum Wiedergeben von Methoden mit subitem-Elementen:

protected override System.Drawing.Rectangle GetSubitemRect(Rational.Test.Ft.Script.Subitem subitem)
{
	int index = GetItemIndex(subitem) ;		
	return ((ListBox)theTestObject).GetItemRectangle(index) ;
}

Nächste Schritte

Nachdem Sie diesen Proxy-Code erfolgreich entwickelt und implementiert haben, enthalten die aufgezeichneten Methoden die entsprechenden subitem-Elemente, und die Wiedergabe entspricht den Erwartungen.

Feedback