Si tu t’es déjà frotté à l’automatisation d’une appli web moderne, tu connais sûrement ce souci : tu écris un test Selenium, il clique sur un bouton, et… rien ne se passe. En fait, le bouton était planqué hors de l’écran, ou alors la page continuait de charger des produits au fur et à mesure du scrolling. Bienvenue dans le monde des pages web dynamiques à défilement infini, où faire en sorte que tes tests « voient » ce qu’un vrai utilisateur voit, c’est déjà tout un défi. Après des années à dompter l’automatisation web, je peux te le dire : maîtriser le scrolling dans Selenium, ce n’est pas juste un bonus, c’est ce qui fait la différence entre des tests fragiles et une automatisation solide, prête pour la prod.
On va voir pourquoi le scrolling est si crucial avec Selenium, quelles sont les meilleures techniques pour gérer tout, des listes à chargement différé aux en-têtes fixes, et comment des outils comme peuvent booster ton workflow. Je partagerai des exemples de code, des astuces selon le navigateur, et quelques leçons apprises sur le terrain—pour que tu puisses enfin faire confiance à tes tests.
Comprendre les bases du scrolling avec Selenium
Mais au fond, ça veut dire quoi « scroller avec Selenium » ? En automatisation web, il s’agit de déplacer la fenêtre d’affichage du navigateur—vers le haut, le bas, la gauche, la droite, ou jusqu’à un élément précis—pour que le contenu avec lequel tu veux interagir soit bien visible. Par défaut, Selenium WebDriver ne scrolle pas tout seul. Si tu essaies de cliquer sur un élément hors écran, tu risques de tomber sur l’erreur ElementNotInteractableException (). C’est pour ça qu’un scrolling précis et volontaire est indispensable pour des tests UI fiables.
Voici les principaux types d’actions de scrolling que tu utiliseras avec Selenium :
- Scrolling vertical : Faire défiler la page vers le haut ou le bas pour révéler plus de contenu.
- Scrolling horizontal : Pratique pour les tableaux larges ou les carrousels.
- Scrolling vers un élément : Amener un élément précis dans la zone visible, souvent avec
scrollIntoView. - Scrolling par pixels : Déplacer la fenêtre d’un nombre précis de pixels—idéal pour un scrolling progressif.
- Scrolling en haut/en bas de page : Aller direct au début ou à la fin d’une page.
Pourquoi c’est si important ? Parce que les pages web d’aujourd’hui sont blindées d’éléments dynamiques—flux à scrolling infini, boutons « Charger plus », en-têtes fixes, images à chargement différé… Si ton test ne scrolle pas, il ne « voit » qu’une partie de l’interface. Résultat : des bugs passent à la trappe, ou tes tests plantent pour de mauvaises raisons ().
Pièges fréquents :
- Localiser un élément ne veut pas dire qu’il est visible ou cliquable.
- Les actions comme
.click()ou.sendKeys()ne scrollent pas automatiquement jusqu’à l’élément. - Les en-têtes fixes peuvent masquer des éléments même après le scrolling.
- Les pages à scrolling infini demandent un scrolling progressif répété pour charger tout le contenu.
Petit exemple rapide en Java pour scroller un élément dans la zone visible :
1((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
Ça garantit que l’élément ciblé est bien visible en haut de la fenêtre—fini les erreurs « élément non interactif ».
Pourquoi un scrolling efficace dans Selenium est vital pour les tests web
Soyons clairs : la plupart des applis web modernes reposent sur du contenu dynamique qui n’apparaît qu’après un scrolling. D’après des chiffres récents, plus de , et le vrai chiffre est sûrement bien plus haut. Si tes tests Selenium ne scrollent jamais, tu passes à côté d’une grosse partie de ton appli.
Quand le scrolling est-il indispensable ?
- Listes à chargement différé ou infini : Flux sociaux, grilles de produits, dashboards SaaS.
- Boutons « Charger plus » : Sites e-commerce, actualités, annuaires.
- Boutons ou liens cachés : Éléments qui n’apparaissent qu’après scrolling.
- En-têtes fixes : Peuvent masquer des éléments, il faut donc scroller avec précision.
- Grandes tables ou carrousels : Nécessitent souvent un scrolling horizontal ou ciblé sur un conteneur.
| Scénario de test | Pourquoi le scrolling est nécessaire |
|---|---|
| Flux de contenu infini (ex : réseaux sociaux) | De nouveaux posts se chargent au fil du scrolling. Les tests doivent scroller plusieurs fois pour tout valider. |
| Pagination « Charger plus » | Les éléments supplémentaires n’apparaissent dans le DOM qu’après scrolling/clic. |
| Images à chargement différé | Les images ne se chargent qu’une fois visibles—les tests doivent scroller pour vérifier leur présence et leur affichage. |
| En-tête fixe qui recouvre du contenu | Certains éléments peuvent être cachés sous l’en-tête—le scrolling doit en tenir compte. |
| Grandes tables/carrousels défilants | Seule une partie du contenu est visible à la fois ; il faut scroller pour accéder et valider toutes les lignes/éléments. |
Retour sur investissement :
- Meilleure couverture de test : Tu valides tous les éléments de l’UI, pas juste ceux visibles au chargement.
- Moins d’efforts manuels : Plus besoin de découper les tests ou d’intervenir pour révéler le contenu.
- Automatisation plus fiable : Moins de faux négatifs à cause d’erreurs « élément introuvable » ou « non interactif ».
Imagine un site e-commerce avec 100 produits mais seulement 20 affichés à la fois. Un test sans scrolling ne vérifie que 20 % du catalogue—laissant 80 % non testés. Un scrolling efficace permet de dénicher plus de bugs, plus vite.

Toutes les méthodes de scrolling : comparatif des techniques Selenium
Selenium n’a pas de commande « scrollDown() » toute faite, mais propose plusieurs moyens d’y arriver. Voici un aperçu :
| Méthode | Compatibilité navigateur | Complexité | Cas d’usage idéal |
|---|---|---|---|
| Actions API (Wheel input) | Chrome, Edge (Selenium 4) | Moyenne | Scrolling natif, précis vers un élément ou un offset |
| JavaScriptExecutor | Tous navigateurs | Facile | Scrolling vers un élément, par pixels, ou extrémités |
| Touches clavier (Page Down, etc.) | Tous navigateurs | Facile | Simuler le scrolling utilisateur |
| Scrolling dans des éléments | Tous navigateurs | Moyenne | Scrolling dans des conteneurs, tables, carrousels |
Scrolling vers un élément et par pixels
Scrolling vers un élément :
Idéal si tu sais exactement ce que tu veux afficher.
1js.executeScript("arguments[0].scrollIntoView();", webElement);
Ou, avec l’API Actions de Selenium 4 (Chrome/Edge) :
1new Actions(driver).scrollToElement(element).perform();
Scrolling par pixels :
Parfait pour un scrolling progressif ou un positionnement précis.
1js.executeScript("window.scrollBy(0, 350)", "");
Valeurs positives pour descendre, négatives pour remonter.
Quand utiliser quoi ?
- Privilégie le scrolling vers un élément pour la précision et la fiabilité.
- Utilise le scrolling par pixels pour charger progressivement, simuler un effet utilisateur ou gérer des effets parallaxe.
Scrolling en haut/en bas de page et gestion du scroll infini
Scrolling en bas de page :
1js.executeScript("window.scrollTo(0, document.body.scrollHeight)");
Scrolling en haut de page :
1js.executeScript("window.scrollTo(0, 0)");
Gérer le scroll infini :
Il faut une boucle : scroller, attendre le chargement, recommencer jusqu’à ce qu’il n’y ait plus de nouveau contenu.
1long lastHeight = (Long) js.executeScript("return document.body.scrollHeight");
2while (true) {
3 js.executeScript("window.scrollTo(0, document.body.scrollHeight);");
4 Thread.sleep(2000); // Utilise des attentes explicites en vrai !
5 long newHeight = (Long) js.executeScript("return document.body.scrollHeight");
6 if (newHeight == lastHeight) break;
7 lastHeight = newHeight;
8}
Ce schéma permet de charger tout le contenu, comme le ferait un utilisateur ().
Scrolling personnalisé dans Selenium avec execute_script
Pour aller plus loin, le JavaScript via execute_script est ton meilleur allié. Tu peux :
- Scroller par étapes pour un effet fluide, proche de l’utilisateur.
- Attendre le chargement du contenu après chaque scrolling.
- Scroller à l’intérieur de conteneurs spécifiques (tables, carrousels…).
- Gérer les cas particuliers (en-têtes fixes, éléments dynamiques, etc.).
Exemple : scrolling fluide par étapes
1for i in range(10):
2 driver.execute_script("window.scrollBy(0, 500);")
3 time.sleep(0.5)
Exemple : attendre le chargement après scrolling
1js.executeScript("window.scrollTo(0, document.body.scrollHeight);");
2WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
3wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("new_element")));
Bonnes pratiques :
- Associe toujours le scrolling à des attentes explicites sur le nouveau contenu.
- Utilise
{block: "center"}avecscrollIntoViewpour une meilleure visibilité si besoin. - Évite les pauses fixes—privilégie les attentes liées à l’apparition réelle du contenu.
- Pour les conteneurs, utilise
element.scrollTop = ...ouelement.scrollBy(...)via JS.
Optimiser le scrolling Selenium selon le navigateur
C’est là que ça se corse. Tous les navigateurs ne gèrent pas le scrolling de la même façon :
- Chrome/Edge : Prise en charge complète de l’API Actions et du JavaScript.
- Firefox : Bon support JS, API Actions partielle. Peut demander des ajustements pour un scrolling fluide.
- Safari : Pas de support pour l’API Actions—utilise uniquement JavaScript ().
- Mode headless : Toujours définir la taille de la fenêtre, sinon le scrolling peut être imprévisible.
Conseils :
- Teste ta logique de scrolling sur tous les navigateurs cibles dès le début.
- Utilise JavaScript comme solution universelle de secours.
- Pour les en-têtes fixes, il peut être nécessaire de scroller un peu plus ou d’utiliser du JS personnalisé pour éviter le recouvrement.
- En mode headless, fixe la taille de la fenêtre avec
driver.manage().window().setSize(...)pour garantir un comportement cohérent.
Thunderbit : Boostez vos tests Selenium grâce au scraping intelligent
Petit secret d’expert : . Si Selenium est top pour piloter le navigateur, il arrive que tu doives extraire des données—surtout sur des pages à fort scrolling ou très dynamiques. C’est là que Thunderbit brille.
Comment Thunderbit complète Selenium :
- Extraire toutes les données, même sur des pages à scroll infini : L’IA de Thunderbit peut scroller, paginer et extraire des données structurées (noms de produits, prix, images…) en quelques clics.
- Générer des données de référence pour tes tests : Utilise Thunderbit pour collecter rapidement toutes les données attendues, puis scrolle la page avec Selenium pour vérifier la correspondance.
- Accélérer le développement des tests : La fonction « IA Suggère les champs » de Thunderbit t’aide à identifier les sélecteurs et la structure, facilitant l’écriture des localisateurs Selenium.
Exemple de workflow :
- Utilise Thunderbit pour extraire tous les produits d’une page e-commerce dynamique (il scrolle et collecte tout pour toi).
- Exporte les données vers Google Sheets ou CSV.
- Dans ton test Selenium, scrolle la page, récupère les infos produits visibles et compare-les au jeu de données Thunderbit.
- Vérifie que tous les produits sont présents, bien chargés et qu’aucune donnée ne manque.
Cette combinaison te fait gagner du temps sur le code de scraping fragile et te permet de te concentrer sur la validation de l’essentiel. Les fonctions de et de scraping programmé de Thunderbit sont particulièrement utiles pour les sites volumineux et dynamiques.
Exemples concrets : scrolling efficace dans des cas réels de tests Selenium
Passons à la pratique. Voici quelques scénarios courants et du code réutilisable :
1. Scrolling dans un grand tableau
Imaginons que tu as une grille de données avec sa propre barre de scrolling :
1WebElement table = driver.findElement(By.id("data-table"));
2js.executeScript("arguments[0].scrollTop = arguments[0].scrollHeight", table);
Ça fait défiler le tableau jusqu’en bas. Boucle par incréments si tu veux valider chaque ligne au fur et à mesure.
2. Navigation dans un flux à scroll infini
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)
Charge tous les posts, s’arrête quand il n’y en a plus de nouveaux.
3. Validation d’images à chargement différé
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}
Fait défiler chaque image différée dans la zone visible et vérifie son chargement.
4. Scrolling horizontal dans un carrousel
1WebElement carousel = driver.findElement(By.className("carousel"));
2js.executeScript("arguments[0].scrollBy(300, 0);", carousel);
Fait défiler le carrousel de 300px vers la droite.
5. Détection des échecs de chargement de contenu
Après chaque scrolling, utilise des attentes explicites pour vérifier l’apparition de nouveau contenu ou d’un indicateur de chargement. En cas de timeout, consigne l’état et signale l’échec.
Guide pas à pas : mettre en place un scrolling efficace avec Selenium
Voici ta checklist actionnable :
- Identifier les besoins en scrolling : Le contenu est-il caché, chargé à la volée ou paginé ?
- Vérifier la présence des éléments : Utilise des attentes explicites pour confirmer leur présence dans le DOM.
- Choisir la bonne méthode de scrolling :
- Scrolling vers un élément pour la précision.
- Par pixels pour les chargements progressifs.
- Boucle pour le scroll infini.
- Implémenter le scrolling : Utilise JavaScript ou l’API Actions selon le cas.
- Synchroniser après chaque scrolling : Attends le chargement du contenu—évite les pauses fixes.
- Valider le contenu : Après scrolling, vérifie que les éléments sont visibles, chargés et interactifs.
- Optimiser selon le navigateur : Teste sur tous les navigateurs cibles ; JS comme solution de secours.
- Intégrer Thunderbit pour l’extraction de données : Utilise Thunderbit pour pré-charger ou valider de gros jeux de données.
- Limiter le scrolling inutile : Ne scrolle que si nécessaire.
- Documenter ta logique : Commente tes choix de méthode de scrolling.
| Étape | Action clé |
|---|---|
| Identifier le besoin | Le scrolling est-il requis pour ce scénario ? |
| Présence de l’élément | Attendre que les éléments existent dans le DOM |
| Choisir la méthode | Élément, pixels, boucle ou scroll de conteneur |
| Implémenter | Utiliser JS/Actions/Touches selon le besoin |
| Synchroniser | Attendre le contenu après chaque scrolling |
| Valider | Vérifier visibilité et exactitude |
| Optimiser navigateur | Tester sur Chrome, Firefox, Edge, Safari |
| Intégrer Thunderbit | Pour extraction/validation de données |
| Minimiser | Éviter les scrolls redondants |
| Documenter | Expliquer et commenter l’approche |
Conclusion & points clés à retenir
Un scrolling efficace dans Selenium, c’est la clé d’une automatisation de tests web moderne et fiable. Avec du contenu dynamique et du scroll infini partout, tes tests doivent scroller comme un vrai utilisateur pour valider vraiment l’interface. À retenir :
- Scrolle avec intention : Identifie quand et où le scrolling est nécessaire—ne pars pas du principe que les éléments sont visibles.
- Utilise les bons outils : Privilégie le scroll vers un élément pour la précision, JavaScript pour la flexibilité, et l’API Actions pour un comportement natif (si supporté).
- Synchronise et vérifie : Attends toujours le chargement du contenu après scrolling, et valide sa visibilité et sa justesse.
- Optimise pour tous les navigateurs : Teste ta logique partout, et utilise JavaScript comme solution universelle.
- Profite de Thunderbit : Combine Selenium et pour accélérer l’extraction et la validation des données—surtout sur les pages dynamiques ou à fort scrolling.
Prêt à faire passer tes tests Selenium au niveau supérieur ? Essaie l’ pour un développement de tests plus rapide et plus intelligent. Et pour encore plus d’astuces d’automatisation, va faire un tour sur le pour des tutos détaillés.
Bon scrolling—et que tes tests trouvent toujours ce qu’ils cherchent !
FAQ
1. Pourquoi Selenium galère parfois à interagir avec des éléments pourtant présents dans le DOM ?
Parce que Selenium ne scrolle pas automatiquement les éléments dans la zone visible. Si un élément est hors écran, tu peux avoir une ElementNotInteractableException. Utilise des actions de scrolling pour garantir leur visibilité avant d’interagir.
2. Quelle est la meilleure façon de gérer les pages à scroll infini avec Selenium ?
Utilise une boucle : scrolle jusqu’en bas, attends le chargement du nouveau contenu, et recommence jusqu’à ce qu’il n’y ait plus rien de nouveau. Privilégie toujours des attentes explicites liées au contenu, pas des pauses fixes.
3. Comment rendre mon code de scrolling compatible avec tous les navigateurs ?
Le JavaScript via execute_script est la méthode la plus universelle. L’API Actions marche bien sur Chrome/Edge, mais peut ne pas être supportée sur Safari ou d’anciennes versions de Firefox. Teste toujours sur tous tes navigateurs cibles.
4. Je peux scroller à l’intérieur de conteneurs ou de tableaux, et pas seulement la page principale ?
Oui ! Utilise JavaScript pour définir scrollTop ou scrollBy sur l’élément conteneur. Par exemple : js.executeScript("arguments[0].scrollTop = arguments[0].scrollHeight", tableElement);
5. Comment Thunderbit aide à l’automatisation des tests Selenium ?
Le scraping intelligent de Thunderbit permet d’extraire toutes les données de pages dynamiques ou à scroll infini, fournissant des jeux de données de référence pour tes tests Selenium. Ça facilite la validation du contenu UI et accélère le développement des tests—surtout pour les sites riches en données.
Pour en savoir plus sur Selenium, le scraping web et les bonnes pratiques d’automatisation, va voir le .