Lösung von Problemen bei der Wiedererkennung
Zeitliche Synchronisierung
Wenn Sie Exceptions erhalten, weil eine Komponente nicht gefunden wurde, kann einer der Gründe sein, dass nicht lang genug auf die Komponente gewartet wurde. Ein Mausklick hat zwar eine gewisse Standardwartezeit, diese ist aber nicht immer ausreichend. Daher sollten Sie prüfen, ob es genügend Synchronisationspunkte gibt, wie Warten auf Komponente oder Check Knoten mit Wartezeiten, um die Testschritte nur dann auszuführen, wenn das SUT wirklich bereit dazu ist.
- Ein Warten auf Komponente Knoten kann genutzt werden, wenn eine Komponente neu auftaucht. Die maximale Wartezeit (in Millisekunden) wird im Attribut Wartezeit angegeben.
- Mittels Check Knoten kann auf eine Zustandsänderung von Komponenten gewartet werden. Geben Sie hier ebenfalls die maximale Wartezeit (in Millisekunden) im Attribut Wartezeit an.
- Manchmal ist es auch eine Schleife notwendig, in der auf die Zustandsänderung gewartet wird und, wenn noch nicht erfolgt, eine Aktion, zum Beispiel der Klick auf einen "Aktualisieren" Button, ausgeführt wird.
- Auch auf die Änderung der Anzahl der Zeilen in einer Tabelle kann in einer Schleife gewartet werden.
- Viele Anwendungen verwenden Anzeigen, die Wartezeiten symbolisieren, zum Beispiel Fortschrittsbalken oder "Eieruhren". Hier kann zunächst auf das Erscheinen und dann auf das Verschwinden der Komponente gewartet werden.
Die Wartezeit Attribute geben eine maximale Wartezeit an. Sobald der gewünschte Zustand in der Anwendung erreicht ist, fährt QF-Test mit der Ausführung fort. Diese Wartezeiten können daher großzügig gewählt werden.
Eine Änderung der Optionen für Standardwartezeiten (Abschnitt 41.3.6) sollte nur erfolgen, wenn generell längere Wartezeiten anwendungsweit Sinn machen.
Hinweis Als letzte Möglichkeit können Sie auch mit einer festen Verzögerung arbeiten. Bei Angaben im Attribut Verzögerung vorher/nachher wartet QF-Test die komplette angegebene Zeit. Verzögerung vorher/nachher sollten daher nur genutzt werden, wenn es gar keine für QF-Test erkennbare Zustandsänderung in der zu testenden Anwendung gibt, auf die gewartet werden kann.
Wiedererkennung
Wenn sich Ihr SUT in einer Weise verändert, die es QF-Test unmöglich macht, eine Komponente
wiederzufinden, schlägt Ihr Test mit einer ComponentNotFoundException
fehl. Diese
sollte nicht mit einer UnresolvedComponentIdException
verwechselt werden, welche
durch Entfernen eines Komponente-Knotens aus der Testsuite oder dem Ändern des
Attributs QF-Test ID der Komponente eines Event Knotens zu einer nicht vorhandenen QF-Test ID
ausgelöst werden kann.
Es gibt zwei Videos, die die Behandlung einer
ComponentNotFoundException
ausführlich erklären:
Wenn Sie eine ComponentNotFoundException
erhalten, führen Sie den Test erneut mit
aktiviertem Test-Debugger aus, so dass der Test angehalten wird und Sie den Knoten, der
das Problem verursacht hat, untersuchen können. Hier zahlt es sich aus, wenn QF-Test ID
Attribute aussagekräftig sind, da Sie verstehen müssen, welche Komponente der Test
anzusprechen versucht hat. Falls Sie sich gar keinen Reim darauf machen können, was der
Sinn des betreffenden Knotens sein soll, deaktivieren Sie ihn und versuchen Sie, ob der
Test ohne diesen Knoten durchläuft. Es könnte sich um einen Störeffekt handeln, der bei
der Aufnahme nicht gefiltert wurde, und der gar nichts zum eigentlichen Test beiträgt.
Grundsätzlich sollten Ihre Tests immer auf das Minimum an Knoten reduziert werden, mit
denen sich der gewünschte Effekt erzielen lässt.
Falls der Knoten erhalten bleiben muss, werfen Sie als nächstes einen Blick auf das SUT, um zu sehen, ob die Zielkomponente aktuell sichtbar ist. Wenn nicht, müssen Sie Ihren Test entsprechend anpassen, um diese Situation zu behandeln. Ist die Komponente sichtbar, überprüfen Sie anhand des Bildschirmabbilds im Protokoll, ob das auch zum Zeitpunkt des Fehlers der Fall war, und versuchen Sie, den fehlgeschlagenen Knoten noch einmal als Einzelschritt auszuführen. Wenn die Ausführung nun klappt, haben Sie ein Problem mit dem Timing, das Sie durch den Einbau eines Warten auf Komponente Knotens, eines Check Knotens mit Wartezeit oder einer anderen Warteaktion (siehe Zeitliche Synchronisierung) lösen können.
Falls die Komponente sichtbar ist und die Wiedergabe kontinuierlich fehlschlägt, ist die Ursache eine Änderung an der Komponente oder einer ihrer Parent-Komponenten. Nun gilt es festzustellen, was sich geändert hat und wo. Nehmen Sie hierzu einen neuen Klick auf die Komponente auf und vergleichen Sie dann den alten und neuen Komponente-Knoten in der Hierarchie unterhalb von Fenster und Komponenten.
Hinweis Sie können vom Event Knoten direkt zum zugehörigen Komponente Knoten springen, indem Sie Strg+W drücken oder rechts-klicken und im Popup-Menü »Komponente finden« wählen. Sie können mittels Strg+Backspace oder »Bearbeiten«-»Vorherigen Knoten anwählen« wieder zurückspringen. Ein schlauer Trick ist, die zu vergleichenden Komponente Knoten durch Setzen von Marken zu kennzeichnen »Bearbeiten«-»Marken«, um sie leichter wiederzufinden.
Der Knackpunkt ist die Stelle, an der die Hierarchie der beiden Knoten verzweigt. Wenn sie unter verschiedenen Fenster Knoten angesiedelt sind, liegt der Unterschied in den betreffenden Fenstern selbst. Andernfalls gibt es einen gemeinsamen Vorgänger direkt oberhalb der Verzweigung. Der entscheidende Unterschied ist dann in den jeweiligen Knoten direkt unterhalb dieses gemeinsamen Vorgängers zu finden. Wenn Sie die Stelle mit der Unterscheidung gefunden haben, vergleichen Sie die Attribute der betreffenden Knoten von oben nach unten und suchen Sie nach Abweichungen.
Hinweis Sie können mittels »Ansicht«-»Neues Fenster...« ein weiteres QF-Test Fenster öffnen und damit die Detailansichten der beiden Knoten nebeneinander platzieren.
Die einzigen Unterschiede, die immer zu einem Fehler bei der Wiedererkennung führen, sind Änderungen der Attribute Klasse oder Name. Abweichungen bei Merkmal, Struktur oder Geometrie können üblicherweise kompensiert werden, sofern sie sich nicht häufen.
Eine Änderung der Klasse sollte bei der Verwendung von Generische Klassen
kaum vorkommen. Die Verwendung von generischen Klassen bietet einige Vorteile,
wird bei Web-Anwendungen aber manchmal erst nach der Erstellung erster Tests
eingeführt (siehe Verbesserte Komponentenerkennung mittels CustomWebResolver
).
In diesem Fall müssen Sie das Klasse Attribut der bereits vorhandenen
Komponente-Knoten an diese Änderung anpassen.
Auch der Komponentenbezeichner kann sich ändern. Falls die Änderung
beabsichtigt zu sein scheint, z.B. die Korrektur eines Rechtschreibfehlers, können Sie
das Name Attribut entsprechend anpassen. Wahrscheinlicher ist, dass es sich um einen
automatisch generierten Komponentenbezeichner handelt,
der sich jederzeit wieder ändern kann. Auch hier kann es Sinn machen, das
Problem mit den Entwicklern diskutieren und entwicklungsseitig eine Lösung zu finden.
Ansonsten kann bei Web-Anwendungen der Name über den
Der CustomWebResolver installieren
Knoten beeinflusst werden, speziell über die
Kategorien autoIdPatterns
und customIdAttributes
.
Bei allen Technologien kann der Name mit Hilfe eines
NameResolvers
, wie in
Abschnitt 54.1.7 beschrieben, beeinflusst werden.
Er kann ganz unterdrückt oder auf relevante Teile reduziert werden.
Änderungen am Attribut Merkmal sind insbesondere für Fenster Knoten nicht ungewöhnlich. Dort entspricht das Merkmal dem Titel des Fensters. Kombiniert mit einer signifikanten Änderung der Geometrie kann das zum Scheitern der Wiedererkennung führen. Dies kann durch Anpassen des Merkmal Attributs an die neuen Gegebenheiten, oder - bevorzugt - durch Verwendung eines regulären Ausdrucks (vgl. Abschnitt 49.3), der alle Varianten abdeckt, behoben werden.
Abhängig von Art und Umfang der Änderungen gibt es zwei grundsätzliche Möglichkeiten zur Korrektur:
- Passen Sie die Attribute des alten Knoten an und entfernen Sie die neu aufgenommenen Knoten. Wenn die Änderungen im SUT nicht zu groß waren und die Komponentenerkennung noch funktioniert, können Änderungen auch über die QF-Test Funktion Komponenten aktualisieren automatisiert durchgeführt werden.
-
Behalten Sie die neuen Knoten und entfernen Sie den alten. Hierzu müssen Sie zunächst sicherstellen, dass alle Knoten, die auf die alte Komponente verweisen, auf die neue QF-Test ID geändert werden. Dies lässt sich durch einen kleinen Trick erreichen: Ändern Sie die QF-Test ID des alten Komponente-Knotens auf die QF-Test ID des neuen. QF-Test beschwert sich zunächst, dass die QF-Test ID nicht eindeutig ist, was Sie ignorieren können, und bietet dann an, alle Verweise zu aktualisieren, was Sie mit "Ja" bestätigen müssen. Anschließend können Sie den alten Knoten entfernen.
Hinweis Die automatische Anpassung der Verweise in anderen Testsuiten funktioniert nur, wenn diese zum selben Projekt gehören oder das Attribut Abhängige Dateien (umgekehrte Includes) des Testsuite Knotens korrekt gesetzt ist.