Das Akronym AJAX für "Asynchronous Javascript and XML" wird allgemein mit
modernen Webanwendungen assoziiert, die sich interaktiver anfühlen als die klassischen
<FORM>-basierten Anwendungen und vom Look&Feel her schon
fast an Desktop-Applikationen herankommen. Hinter diesem gemeinsamen Akronym steckt
allerdings ein ganzer Zoo von Toolkits, auf denen solche Anwendungen basieren. Jedes
davon setzt eigene Schwerpunkte und kommt mit einem eigenen Satz von Widgets. Solche
Toolkits stellen für QF-Test und jedes andere automatisierte Testwerkzeug aus folgenden
Gründen ein Problem dar:
-
Die Komponentenhierarchie wird automatisch aus abstrakten Widgets wie Button oder List
generiert. Ein Widget wird dabei oft mittels diverser <DIV>
Knoten implementiert. Dies führt zu einer sehr tief verschachtelten Hierarchie mit
geringer Struktur.
-
IDs werden entweder gar nicht zugewiesen oder automatisch generiert, was noch
schlechter ist.
-
Die asynchrone Kommunikation mit dem Webserver und die dynamische Erstellung von DOM
Knoten kann Probleme beim Timing verursachen.
Es gibt kein Allheilmittel, mit dem sich diese Probleme generisch lösen lassen. In
vielen Fällen kann QF-Test trotzdem ohne weiteres Zutun mit AJAX Anwendungen interagieren.
Dabei sind Wiedererkennung und Performanz allerdings nicht ideal. Optimale Testbarkeit
kann nur mit Hilfe von Spezialfunktionen erreicht werden, die genau auf ein Toolkit
zugeschnitten sind und sich dessen Eigenheiten zu Nutze machen.
Ein AJAX Resolver besteht aus verschiedenen Resolvern und anderen Funktionen, die
speziell für ein bestimmtes AJAX Toolkit entwickelt werden. Vor allem versucht QF-Test,
den DOM Knoten Klassen zuzuweisen, die den zugehörigen abstrakten Widgets entsprechen
und Knoten auf Zwischenebenen, die nur ein Detail der Toolkit-Implementierung sind,
aus der Hierarchie herauszufiltern. Die Attribute 'Name', 'Merkmal' und
'Weiteres Merkmal' werden passend zum Toolkit ermittelt und Events werden so auf den
korrekten DOM Knoten wiedergegeben, dass dies möglichst exakt einer Aktion von einem
echten Anwender entspricht. Diese Maßnahmen reduzieren die Hierarchie der Komponenten
drastisch und erhöhen Performanz und Zuverlässigkeit der Wiedererkennung und
Wiedergabe gleichermaßen. Zudem werden Timing und Synchronisation besonders
unterstützt.
Zwangsläufig unterscheiden sich Komponenten und Events für eine Webanwendung mit und
ohne aktiviertem AJAX Resolver signifikant und sind nicht zueinander kompatibel. Daher
sollte die Entscheidung, ob ein AJAX Resolver verwendet wird, so früh wie möglich
getroffen werden. Andernfalls müssen entweder bestehende Tests neu implementiert
werden, nachdem der Resolver aktiviert wird, oder Tests mit und ohne Resolver müssen
sauber voneinander getrennt werden. Wenn ein Resolver für Ihre Anwendung verfügbar
ist, sollten Sie ihn praktisch immer auch einsetzen, außer Ihre Tests sind bereits zu
umfangreich, weitgehend vollständig und stabil.
Die Implementierung eines AJAX Resolvers ist ein fortlaufender Prozess. Da Änderungen
an einem Resolver Auswirkungen darauf haben können, wie Komponenten aufgenommen und
erkannt werden, muss sichergestellt sein, dass Sie Ihre QF-Test Version aktualisieren
können, ohne die Kompatibilität bestehender Tests zu gefährden. Hierzu werden AJAX
Resolver mit einer eigenen dreistelligen Version versehen, beginnend mit Version
1.0.0, mit folgender Bedeutung:
-
Bei einer Änderung der Minor Version, z.B. 1.0.1, ist die Kompatibilität nicht
berührt.
-
Eine Änderung der Medium Version, z.B. 1.1.0, bedeutet, dass mit niedrigerer Medium
Version aufgenommene Tests immer noch wiedergegeben werden können, bei Aufnahme
neuer Sequenzen aber Komponenten anders aufgenommen werden können. Dies ist nicht
kritisch, es kann aber besser sein, solche Neuaufnahmen zu vermeiden, wenn die
Vorteile der neuen Version nicht überwiegen.
-
Bei einer Änderung der Major Version, z.B. 2.0.0, kann auch die Kompatibilität der
Wiedergabe verloren gehen, was dann eine Neuaufnahme oder manuelle Anpassung der
betreffenden Komponenten erforderlich macht.
AJAX Resolver werden über die 'Prozedur' qfs.web.ajax.installToolkitResolver in der Standardbibliothek
qfs.qft aktiviert, bei der Sie die zu verwendende Version angeben müssen.
Sie können wahlweise nur die Major Version angeben, in welchen Fall QF-Test die höchste
verfügbare Medium.Minor Version für diese Major Version verwendet. Dies ist
üblicherweise die beste Option und wird in der mit Hilfe des Schnellstart-Assistenten
erstellten Startsequenz verwendet (vgl. Kapitel 3). Alternativ
können Sie die Major.Medium Version festlegen, oder sogar die exakte
Major.Medium.Minor Version und so Ihre Tests mit der Version des Resolvers ausführen,
mit der sie erstellt wurden.
Leider steigt die Zahl der verfügbaren AJAX Toolkits rasant und deren Popularität
ändert sich sehr schnell. Daher müssen wir sehr genau abwägen, welche Toolkits wir zu
welchem Grad unterstützen. Die Zusammenarbeit mit QF-Test Anwendern spielt hierbei auch
eine große Rolle. Die Enwicklung eines Resolvers kann - bis auf die Beseitigung
kritischer Bugs - auch eingefroren werden, wenn ein Toolkit an Bedeutung verliert.
Dieser Abschnitt führt die unterstützen AJAX Toolkits und deren Version zusammen mit
den verfügbaren Versionen der Resolver auf. Neuere Versionen eines Toolkits benötigen
nicht immer ein Update des Resolvers. Sollte Ihre Anwendung mit einer neueren Version
des Toolkits arbeiten, verwenden Sie bitte den aktuellsten verfügbaren AJAX Resolver
für dieses Toolkit und informieren Sie uns über Ihre Ergebnisse.
Das Google Widget Toolkit wird seit GWT Version 1.5 unterstützt. Eine Demo-Testsuite
für GWT, die mit GWT Version 2.3 getestet wurde, finden Sie in der Datei
.../demo/web/gwt.qft. Dieses Demo verwendet generische Komponenten und
stellt einige nützliche Prozeduren für die Arbeit mit GWT Widgets zur Verfügung.
|
|
| Resolver Version |
QF-Test Version |
Anmerkungen |
| 1.4.0 |
3.4.2 |
Behebt Fehler beim Filtern von <DIV> Knoten
|
| 1.3.0 |
3.4.1 |
Unterstützung für GWT-TABLAYOUTPANEL und GWT-TABLAYOUTPANELTAB
|
| 1.2.0 |
3.4.0 |
Filtern von <DIV> Knoten, verbesserte weitere Merkmale,
eingeschränkte Unterstützung für obfuskierte GWT Klassennamen
|
| 1.1.0 |
3.3.0 |
Verbesserte Unterstützung für GWT-TREEITEM, GWT-STACKPANELITEM and
GWT-TABBARITEM
|
| 1.0.1 |
3.1.4 |
Verbesserte Wiedergabe mit GWT 2.0 |
| 1.0.0 |
3.1.1 |
Initiale Version |
|
|
| | Tabelle 38.1: GWT Resolver Versionen | |
Dieser Resolver wurde zunächst mit Ext JS Version 2 entwickelt. Angetestet für Ext
JS Version 4.0.1.
|
|
| Resolver Version |
QF-Test Version |
Anmerkungen |
| 1.2.0 |
3.4.1 |
Unterstützung für Ext JS Version 4
|
| 1.1.0 |
3.3.0 |
Verbesserte Unterstützung für Elemente von Tree, Grid, Tab Panel und Combo
Widgets
|
| 1.0.0 |
3.1.1 |
Initiale Version |
|
|
| | Tabelle 38.2: Ext JS Resolver Versionen | |
Es gibt keinen eigenen Ext GWT Resolver. Ext GWT ist faktisch eine Kombination aus
Ext JS und GWT und wird von QF-Test durch Aktivierung der beiden entsprechenden
Resolver unterstützt.
Dieser Resolver wurde mit den RichFaces Versionen 3 und 4 entwickelt.
|
|
| Resolver Version |
QF-Test Version |
Anmerkungen |
| 1.2.0 |
3.4.1 |
Unterstützt RichFaces 4
|
| 1.1.0 |
3.3.0 |
Grundlegend überarbeitet
|
| 1.0.0 |
3.1.4 |
Initiale Version |
|
|
| | Tabelle 38.3: RichFaces Resolver Versionen | |
Dieser Resolver wurde mit qooxdoo Version 0.7.2 entwickelt. Zur Zeit keine
Aktivitäten.
|
|
| Resolver Version |
QF-Test Version |
Anmerkungen |
| 1.1.0 |
3.3.0 |
Verbesserte Unterstützung für Elemente von List und Menu Widgets
|
| 1.0.0 |
3.1.1 |
Initiale Version |
|
|
| | Tabelle 38.4: Qooxdoo Resolver Versionen | |
Dieser Resolver wurde mit RAP Version 1 entwickelt, die Unterstützung für RAP
Versionen 2 und höher ist unvollständig. Zur Zeit keine Aktivitäten.
|
|
| Resolver Version |
QF-Test Version |
Anmerkungen |
| 1.1.0 |
3.3.0 |
Verbesserte Unterstützung für Elemente von List, CTabFolder, Table und Tree
Widgets
|
| 1.0.1 |
3.3.0 |
Verbesserte Erkennung von Widgets |
| 1.0.0 |
3.1.1 |
Initiale Version |
|
|
| | Tabelle 38.5: RAP Resolver Versionen | |
Vaadin ist ein Toolkit, das zwar auf GWT aufsetzt, aber zusätzliche Features und
seine eigenen Widgets mitbringt und somit für das Testen ganz andere Anforderungen
stellt als GWT. Ein Resolver für Vaadin befindet sich derzeit in der Entwicklung.
Fall Sie Interesse haben, melden Sie sich bitte.
jQuery UI scheint der aufgehende Stern unter den aktuellen AJAX Toolkits zu sein.
Ein Resolver für jQuery UI befindet sich in der Diskussion. Falls Sie Interesse
haben, melden Sie sich bitte.