Handbuch
Version 8.0.1 |
ItemResolver
Interface
Wie in Abschnitt 5.9 beschrieben, ist QF-Test in der Lage, jenseits
der Struktur von GUI Elementen mit Unterelementen zu arbeiten, die selbst keine GUI
Elemente sind, z.B. die Zellen einer Tabelle, Knoten in einem Baum oder Zeichnungen auf
einem Canvas. Solche Unterelemente werden mit Hilfe des ItemResolver
Mechanismus implementiert, über den Sie auch Ihre eigenen spezifischen Unterelemente
erstellen können.
Das ItemResolver
Interface ist deutlich komplexer als die einfachen
NameResolver2
oder FeatureResolver2
Interfaces aus dem
vorhergehenden Abschnitt und es kann nicht ohne gute Programmierkenntnisse und
Verständnis der zu Grunde liegenden Konzepte implementiert werden. Außerdem sind
ItemResolver
und die im nächsten Abschnitt beschriebenen
Checker
eng miteinander verknüpft und sollten gemeinsam implementiert
werden, wenn Sie Ihre Unterelemente auch überprüfen können wollen.
Lassen Sie sich davon aber nicht abschrecken, denn andererseits ist dieser Mechanismus
sehr mächtig und wenn Ihre ItemResolver
erst einmal implementiert und
registriert sind, integrieren sie sich so nahtlos in QF-Test, dass kein Unterschied
zwischen standard und nicht-standard Unterelementen zu erkennen ist.
Sie finden im Verzeichnis
qftest-8.0.1/Jython/Lib
unter QF-Tests
Wurzelverzeichnis einige Beispielimplementierungen, wie ktable.py
oder gef.py
. Beide Resolver sind zwar für SWT
spezifische Tabellen, das Konzept allerdings ist bei allen Engines
das gleiche.
ItemResolver
Konzepte
Bevor Sie mit der Umsetzung eines ItemResolvers
beginnen können, müssen
Sie sich über die Art der Unterelemente klar werden, die Ihr GUI Element enthalten
kann. Es könnte mehr als eine Art geben, so dass diese Entscheidung willkürlich ist.
So haben wir z.B. Unterelemente für Swing, SWT und JavaFX Tabellen so implementiert, dass
sowohl einzelne Zellen, als auch ganze Spalten als Unterelemente unterstützt werden.
Letzteres ist sehr hilfreich, weil damit Checks für komplette Spalten möglich sind.
Als nächstes müssen Sie entscheiden, wie Sie die Unterelemente intern darstellen
wollen. Sie können jede Art von Object
verwenden, da QF-Test niemals auf
Ihre interne Repräsentation zugreift, sondern diese lediglich zwischen den Methoden
Ihres ItemResolvers
hin und her reicht. Was am besten funktioniert, hängt
von der API des GUI Elements ab. Wenn dieses bereits ein Konzept für Unterelemente
bietet, ist es vermutlich am besten, diese Klassen zu verwenden.
Die wichtigste Entscheidung ist, wie Sie ein Unterelement gegenüber QF-Test repräsentieren. Wie in Abschnitt 5.9 beschrieben, kann der Anwender ein Unterelement über einen numerischen oder einen textuellen Index adressieren, wobei letzterer auch ein regulärer Ausdruck (vgl. Abschnitt 48.3) sein kann. Sie müssen also zwischen einem Unterelement und seinem Index (oder seinen Indizes) eine bidirektionale Abbildung ermöglichen, d.h. Sie müssen folgende Fragen beantworten können:
Die Kernpunkte bei der Vergabe von Namen für Unterelemente sind die gleichen wie bei normalen GUI Elementen. Arbeiten Sie hierzu bitte Abschnitt 5.4.2.1 und Abschnitt 5.4.2.2 gründlich durch bevor Sie fortfahren.
Ein einzelner numerischer oder textueller Index wird durch ein
SubItemIndex
Objekt repräsentiert. Das aktuelle Konzept unterstützt die
Adressierung eines Unterelements mittels eines primären und eines sekundären Index. In
der Zukunft hoffen wir, Indizes mit beliebiger Tiefe behandeln zu können, so dass ein
Knoten in einem Baum statt über einen einzelnen Pfad auch über einen gemischten Index
wie "tree@Root&1%Name:.*" angesprochen werden könnte. Daher ist der gesamte Index
ein Array von SubItemIndex
Objekten, auch wenn dessen Länge aktuell auf
ein oder zwei Objekte beschränkt ist.
Die meisten Unterelemente haben eine Geometrie, also eine Position und eine Größe.
Die Koordinaten eines Unterelements beziehen sich immer auf die obere linke Ecke des
GUI Elements, zu dem sie gehören, unabhängig davon, ob dieses gescrollt wird. Dadurch
hängen die Koordinaten nicht von der aktuellen Scrollposition ab. Für Unterelemente,
für die Geometrie keinen Sinn macht oder nicht ermittelt werden kann, können
Koordinaten ignoriert werden und die Methoden getItemLocation
und getItemSize
sollten einfach [0,0] zurückliefern.
ItemResolver
Interface
Die Methoden des Interface
de.qfs.apps.qftest.extensions.items.ItemResolver
teilen sich in drei
Kategorien auf: Erkennen eines Unterelements, die Beziehung zwischen einem
Unterelement und seinem Index und dem Auslesen von Informationen aus bzw. Ausführen
von Aktionen auf einem Unterelement.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SubItemIndex
Wie im vorhergehenden Abschnitt erklärt, repräsentiert ein
de.qfs.apps.qftest.shared.data.SubItemIndex
einen (partiellen) Index für
ein Unterelement eines GUI Elements. Diese Klasse definiert einige Konstanten mit
folgender Bedeutung:
Sie stellt außerdem folgende Methoden bereit:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ItemRegistry
Wenn Ihr ItemResolver
implementiert und instanziiert ist, muss er bei der
ItemRegistry
registriert werden. Die Klasse
de.qfs.apps.qftest.extensions.items.ItemRegistry
bietet hierzu folgende
Methoden:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Für die Implementierung der Interfaces ItemNameResolver2
,
ItemValueResolver2
und Checker
ist es wichtig, die Art der
Objekte zu kennen, die ein Unterelement intern repräsentieren, denn dies sind die
Objekte, die an die Methoden getItemName
, getItemValue
,
getCheckData
und getCheckDataAndItem
übergeben werden.
JavaFX
Die folgende Tabelle führt die komplexen Komponenten von JavaFX und die von QF-Test's
standard ItemResolvern
verwendete Repräsentation der jeweiligen
Unterelemente auf.
| |||||||||||||||||||||||
Tabelle 53.1: Interne Repräsentation für Unterelement von JavaFX Komponenten |
Swing
Die folgende Tabelle führt die komplexen Komponenten von Swing und die von QF-Test's
standard ItemResolvern
verwendete Repräsentation der jeweiligen
Unterelemente auf.
| |||||||||||||||||||
Tabelle 53.2: Interne Repräsentation für Unterelement von Swing Komponenten |
SWT
Die folgende Tabelle führt die komplexen GUI Elemente von SWT und die von QF-Test's
standard ItemResolvern
verwendete Repräsentation der jeweiligen
Unterelemente auf.
| |||||||||||||||||||||||
Tabelle 53.3: Interne Repräsentation für Unterelement von SWT GUI Elementen |
Web
Die folgende Tabelle führt die komplexen GUI Elemente für Web und die von QF-Test's
standard ItemResolvern
verwendete Repräsentation der jeweiligen
Unterelemente auf.
| |||||||||
Tabelle 53.4: Interne Repräsentation für Unterelement von Web GUI Elementen |
Letzte Änderung: 10.9.2024 Copyright © 1999-2024 Quality First Software GmbH |