Pseudoattribute sind dafür gedacht, Resolver zu vereinfachen, die über JavaScript
Werte aus dem Browser ermitteln. Ein Pseudoattribut wird in QF-Test registriert und
erhält seinen Wert aus dem Ergebnis einer Javascript-Code-Ausführung.
Attribute von HTML-Elementen können in einem SUT Skript mit der
Methode getAttribute()
ausgelesen werden (Auf diese Weise wertet auch der
CustomWebResolver (siehe Abschnitt 50.1.2) die
genericClasses
-Kategorie aus). Pseudoattribute werden
über den gleichen Mechanismus ausgelesen, verhalten sich also aus der Sicht von QF-Test
wie normale Attribute. Sie sind jedoch nicht über den HTML-Quelltext definiert oder
mit node.setAttribute()
explizit zugewiesen, sondern werden über den
nachfolgend beschriebenen Mechanismus gesetzt.
Bei der Definition eines Pseudoattributes wird angegeben, ob es gecached werden
soll. In diesem Fall wird der Wert, den Javascript beim ersten Zugriff auf die Komponente
ermittelt hat, bis zum nächsten Komplett-Scan der Seite zwischengespeichert.
Das kann die Ausführung insgesamt beschleunigen. Bei veränderbaren Werten,
beispielsweise dem Check-Status einer Checkbox, sollte das Pseudoattribut aber nicht
gecached werden, da diese Werteänderung sonst nicht für QF-Test "sichtbar" ist.
Bei "ungecachten" Pseudoattributen findet keine längere Zwischenspeicherung des Wertes statt,
sondern dieser wird jedes Mal neu ausgelesen (und dann für die Verarbeitung kurzzeitig gespeichert),
wenn ein Event aufgenommen wird, wie zum Beispiel bei einem Mausklick die Einzelevents "moved",
"pressed", "released" und "clicked", oder wenn eine Komponente gesucht wird.
Im nachfolgenden Beispiel wird ein Pseudoattribut für alle HTML-Elemente
mit dem Tag "ICON" oder "IMAGE" definiert, das mittels JavaScript den Wert von
iconname
ermittelt (Technisch wird hier dazu die beispielhafte Methode
inspect
, die vom Framework für das HTML-Element definiert wurde, aufgerufen).
| import de.qfs.apps.qftest.client.web.dom.DomNodeAttributes
import de.qfs.apps.qftest.client.web.dom.FunctionalPseudoAttribute
def attr = new FunctionalPseudoAttribute("js_icon",
"try {return _qf_node.inspect('iconname')} catch(e){}", true)
DomNodeAttributes.registerPseudoAttributes("ICON", attr)
DomNodeAttributes.registerPseudoAttributes("IMAGE", attr) |
|
| | Beispiel 50.34: Groovy SUT Skript zum Registrieren eines Pseudoattributs | |
Dieses Pseudoattribut kann dann zum Beispiel in einem Merkmal-Resolver genutzt
werden, wobei im Gegensatz zu einem direkten Aufruf von node.callJS()
im Resolver
automatisch die internen Caching-Mechanismen von QF-Test genutzt werden:
| def getFeature(node, feature):
iconname = node.getAttribute("js_icon")
return iconname
resolvers.addResolver("iconFeature", getFeature, "ICON", "IMAGE") |
|
| | Beispiel 50.35: Nutzung eines Pseudoattributs im Resolver (Jython SUT-Skript) | |
Im folgenden Skript wird das Pseudoattribut wieder deregistriert.
| import de.qfs.apps.qftest.client.web.dom.DomNodeAttributes
DomNodeAttributes.unregisterPseudoAttributes("ICON", "js_icon")
DomNodeAttributes.unregisterPseudoAttributes("IMAGE", "js_icon") |
|
| | Beispiel 50.36: Deregistrierung eines Pseudoattributs (Groovy SUT-Skript) | |
Ein Pseudoattribut wird über einen der folgenden Konstruktoren von de.qfs.apps.qftest.client.web.dom.FunctionalPseudoAttribute
oder
de.qfs.apps.qftest.client.web.dom.PseudoAttribute
definiert:
|
| | PseudoAttribute FunctionalPseudoAttribute(String name, String javaScriptFunction, Boolean cached) | |
Parameter | name |
Der Name für das Pseudoattribut.
| javaScriptFunction |
Der JavaScript Code, der beim Zugriff auf das Pseudoattribut in einer Funktion ausgeführt werden soll.
_qf_node ist dabei das Objekt, worüber auf das HTML-Element
zugegriffen werden kann. Die Auswertung erfolgt analog zur DomNode.callJS -Methode.
| cached | true , wenn der Wert nach dem ersten Zugriff auf das Pseudoattribut
behalten werden soll, andernfalls false .
| Rückgabewert |
Ein Pseudoattribut, das anschließend registriert werden kann.
| | PseudoAttribute PseudoAttribute(String name, String javaScriptCode, Boolean cached) | |
Parameter | name |
Der Name für das Pseudoattribut.
| javaScriptCode |
Der JavaScript Code, der beim Zugriff auf das Pseudoattribut ausgeführt werden soll.
_qf_node ist dabei das Objekt, worüber auf das HTML-Element
zugegriffen werden kann. Die Auswertung erfolgt analog zur DomNode.evalJS -Methode.
| cached | true , wenn der Wert nach dem ersten Zugriff auf das Pseudoattribut
behalten werden soll, andernfalls false .
| Rückgabewert |
Ein Pseudoattribut, das anschließend registriert werden kann.
| |
|
|
Anschließend muss das Pseudoattribut
über die folgende Methode
aus de.qfs.apps.qftest.client.web.dom.DomNodeAttributes
registriert werden:
|
| | void registerPseudoAttributes(String tag, PseudoAttribute pseudoAttribute) | |
Parameter | tag |
Das Tag der HTML-Elemente, für die das Pseudoattribut registriert werden soll.
Wenn das Pseudoattribut für HTML-Elemente mit unterschiedlichen Tags registriert
werden soll, muss der Aufruf für die einzelnen Tags durchgeführt werden.
Wenn es für alle HTML-Elemente registriert werden soll, lautet das Tag
"<QF_ALL>" .
| pseudoAttribute |
Das zuvor definierte Pseudoattribut.
| |
|
|
|
|
| | void unregisterPseudoAttributes(String tag, String name) | |
Parameter | tag |
Der Tag-Name der HTML-Elemente, für die das Pseudoattribut deregistriert werden soll.
| name |
Der Name des Pseudoattributs.
| |
|
|
|