Handbuch
![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
Version 7.0.5 |
'CustomWebResolver installieren'
KnotenDie Zuordnung der funktionalen HTML-Elemente zu Generische Klassen erfolgt im Normalfall über den 'CustomWebResolver installieren' Knoten.
7.0+
Vor QF-Test Version 7 erfolgte diese Zuordnung über die
Prozedur installCustomWebResolver
aus der Standardbibliothek qfs.qft
. Dieser Prozeduraufruf
sollte nun in einen 'CustomWebResolver installieren' Knoten konvertiert werden.
Vor der Konvertierung des Prozeduraufrufs wird eine automatische Prüfung der
enthaltenen Parameter durchgeführt, um mögliche fehlerhafte Angaben aufzudecken
und den Wechsel auf den 'CustomWebResolver installieren' Knoten zu vereinfachen.
Falls Ihr Prozeduraufruf Variablen enthält, müssen Sie bei der Konvertierung ein
Testlaufprotokoll angeben, in dem die gewünschten Variablenwerte ersichtlich sind.
Falls Ihr Prozeduraufruf ungültige Einträge als Kommentar verwendet, müssen Sie
diese möglicherweise vor der Konvertierung entfernen oder nach der Konvertierung
an die gewünschte Stelle verschieben.
Wenn Sie zur Erstellung der Verbindungssequenz den Schnellstart-Assistenten, siehe Kapitel 3, verwendet haben, was wir sehr empfehlen, finden Sie den 'CustomWebResolver installieren' Knoten im letzten Knoten der Startsequenz. Diesen Knoten sollten Sie bei Bedarf für Ihre Anwendung konfigurieren.
![]() | |||
Abbildung 49.2: Aufruf des CustomWebResolvers im 'Vorbereitung' Knoten des Schnellstart-Assistenten |
Allgemeine Informationen zur Web-Komponentenerkennung finden Sie in Erkennung von Web-Komponenten und Toolkits sowie in Generelle Konfigurationsmöglichkeiten.
Nachfolgend wird zunächst die Syntax des 'CustomWebResolver installieren' Knotens und anschließend die Konfigurationskategorien erläutert.
Hinweis Bitte beachten Sie, dass Änderungen im 'CustomWebResolver installieren' Knoten die Erkennungsmerkmale für ein GUI-Element verändern können. Infolgedessen können sie von den Wiedererkennungsmerkmalen bereits aufgenommener 'Komponente' Knoten abweichen. Änderungen sollten daher in bereits vorhandenen 'Komponente' Knoten, wie in 'Komponenten' aktualisieren beschrieben, nachgezogen werden. Im Idealfall sollte die Konfiguration des 'CustomWebResolver installieren' Knotens vor der Erstellung der Tests erfolgen und Knoten, die während der Konfigurationsphase erstellt wurden, wieder gelöscht werden.
Die Konfiguration des 'CustomWebResolver installieren' Knotens findet in einem Dokument unter Verwendung der YAML-Syntax statt. Dabei sind nur Grundkenntnisse über die Funktionsweise von YAML notwendig, welche nachfolgend erläutert werden.
Auf oberster Ebene existieren die Kategorien (siehe folgende Abschnitte). Diese stehen in einer eigenen Zeile und werden mit einem Doppelpunkt abgeschlossen (Dictionary-Schlüssel). Auf der zweiten Ebene gibt es Einträge, die jeweils in einer neuen Zeile mit einem Bindestrich beginnen (Listen-Elemente). Weitere Ebenen sind durch Einrückung gekennzeichnet.
Um die Arbeit mit der YAML-Konfiguration zu erleichtern, können über die Werkzeugleiste über dem Editor verschiedene Vorlagen eingefügt werden.
![]() | |||
Abbildung 49.3: 'CustomWebResolver' Konfigurationsvorlagen |
Das Auswahlmenü, das über den Editier-Button
neben der Zeilennummerierung geöffnet wird, ist kontextsensitiv.
Es bietet für die jeweilige Zeile alle passenden Aktionen an.
Wenn Sie über das Auswahlmenü arbeiten, haben Sie immer die
volle Übersicht über die möglichen Aktionen und bekommen
automatisch die korrekte Syntax vorgelegt.
Wenn Sie den Schnellstart Ihrer Anwendung zur Erstellung der Verbindungssequenz verwendet und dort die Standardeinstellung bei der Framework-Auswahl belassen haben, erhalten Sie eine Konfiguration mit zwei Kategorien und zwei Einträgen auf der zweiten Ebene plus einige erläuternde Kommentare:
![]() | |||
Abbildung 49.4: 'CustomWebResolver' mit Vorlage für genericClasses |
In dieser Konfiguration wurde die Zeile nach der Kategorie genericClasses
angeklickt und anschließend über den Editier-Button
links neben der Zeilennummerierung Vorlagen für eine
generische Klasse eingefügt. (Die Kommentare wurden entfernt.)
![]() | |||
Abbildung 49.5: 'CustomWebResolver' mit zwei generischen Klassen |
Anschließend wurden die generische Klasse List
eingetragen
sowie die CSS-Klasse datalist
. HTML-Elementen mit dieser
CSS-Klasse wird bei der Komponentenerkennung nun diese
generische Klasse zugewiesen.
Der Vorgang wurde für die generische Klasse Item:ListItem
wiederholt. Diese wird jedem GUI-Element mit dem Tag LI
zugewiesen. Im Normalfall sollen jedoch nur HTML-Elemente mit diesem Tag,
die sich in der List
-Komponente befinden, berücksichtigt werden.
Daher wird im nächsten Schritt über den Editier-Button der
Eintrag "Ancestor hinzufügen" ausgewählt. Sie sehen, dass sich die
Syntax für den Eintrag ändert: sobald mehr als ein Merkmal
für die Zuweisung benötigt wird, wird die erste Zuweisung
mit einem passenden Präfix in die nächste Ebene verschoben und
das weitere Merkmal auf dieser Ebene hinzugefügt.
![]() | |||
Abbildung 49.6: 'CustomWebResolver' mit komplexerer Zuweisung |
base
Enthält den Kurznamen des Basis-Resolvers, der als Grundlage der Konfiguration verwendet werden soll:
autodetect
: automatische Erkennung des
verwendeten Frameworks.
Fällt auf custom
zurück, falls kein unterstütztes
Framework erkannt wurde.
custom
: die Anwendung wurde mit keinem der von QF-Test unterstützten
Frameworks erstellt. In diesem Fall kann base
auch komplett weggelassen werden.
Der Kurzname des Frameworks, zum Beispiel vaadin
:
Es werden die mit QF-Test in qfs-resolvers.qft
ausgelieferten Zuweisungen für das entsprechende
Framework verwendet. In Ihrer Konfiguration können Sie diese mit eigenen Zuweisungen
ergänzen.
Den Kurznamen des jeweiligen Frameworks können Sie der Tabelle Tabelle 49.7 entnehmen. Wenn Sie die Startsequenz über den Schnellstartassistenen erstellen lassen und dort ein Framework angeben, wird der Kurzname direkt hier eingetragen.
Als Kurzname kann hier auch der volle Name einer eigenen Prozedur angegeben werden, welcher
einen eigenen Basis-Resolver für die getestete Anwendung enthält. Es kann auch eine Liste
von Kurznamen als base
angegeben werden, dann werden diese der Reihe nach
aufgerufen.
genericClasses
In dieser Kategorie werden die Erkennungsmerkmale festgelegt, aufgrund derer einem GUI-Element eine bestimmte generische Klasse zugewiesen werden soll. Die jeweiligen Eigenschaften der generischen Klassen sind in Kapitel 59 erläutert.
Generische Klassen können eine Typerweiterung erhalten. Diese ist beim
Mappen bestimmter HTML-Elemente wie z.B. Item
relevant:
Item:ListItem
bezeichnet Listenelemente, Button:ComboBoxButton
einen Button innerhalb einer Combobox.
Typerweiterungen sind auch deshalb interessant, weil sie beim Mapping
frei vergeben werden können.
Das Beispiel in 'CustomWebResolver' – Tabelle verwendet diese Technik.
Für die Komponentenerkennung stehen grundsätzlich der Tag-Name
und die Attribute des GUI-Elements zur Verfügung. Das Attribut
class
hat eine Sonderrolle. Es enthält die CSS-Klassen,
die in der HTML-Prgrammierung die Darstellung des GUI-Elements
beeinflussen und somit häufig charakteristisch für eine bestimmte
HTML-Elementenklasse sind.
'CustomWebResolver installieren' bietet die Möglichkeit, jeden dieser drei Fälle als Zuweisung zu verwenden:
Die CSS-Klasse bezieht sich auf einen Eintrag im Attribut
class
des GUI-Elements. Bitte
beachten Sie, dass zwar mehrere CSS-Klassen durch Leerzeichen
getrennt im Attribut stehen können, jedoch immer nur eine
einzelne Klasse angesprochen wird.
Einfache Zuweisung: die CSS-Klasse wird in der gleichen Zeile hinter die generische Klasse geschrieben.
| ||||
Beispiel 49.1: Einfache Zuweisung CSS-Klasse zu generischer Klasse |
Im Beispiel erhalten nur HTML-Elemente mit der CSS-Klasse btn
die generische Klasse Button
.
Zuweisung bei mehreren Kriterien: die CSS-Klasse wird eingerückt in einer
Zeile unter der generischen Klasse mit dem Präfix css:
eingetragen.
| ||||
Beispiel 49.2: Zuweisung CSS-Klasse und Tag-Name zu generischer Klasse |
Im Beispiel erhalten nur HTML-Elemente mit der CSS-Klasse btn
und dem Tag DIV
die generische Klasse Button
.
Einfache Zuweisung: der Tag-Name wird in spitzen Klammern in der gleichen Zeile hinter die generische Klasse geschrieben.
| ||||
Beispiel 49.3: Einfache Zuweisung Tag-Name zu generischer Klasse |
Im Beispiel erhalten nur HTML-Elemente mit dem Tag TD
die generische Klasse TableCell
.
Zuweisung mit mehreren Kriterien: der Tag-Name wird eingerückt in einer
Zeile unter der generischen Klasse mit dem Präfix tag:
eingetragen.
| ||||
Beispiel 49.4:
Zuweisung Tag-Name mit ancestor zu generischer Klasse
|
Im Beispiel erhalten nur HTML-Elemente mit dem Tag TD
die generische Klasse Button
, wenn sie in einem
GUI-Element der Klasse TableRow
liegen.
Einfache Zuweisung: der Attributname, ein Gleichheitszeichen und der Attributwert werden in der gleichen Zeile hinter die generische Klasse geschrieben.
| ||||
Beispiel 49.5: Einfache Zuweisung Attributwert zu generischer Klasse |
Im Beispiel erhalten nur HTML-Elemente mit dem Attribut role
und dem Wert datarow
die generische Klasse TableRow
.
Zuweisung mit mehreren Kriterien:
Eingerückt unter der generischen Klasse werden eine Zeile für den
Attributname mit dem Präfix attribute:
und
eine Zeile für den Attributwert mit dem Präfix attributeValue:
eingetragen.
| ||||
Beispiel 49.6: Zuweisung Attributwert zu generischer Klasse |
Im Beispiel erhalten nur HTML-Elemente mit dem Attribut role
und dem Wert datarow
die generische Klasse
TableRow
.
Hinweis
Auch das Attribut class
kann hier genutzt werden.
Dann muss jedoch der gesamte Wert des Attributs passen, damit
die Zuweisung erfolgt. Wenn zum Beispiel zwei CSS-Klassen
vorhanden sein müssen und die anderen ignoriert werden sollen,
bietet sich ein regulärer Ausdruck an. Dies ist auch ein Beispiel
für eine weitere Definitionsebene.
| ||||
Beispiel 49.7: Zuweisung Attributwert zu generischer Klasse |
Um eine Zuweisung zusätzlich abhängig von dem Vorhandensein
eines bestimmten übergeordneten Elements zu machen
wird ancestor:
genutzt.
Einfache Zuweisung: die Klasse des Containers wird in der gleichen Zeile hinter das
Präfix ancestor:
geschrieben.
| ||||
Beispiel 49.8: Einfache Ancestor-Zuweisung |
Im Beispiel erhalten nur HTML-Elemente mit dem HTML-Tag TR
die generische Klasse TableRow
, die irgendwo innerhalb eines
Elements mit der Generischen Klasse "Table" liegen.
Komplexe Zuweisung:
Eingerückt unter dem Präfix ancestor:
folgen eins oder mehrere der der Präfixe
type:
, level:
und className:
.
Verfügbare Werte für type:
sind
ancestor
(beliebige Verschachtelung),
parent
(direkt innerhalb des übergeordneten Elements) und
interestingparent
(direkt innerhalb des QF-Test-Elements
von node.getInterestingParent()
).
| ||||
Beispiel 49.9: Komplexe Ancestor-Zuweisung |
Im Beispiel erhalten nur HTML-Elemente mit dem HTML-Tag TR
die generische Klasse TableRow
, die zwei Ebenen
tief innerhalb eines Elements mit der Generischen Klasse "Table" liegen.
Die Attribute css:
und attributeName:
können zwar mit tag:
kombiniert werden, jedoch nicht miteinander.
Wenn HTML-Elemente mit unterschiedlichen Erkennungsmerkmalen die gleiche generische Klasse erhalten sollen, werden für diese Klasse zwei Einträge vorgenommen:
| ||||
Beispiel 49.10: Gleiche generische Klasse für unterschiedliche HTML-Elemente |
ancestor:
ist auch in vielen anderen Konfigurationsparametern verfügbar. Prüfen Sie dafür
das Editier-Menü auf den Eintrag "Ancestor
hinzufügen".
ignoreTags
Eine Liste von Klassennamen oder Tags, für deren Komponenten keine Knoten in der
Komponentenhierarchie erstellt werden, solange diese nicht durch andere
Anweisungen gemappt werden.
Um Tags von Klassennamen zu unterscheiden,
müssen Tags in Großbuchstaben oder zwischen spitzen Klammern angegeben werden.
z.B. werden durch den folgenden Eintrag alle DIV
und
TBODY
Elemente, die nicht anderweitig gemappt wurden
und mit denen nicht direkt interagiert wird,
bei der Erstellung des Komponentenbaums ignoriert:
| ||||
Beispiel 49.11: ignoreTags |
ignoreByAttributes
Eine Liste von Attributwerten, für deren Komponenten keine Knoten in der
Komponentenhierarchie erstellt werden,
z.B. - id: container
.
autoIdPatterns
Eine Liste von Mustern, aus denen abgeleitet werden kann, ob Ids automatisch
über das Framework generiert wurden. Falls das
id
Attribut dem Muster entspricht, wird der Wert nicht
für das 'Name' Attribut der Komponente verwendet:
| ||||
Beispiel 49.12: autoIdPatterns |
customIdAttributes
Eine Liste von Attributnamen, deren Werte als Ids für die Komponente
verwendet werden können,
z.B. bewirkt - myid
, dass das Attribut
myid
als Id interpretiert wird.
interestingByAttributes
Eine Liste von Attribut-Wert-Paaren, die angeben, ob eine Komponente für die
Wiedererkennung interessant ist und somit ein Knoten dafür in der
Komponentenhierarchie erstellt werden soll,
z.B. id=container,id=header
.
attributesToQftFeature
Eine Liste von Attributnamen, deren Werte für das 'Merkmal' Attribut der Komponente verwendet werden sollen.
documentJS
Javascript-Code, der in die Webseite eingefügt (injiziert) werden soll. Kann verwendet werden um benutzerspezifische JavaScript-Funktionen einzufügen.
attributesToQftName
Eine Liste von Attributnamen, deren Werte für das 'Name'
Attribut der Komponente verwendet werden sollen.
Mit Vorsicht verwenden! Falls Sie sich unsicher sind, wenden
Sie sich bitte an das QF-Test Supportteam.
nonTrivialClasses
Eine Liste von CSS-Klassen, für die die zugehörigen Elemente von
QF-Test nicht ignoriert werden sollen. Triviale elemente sind normalerweise
I, FONT, BOLD etc., es sei denn sie haben eine der angegebenen CSS-Klassen.
Mit Vorsicht verwenden! Falls Sie sich unsicher sind, wenden
Sie sich bitte an das QF-Test Supportteam.
allBrowsersSemihardClasses
Eine Liste von Klassen, auf deren Komponenten semi-harte Events
abgespielt werden sollen. Gilt für alle Browser.
z.B. spielt der Eintrag Button
semi-harte Klicks auf Buttons ab.
Mit Vorsicht verwenden! Falls Sie sich unsicher sind, wenden
Sie sich bitte an das QF-Test Supportteam.
Alternativ können Sie die globale Option
Options.OPT_WEB_SEMI_HARD_EVENTS
auf "true",
setzen, was sich auf alle Komponenten auswirkt.
chromeSemihardClasses
Eine Liste von Klassen, auf deren Komponenten semi-harte Events
abgespielt werden sollen. Gilt für Chrome.
z.B. spielt der Eintrag Button
semi-harte Klicks auf Buttons
im Chrome Browser ab.
Mit Vorsicht verwenden! Falls Sie sich unsicher sind, wenden
Sie sich bitte an das QF-Test Supportteam.
Alternativ können Sie die globale Option
Options.OPT_WEB_SEMI_HARD_EVENTS
auf "true",
setzen, was sich auf alle Komponenten auswirkt.
mozSemihardClasses
Eine Liste von Klassen, auf deren Komponenten semi-harte Events
abgespielt werden sollen. Gilt für Firefox.
z.B. spielt der Eintrag Button
semi-harte Klicks auf Buttons
im Firefox Browser ab.
Mit Vorsicht verwenden! Falls Sie sich unsicher sind, wenden
Sie sich bitte an das QF-Test Supportteam.
Alternativ können Sie die globale Option
Options.OPT_WEB_SEMI_HARD_EVENTS
auf "true",
setzen, was sich auf alle Komponenten auswirkt.
edgeSemihardClasses
Eine Liste von Klassen, auf deren Komponenten semi-harte Events
abgespielt werden sollen. Gilt für Edge.
z.B. spielt der Eintrag Button
semi-harte Klicks auf Buttons
in Edge ab.
Mit Vorsicht verwenden! Falls Sie sich unsicher sind, wenden
Sie sich bitte an das QF-Test Supportteam.
Alternativ können Sie die globale Option
Options.OPT_WEB_SEMI_HARD_EVENTS
auf "true",
setzen, was sich auf alle Komponenten auswirkt.
allBrowsersHardClasses
Eine Liste von Klassen, auf deren Komponenten harte Events
abgespielt werden sollen. Gilt für alle Browser.
z.B. spielt der Eintrag Button
harte Klicks auf Buttons ab.
Mit Vorsicht verwenden! Falls Sie sich unsicher sind, wenden
Sie sich bitte an das QF-Test Supportteam.
Alternativ können Sie "Als harten Event wiedergeben" in den 'Mausevent'
Knoten aktivieren.
chromeHardClasses
Eine Liste von Klassen, auf deren Komponenten harte Events
abgespielt werden sollen. Gilt für Chrome.
z.B. spielt der Eintrag Button
harte Klicks auf Buttons ab.
Mit Vorsicht verwenden! Falls Sie sich unsicher sind, wenden
Sie sich bitte an das QF-Test Supportteam.
Alternativ können Sie "Als harten Event wiedergeben" in den 'Mausevent'
Knoten aktivieren.
mozHardClasses
Eine Liste von Klassen, auf deren Komponenten harte Events
abgespielt werden sollen. Gilt für Firefox.
z.B. spielt der Eintrag Button
harte Klicks auf Buttons ab.
Mit Vorsicht verwenden! Falls Sie sich unsicher sind, wenden
Sie sich bitte an das QF-Test Supportteam.
Alternativ können Sie "Als harten Event wiedergeben" in den 'Mausevent'
Knoten aktivieren.
edgeHardClasses
Eine Liste von Klassen, auf deren Komponenten harte Events
abgespielt werden sollen. Gilt für Edge.
z.B. spielt der Eintrag Button
harte Klicks auf Buttons ab.
Mit Vorsicht verwenden! Falls Sie sich unsicher sind, wenden
Sie sich bitte an das QF-Test Supportteam.
Alternativ können Sie "Als harten Event wiedergeben" in den 'Mausevent'
Knoten aktivieren.
![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | Letzte Änderung: 19.9.2023 Copyright © 1999-2023 Quality First Software GmbH |