Wer schon mal versucht hat, eine moderne Webanwendung zu automatisieren, kennt das Problem: Das Selenium-Skript klickt auf einen Button – und nichts passiert. Oft liegt das daran, dass das Element außerhalb des sichtbaren Bereichs liegt oder die Seite beim Scrollen noch weitere Inhalte nachlädt. Willkommen in der Welt der dynamischen, endlos scrollenden Webseiten, bei denen automatisierte Tests nur dann wirklich funktionieren, wenn sie sich wie ein echter Nutzer verhalten. Nach vielen Jahren in der Webautomatisierung kann ich sagen: Effizientes Scrollen mit Selenium ist kein nettes Extra, sondern entscheidet darüber, ob deine Tests stabil laufen oder ständig fehlschlagen.
In diesem Beitrag zeige ich dir, warum gezieltes Scrollen in Selenium so wichtig ist, welche Methoden sich für verschiedene Herausforderungen – von Lazy-Loading-Listen bis zu fixierten Kopfzeilen – bewährt haben und wie Tools wie deinen Workflow richtig pushen. Ich teile praxisnahe Codebeispiele, browser-spezifische Tipps und Erfahrungen aus echten Projekten – damit du dich auf aussagekräftige Testergebnisse verlassen kannst, statt dich mit fehleranfälligen Tests herumzuärgern.
Grundlagen: Was bedeutet Scrollen mit Selenium?
Was heißt eigentlich „Scrollen mit Selenium“? Im Kern geht’s darum, den sichtbaren Bereich des Browsers gezielt zu verschieben – nach oben, unten, seitlich oder direkt zu einem bestimmten Element. Nur so wird der gewünschte Inhalt sichtbar und kann automatisiert angesprochen werden. Selenium WebDriver scrollt standardmäßig nicht automatisch. Versuchst du, ein Element außerhalb des Viewports zu klicken, bekommst du oft eine ElementNotInteractableException (). Deshalb ist gezieltes Scrollen unverzichtbar für stabile UI-Tests.
Die wichtigsten Scroll-Varianten in Selenium:
- Vertikales Scrollen: Seite nach oben oder unten bewegen, um mehr Inhalte sichtbar zu machen.
- Horizontales Scrollen: Praktisch bei breiten Tabellen oder Karussells.
- Zu einem Element scrollen: Ein bestimmtes Element in den sichtbaren Bereich holen, meist mit
scrollIntoView. - Scrollen um Pixel: Den Viewport um eine feste Pixelanzahl verschieben – ideal für schrittweises Scrollen.
- Zum Seitenanfang/-ende springen: Direkt ganz nach oben oder unten scrollen.
Warum ist das so wichtig? Moderne Webseiten bestehen oft aus dynamischen Elementen – etwa endlosen Feeds, „Mehr laden“-Buttons, fixierten Kopfzeilen oder Bildern, die erst beim Scrollen geladen werden. Ohne Scrollen sieht dein Test nur einen Bruchteil der Oberfläche – und übersieht Fehler oder schlägt aus den falschen Gründen fehl ().
Typische Stolperfallen:
- Ein gefundenes Element ist nicht automatisch sichtbar oder anklickbar.
- Methoden wie
.click()oder.sendKeys()scrollen nicht selbstständig zum Element. - Fixierte Kopfzeilen können Elemente verdecken, auch nach dem Scrollen.
- Endlos-Scrollseiten erfordern wiederholtes, schrittweises Scrollen, um alle Inhalte zu laden.
Ein kurzes Java-Beispiel, um ein Element sichtbar zu machen:
1((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
Damit wird das Ziel-Element ganz oben im Viewport angezeigt – und Interaktionsfehler gehören der Vergangenheit an.
Warum effizientes Scrollen für Selenium-Tests entscheidend ist
Fakt ist: Die meisten modernen Webanwendungen laden Inhalte erst beim Scrollen nach. Laut aktuellen Zahlen nutzen über – die tatsächliche Zahl dürfte noch viel höher liegen. Wer in Selenium nie scrollt, testet nur einen Bruchteil der Anwendung.
Typische Szenarien, in denen Scrollen nötig ist:
- Endlos- oder Lazy-Loading-Listen: Social Feeds, Produktübersichten, Dashboards.
- „Mehr laden“-Buttons: Shops, Newsportale, Branchenverzeichnisse.
- Versteckte Buttons oder Links: Elemente, die erst nach dem Scrollen erscheinen.
- Fixierte Kopfzeilen: Können Inhalte verdecken – exaktes Scrollen ist nötig.
- Große Tabellen oder Karussells: Oft ist nur ein Teil sichtbar, der Rest muss durch Scrollen geprüft werden.
| Testszenario | Warum Scrollen nötig ist |
|---|---|
| Endloser Content-Feed (z.B. Social Media) | Neue Beiträge laden erst beim Scrollen. Tests müssen mehrfach scrollen, um alles zu prüfen. |
| „Mehr laden“-Paginierung | Zusätzliche Einträge erscheinen erst nach Scroll/Klick im DOM. |
| Lazy-Loading-Bilder | Bilder werden erst beim Scrollen geladen – Tests müssen scrollen, um alle zu prüfen. |
| Fixierte Kopfzeile überlappt Inhalte | Elemente können verdeckt sein – Scrollen muss das berücksichtigen. |
| Große scrollbare Tabellen/Karussells | Nur ein Teil ist sichtbar; Tests müssen scrollen, um alle Zeilen/Elemente zu validieren. |
Vorteile:
- Bessere Testabdeckung: Alle UI-Elemente werden geprüft, nicht nur die beim Laden sichtbaren.
- Weniger manueller Aufwand: Keine aufgeteilten Tests oder manuelles Nachscrollen mehr nötig.
- Zuverlässigere Automatisierung: Weniger Fehlalarme durch „Element nicht gefunden“ oder „nicht interagierbar“.
Stell dir einen Onlineshop mit 100 Produkten vor, von denen jeweils nur 20 geladen werden. Ein Test ohne Scrollen prüft nur 20 % des Sortiments – 80 % bleiben ungetestet. Mit effizientem Scrollen entgeht dir kein Fehler mehr.

Alle Scroll-Methoden im Vergleich: So scrollst du mit Selenium
Selenium bietet keinen einfachen „scrollDown()“-Befehl, aber verschiedene Möglichkeiten, das Ziel zu erreichen. Hier ein Überblick:
| Methode | Browser-Support | Komplexität | Bestes Einsatzgebiet |
|---|---|---|---|
| Actions API (Wheel input) | Chrome, Edge (Selenium 4) | Mittel | Präzises, natives Scrollen zu Elementen/Offsets |
| JavaScriptExecutor | Alle Browser | Einfach | Zu Elementen, per Pixel oder ans Seitenende |
| Tastatur (Page Down etc.) | Alle Browser | Einfach | Scrollen wie ein Nutzer per Tastatur |
| Scrollen in Containern | Alle Browser | Mittel | Scrollen in Tabellen, Karussells, speziellen Bereichen |
Zu Elementen und per Pixel scrollen
Zu einem Element scrollen:
Ideal, wenn du genau weißt, was du sehen willst.
1js.executeScript("arguments[0].scrollIntoView();", webElement);
Oder mit Selenium 4 Actions API (Chrome/Edge):
1new Actions(driver).scrollToElement(element).perform();
Per Pixel scrollen:
Gut für schrittweises Scrollen oder Feintuning der Position.
1js.executeScript("window.scrollBy(0, 350)", "");
Positive Werte scrollen nach unten, negative nach oben.
Wann welche Methode?
- Für Präzision und Zuverlässigkeit: zu Element scrollen.
- Für schrittweises Nachladen, Parallax-Effekte oder nutzerähnliches Verhalten: per Pixel scrollen.
Zum Seitenanfang/-ende und Endlos-Scrollen
Zum Seitenende scrollen:
1js.executeScript("window.scrollTo(0, document.body.scrollHeight)");
Zum Seitenanfang scrollen:
1js.executeScript("window.scrollTo(0, 0)");
Endlos-Scrollen umsetzen:
Hier brauchst du eine Schleife: scrollen, auf neue Inhalte warten, wiederholen, bis nichts mehr nachgeladen wird.
1long lastHeight = (Long) js.executeScript("return document.body.scrollHeight");
2while (true) {
3 js.executeScript("window.scrollTo(0, document.body.scrollHeight);");
4 Thread.sleep(2000); // In echten Tests besser explizite Waits nutzen!
5 long newHeight = (Long) js.executeScript("return document.body.scrollHeight");
6 if (newHeight == lastHeight) break;
7 lastHeight = newHeight;
8}
So stellst du sicher, dass wirklich alle Inhalte geladen werden – wie bei einem echten Nutzer ().
Individuelles Scrollen mit execute_script in Selenium
Für alles, was über die Standardfälle hinausgeht, ist JavaScripts execute_script dein bester Freund. Damit kannst du:
- Schrittweise und flüssig scrollen, wie ein Nutzer.
- Nach jedem Scrollen auf neue Inhalte warten.
- In bestimmten Containern (z.B. Tabellen, Karussells) scrollen.
- Spezialfälle abdecken (z.B. fixierte Kopfzeilen, dynamische Elemente).
Beispiel: Sanftes, schrittweises Scrollen
1for i in range(10):
2 driver.execute_script("window.scrollBy(0, 500);")
3 time.sleep(0.5)
Beispiel: Nach dem Scrollen auf Inhalte warten
1js.executeScript("window.scrollTo(0, document.body.scrollHeight);");
2WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
3wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("new_element")));
Best Practices:
- Kombiniere Scrolls immer mit expliziten Waits auf neue Inhalte.
- Nutze
{block: "center"}beiscrollIntoViewfür bessere Sichtbarkeit, falls nötig. - Vermeide feste Sleeps – setze auf Waits, die an echte Inhaltsänderungen gekoppelt sind.
- Für Container:
element.scrollTop = ...oderelement.scrollBy(...)per JS verwenden.
Scrollen in Selenium für verschiedene Browser optimieren
Jetzt wird’s spannend: Nicht jeder Browser scrollt gleich.
- Chrome/Edge: Volle Unterstützung für Actions API und JavaScript.
- Firefox: Gute JS-Unterstützung, Actions API nur teilweise. Für flüssiges Scrollen ggf. Anpassungen nötig.
- Safari: Keine Actions API für Scrollen – hier nur JavaScript nutzen ().
- Headless-Modus: Immer Fenstergröße setzen, sonst kann das Scrollverhalten abweichen.
Tipps:
- Teste dein Scroll-Konzept frühzeitig in allen Ziel-Browsern.
- JavaScript ist der universelle Fallback fürs Scrollen.
- Bei fixierten Kopfzeilen ggf. ein paar Pixel mehr scrollen oder eigenes JS nutzen, um Überlappungen zu vermeiden.
- Im Headless-Modus mit
driver.manage().window().setSize(...)für konsistentes Verhalten sorgen.
Thunderbit: Selenium-Tests mit smarter Datenerfassung beschleunigen
Ein echter Geheimtipp: . Während Selenium den Browser steuert, brauchst du manchmal eine Lösung, um Daten effizient zu extrahieren – gerade bei Seiten mit viel Scrollen oder dynamischen Inhalten. Hier spielt Thunderbit seine Stärken aus.
So ergänzt Thunderbit Selenium:
- Alle Daten erfassen, auch bei Endlos-Scroll: Thunderbits KI scrollt, paginiert und extrahiert strukturierte Daten (z.B. Produktnamen, Preise, Bilder) mit wenigen Klicks.
- Referenzdaten für Tests generieren: Mit Thunderbit schnell alle erwarteten UI-Daten sammeln und dann mit Selenium die Oberfläche prüfen.
- Testentwicklung beschleunigen: Thunderbits „KI-Feldvorschläge“ helfen bei der Auswahl von Selektoren und Strukturen – das spart Zeit beim Schreiben von Selenium-Lokatoren.
Beispiel-Workflow:
- Mit Thunderbit alle Produkte einer dynamischen Shopseite extrahieren (inklusive Scrollen und Datenerfassung).
- Daten nach Google Sheets oder als CSV exportieren.
- Im Selenium-Test durch die Seite scrollen, sichtbare Produktinfos sammeln und mit dem Thunderbit-Datensatz abgleichen.
- Prüfen, ob alle Produkte korrekt geladen und keine Daten verloren gegangen sind.
So sparst du dir fehleranfälligen Scraping-Code und kannst dich auf die Validierung konzentrieren. Besonders praktisch: Thunderbits und geplante Extraktionen für große, dynamische Seiten.
Praxisbeispiele: Effizientes Scrollen in echten Selenium-Tests
Jetzt wird’s konkret. Hier ein paar typische Szenarien und Codebeispiele:
1. Durch eine große Tabelle scrollen
Angenommen, du hast ein Datenraster mit eigenem Scrollbalken:
1WebElement table = driver.findElement(By.id("data-table"));
2js.executeScript("arguments[0].scrollTop = arguments[0].scrollHeight", table);
Damit scrollst du ans Tabellenende. Für die Validierung jeder Zeile kannst du schrittweise scrollen.
2. Endlos-Feeds vollständig laden
1prev_count = 0
2while True:
3 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
4 time.sleep(2)
5 posts = driver.find_elements(By.CSS_SELECTOR, ".post")
6 if len(posts) == prev_count:
7 break
8 prev_count = len(posts)
Lädt alle Beiträge und stoppt, wenn keine neuen mehr erscheinen.
3. Lazy-Loading-Bilder prüfen
1List<WebElement> images = driver.findElements(By.tagName("img"));
2for (WebElement img : images) {
3 if ("lazy".equals(img.getAttribute("loading"))) {
4 js.executeScript("arguments[0].scrollIntoView(true);", img);
5 WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5));
6 wait.until(d -> (Boolean) ((JavascriptExecutor)d).executeScript("return arguments[0].complete && arguments[0].naturalWidth > 0;", img));
7 Assert.assertTrue((Integer) js.executeScript("return arguments[0].naturalWidth;", img) > 0);
8 }
9}
Scrollt jedes Lazy-Image ins Sichtfeld und prüft, ob es geladen wurde.
4. Horizontal in einem Karussell scrollen
1WebElement carousel = driver.findElement(By.className("carousel"));
2js.executeScript("arguments[0].scrollBy(300, 0);", carousel);
Scrollt das Karussell um 300px nach rechts.
5. Ladefehler erkennen
Nach jedem Scrollen mit expliziten Waits prüfen, ob neue Inhalte oder Ladesymbole erscheinen. Bei Timeout Zustand protokollieren und Fehler melden.
Schritt-für-Schritt: Effizientes Scrollen mit Selenium umsetzen
Deine praktische Checkliste:
- Erkennen, wann Scrollen nötig ist: Sind Inhalte versteckt, lazy-loaded oder paginiert?
- Elemente im DOM prüfen: Mit expliziten Waits sicherstellen, dass Elemente vorhanden sind.
- Passende Scroll-Methode wählen:
- Zu Elementen scrollen für Präzision.
- Per Pixel scrollen für schrittweises Nachladen.
- Schleifen für Endlos-Scroll.
- Scrollen umsetzen: JavaScript oder Actions API je nach Bedarf nutzen.
- Nach jedem Scrollen synchronisieren: Auf neue Inhalte warten – keine festen Sleeps verwenden.
- Inhalte validieren: Nach dem Scrollen prüfen, ob Elemente sichtbar, geladen und interagierbar sind.
- Für alle Browser optimieren: In allen Ziel-Browsern testen; JS als Fallback nutzen.
- Thunderbit für Datenerfassung integrieren: Große Datensätze vorab mit Thunderbit extrahieren oder validieren.
- Unnötiges Scrollen vermeiden: Nur so viel scrollen wie nötig.
- Logik dokumentieren: Kommentiere, warum du welche Scroll-Methode gewählt hast.
| Schritt | Wichtige Aktion |
|---|---|
| Bedarf erkennen | Ist Scrollen in diesem Szenario nötig? |
| Element-Präsenz | Auf Elemente im DOM warten |
| Methode wählen | Element, Pixel, Schleife oder Container |
| Umsetzen | JS/Actions/Keys je nach Bedarf einsetzen |
| Synchronisieren | Nach jedem Scrollen auf Inhalte warten |
| Validieren | Sichtbarkeit und Korrektheit prüfen |
| Browser optimieren | In Chrome, Firefox, Edge, Safari testen |
| Thunderbit integrieren | Für Datenerfassung/Validierung nutzen |
| Minimieren | Überflüssiges Scrollen vermeiden |
| Dokumentieren | Vorgehen kommentieren und begründen |
Fazit & wichtigste Erkenntnisse
Effizientes Scrollen ist das Rückgrat moderner, robuster Selenium-Tests. Mit dynamischen Inhalten und endlosem Scrollen überall müssen deine Tests wie echte Nutzer scrollen, um die UI wirklich zu prüfen. Das zählt:
- Gezielt scrollen: Erkenne, wann und wo Scrollen nötig ist – verlasse dich nicht darauf, dass Elemente sichtbar sind.
- Die richtigen Tools nutzen: Für Präzision zu Elementen scrollen, für Flexibilität JavaScript, für natives Verhalten (wo möglich) die Actions API.
- Synchronisieren und prüfen: Nach jedem Scrollen auf Inhalte warten und Sichtbarkeit/Korrektheit validieren.
- Für alle Browser optimieren: Scroll-Logik überall testen, JavaScript als universellen Fallback nutzen.
- Thunderbit einsetzen: Kombiniere Selenium mit , um Datenerfassung und Validierung zu beschleunigen – besonders bei scrollintensiven oder dynamischen Seiten.
Bereit, deine Selenium-Tests aufs nächste Level zu bringen? Probiere die für schnellere, intelligentere Testentwicklung. Noch mehr Tipps und Tutorials findest du im .
Viel Erfolg beim Scrollen – und auf dass deine Tests immer finden, was sie suchen!
FAQs
1. Warum kann Selenium manchmal nicht mit Elementen interagieren, die im DOM vorhanden sind?
Weil Selenium Elemente nicht automatisch ins Sichtfeld scrollt. Liegt ein Element außerhalb des Viewports, kann eine ElementNotInteractableException auftreten. Mit gezielten Scroll-Aktionen stellst du sicher, dass Elemente sichtbar sind, bevor du sie ansprichst.
2. Wie gehe ich am besten mit Endlos-Scroll-Seiten in Selenium um?
Mit einer Schleife: Zum Seitenende scrollen, auf neue Inhalte warten und wiederholen, bis nichts mehr nachgeladen wird. Immer explizite Waits auf Inhaltsänderungen nutzen, keine festen Sleeps.
3. Wie mache ich mein Scroll-Skript browserübergreifend robust?
JavaScripts execute_script ist die universellste Methode. Die Actions API funktioniert gut in Chrome/Edge, wird aber nicht überall unterstützt. Teste deine Logik in allen Ziel-Browsern.
4. Kann ich auch in Containern oder Tabellen scrollen, nicht nur auf der Hauptseite?
Ja! Mit JavaScript kannst du z.B. scrollTop oder scrollBy auf das Containerelement anwenden. Beispiel: js.executeScript("arguments[0].scrollTop = arguments[0].scrollHeight", tableElement);
5. Wie unterstützt Thunderbit die Selenium-Testautomatisierung?
Thunderbits KI-gestütztes Scraping extrahiert alle Daten auch von dynamischen oder endlos scrollenden Seiten und liefert Referenzdatensätze für deine Selenium-Tests. So kannst du UI-Inhalte leichter validieren und entwickelst Tests schneller – besonders bei komplexen, datenreichen Seiten.
Mehr zu Selenium, Web Scraping und Automatisierungs-Strategien findest du im .