Web51.4
Web – Pseudoattribute
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 51.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)
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")
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")
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:
|
|
||||||||||||||||||||||||||||||||||
Anschließend muss das Pseudoattribut
über die folgende Methode
aus de.qfs.apps.qftest.client.web.dom.DomNodeAttributes
registriert werden:
|
|
||||||||||||||
|
|
||||||||||||||