Handbuch
Version 8.0.1 |
Die folgenden Knoten wurden im Laufe der Entwicklungszeit von QF-Test angeboten, werden aber nicht mehr weitergepflegt. Aus Gründen der Rückwärtskompatibilität können diese aber noch ausgeführt werden.
Hinweis Vor QF-Test Version 2 war der 'Test' Knoten einer der zentralen Bausteine einer Testsuite. Er hat allerdings einige Schwachpunkte. So ist zum Beispiel seine Struktur für Vorbereitungs- und Aufräumarbeiten für komplexe Szenarios zu unflexibel. Außerdem war nie klar, ob ein 'Test' Knoten einen logischen Testfall repräsentiert oder nur zur Implementierung einer einfachen Sequenz dient. Daher wurden 'Test' Knoten durch 'Testfallsatz' und 'Testfall' Knoten abgelöst. Ein 'Test' ist eine besondere Sequenz, die es erlaubt, vor und nach der Ausführung jedes ihrer Childknoten spezielle Maßnahmen zu treffen, um einen gesicherten Ausgangszustand herzustellen. Dazu kann der Test neben seinen normalen Children als erstes Child einen 'Vorbereitung' und als letztes Child einen 'Aufräumen' Knoten enthalten. Die 'Vorbereitung' wird vor, das 'Aufräumen' nach jedem normalen Childknoten ausgeführt. Mit seinem Attribut 'Implizit Exceptions fangen' bietet ein 'Test' eine besondere Möglichkeit zur Behandlung von Exceptions um den Abbruch eines gesamten Testlaufs durch eine einzelne Exception in einem 'Test' zu verhindern. Für spezielle Fälle von datengetriebenem Testen kann der 'Test' auch einen 'Datentreiber' enthalten. Im Regelfall wird dies jedoch mit Hilfe von 'Testfallsätze' realisiert, wie in Kapitel 22 beschrieben. Dieser Anwendungsfall kann auch per 'Testschritt' Knoten abgedeckt werden. Aus Gründen der Rückwärtskompatibilität und um den Übergang von den alten 'Test' Knoten zu den modernen 'Testfallsatz' und 'Testfall' Knoten zu erleichtern, behandelt QF-Test 'Test' Knoten im Report analog zu 'Testfallsatz' oder 'Testfall' Knoten, sofern deren Position in der Hierarchie dies zulässt. In einigen Fällen konnte ein 'Test' Knoten auch wie ein 'Testschritt' behandelt werden, um z.B. datengetriebene Testschritte zu erlauben. Alte Testsuiten, deren Struktur noch auf 'Test' Knoten basiert, können migriert werden, um die neuen Features von 'Testfallsätze' und 'Testfälle' zu nutzen. Klicken Sie hierzu mit der rechten Maustaste auf einen Knoten, um dessen Kontextmenü anzuzeigen. Wenn eine Transformation erlaubt ist, wird QF-Test anbieten, den 'Test' Knoten in einen 'Testfallsatz', 'Testfall' oder 'Testschritt' Knoten umzuwandeln. 3.0+ Um eine ganze Hierarchie von 'Test' Knoten zu transformieren müssen Sie von oben nach unten arbeiten oder die Knotentransformation "Testfallsatz rekursiv" anwenden. Hinweis Sowohl 'Testfallsatz' als auch 'Testfall' Knoten können aus Gründen der Rückwärtskompatibilität 'Vorbereitung' und 'Aufräumen' Knoten enthalten. Bei einem 'Testfallsatz' verhalten sich diese genau wie bei einem 'Test', d.h. 'Vorbereitung' und 'Aufräumen' Knoten werden vor und nach jedem im 'Testfallsatz' enthalten Test ausgeführt. Bei einem 'Testfall' werden hingegen 'Vorbereitung' und 'Aufräumen' nur einmal ganz zu Beginn und Ende ausgeführt. Enthält ein 'Testfallsatz' oder 'Testfall' Knoten sowohl 'Abhängigkeit' als auch 'Vorbereitung'/'Aufräumen' Knoten wir die 'Abhängigkeit' zuerst aufgelöst. 'Vorbereitung' und 'Aufräumen' haben keinen Einfluss auf den in Abschnitt 8.6.3 beschriebenen Stapel von Abhängigkeiten. |
Enthalten in: Alle Arten von Sequenzen.
Kinder: Ein optionaler 'Datentreiber' gefolgt von einer optionalen 'Vorbereitung' am Anfang, dann beliebige ausführbare Knoten und ein optionales 'Aufräumen' am Ende.
Ausführung: Die 'Variablendefinitionen' des 'Tests' werden gebunden. Ist ein 'Datentreiber' Knoten vorhanden, wird dieser ausgeführt, um einen entsprechenden Datenkontext zu erzeugen und einen oder mehrere 'Daten' Knoten zu binden mit dem Zweck, über die ermittelten Datensätze zu iterieren (vgl. Kapitel 22). Für jeden normalen Childknoten des Tests wird zunächst die 'Vorbereitung' ausgeführt, dann das Child, dann der 'Aufräumen' Knoten. Zuletzt werden die Variablen des Tests wieder gelöscht.
Attribute:
Abbildung 41.95: 'Test' Attribute |
Der Name einer Sequenz ist eine Art Kurzkommentar. Er wird in der Baumdarstellung der Testsuite angegeben und sollte etwas über die Funktion der Sequenz aussagen.
Variabel: Nein
Einschränkungen: Keine
Mit diesem Attribut kann ein Knoten als Bruchstelle zum Abteilen eines Protokolls markiert werden. Es legt den Dateinamen für das abgeteilte Protokoll fest. Nach Durchlaufen des Knotens wird das zugehörige Protokoll aus dem Hauptprotokoll entfernt und als eigenständiges Protokoll gespeichert. Diese Operation ist vollständig transparent, da das Hauptprotokoll eine Referenz auf das abgeteilte Protokoll erhält und somit vollständig navigierbar bleibt. Näheres zu geteilten Protokollen finden Sie in Abschnitt 7.1.6.
Dieses Attribut hat keinen Effekt, wenn die Option Geteilte Protokolle erzeugen
deaktiviert ist oder geteilte Protokolle durch explizite Angabe von -splitlog
im
Batchmodus ausgeschaltet werden.
Es ist nicht nötig für Eindeutigkeit der Dateinamen für abgeteilte Protokolle zu sorgen. Wo nötig hängt QF-Test eine Zahl an den Dateinamen an, um Konflikte zu vermeiden. Der Dateiname darf Verzeichnisse enthalten und es können - analog zur Angabe des Dateinamens für das Protokoll im Batchmodus - folgende Platzhalter in Kombination mit einem '%' oder '+' Zeichen verwendet werden:
| |||||||||||||||||||||||||||||||||||
Tabelle 41.40: Platzhalter für das Attribut 'Name für separates Protokoll' |
Variabel: Ja
Einschränkungen: Keine, Zeichen die für Dateinamen nicht zulässig sind werden durch '_' ersetzt.
Hier können Sie Werte für Variablen definieren, die während der Ausführung der Children der Sequenz Gültigkeit besitzen. Näheres zur Arbeit mit der Tabelle finden Sie in Abschnitt 2.2.5. Eine detaillierte Erklärung zur Definition und Verwendung von Variablen finden Sie in Kapitel 6.
Variabel: Namen der Variablen nein, Werte ja
Einschränkungen: Keine
Wenn in einem der Children des Tests eine Exception auftritt, die nicht abgefangen wird, ist der Test normalerweise beendet. Das ist oft nicht wünschenswert, da man keine Information über den Testausgang der weiteren Children erhält.
Wenn 'Vorbereitung' und 'Aufräumen' so beschaffen sind, dass Sie den Ausgangszustand auch dann sicher stellen können, wenn eine Exception in einem normalen Child des Tests auftritt, können Sie hiermit die Exception implizit abfangen.
Anstatt dann bei einer Exception abzubrechen, protokolliert der Test diese und fährt mit dem 'Aufräumen' fort. Anschließend wird der nächste Childknoten ganz normal mit 'Vorbereitung' und 'Aufräumen' ausgeführt.
Exceptions, die während der 'Vorbereitung' oder des 'Aufräumen' auftreten, können auf diesem Weg nicht abgefangen werden.
Variabel: Nein
Einschränkungen: Keine
Wenn beim Ablauf des Tests innerhalb der Sequenz eine Warnung, ein Fehler oder eine Exception auftritt, wird dieser Status im Protokoll normalerweise an die übergeordneten Knoten weitergeleitet. Mit diesem Attribut können Sie den Fehlerstatus, den das Protokoll für diese Sequenz erhält, beschränken.
Hinweis Dieser Wert beeinflusst ausschließlich den Status des Protokolls und damit den Rückgabewert von QF-Test falls es im Batchmodus läuft (vgl. Abschnitt 1.7). Auf die Behandlung von Exceptions hat er keinen Einfluss.
Auch für die Erstellung kompakter Protokolle (vgl. Kompakte Protokolle erstellen), hat dieser Wert keinen Einfluss. Eine Sequenz, in der eine Warnung oder ein Fehler auftritt, wird nicht aus einem kompakten Protokoll entfernt, selbst wenn über dieses Attribut der Fehlerstatus auf "Keinen Fehler" zurückgesetzt wird.
Variabel: Nein
Einschränkungen: Keine
Zeit in Millisekunden, die der Knoten maximal ausgeführt werden soll. Nach Ablauf dieser Zeit wird der Knoten abgebrochen.
Variabel: Ja
Einschränkungen: >= 0
Bei der Ausführung von Tests im Batchmodus kann beim Kommandozeilenargument
-test <Index>|<ID>
alternativ zum qualifizierten Namen die 'QF-Test ID' des Knotens angegeben
werden.
Variabel: Nein
Einschränkungen: Darf keines der Zeichen '\', '#', '$', '@', '&', oder '%' enthalten und nicht mit einem Unterstrich ('_') beginnen.
Mit diesen Parametern kann vor oder nach der Ausführung eine Verzögerung bewirkt werden. Sind sie nicht gesetzt, wird die Standardverzögerung aus den Optionen verwendet.
Variabel: Ja
Einschränkungen: Leer oder >0
Hier können Sie einen beliebigen Kommentar eintragen.
Hinweis Für die ausführliche Dokumentation, insbesondere von 'Testfallsatz', 'Testfall' oder 'Prozedur' Knoten, ist dieses Textfeld womöglich nicht der geeignete Ort. Es gibt hervorragende Editoren, die wesentlich besser dafür geeignet sind. Mittels der Option Kommando für externen Editor kann ein externer Editor festgelegt werden, in dem nach Drücken von [Alt-Eingabe] oder Klicken des Buttons der Kommentar komfortabel bearbeitet werden kann.
Für einige Knoten können Sie ein spezielles Verhalten per Doctags konfigurieren, siehe Doctags.
Falls bei 'Komponenten' Knoten in dem Bemerkungsfeld eine Eintragung gemacht wurde, wird der Knoten bei der Suche bzw. dem Löschen von ungenutzten Komponenten übersprungen.
Variabel: Ja
Einschränkungen: Keine
installCustomWebResolver
Bis QF-Test 7 erfolgte die Zuordnung der funktionalen Komponenten zu HTML Objekten im
Normalfall über die Prozedur
qfs.web.ajax.installCustomWebResolver
aus der Standardbibliothek qfs.qft
.
Sie wurde durch den 'CustomWebResolver installieren' Knoten ersetzt.
Abbildung 41.96: Aufruf des CustomWebResolvers im 'Vorbereitung' Knoten des Schnellstart-Assistenten |
Die Erläuterung der Parameter finden Sie
in installCustomWebResolver
- Parameter, die der Parametersyntax
in installCustomWebResolver
- Parametersyntax.
Beispiele für die Verwendung der Prozedur Sie daran anschließend.
installCustomWebResolver
- Parameter
Die Parameter sind entsprechend ihrer Relevanz geordnet. Da die
Komponentenerkennung sehr oft auf der Zuordnung von CSS Klassen oder anderen
Attributwerten zu generischen Klassen von QF-Test basiert, sind somit die
Parameter genericClasses
und attributesToGenericClasses
an erster Stelle zu finden.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
installCustomWebResolver
- ParametersyntaxWenn für einen Parameter mehrere Einträge möglich sind, so müssen die einzelnen Zuweisungen oder Ausdrücke in den Parameterlisten durch Kommas voneinander getrennt werden. Nach dem Komma kann ein Zeilenumbruch eingefügt werden, aber kein Leerzeichen!
Die Parametersyntax umfasst folgende Ausdrücke, nach Relevanz geordnet:
%
gibt an, das die folgende Zeichenkette als regulärer Ausdruck
interpretiert werden soll.
%list.*
bezeichnet alle Werte, die mit list
beginnen.
Nutzbar für alle Parameter.
css-class
=generic class
Ordnet einem GUI-Element mit der angegebenen CSS Klasse eine QF-Test Komponente der angegebenen generischen Klasse zu.
css-button=Button
ordnet dem GUI-Element mit der CSS Klasse css-button
eine QF-Test
Komponente mit der generischen Klasse Button
zu.
Nutzbar im Parameter genericClasses
attribute
=value
=generic class
Ordnet einem GUI-Element mit dem angegebenen Attributwert eine QF-Test Komponente der angegebenen generischen Klasse zu.
role=toggle=RadioButton
weist Elementen mit role
Attributen, die den Wert toggle
haben, QF-Test Komponenten
der Klasse RadioButton
zu.
Nutzbar im Parameter attributesToGenericClasses
.
TAG
=generic class
Ordnet einem GUI-Element mit dem angegebenen Tag eine QF-Test Komponente der angegebenen generischen Klasse zu. Tags müssen in Großbuchstaben angegeben werden.
LI=ListItem
ordnet einem GUI-Element mit dem Tag li
eine QF-Test Komponente mit der generischen Klasse ListItem
zu.
Nutzbar im Parameter tagsToGenericClasses
.
classname oder TAG
Kann an einen Eintrag der Parameterliste angehängt werden. Der Eintrag wird nur dann ausgewertet, wenn eines der übergeordneten Objekte des GUI-Elements den angegebenen generischen Klassenamen oder das angegebene Tag (in Großbuchstaben) hat.
Nutzbar in allen Parametern.
Beispiel für den Parameter tagsToGenericClasses
:
LI=TableCell@::ancestor=TableRow
ordnet einem GUI-Element mit dem Tag li
eine QF-Test Komponente der generischen
Klasse TableCell
zu, wenn ein übergeordnetes Element die Klasse TableRow
hat.
TAG
Die vorangehende Zuweisung wird nur ausgewertet, wenn das GUI-Element
das angegebene Tag hat.
Muss bei Bedarf vor @::
stehen.
Tags müssen in Großbuchstaben angegeben werden.
Nutzbar in allen Parametern.
Beispiel für den Parameter genericClasses
:
row=TableRow=SPAN
ordnet einem GUI-Element der CSS-Klasse row
eine QF-Test Komponente
mit der generischen Klasse TableRow
zu, wenn das Tag den Wert
SPAN
hat.
Beispiel für den Parameter genericClasses
:
row=TableRow=SPAN@::ancestor=Table
ordnet einem GUI-Element der CSS-Klasse row
eine QF-Test Komponente
mit der generischen Klasse TableRow
zu, wenn das Tag den Wert
SPAN
hat und wenn eines der übergeordneten Elemente die Klasse.
Table
hat.
Beispiel für den Parameter interestingByAttributes
:
myid=%.*=CONTAINER
nimmt GUI-Elemente mit dem Tag container
auf, aber nur, wenn
das Attribut den Wert myid
hat.
classname oder TAG
Kann an einen Eintrag der Parameterliste angehängt werden. Der Eintrag wird nur dann ausgewertet, wenn eines der übergeordneten Objekte des GUI-Elements den angegebenen generischen Klassenamen oder das angegebene Tag (in Großbuchstaben) hat.
Nutzbar in allen Parametern.
Beispiel für den Parameter genericClasses
:
css-data-row=TableRow@::parent=Table
ordnet dem GUI-Element mit der CSS Klasse
css-data-row
eine QF-Test Komponente der generischen Klasse
TableRow
zu, wenn das direkt übergeordnete GUI-Element die Klasse
Table
hat.
level
>=classname oder TAG
Kann an einen Eintrag der Parameterliste angehängt werden. Der Eintrag wird nur dann ausgewertet, wenn eines der übergeordneten Objekte des GUI-Elements den angegebenen generischen Klassenamen oder das angegebene Tag (in Großbuchstaben) hat.
Die Ebene bezieht sich auf die von QF-Test aufgenommene Komponentenstruktur
bzw. den generierten DomNode. Dies bedeutet, dass die Komponentenerkennung
fehlschlagen kann, wenn sich die Webseite ändert oder Sie Resolver-Einträge ändern.
Es könnte besser sein, statt dessen @::ancestor
zu verwenden.
Alternativ können Sie das entscheidende übergeordnete GUI-Element einer eigenen
Klasse (oder Klassentyp) zuweisen und diese dann in @::parent
oder
@::ancestor
einsetzen. Das Beispiel in
'CustomWebResolver' – Baum (Tree) verdeutlicht diese Technik.
Nutzbar in allen Parametern.
Beispiel für den Parameter genericClasses
:
css-button=Button:ComboBoxButton@::parent<3>=ComboBox
Nimmt einen Button mit dem Typ ComboBoxButton
auf,
wenn der übergeordnete Knoten in Ebene drei die Klasse ComboBox
hat.
level
>=classname oder TAG
Kann an einen Eintrag der Parameterliste angehängt werden. Der Eintrag wird nur dann ausgewertet, wenn eines der übergeordneten Objekte des GUI-Elements den angegebenen generischen Klassenamen oder das angegebene Tag (in Großbuchstaben) hat. (Ebenenzählung wie bei @::parent.)
Nutzbar in allen Parametern.
Beispiel für den Parameter genericClasses
:
cbx=CheckBox:ListItemCheckBox@::ancestor<3>=List
Nimmt eine CheckBox mit dem Typ ListItemCheckBox
auf,
wenn einer der Knoten in den drei übergeordneten Ebenen die Klasse List
hat.
attribute
=value
Nutzbar in den Parametern ignoreByAttributes
und
interestingByAttributes
.
Im Parameter ignoreByAttributes
bewirkt die Zuweisung, dass GUI-Elemente
mit dem angegebenen Attributwert in der Baumhierarchie nicht angelegt werden.
Im Parameter interestingByAttributes
bewirkt die Zuweisung, dass
im Komponentenbaum Knoten für Elemente angelegt werden, die den angegebenen Attributwert
aufweisen.
Beispiel für den Parameter ignoreByAttributes
:
type=container
bewirkt, dass im Komponentenbaum keine Knoten
für Elemente angelegt werden, bei denen das Attribut type
den Wert container
hat.
Beispiel für den Parameter interestingByAttributes
:
type=splitpane
bewirkt, dass im Komponentenbaum Knoten
für Elemente angelegt werden, bei denen das Attribut type
den Wert splitpane
hat.
Für Interessierte:
@::ancestor=class
nutzt intern die Objekt-Methode obj.getAncestorOfClass(class
).
@::ancestor<level
>=class
nutzt intern die
Objekt-Methode obj.getAncestorOfClass(class, level
)
@::parent= nutzt intern die Objekt-Methode obj.getParent()
@::parent<level
>= nutzt intern die Objekt-Methode
obj.getNthParent(level
)
Details zu den Methoden finden Sie in Pseudo DOM API für Web-Anwendungen.
Letzte Änderung: 10.9.2024 Copyright © 1999-2024 Quality First Software GmbH |