Eine Frage, die beim Testen von Webanwendungen mit QF-Test immer wieder aufkommt, ist: Wie scrolle ich? Wie löse ich ein Scroll-Event aus? Kann ich QF-Test sagen, dass es am Mausrad drehen soll? Kann ich Scrollen mit der Maus in QF-Test irgendwie simulieren? Ich will doch nur ein bisschen nach unten scrollen!
Unsere erste Antwort auf solche Fragen ist immer: Sie sollten das eigentlich nicht müssen. QF-Test kümmert sich automatisch ums Scrollen und bringt Elemente selbständig in den sichtbaren Bereich, sobald es mit ihnen interagieren muss. Deshalb zeichnet QF-Test keine Scroll-Ereignisse auf und bietet auch keinen „Scrollen“-Knoten an – in 99% der Fälle tut QF-Test automatisch das Richtige.
Aber vermutlich sind Sie hier, weil Sie zu den 1% gehören, bei denen dieser Mechanismus nicht ausreicht. In diesem Blog-Beitrag erkläre ich daher genau, wie Scrollen in einer Webanwendung mit QF-Test funktioniert – und wie Sie selbst die Kontrolle übernehmen können.
Manuelles Scrollen per Tasteneingabe
Wenn Sie einfach nur „ein bisschen“ scrollen möchten, sollten Sie zunächst versuchen, Tastaturereignisse aufzuzeichnen.
In den meisten Webanwendungen können Sie mit den Pfeiltasten scrollen. Leertaste und Umschalt+Leertaste scrollen um etwa eine Fensterhöhe, und die Tasten Pos1 und Ende sollten ganz nach oben bzw. unten scrollen. Damit können Sie sich vielleicht die komplizierteren Methoden weiter unten sparen.
Den Scroll-Algorithmus von QF-Test anpassen
Angenommen, QF-Test scrollt bereits für Sie, aber noch nicht so ganz wie gewünscht. Dann können Sie über verschiedene SUT-Optionen das Scrollverhalten konfigurieren.
Diese Optionen können Sie in einem SUT-Skriptknoten setzen oder mit dem @option
Doctag in QF-Test 9.
Options.OPT_WEB_SCROLL_VISIBLE
Diese Option steuert, wie Web-Knoten sichtbar gescrollt werden. Mögliche Werte sind:
Options.VAL_WEB_SCROLL_VISIBLE_DEFAULT
(nutzt den QF-Test Algorithmus),Options.VAL_WEB_SCROLL_VISIBLE_NEVER
(verhindert Scrollen komplett),Options.VAL_WEB_SCROLL_VISIBLE_TOP
Options.VAL_WEB_SCROLL_VISIBLE_BOTTOM
Options.VAL_WEB_SCROLL_VISIBLE_MINIMAL
- ein benutzerdefinierter JSON-String entsprechend dem
options
-Parameter derElement:scrollIntoView
JavaScript-API
Alle Werte außer „default“ und „never“ rufen node.scrollIntoView()
direkt im JavaScript-Kontext des Browsers auf. scrollIntoView
ist ein ziemlich mächtiger Teil der JavaScript-Element-API. Alle erweiterten Optionen dieser Methode finden Sie in den mdn web docs.
Sie können diese Option auch nur für ein einzelnes Element überschreiben, indem Sie das property qfs:scrollvisible
am Node-Objekt setzen:
def node = rc.getComponent("myElement") // durch die QF-Test ID der Komponente ersetzen
node.setProperty("qfs:scrollvisible", Options.VAL_WEB_SCROLL_VISIBLE_NEVER)
Options.OPT_WEB_MIN_DELAY_AFTER_AUTO_SCROLL
Mit dieser Option können Sie eine zusätzliche Verzögerung nach jeder automatischen Scroll-Aktion einführen, in ms
. Das ist nützlich, wenn Ihre Anwendung Animationen verwendet, die durch Scrollen ausgelöst werden, oder falls die Anwendung nach dem Scrollen etwas Zeit braucht, um Daten nachzuladen. Der Standardwert ist 150.
Options.OPT_PLAY_SCROLL_ITEM
Wenn auf False
gesetzt, scrollt QF-Test nicht automatisch zu Unterelementen von Listen, Tabellen oder Bäumen. Das kann helfen, wenn QF-Test beim Navigieren z.B. in einem Baum an unerwartete Stellen scrollt.
Options.OPT_PLAY_SCROLL_PADDING
Zusätzlicher Abstand beim automatischen Scrollen, in px
. Damit können Sie die berechneten Scrolldistanz vergrößern oder verkleinern, sodass mehr oder weniger von der Umgebung des Ziel-Elements sichtbar bleibt. Standardwert: 5.
Options.OPT_PLAY_WEB_AUTO_SCROLL
Wenn auf False
gesetzt, wird überhaupt kein automatisches Scrollen mehr durchgeführt. Verwenden Sie das, wenn Sie das Scrollen komplett selbst steuern möchten.
Komponenten sichtbar scrollen
Sie können den Scroll-Mechanismus von QF-Test manuell über ein SUT-Skript auslösen:
node = rc.getComponent("myElement") // durch die QF-Test ID der Komponente ersetzen
// Boolean scrollPointVisible(int targetX, int targetY, boolean propagate)
node.scrollPointVisible(0, 0, true)
Dieser Code wird versuchen, das Element so zu scrollen, dass es sichtbar wird. Falls das Element nicht vollständig sichtbar gemacht werden kann, wird zumindest der angegebene Zielpunkt sichtbar gemacht.
Falls Ihnen der QF-Test Algorithmus aus irgendwelchen Gründen nicht weiterhelfen sollte, können Sie über ein kleines SUT-Skript auch direkt eine JavaScript-Funktion zum Scrollen aufrufen:
node = rc.getComponent("myElement") // durch die QF-Test ID der Komponente ersetzen
node.evalJS("_qf_node.scrollIntoView()") // beliebiges JavaScript
Eine feste Distanz scrollen
Was aber, wenn Sie noch mehr Kontrolle brauchen oder kein konkretes Ziel-Element haben?
Sie können auch einen beliebigen Scroll-Container um eine feste Menge scrollen – wieder per JavaScript.
Dieses SUT-Skript z.B. scrollt das Fenster um 25 Pixel nach unten:
node = rc.getComponent("genericDocument")
node.evalJS("window.scrollBy(0,25)")
Der erste Parameter der Methode scrollBy
steuert die x-Achse – Sie können damit also auch seitwärts scrollen.
Das war’s! Jetzt wissen Sie alles, was Sie über Scrollen in Webanwendungen mit QF-Test wissen müssen, um auch in den kniffligsten Situationen klarzukommen.
Falls Sie trotzdem nicht weiterkommen, können Sie sich gerne an unser Support-Team wenden – wir helfen Ihnen gerne weiter!