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