Ein Klick auf den Button – und nichts geschieht. Diese Situation kennt jeder, der eine Web-App schon einmal mit Selenium automatisiert hat. Der Grund ist meist banal: Das Ziel-Element lag außerhalb des Sichtfensters, oder die Seite hätte erst beim Weiterscrollen zusätzliche Produkte nachgeladen – typisch für dynamische Seiten mit Infinite Scroll. Und genau hier entscheidet sich viel: Ob in Selenium effizient gescrollt wird, trennt eine wackelige Test-Suite von einer produktionsreifen.
Dieser Leitfaden klärt, weshalb Scrollen in Selenium eine Schlüsselrolle spielt, welche Verfahren sich vom Lazy-Loaded-Listenfeld bis zum fixierten Header bewährt haben und wo Werkzeuge wie Thunderbit den Ablauf verkürzen – mit lauffähigem Code, Hinweisen zu einzelnen Browsern und Erfahrungen aus der Praxis.
Die Grundlagen des Scrollens in Selenium verstehen
Zunächst die Definition: Scrollen in Selenium heißt, den Viewport per Code zu verschieben – aufwärts, abwärts, seitwärts oder gezielt zu einem Element –, damit der relevante Inhalt im Sichtfenster landet. Von allein tut der WebDriver das nicht. Zielt ein Klick auf ein Element jenseits des Bildschirmrands, folgt gern die berüchtigte ElementNotInteractableException (GeeksforGeeks). Verlässliche UI-Tests kommen um bewusst gesteuertes Scrollen daher nicht herum. Alle Beispiele hier bauen auf Selenium 4.x – die Wheel- bzw. Scroll-Eingabe kam mit 4.2 und bleibt bis zur aktuellen 4.43 der empfohlene Weg (Selenium downloads). Wer noch auf Selenium 3 sitzt, sei gewarnt: Dort kompilieren die Actions-API-Beispiele nicht, es bleiben nur die unten gezeigten JavascriptExecutor-Muster.
In der täglichen Arbeit treten vor allem diese Spielarten des Scrollens auf:
- Vertikal: Auf- und Abwärtsbewegung der Seite, damit weiterer Inhalt ins Bild kommt.
- Horizontal: Hilfreich, sobald breite Tabellen oder Carousels ins Spiel kommen.
- Hin zu einem Element: Ein konkretes Element ins Sichtfenster holen – dafür dient meist
scrollIntoView. - Pixelweise: Den Viewport um einen festen Pixelwert verschieben, ideal fürs schrittweise Vorgehen.
- An den Rand: Mit einem Sprung ganz nach oben oder ganz ans Seitenende.
Der Grund liegt in der Bauweise heutiger Seiten: Sie stecken voller dynamischer Bausteine – endlos nachladende Feeds, „Mehr laden“-Buttons, fixierte Kopfzeilen, verzögert geladene Bilder. Wer nicht scrollt, sieht nur die halbe Oberfläche und kann den Rest weder erfassen noch prüfen. Die Folge: Fehler bleiben unentdeckt, oder Tests scheitern an Dingen, die mit der eigentlichen Funktion nichts zu tun haben (BrowserStack).
Typische Stolperfallen:
- Ein gefundenes Element ist noch lange nicht sichtbar oder anklickbar.
- Weder
.click()noch.sendKeys()rücken das Element von allein ins Bild. - Selbst nach dem Scrollen kann ein fixierter Header das Element verdecken.
- Bei Infinite Scroll lädt der gesamte Inhalt nur durch wiederholtes, schrittweises Scrollen.
Diese eine Java-Zeile holt ein Element zuverlässig ins Sichtfenster:
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
Der Aufruf rückt das Ziel-Element an den oberen Rand des Viewports – „element not interactable“-Fehler erübrigen sich damit.
Warum effizientes Scrollen in Selenium für Web-Tests so wichtig ist
Bei nahezu jeder aktuellen Web-App erscheint ein Großteil der Inhalte erst beim Scrollen. Wie verbreitet das ist, zeigt eine Zahl: Allein über jQuery setzen mehr als 516.000 Live-Websites Infinite Scroll ein – real dürfte der Wert noch erheblich höher liegen. Scrollen Ihre Tests nie, bleibt ein gewichtiger Teil der Anwendung ungeprüft.
Wo Scrollen erforderlich ist:
- Endlos oder lazy nachladende Listen: Etwa Social Feeds, Produktkataloge oder SaaS-Dashboards.
- „Mehr laden“-Schaltflächen: Typisch für Shops, Nachrichtenportale und Verzeichnisse.
- Erst spät auftauchende Buttons oder Links: Sichtbar werden sie ausschließlich nach dem Scrollen.
- Fixierte Kopfzeilen: Sie legen sich über Elemente und verlangen eine genaue Scroll-Position.
- Umfangreiche Tabellen oder Carousels: Verlangen häufig horizontales oder containerinternes Scrollen.
| Testszenario | Warum Scrollen erforderlich ist |
|---|---|
| Feed mit unendlichem Inhalt (z. B. Social Media) | Beim Scrollen werden neue Beiträge nachgeladen. Tests müssen wiederholt scrollen, um alle Einträge zu laden und zu prüfen. |
| „Mehr laden“-Pagination | Zusätzliche Einträge sind erst nach Scrollen/Klicken im DOM vorhanden. |
| Lazy geladene Bilder | Bilder laden erst, wenn sie in den Sichtbereich gescrollt werden – Tests müssen scrollen, um sicherzustellen, dass alle Bilder vorhanden und geladen sind. |
| Sticky Header überdeckt Inhalt | Elemente können unter Headern verborgen sein – das Scrollen muss das berücksichtigen. |
| Große scrollbare Tabellen/Carousels | Jeweils nur ein Teil des Inhalts ist sichtbar; Tests müssen scrollen, um auf alle Zeilen/Elemente zuzugreifen und sie zu validieren. |
ROI:
- Größere Abdeckung: Geprüft wird die komplette Oberfläche, nicht bloß der beim Laden sichtbare Ausschnitt.
- Weniger Handarbeit: Tests müssen nicht mehr aufgeteilt werden, und manuelles Freilegen von Inhalten entfällt.
- Stabilere Läufe: Spürbar weniger Fehlalarme durch „Element nicht gefunden“ oder „nicht interaktiv“.
Ein Rechenbeispiel macht es greifbar: Ein Shop führt 100 Produkte, von denen nur 20 beim Aufruf laden. Ohne Scrollen prüft der Test 20 Prozent des Sortiments – 80 Prozent bleiben außen vor. Sauberes Scrollen findet mehr Fehler in kürzerer Zeit.

Alle Scroll-Möglichkeiten: Selenium-Scrolling-Techniken im Vergleich
Ein schlichtes scrollDown() sucht man in Selenium vergeblich – dafür gibt es mehrere Wege. Die Übersicht ordnet sie ein:
| Methode | Browser-Unterstützung | Komplexität | Bester Anwendungsfall |
|---|---|---|---|
| Actions API (Wheel-Eingabe) | Chrome, Edge (Selenium 4) | Mittel | Nativ, präzises Scrollen zu einem Element oder um einen Offset |
| JavaScriptExecutor | Alle Browser | Einfach | Zu einem Element, pixelweise oder zu Seitenenden scrollen |
| Tastaturtasten (Page Down usw.) | Alle Browser | Einfach | Benutzerähnliches Scrollen per Tastatur simulieren |
| Scrollen innerhalb von Elementen | Alle Browser | Mittel | In Containern, Tabellen, Carousels scrollen |
Zu Elementen und um Pixel scrollen
Zu einem Element scrollen:
Die richtige Wahl, sobald feststeht, welches Element ins Bild soll.
js.executeScript("arguments[0].scrollIntoView();", webElement);
Oder mit der Selenium-4-Actions-API (Chrome/Edge):
new Actions(driver).scrollToElement(element).perform();
Um Pixel scrollen:
Ideal fürs schrittweise Vorgehen oder die feine Positionsanpassung.
js.executeScript("window.scrollBy(0, 350)", "");
Positive Werte scrollen nach unten, negative nach oben.
Wann welche Methode?
- Für ein punktgenaues, verlässliches Ergebnis greifen Sie zu
scroll-to-element. - Pixelweises Scrollen passt zum stückweisen Nachladen, zu Parallax-Effekten oder wenn Sie echtes Nutzerverhalten nachstellen.
Zum Seitenanfang/-ende scrollen und Infinite Scroll behandeln
Zum Seitenende scrollen:
js.executeScript("window.scrollTo(0, document.body.scrollHeight)");
Zum Seitenanfang scrollen:
js.executeScript("window.scrollTo(0, 0)");
Infinite Scroll behandeln:
Hier führt nur eine Schleife zum Ziel: scrollen, das Nachladen abwarten, wiederholen – so lange, bis kein neuer Inhalt mehr hinzukommt.
long lastHeight = (Long) js.executeScript("return document.body.scrollHeight");
while (true) {
js.executeScript("window.scrollTo(0, document.body.scrollHeight);");
Thread.sleep(2000); // In echten Tests explizite Waits verwenden!
long newHeight = (Long) js.executeScript("return document.body.scrollHeight");
if (newHeight == lastHeight) break;
lastHeight = newHeight;
}
So liegt am Ende der gesamte Inhalt vor – genau wie bei einem echten Besucher (Testsigma).
Benutzerdefiniertes Scrollen in Selenium mit execute_script
Reichen die Grundtechniken nicht mehr, wird das JavaScript-execute_script zum schärfsten Werkzeug. Damit lässt sich unter anderem:
- Etappenweise scrollen und so eine weiche, an echte Nutzer angelehnte Bewegung erzeugen.
- Im Anschluss an jeden Scrollvorgang abwarten, bis frischer Inhalt geladen ist.
- Gezielt innerhalb einzelner Container scrollen, etwa in Tabellen oder Carousels.
- Ausnahmefälle abfangen – man denke an fixierte Header oder dynamisch nachwachsende Elemente.
Beispiel: Sanftes, schrittweises Scrollen
for i in range(10):
driver.execute_script("window.scrollBy(0, 500);")
time.sleep(0.5)
Beispiel: Nach dem Scrollen auf Inhalte warten
js.executeScript("window.scrollTo(0, document.body.scrollHeight);");
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("new_element")));
Best Practices:
- Verbinden Sie jeden Scrollvorgang fest mit einem expliziten Wait auf neue Inhalte.
- Für eine bessere Sichtbarkeit lässt sich
scrollIntoViewmit{block: "center"}ergänzen. - Statt fest verdrahteter Sleeps setzen Sie Waits ein, die an reale Inhaltsänderungen geknüpft sind.
- Innerhalb von Containern arbeiten Sie per JS mit
element.scrollTop = ...oderelement.scrollBy(...).
Scrollen in Selenium für verschiedene Browser optimieren
Jetzt wird es knifflig, denn beim Scrollen tickt nicht jeder Browser gleich:
- Chrome, Edge und weitere Chromium-Browser (Brave, Opera, Arc): Hier laufen sowohl JavaScript als auch die Wheel-Eingabe der Actions API (
scrollToElement,scrollByAmount,scrollFromOrigin) ohne Einschränkung. - Firefox: Das JavaScript-Scrollen verhält sich erwartungsgemäß. Die Wheel-Eingabe der Actions API trägt geckodriver allerdings nicht mit – die Selenium-Dokumentation führt Wheel-Aktionen als Chromium-exklusiv. Weichen Sie deshalb auf den
JavascriptExecutoraus. - Safari: Es gilt das Gleiche wie für Firefox — auch safaridriver kennt den Wheel-Endpunkt nicht. Setzen Sie hier auf
JavascriptExecutorundarguments[0].scrollIntoView(...). - Headless-Betrieb: Legen Sie die Fenstergröße ausdrücklich fest (
driver.manage().window().setSize(...)oder bei Chrome--window-size=1920,1080). Andernfalls bleibt der Viewport winzig, und Inhalte, die in einem realen Browser außerhalb des Sichtfelds lägen, stoßen womöglich kein Lazy Loading an.
Tipps:
- Nehmen Sie Ihre Scroll-Logik schon früh auf jedem Zielbrowser unter die Lupe.
- Halten Sie JavaScript als browserübergreifenden Notnagel fürs Scrollen bereit.
- Gegen fixierte Header helfen ein paar zusätzliche Pixel oder maßgeschneidertes JS, damit nichts verdeckt bleibt.
- Im Headless-Betrieb fixieren Sie die Fenstergröße über
driver.manage().window().setSize(...), damit das Scrollen verlässlich bleibt.
Thunderbit: Selenium-Testentwicklung mit intelligentem Scraping beschleunigen
Dynamische Webdaten mit KI scrapen Get Started Free
Selenium fährt den Browser, liefert aber keine Daten – Locator, Schleifen und Asserts bauen Sie selbst. Hat die zu prüfende Seite dynamische, scrollintensive Inhalte (Produktübersichten, Social Feeds, lazy geladene Tabellen), lohnt Thunderbit als Begleittool: Seite öffnen, Thunderbit Scrollen, Pagination und das Zusammenstellen eines strukturierten Datensatzes überlassen – und diesen danach als „Quelle der Wahrheit“ für Ihre Selenium-Assertions nutzen. Das spart Zeit gegenüber einem selbstgebauten Einmal-Scraper für die „erwartete“ Hälfte des Tests.
Wie Thunderbit Selenium ergänzt:
- Vollständig scrapen, auch bei Infinite Scroll: Scroll-Schleife und Pagination erledigt Thunderbits KI selbst und gibt strukturierte Zeilen (Produktnamen, Preise, Bilder) aus, die als CSV oder Google-Sheets-Tabelle bereitstehen.
- Sollwerte für die Tests gewinnen: Lassen Sie Thunderbit zügig alle erwarteten UI-Daten einsammeln und prüfen Sie danach per Selenium-Test scrollend, ob die Oberfläche dazu passt.
- Schneller zur Testbasis: Über „KI-Felder vorschlagen“ deckt Thunderbit Selektoren und Strukturen auf, was das Schreiben Ihrer Selenium-Locator deutlich erleichtert.
Beispiel-Workflow:
- Lassen Sie Thunderbit sämtliche Produkte einer dynamischen Shop-Seite einsammeln – Scrollen und Extrahieren übernimmt das Tool komplett.
- Schieben Sie die Ergebnisse nach Google Sheets oder exportieren Sie sie als CSV.
- Im Selenium-Test scrollen Sie die Seite durch, lesen die sichtbaren Produktangaben aus und gleichen sie mit dem Thunderbit-Datensatz ab.
- Kontrollieren Sie zum Schluss, dass jedes Produkt da ist, sauber geladen wurde und keine Angabe fehlt.
So fließt weniger Zeit in brüchige Scraping-Konstruktionen und mehr in das, worauf es ankommt – die Validierung. Bei umfangreichen, dynamischen Seiten leisten Thunderbits Subpage-Scraping und die zeitgesteuerten Funktionen gute Dienste.
Thunderbit Chrome-Erweiterung für intelligentes Scraping testen
Praxisbeispiele: Effizientes Scrollen in echten Selenium-Testfällen
Genug Theorie – jetzt zu konkreten Fällen. Die folgenden Szenarien bringen jeweils anpassbaren Code mit:
1. Durch eine große Tabelle scrollen
Angenommen, ein Datenraster bringt eine eigene Scrollleiste mit:
WebElement table = driver.findElement(By.id("data-table"));
js.executeScript("arguments[0].scrollTop = arguments[0].scrollHeight", table);
Damit landen Sie am Tabellenende. Soll jede Zeile beim Erscheinen einzeln geprüft werden, gehen Sie schrittweise vor.
2. Infinite-Scroll-Feeds navigieren
prev_count = 0
while True:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)
posts = driver.find_elements(By.CSS_SELECTOR, ".post")
if len(posts) == prev_count:
break
prev_count = len(posts)
Die Schleife lädt sämtliche Beiträge und hält an, sobald keine neuen mehr auftauchen.
3. Lazy geladene Bilder validieren
List<WebElement> images = driver.findElements(By.tagName("img"));
for (WebElement img : images) {
if ("lazy".equals(img.getAttribute("loading"))) {
js.executeScript("arguments[0].scrollIntoView(true);", img);
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5));
wait.until(d -> (Boolean) ((JavascriptExecutor)d).executeScript("return arguments[0].complete && arguments[0].naturalWidth > 0;", img));
Assert.assertTrue((Integer) js.executeScript("return arguments[0].naturalWidth;", img) > 0);
}
}
Jedes lazy geladene Bild wandert ins Sichtfeld, danach wird geprüft, ob es wirklich geladen ist.
4. Horizontales Scrollen in einem Carousel
WebElement carousel = driver.findElement(By.className("carousel"));
js.executeScript("arguments[0].scrollBy(300, 0);", carousel);
Das Carousel rückt 300 px nach rechts.
5. Ladefehler erkennen
Prüfen Sie nach jedem Scrollvorgang per explizitem Wait, ob neue Inhalte oder Lade-Spinner erschienen sind. Bei einem Timeout halten Sie den Zustand im Log fest und lassen den Test fehlschlagen.
Schritt-für-Schritt-Anleitung: Effizientes Scrollen in Selenium umsetzen
Mehr zu Best Practices beim Data Scraping erfahren Get Started Free
Diese Checkliste führt Sie durch die Umsetzung:
- Bedarf klären: Ist der Inhalt verdeckt, lazy nachgeladen oder über Pagination verteilt?
- Vorhandensein absichern: Bestätigen Sie per explizitem Wait, dass die Elemente im DOM liegen.
- Passende Technik auswählen:
- Hin zum Element, wenn Präzision zählt.
- Pixelweise, wenn schrittweise nachgeladen wird.
- Eine Schleife, sobald Infinite Scroll im Spiel ist.
- Umsetzen: Je nach Situation kommen JavaScript oder die Actions API zum Einsatz.
- Danach synchronisieren: Auf frisch geladene Inhalte warten, nicht auf starre Sleeps bauen.
- Ergebnis prüfen: Nach dem Scrollen kontrollieren, ob alles sichtbar, geladen und bedienbar ist.
- Browserweit absichern: Auf allen Zielbrowsern testen und JS als Rückfalloption nutzen.
- Thunderbit anbinden: Für das Vorladen oder Gegenprüfen großer Datenmengen einsetzen.
- Überflüssiges weglassen: Nur so weit scrollen, wie es der Test wirklich verlangt.
- Nachvollziehbar halten: Im Code festhalten, weshalb gerade diese Scroll-Variante gewählt wurde.
| Schritt | Wichtige Aktion |
|---|---|
| Bedarf ermitteln | Ist Scrollen für dieses Szenario erforderlich? |
| Elementpräsenz | Auf Elemente im DOM warten |
| Methode wählen | Element, Pixel, Schleife oder Container-Scrollen |
| Umsetzen | Je nach Bedarf JS/Actions/Tasten verwenden |
| Synchronisieren | Nach jedem Scrollen auf Inhalte warten |
| Validieren | Sichtbarkeit und Korrektheit prüfen |
| Browser-Optimierung | Über Chrome, Firefox, Edge, Safari testen |
| Thunderbit integrieren | Für Datenerfassung/Validierung nutzen |
| Minimieren | Redundante Scrolls vermeiden |
| Dokumentieren | Vorgehen kommentieren und erklären |
Fazit und wichtigste Erkenntnisse
Effizientes Scrollen ist das tragende Element jeder robusten Web-Test-Automatisierung. Wo dynamische Inhalte und Infinite Scroll allgegenwärtig sind, muss eine Test-Suite scrollen wie ein realer Besucher. Die zentralen Punkte:
- Bewusst scrollen: Klären Sie vorab, an welcher Stelle Scrollen ansteht – verlassen Sie sich nie blind auf die Sichtbarkeit von Elementen.
- Werkzeug zum Zweck:
scroll-to-elementfür Präzision, JavaScript für Spielraum, die Actions API für natives Verhalten, wo sie greift. - Abwarten und kontrollieren: Nach jedem Scrollen erst das Nachladen abwarten, dann auf Sichtbarkeit und Korrektheit prüfen.
- Auf jedem Browser absichern: Die Scroll-Logik überall testen und JavaScript als allgemeingültige Rückfalloption führen.
- Thunderbit dazunehmen: Selenium mit Thunderbit verbinden, um gerade bei scrollintensiven, dynamischen Seiten schneller zu erfassen und zu validieren.
Sie möchten Ihre Selenium-Tests aufs nächste Niveau heben? Dann probieren Sie die Chrome-Erweiterung von Thunderbit und entwickeln schneller. Wer tiefer einsteigen will, findet im Thunderbit-Blog Analysen und Anleitungen rund um Automatisierung.
Selenium-Tests mit Thunderbit beschleunigen
Viel Erfolg beim Scrollen – und mögen Ihre Tests stets das finden, wonach sie suchen.
FAQs
1. Wieso lässt sich ein Element, das nachweislich im DOM steckt, in Selenium manchmal trotzdem nicht bedienen?
Weil der Browser-Viewport nicht von selbst zum Element wandert. Sitzt es außerhalb des sichtbaren Bereichs, droht eine ElementNotInteractableException. Schieben Sie das Element per Scroll-Aktion ins Bild, bevor Sie damit arbeiten.
2. Wie geht man Infinite-Scroll-Seiten in Selenium am besten an?
Setzen Sie auf eine Schleife: ans Seitenende scrollen, das Nachladen abwarten und wiederholen, bis nichts Neues mehr erscheint. Koppeln Sie die Waits dabei stets an konkrete Inhaltsänderungen statt an feste Sleeps.
3. Wie sorge ich dafür, dass mein Scroll-Code über alle Browser hinweg läuft?
Am breitesten einsetzbar ist das JavaScript-execute_script. Die Actions API spielt in Chrome und Edge ihre Stärken aus, fehlt aber in Safari und älteren Firefox-Versionen unter Umständen. Prüfen Sie Ihre Logik darum grundsätzlich auf allen Zielbrowsern.
4. Lässt sich auch innerhalb von Containern oder Tabellen scrollen statt nur über die ganze Seite?
Durchaus. Setzen Sie per JavaScript scrollTop oder scrollBy direkt am Container – etwa so: js.executeScript("arguments[0].scrollTop = arguments[0].scrollHeight", tableElement);
5. Welchen Beitrag leistet Thunderbit zur Selenium-Testautomatisierung?
Das KI-gestützte Scraping von Thunderbit holt sämtliche Daten von dynamischen oder endlos scrollenden Seiten und stellt sie als Referenzdatensatz für Ihre Selenium-Tests bereit. So lässt sich der UI-Inhalt leichter validieren und die Testentwicklung beschleunigt sich – vor allem bei komplexen, datenreichen Seiten.
6. Ist 2026 weiterhin handgeschriebener Scroll-Code Pflicht, oder zieht Selenium beim Auto-Scroll mit Playwright gleich?
Playwright und neuere Cypress-Versionen rücken Elemente vor der Interaktion automatisch ins Sichtfeld – der Selenium WebDriver tut das nach wie vor nicht, und nichts deutet darauf hin, dass sich daran innerhalb der 4.x-Reihe etwas ändert. In Selenium bleibt das Scrollen also Handarbeit (Actions API auf Chromium, sonst überall JavascriptExecutor). Für ein Team, das eine Test-Suite komplett neu aufzieht und nicht ohnehin auf Selenium festgelegt ist, zählt genau dieses Auto-Scroll zu den ernstzunehmenden Argumenten für Playwright. Pflegen Sie dagegen eine bestehende Selenium-Suite – und das trifft auf die Mehrheit zu –, sind die Muster aus diesem Leitfaden weiterhin der passende Weg.
Weitere Informationen zu Selenium, Web Scraping und Best Practices für Automatisierung finden Sie im Thunderbit-Blog.
KI-Web-Scraper für dynamische Seiten ausprobieren Get Started Free


