Logo QF-Test

Tutorial zur praktischen Einführung
in QF-Test

 

Gratis Testen  Download  Kaufen

Yann Spöri, QF-Test Entwicklung & Support

Die Beispiele, Demos und praktischen Übungen zu QF-Test verhelfen zu einem schnellen Start.

Yann Spöri,
Software Engineer, QFS

Uwe Klüh, Senior Sales Manager, QFS

Durchsuchen Sie die gesamte Dokumentation (Handbuch, Tutorial, Mailingliste, Standardbibliothek), indem Sie die Suchfunktion der Homepage nutzen.

Uwe Klüh, Sr. Sales Manager, QFS

Tutorial

8
Arbeiten mit komplexen GUI Elementen [30-45 Min]

Bis zu diesem Zeitpunkt haben wir einfache Java GUI Komponenten wie Buttons, Auswahl- oder Textfelder behandelt. Wir wollen uns nun komplexeren Komponenten zuwenden, die wiederum selbst Unterelemente enthalten. Klassische Beispiele dafür sind Tabellen und Bäume.

Betrachten wir die Knoten von Bäumen. Ein Knoten ist im Sinne von Java selbst noch keine GUI Komponente, er ist lediglich eine graphische Repräsentation von wenigen Daten. Diese technische Unterscheidung bringt uns im Hinblick auf das Testen jedoch nicht weiter, da das Verhalten eines Baumknotens genau so wichtig ist, wie das einfacher GUI Komponenten.

Zur Lösung dieser Problematik verwendet QF-Test spezielle "Element"-Knoten, die solche Unterelemente komplexer GUI Komponenten abbilden. Wir werden sie in diesem Kapitel genau beleuchten und auch die von QF-Test verwendete Zugriffssyntax vorstellen.

8.1
Das "Items" Demo

In diesem Abschnitt werden wir eine einfache Anwendung, die verschiedene komplexe Komponenten enthält, als SUT verwenden. Wir haben das Programm "ItemsDemo" genannt und es ist Teil des Jar Archivs Ihrer QF-Test Distribution.

Sie können entweder selbst einen Startknoten erstellen anhand der Grafik unten oder einfach die Testsuite items.qft aus den Tutorial-Verzeichnis laden, die eine passende Startsequenz unter den "Extrasequenzen" enthält.

Abbildung 8.1:  Der Start Java SUT Client Knoten für das "ItemsDemo"

Starten Sie anschließend das SUT. Das Ergebnis sollte folgendermaßen aussehen:

Abbildung 8.2:  Das Fenster des "ItemsDemo"
8.2
Eindimensionale komplexe Komponenten

Wir beginnen mit der Analyse der einfachsten komplexen Elemente. Es ist eine eindimensionale Liste, die durch die Java Klasse JList repräsentiert wird. Im Fenster des SUT sehen Sie eine JList als erste Komponente mit der Bezeichnung "Sample List".

Starten Sie eine Aufnahme und führen Sie einige Mausklicks auf die Listenelemente aus. Nach dem Anhalten der Aufnahme sollten Sie eine Sequenz sehen, die der folgenden entspricht:

Abbildung 8.3:  Mausklick Operationen auf eine JList

Wählen Sie bitte einen der aufgenommenen "Mausklick" Knoten aus und sehen Sie sich die referenzierte Komponente an.

Abbildung 8.4:  Referenz auf ein JList Element

Die Referenz stellt sich intuitiv im Format "Eltern.Kind" (oder auch "Parent.Child") dar. Im diesem Fall ist "List" der Name der Elternkomponente (die JList) und "list_item_2" ist der Name des individuellen (Kind) Elementes der Liste. Schauen wir uns an, wie die Komponente in QF-Test abgespeichert wird.

Mit diesem Knoten weiterhin selektiert, wählen Sie bitte "Komponente finden" aus dem über die rechte Maustaste erreichbaren Kontextmenü (auch [Strg-W] führt zum Ziel). Nun sollten Sie eine expandierte Liste der gespeicherten Komponenten des SUT unterhalb des Knotens "Fenster und Komponenten" der Testsuite sehen. Der ausgewählte Knoten sollte sich äquivalent dem folgenden präsentieren:

Abbildung 8.5:  Der JList Element Knoten

Was wir hier sehen ist ein Knotentyp, der als "Element" bezeichnet wird. Er wird speziell dazu benutzt, um Unterelemente von komplexen Komponenten zu beschreiben. Ein Elementknoten besteht aus zwei Hauptteilen: Dem Parent, zu dem er gehört und dem Index des Elements. Betrachten Sie bitte die Eigenschaften des Knotens in der Detailansicht:

Abbildung 8.6:  Die Eigenschaften des JList Elements

Hier sehen wir die QF-Test ID der Komponente (Mit der QF-Test ID der Parentkomponente vorangestellt) und einen Primärindex. Weil die Liste eine eindimensionale Struktur ist, brauchen wir vorerst nur einen Index. Wenn wir uns im nächsten Abschnitt Tabellen ansehen, wird der Sekundärindex ins Spiel kommen.

Der Primärindex wird hier durch einen String repräsentiert, der dem aktuellen Textinhalt des Listenelementes im SUT entspricht. Diese Beschreibung ist für die meisten Anwendungen angemessen, jedoch kann sie sich als unvorteilhaft für solche Listen erweisen, bei denen sich der Text der Elemente permanent ändert. Um diesem Problem vorzubeugen, bietet Ihnen QF-Test zwei andere Beschreibungsmöglichkeiten an:

Die erste referenziert das Element als einen numerischen Index (beginnend mit 0) innerhalb der Liste. Ändern Sie also bitte den Primärindex "list element 2" in den Knotenattributen in den äquivalenten Wert "1" und wählen Sie anschließend das Auswahlfeld "Als Zahl" um die Interpretation des Feldes umzuschalten.

Abbildung 8.7:  JList Element mit numerischem Index

Die zweite Alternative der Repräsentation des Index ist die Darstellung als regulärer Ausdruck (Regexp = Regular Expression). Hier führt QF-Test eine entsprechende textuelle Suche über die Listenelemente im SUT durch, solange, bis ein passendes Muster gefunden ist. Hier ein Beispiel:

Abbildung 8.8:  JList Element mit regulärem Ausdruck als Index

Der benutzte reguläre Ausdruck [0-9a-zA-Z ]*2 beschreibt eine willkürliche Anzahl von Zahlen, Buchstaben oder Leerzeichen, gefolgt von der Zahl "2" am Ende. Eine andere Möglichkeit wäre der Ausdruck .*2. Weitere Informationen zum Thema "Reguläre Ausdrücke" finden Sie in der Technischen Referenz des Handbuchs unter "Technische Details zu verschiedenen Themen".

Versuchen Sie nun Ihre aufgenommene Sequenz erneut auszuführen, nun aber mit den geänderten Elementknoten. Wenn Sie die Änderungen der Indexreferenzen korrekt durchgeführt haben, sollte das Verhalten der Sequenz exakt gleich bleiben.

8.3
Zweidimensionale komplexe Komponenten

Wir werden uns nun komplexeren Strukturen zuwenden - einer zweidimensionalen Komponente, bestens vertreten durch die Java Klasse JTable. Eine Tabelle besteht bekannterweise aus Zeilen und Spalten. Deshalb benötigt ein Element in der Tabelle zwei Indizes um sauber referenziert zu werden.

Abbildung 8.9:  Die Beispieltabelle "sample table" im SUT

Versuchen Sie bitte, analog wie bei der Liste, einige wenige Mausklicks auf die Elemente der Tabelle "sample table" des SUT aufzunehmen. Stellen Sie sicher, dass Elemente aus beiden Spalten berücksichtigt werden. Nach Abschluss sollte Ihr Ergebnis analog dem folgenden sein:

Abbildung 8.10:  Aufgenommene Mausklicks auf die JTable

Die Knoten gleichen weitgehend denen, die wir für die JList aufgenommen hatten. Es sind einfache "Mausklick" Knoten, die auf eine Komponente vom Typ "Parent.Primärindex&Sekundärindex" verweisen - "Table" ist der JTable Parent, "Label" bzw. "Value" ist der Primär- oder Spaltenindex und eine Nummer gibt den Sekundär- oder Zeilenindex an. Das "&" hat hierbei eine besondere Bedeutung. Es zeigt an, dass der Sekundärindex direkt auf das angegebene Tabellenelement verweist, ohne die Verwendung eines Elementknotens. Diese spezielle Syntax wird im nächsten Kapitel detailliert erklärt. Benutzen wir wieder "Komponente finden" aus dem Kontextmenü, um zu dem aktuell gespeicherten Elementknoten zu gelangen.

Abbildung 8.11:  Gespeicherte Elementknoten für die JTable

Da für den Sekundärindex keine Elementknoten notwendig sind, wurden auch keine aufgenommen. Es sind also nur solche für den Primärindex, sprich die Spalten "Label" und "Value" vorhanden. Wenn wir einen Blick in die Details des "Label" Elementknotens werfen, sehen wir, dass darin auch nur der Primärindex verwendet wird.

Abbildung 8.12:  Eigenschaften eines Elementknotens der JTable
8.4
Elementknoten oder Syntax

Das vorausgehende Kapitel beschrieb die Verwendung von Elementknoten in QF-Test. Es gibt jedoch noch einen weiteren Weg, um auf Elemente komplexer Komponenten zuzugreifen. Dieses kann erreicht werden durch die Angabe der Parent-Komponente, erweitert durch eine spezielle Syntax zur Angabe der Unterkomponente. Dieser Typ von Syntax wird in QF-Test als 'direkter Zugriff' auf das Element definiert. Äquivalent zur Repräsentation in Elementknoten gibt es drei Typen von Syntax:

  • @ - textuell
  • & - numerisch
  • % - regulärer Ausdruck

Im Sekundärindex der Mausklicks in Abbildung 8.10 findet diese spezielle Syntax in der numerisch Form mittels "&" Anwendung. Es wird in diesem Fall kein Elementknoten benötigt. Bitte versuchen Sie den Unterschied der verschiedenen Repräsentationen zu verstehen.

Ob die Beschreibung von Unterelementen mittels Element Knoten oder mittels Syntax erfolgt, ist aus Sicht von QF-Test völlig gleichwertig. Jede Methode hat ihre Berechtigung. Elementknoten eignen sich besonders gut für statische Werte, während die Syntax in allen Fällen mit einer gewissen Variabilität besser geeignet ist. QF-Test versucht, bei der Aufnahme die am besten geeignete Variante zu wählen, jedoch mag in seltenen Fällen eine Anpassung sinnvoll sein. Mit Hilfe der zugehörigen Optionen (siehe Handbuch) können Sie genau festlegen, auf welche Weise Unterelemente aufgenommen werden.

Als abschließendes Beispiel zeigt das folgende Bild eine "Mausklick" Sequenz, bei der auch der Primärindex als Syntax formuliert ist. Die Funktionalität bleibt die gleiche.

Abbildung 8.13:  Mausklicks mit Syntax für direkten Zugriff
8.5
Die Bedeutung der Eindeutigkeit

Wir halten hier für einen Moment an, um erneut die Wichtigkeit von eindeutig referenzierenden Elementen innerhalb komplexer Komponenten hervorzuheben. Wie es die Natur von Komponenten ist, in ihrer Komplexität zu wachsen, so steigt gleichermaßen die Komplexität des Referenzierens auf die Elemente der Komponenten. Bei den vorhergehenden Beispielen (Listen und Tabellen) ist die Struktur relativ einfach. Jedoch können selbst in diesen Komponenten identische Einträge auftauchen. Betrachten wir die folgende Tabelle:

Abbildung 8.14:  Tabelle mit identischen Elementen

Da identische Elemente auftauchen können (und werden), müssen Sie genau betrachten, wie Ihre Testsuite solche Tabellen behandelt. Was könnte sich ändern und was bleibt konstant? Die Antwort bestimmt von welchem Typ die Referenzen sein sollten, die Sie innerhalb der Tabelle benutzen. Dies ist der Grund, warum QF-Test die Zeilennummer als Sekundärindex verwendet, wenn die Aufnahme im intelligenten Modus erfolgt. Der Modus, der die Form festlegt, in der QF-Test Unterelemente aufnimmt, kann angepasst werden über »Bearbeiten«-»Optionen...« und anschließend "Aufnahme" -> "Unterelemente".

Im nächsten Abschnitt werden wir uns die wohl komplexeste Komponente vornehmen, bei welcher die Behandlung von potentiell identischen Elementen von kritischer Bedeutung ist.

8.6
Bäume

Bäume sind eine spezielle Ausprägung von komplexen Komponenten, da sich ihr hierarchischer Aufbau nicht gut auf eine lineare Struktur abbilden lässt. Die Eindeutigkeit eines Knotens erfordert also eine spezielle Betrachtung.

Durch den Satz an Hilfsmitteln und Konzepten, die Sie in den vorausgehenden Kapiteln gelernt haben, ermöglicht QF-Test eine gut beherrschbare Steuerung von Bäumen. Von spezieller Bedeutung ist die Einführung des '/' Operators, der wie ein Pfad-Trennzeichen in einer Dateisystem-Hierarchie arbeitet.

Wir wollen es einfach ausprobieren. Wie zuvor nehmen Sie bitte ein paar Mausklicks auf den "sample tree" Baum des SUT auf. Sie sollten in etwa Folgendes erhalten:

Abbildung 8.15:  Aufgenommene Mausklicks auf einen JTree

Zuerst versuchen Sie einfach, mit der aufgenommenen Sequenz ein wenig zu spielen und sie anzupassen, um zu verstehen, wie Bäume behandelt werden.

Klicks auf das +/- Symbol zum Ein- und Ausklappen von Baumknoten werden mit negativen X-Koordinaten aufgezeichnet, da der Klick ja links vom Baumknoten platziert wird. Für die Wiedergabe sind solche Klicks nicht notwendig, denn QF-Test expandiert den Baum automatisch für Sie, vorausgesetzt die ensprechende Wiedergabeoption ist gesetzt.

Wir wollen nun die Syntax betrachten, z.B. im Klick auf den Knoten "/JTree/colors/yellow". Der Pfadoperator ('/') wird benutzt, um den Weg innerhalb des Baumes zum gewünschten Knoten zu beschreiben. Dieses Schema hat den enormen Vorteil, dass damit unmittelbar das Problem der Eindeutigkeit gelöst ist. Knoten mit gleichem Namen in unterschiedlichen Zweigen des Baumes sind sauber getrennt benennbar. Das einzige Problem der Eindeutigkeit das bleibt, ist, wenn Baumknoten mit gleichem Namen im gleichen Zweig existieren können (z.B. wenn es zwei "yellow" Knoten in "/JTree/colors" gibt). In diesem Fall bleibt uns der bewährte Mechanismus des Referenzierens als Zahl.

Möglichen Änderungen in der Indizierung eines JTree Knotens begegnet man am besten durch direkten Zugriff, wie er im vorausgegangenen Kapitel vorgestellt wurde. Es kann einer der Operatoren '@', '&' oder '%' verwendet werden, um direkten Zugriff textueller oder numerischer Natur bzw. eines regulären Ausdrucks zu erreichen. Hier sieht man, wie eine direkte numerische Referenz aussieht:

Abbildung 8.16:  Direkte numerische Referenz auf einen JTree Knoten

Das war's! Nun sollten Sie in der Lage sein, Ihren Weg durch die Komplexität dieser Komponenten zu steuern.

Videos Downloads Dokumentation Kaufen Gratis Testen