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.

Vorbereitungen
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)
Zugehörige Tasks
Proxyklasse erstellen
Weitere Steuerelementeigenschaften hinzufügen
Weitere Datentypen für ein Steuerelement hinzufügen
Aufzeichnungsverhalten verbessern
Datensteuerung erweitern
Rolle eines Steuerelements ändern
Erkennungseigenschaften und Wertigkeit eines Steuerelements ändern
Zuordnungsfähigkeit eines Steuerelements ändern
Proxys Steuerelementen zuordnen
Proxy implementieren
Proxy-Code debuggen

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.

Vorbereitungen
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.

Vorbereitungen

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 Maßnahme
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