45.1.3
Die Prozedur installCustomWebResolver

Die Zuordnung der funktionalen Komponenten zu HTML Objekten erfolgt im Normalfall über die Prozedur qfs.web.ajax.installCustomWebResolver aus der Standardbibliothek qfs.qft. Wenn Sie zur Erstellung der Verbindungssequenz den Schnellstart-Assistenten verwendet haben, was wir sehr empfehlen, finden Sie einen Aufruf dieser Prozedur im letzten Knoten der Startsequenz. Diesen Aufruf sollten Sie bei Bedarf für Ihre Anwendung konfigurieren.

WebResolver_setup_sequence
Abbildung 45.4:  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.

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.

Die generischen QF-Test Klassen sind in Kapitel 55 erläutert. Bitte beachten Sie, dass diese Klassen auch eine Typerweiterung enthalten können. Diese ist beim Mappen bestimmter GUI-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 installCustomWebResolver - Tabelle und TreeTable verwendet diese Technik.

45.1.3.1
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
Konfiguration der Komponentenerkennung für Webanwendungen.
Parameter
resolver Kurzame des Frameworks für das die Komponentenerkennung erweitert werden soll:

- autodetect (Standardwert), für die automatische Erkennung des verwendeten Frameworks.

- custom, wenn die Anwendung mit keinem der von QF-Test unterstützten Webframeworks erstellt wurde.

- Der Kurzname des Frameworks, z.B. zk oder vaadin.
Den Kurzname des jeweiligen Frameworks können Sie der Tabelle Tabelle 45.6 entnehmen.
Wenn Sie die Startsequenz über den Schnellstartassistenen erstellen lassen und dort ein Framework angeben, wird der Kurzname direkt hier eingetragen.
version Die Resolver-Version, z.B. 1 oder 1.0 oder 1.1.1.
Wenn eine Beschränkung angegeben wird, wird innerhalb dieser die letzte verfügbare Version verwendet. Also würde bei 1.0 die letzte verfügbare 1.0.x verwendet. Wird nichts angegeben, wird die letzte verfügbare Version verwendet.
Bei automatischer Erkennung den Parameter entweder aus dem Prozeduraufruf löschen oder leer lassen.
genericClasses (Optional) Eine Liste von Zuweisungen, die CSS Klassen auf generische QF-Test Klassen mappen.
Dieser Parameter nutzt nur das class Attribut des GUI-Elements. Im class Attribut können mehrere css-Klassen genannt werden. Diese sind durch Leerzeichen getrennt. Es kann für das Mapping eines GUI-Elements eine dieser css-Klassen angegeben werden.
Kann durch Einträge in attributesToGenericClasses überschrieben werden.
z.B. css-button=Button,ui-table=Table.
Beispiel für mehrere css-Klassen im GUI-Element:
class="button css-button active". Im obigen Beispiel wurde für das Mapping die css-Klasse css-button gewählt.
(verwendet node.getAttribute(class)).
attributesToGenericClasses (Optional) Eine Liste von Zuweisungen, die GUI-Elemente mit den angegebenen Attributwerten QF-Test Komponenten der jeweiligen generischen Klasse zuordnen,
Es wird der komplette Wert des angegebenen Attributs geprüft. Zuweisungen über diesen Parameter können Zuweisungen im Parameter genericClasses überschreiben.
z.B. id=table=Table,name=%.*combo.*=ComboBox.
Beispiel zum Überschreiben des Parameters genericClasses mit mehreren css-Klassen:
class=button css-button active=Button.
tagsToGenericClasses (Optional) Eine Liste von Zuweisungen, die GUI-Elemente mit dem angegebenen Tag QF-Test zu Komponenten der angegebenen generischen Klasse zuordnen.
z.B. LI=ListItem.
Tags müssen in Großbuchstaben angegeben werden.
ignoreTags (Optional) 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. Tags müssen in Großbuchstaben angegeben werden.
z.B. werden durch den Eintrag DIV,TBODY alle DIV und TBODY Elemente, die nicht anderweitig gemappt wurden, bei der Erstellung des Komponentenbaums ignoriert.
ignoreByAttributes (Optional) Eine Liste von Attributwerten, für deren Komponenten keine Knoten in der Komponentenhierarchie erstellt werden,
z.B. id=container,id=header.
autoIdPatterns (Optional) 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,
z.B. myAutoId,%auto.*.
customIdAttributes (Optional) Eine Liste von Attributnamen, deren Werte als Ids für die Komponente verwendet werden können,
z.B. bewirkt myid,qft-id, dass die Attribute myid und qft-id als Ids interpretiert werden.

interestingByAttributes (Optional) Eine Liste von Attributwerten, 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 (Optional) Eine Liste von Attributnamen, deren Werte für das 'Merkmal' Attribut der Komponente verwendet werden sollen.
documentJS (Optional) Javascript Code, der in die Webseite eingefügt (injected) werden soll. Kann verwendet werden um benutzerspezifische Javascript Funktionen einzufügen.
attributesToQftName (Optional) Eine Liste von Attributnamen, der 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 Support Team.
nonTrivialClasses (Optional) Eine Liste von CSS Klassen, für die die zugehörigen Elemente von QF-Test nicht ignoriert werden sollen. Triviale Klassen sind I, FONT, BOLD etc. Wenn die zugehörigen Komponenten (z.B. ein Bild innerhalb eine Buttons) ansprechbar sein sollen, muss die entsprechende triviale Klasse einer generischen QF-Test Klasse zugewiesen werden.
Mit Vorsicht verwenden! Falls Sie sich unsicher sind, wenden Sie sich bitte an das QF-Test Support Team.
allBrowsersSemihardClasses (Optional) 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 Support Team.
Alternativ können Sie die globale Option Options.OPT_WEB_SEMI_HARD_EVENTS auf "true", setzen, was sich auf alle Komponenten auswirkt.
chromeSemihardClasses (Optional) 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 Support Team.
Alternativ können Sie die globale Option Options.OPT_WEB_SEMI_HARD_EVENTS auf "true", setzen, was sich auf alle Komponenten auswirkt.
ieSemihardClasses (Optional) Eine Liste von Klassen, auf deren Komponenten semi-harte Events abgespielt werden sollen. Gilt für alle den Internet Explorer. z.B. spielt der Eintrag Button semi-harte Klicks auf Buttons im Internet Explorer ab.
Mit Vorsicht verwenden! Falls Sie sich unsicher sind, wenden Sie sich bitte an das QF-Test Support Team.
Alternativ können Sie die globale Option Options.OPT_WEB_SEMI_HARD_EVENTS auf "true", setzen, was sich auf alle Komponenten auswirkt.
mozSemihardClasses (Optional) 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 Support Team.
Alternativ können Sie die globale Option Options.OPT_WEB_SEMI_HARD_EVENTS auf "true", setzen, was sich auf alle Komponenten auswirkt.
edgeSemihardClasses (Optional) 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 Support Team.
Alternativ können Sie die globale Option Options.OPT_WEB_SEMI_HARD_EVENTS auf "true", setzen, was sich auf alle Komponenten auswirkt.
allBrowsersHardClasses (Optional) 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 Support Team.
Alternativ können Sie "Als harten Event wiedergeben" in den 'Mausevent' Knoten aktivieren.
chromeHardClasses (Optional) 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 Support Team.
Alternativ können Sie "Als harten Event wiedergeben" in den 'Mausevent' Knoten aktivieren.
ieHardClasses (Optional) Eine Liste von Klassen, auf deren Komponenten harte Events abgespielt werden sollen. Gilt für den Internet Explorer. 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 Support Team.
Alternativ können Sie "Als harten Event wiedergeben" in den 'Mausevent' Knoten aktivieren.
mozHardClasses (Optional) 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 Support Team.
Alternativ können Sie "Als harten Event wiedergeben" in den 'Mausevent' Knoten aktivieren.
edgeHardClasses (Optional) 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 Support Team.
Alternativ können Sie "Als harten Event wiedergeben" in den 'Mausevent' Knoten aktivieren.
 
 
45.1.3.2
installCustomWebResolver - Parametersyntax

Wenn 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 folgene 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 angebenen 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.

@::ancestor=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.

@::parent=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.

@::parent<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 installCustomWebResolver - Baum und TreeTable 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.

@::ancestor<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 Webanwendungen.