| Version 3.4.7 |
| Unterelemente komplexer GUI Komponenten |
In typischen Java GUIs gibt es Komponenten wie Bäume und Tabellen, die ziemlich komplex sind und eine beliebige Zahl von Unterelementen wie Baumknoten oder Tabellenfelder enthalten können. Diese Unterelemente sind selbst keine echten GUI Komponenten, sondern nur eine grafische Darstellung der zugrunde liegenden Daten. Diese Unterscheidung ist rein technischer Natur und da es aus Sicht eines Testers durchaus Sinn macht, die Elemente als eigenständig und als mögliche Ziele für Events anzusehen, bietet QF-Test dafür spezielle Möglichkeiten, indem es ein Unterelement durch einen 'Element' Knoten repräsentiert.
| 'Elemente' |
Ein 'Element' wird durch zwei Dinge definiert: die Komponente,
zu der es gehört, und einen Index innerhalb dieser Komponente. Der
Parentknoten des 'Elements' legt die Komponente
fest. Der Index kann entweder eine Zahl sein, oder ein
Text. Numerische Indizes starten mit 0. So entspricht z.B. in einer
JList Komponente das Element mit Index 1 dem zweiten
Listeneintrag. Für Bäume sind einfache numerische Indizes nahezu
unbrauchbar, da durch das Ein- und Ausklappen von Ästen die Indizes
aller darunter liegenden Knoten verändert werden.
Ein Textindex definiert ein Element durch den Text, den es an der
Oberfläche anzeigt. Ein Listenelement namens "Eintrag1" in einer
JList Komponente würde z.B. mit dem Textindex "Eintrag1"
aufgezeichnet. Die Textform ist flexibler als die numerische, kann
aber Probleme bereiten, wenn die angezeigten Texte der Elemente in
einer Komponente nicht eindeutig sind. In diesem Fall wird das erste
passende Element angesprochen. Ein Textindex kann auch als regulärer
Ausdruck (vgl. Abschnitt 36.4) angegeben werden. Auch in
diesem Fall ist das Ziel das erste Element, das auf den regulären
Ausdruck passt.
Die Option Format für Unterelemente legt fest, welches Format beim Aufzeichnen von Elementen verwendet wird.
Beinahe alle Arten von 'Elementen' haben nur einen Index. Dies
reicht für die Zelle einer JTable Komponente nicht, da
Tabellen zweidimensionale Strukturen sind. Entsprechend sind zwei
Indizes nötig, um eine Zelle exakt zu beschreiben. Der erste, der
'Primärindex', legt die Tabellenspalte fest, der
'Sekundärindex' die Zeile.
|
| ![]() |
||
|
| Abbildung 7.1: Ein 'Element' für ein Tabellenfeld | ||
Auch Baumknoten nehmen eine Sonderstellung ein. Wie oben beschrieben lässt sich die hierarchische Struktur nicht so leicht auf eine lineare Struktur abbilden. Außerdem treten in Bäumen oft Baumknoten mit den gleichen Namen auf. Wenn man dagegen die direkten und indirekten Parentknoten mit in den Namen einbezieht, lässt sich meistens Eindeutigkeit erreichen.
QF-Test verwendet eine besondere Syntax um Baumknoten darzustellen. Ein Index, der mit einem '/' Zeichen beginnt, wird als Pfadindex interpretiert. Denken Sie dabei einfach an ein Dateisystem: Die Datei namens "/tmp/file1" kann entweder flach als "file1" dargestellt werden, was zu Konflikten mit anderen Dateien namens "file1" in anderen Verzeichnissen führen kann, oder als der volle, eindeutige Pfad "/tmp/file1". QF-Test unterstützt auch numerische Indizes mit dieser Syntax: Ein numerischer Index der Form "/2/3" bezeichnet den vierten Kindknoten des dritten Kindknotens des Wurzelknotens. Eine kombinierte Form um z.B. mittels "/tmp/2" den dritten Knoten im "tmp" Knoten anzusprechen, ist derzeit nicht möglich.
Hinweis Diese spezielle Syntax macht das '/' Zeichen zu einem Sonderzeichen für 'Elemente' in einer Baumkomponente. Taucht dieses Zeichen selbst in einem Namen auf, muss es daher geschützt werden. Näheres zu diesem Thema finden Sie in Abschnitt 36.6.
| Die 'Id' eines 'Elements' |
Alles was in Abschnitt 6.3 zum 'Id' Attribut von 'Komponenten' gesagt wurde, trifft auch auf die 'Id' eines 'Elements' zu. Sie muss eindeutig sein und wird von Events und Checks referenziert.
Wenn QF-Test die 'Id' eines 'Elements' automatisch zuweist, erzeugt es diese indem es die 'Id' der 'Komponente' des Parentknotens nimmt und den Index (oder die Indizes) anhängt. Diese Art von 'Id' ist normalerweise gut zu lesen und zu verstehen. Leider ist sie aber auch die Quelle eines häufigen Missverständnisses: Wenn Sie den Index eines aufgezeichneten 'Elements' ändern wollen, um auf ein anderes Element zu verweisen, dürfen Sie nicht das Attribut 'Id der Komponente' des Knotens ändern, der darauf verweist (es sei denn Sie verwenden die besondere Syntax, die im folgenden Abschnitt beschrieben wird). Stattdessen müssen Sie den 'Primärindex' des 'Element' Knotens ändern.
| Besondere 'Id'-Syntax für direkten Zugriff auf Elemente |
Es gibt noch eine zweite Möglichkeit auf Unterelemente von komplexen Komponenten zuzugreifen, bei der auf zusätzliche 'Element' Knoten verzichtet werden kann. Diese bedient sich einer speziellen Syntax direkt im Attribut 'Id der Komponente' des entsprechenden Knotens. An Stelle der 'Id' eines 'Elements' geben Sie hier die 'Id' des 'Komponente' Knotens an, der die komplexe Komponente, also einen Baum, eine Tabelle, etc. repräsentiert. Diese 'Id' wird dann mit einem speziellen Trennzeichen um den Index des Unterelements erweitert. Das Trennzeichen legt dabei fest, ob es sich um einen numerischen Index, einen Textindex oder einen regulären Ausdruck handelt:
|
|
|
||||||||||
|
| Tabelle 7.1: Trennzeichen und Indexformat für den Zugriff auf Unterelemente | ||||||||||
Um auf eine Zelle in einer Tabelle mit 'Primärindex' und 'Sekundärindex' zuzugreifen, hängen Sie einfach ein weiteres Trennzeichen an, gefolgt vom 'Sekundärindex'. Die beiden Indizes dürfen dabei durchaus verschiedene Formate haben.
Ein Beispiel: Wenn Ihre Testsuite einen 'Komponente' Knoten für
eine JTable Komponente mit der 'Id' table
hat und Sie einen Mausklick auf die Zelle in der 6. Zeile und in der
Spalte mit der Überschrift "Name" simulieren wollen, legen Sie einen
'Mausevent' an und setzen Sie sein
'Id der Komponente' Attribut auf den Wert
table@Name&5.
Beinahe alle internen ItemResolver Implementierungen (vgl. Abschnitt 39.2) erlauben die Verwendung negativer Indizes um die Zählung von
hinten beginnen zu lassen. So adressiert etwa table&-1&-1 die
unterste Zelle in der rechten Tabellenspalte.
Es hängt von der jeweiligen Situation ab, ob ein 'Element'
Knoten oder die spezielle Syntax sinnvoller ist. Sie können beide
Methoden nach belieben verwenden und auch mischen. Als Faustregel
gilt, dass 'Element' Knoten besser für Komponenten mit wenigen,
konstanten Elementen geeignet sind, wie z.B. die Spalten einer Tabelle
oder die Reiter einer JTabbedPane. Die Syntax ist
vorzuziehen, wenn QF-Test Variablen in Indizes verwendet werden oder wenn
die Namen von Elementen variieren oder editierbar sind. Die Option
Art der Unterelemente legt fest, ob QF-Test beim Aufzeichnen
'Element' Knoten anlegt oder die 'Id'-Syntax verwendet. Mit
der Standardeinstellung "Intelligent" folgt QF-Test obigen Regeln.
Hinweis Die besondere Bedeutung der Trennzeichen '@', '&' und '%' macht diese zu Sonderzeichen, die geschützt werden müssen, wenn sie selbst in einem Namen auftauchen. Näheres zu diesem Thema finden Sie in Abschnitt 36.6.
| Letzte Änderung: 23.04.2012 Copyright © 1999-2012 Quality First Software GmbH |