Comment mettre en place un défilement efficace dans les tests web Selenium

Dernière mise à jour le May 22, 2026
Comment mettre en place un défilement efficace dans les tests web Selenium

Si vous avez déjà essayé d’automatiser une application web moderne, vous connaissez le problème : vous écrivez un test Selenium, il clique sur un bouton, et — pouf — rien ne se passe. En réalité, le bouton était simplement hors champ, ou bien la page était encore en train de charger d’autres produits pendant que vous faisiez défiler. Bienvenue dans le monde des pages web dynamiques à défilement infini, où amener vos tests à « voir » ce qu’un vrai utilisateur voit représente déjà la moitié du travail. Cela fait des années que je travaille sur l’automatisation web, et je peux vous le dire : un défilement efficace dans Selenium n’est pas un simple bonus — c’est ce qui fait la différence entre des tests instables et peu fiables, et une automatisation robuste, prête pour la production.

Voyons pourquoi le défilement dans Selenium est si essentiel, quelles sont les meilleures techniques pour gérer aussi bien les listes à chargement paresseux que les en-têtes fixes, et comment des outils comme Thunderbit peuvent accélérer votre travail. Je partagerai du code concret, des conseils selon les navigateurs, ainsi que quelques leçons tirées du terrain — pour que vous puissiez arrêter de vous battre avec vos tests et commencer à faire confiance à vos résultats.

Comprendre les bases du défilement dans Selenium

Alors, que signifie exactement « faire défiler dans Selenium » ? En automatisation web, il s’agit simplement de déplacer par programme la zone visible du navigateur — vers le haut, le bas, la gauche, la droite, ou vers un élément précis — afin que le contenu avec lequel vous voulez interagir soit réellement visible. Par défaut, Selenium WebDriver ne défile pas pour vous. Si vous essayez de cliquer sur un élément hors écran, vous obtiendrez souvent la redoutée ElementNotInteractableException (GeeksforGeeks). C’est pourquoi un défilement précis et intentionnel est indispensable pour une automatisation de tests UI fiable. Tout ce guide cible la branche Selenium 4.x — l’entrée de défilement via la molette a été introduite dans Selenium 4.2 et reste la méthode actuelle dans la dernière version 4.43 (Selenium downloads). Si vous êtes encore sur Selenium 3, les extraits basés sur l’API Actions ne compileront pas et vous devrez revenir aux approches JavascriptExecutor présentées plus loin.

Voici les principaux types d’actions de défilement que vous utiliserez dans Selenium :

  • Défilement vertical : faire monter ou descendre la page pour afficher plus de contenu.
  • Défilement horizontal : utile pour les grands tableaux ou les carrousels.
  • Défilement vers un élément : amener un élément précis à l’écran, généralement avec scrollIntoView.
  • Défilement par pixels : déplacer la zone visible d’un certain nombre de pixels — pratique pour un défilement progressif.
  • Défilement vers le haut/bas : aller directement au tout début ou à la fin d’une page.

Pourquoi est-ce important ? Parce que les pages web d’aujourd’hui regorgent d’éléments dynamiques — pensez aux flux à défilement infini, aux boutons « Charger plus », aux en-têtes fixes et aux images chargées paresseusement. Si votre test ne peut pas défiler, il ne peut pas voir (ni vérifier) la moitié de l’interface. Et cela signifie que des bugs passent entre les mailles du filet, ou que vos tests échouent pour de mauvaises raisons (BrowserStack).

Pièges courants :

  • Trouver un élément ne garantit pas qu’il soit visible ou cliquable.
  • Des actions comme .click() ou .sendKeys() ne feront pas défiler automatiquement jusqu’à l’élément.
  • Les en-têtes fixes peuvent masquer des éléments même après le défilement.
  • Les pages à défilement infini nécessitent des défilements répétés et progressifs pour charger tout le contenu.

Voici un exemple Java rapide pour faire défiler un élément dans la zone visible :

((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);

Cela garantit que votre élément cible est visible en haut de la zone affichée — fini les erreurs « element not interactable ».

Pourquoi un défilement efficace dans Selenium est essentiel pour les tests web

Soyons francs : la plupart des applications web modernes reposent sur du contenu dynamique qui n’apparaît qu’après un défilement. D’après des données récentes, plus de 516 000 sites actifs utilisent le défilement infini via jQuery seul, et le chiffre réel est probablement bien plus élevé. Si vos tests Selenium ne défilent jamais, vous passez à côté d’une énorme partie de votre application. ChatGPT Image Nov 3, 2025, 02_44_20 PM (1).png Cas où le défilement est nécessaire :

  • Listes infinies / chargées paresseusement : flux sociaux, catalogues produits, tableaux de bord SaaS.
  • Boutons « Charger plus » : e-commerce, actualités et annuaires.
  • Boutons ou liens cachés : éléments qui n’apparaissent qu’après défilement.
  • En-têtes fixes : ils peuvent masquer des éléments et imposer un positionnement précis du défilement.
  • Grands tableaux ou carrousels : ils nécessitent souvent un défilement horizontal ou propre au conteneur.
Scénario de testPourquoi le défilement est nécessaire
Flux de contenu infini (ex. réseau social)De nouvelles publications se chargent au fur et à mesure du défilement. Les tests doivent défiler plusieurs fois pour charger et vérifier tous les éléments.
Pagination « Charger plus »Les éléments supplémentaires n’existent pas dans le DOM tant que vous n’avez pas défilé/cliqué.
Images chargées paresseusementLes images ne se chargent que lorsqu’elles entrent dans la zone visible ; les tests doivent défiler pour vérifier que tout est présent et chargé.
Chevauchement du contenu par un en-tête fixeDes éléments peuvent être masqués sous l’en-tête ; le défilement doit en tenir compte.
Grands tableaux/carrousels défilablesUne partie seulement du contenu est visible à la fois ; les tests doivent défiler pour accéder à toutes les lignes et tous les éléments.

ROI :

  • Couverture de test améliorée : vous validez tous les éléments UI, pas seulement ceux visibles au chargement.
  • Moins d’efforts manuels : plus besoin de séparer les tests ou d’intervenir à la main pour afficher le contenu.
  • Automatisation plus fiable : moins de faux négatifs dus à des erreurs du type « element not found » ou « not interactable ».

Imaginez un site e-commerce avec 100 produits, mais seulement 20 chargés à la fois. Un test sans défilement ne vérifie que 20 % de votre catalogue — laissant 80 % non testés. Un défilement efficace vous permet de détecter davantage de bugs, plus vite. ChatGPT Image Nov 3, 2025, 02_39_42 PM (1).png

Toutes les façons de défiler : comparaison des techniques de défilement dans Selenium

Selenium n’a pas une commande unique du type « scrollDown() », mais il propose plusieurs moyens d’y parvenir. Voici un aperçu rapide :

MéthodePrise en charge par le navigateurComplexitéMeilleur cas d’usage
API Actions (entrée molette)Chrome, Edge (Selenium 4)MoyenneDéfilement natif et précis vers un élément ou selon un décalage
JavaScriptExecutorTous les navigateursFacileDéfilement vers un élément, par pixels, ou vers le haut/bas de la page
Touches clavier (Page Down, etc.)Tous les navigateursFacileSimuler un défilement par touches utilisateur
Défilement dans les élémentsTous les navigateursMoyenneDéfilement à l’intérieur de conteneurs, tableaux, carrousels

Défilement vers des éléments et par pixels

Défilement vers un élément :
Idéal quand vous savez exactement ce que vous voulez voir.

js.executeScript("arguments[0].scrollIntoView();", webElement);

Ou, avec l’API Actions de Selenium 4 (Chrome/Edge) :

new Actions(driver).scrollToElement(element).perform();

Défilement par pixels :
Parfait pour un défilement progressif ou un réglage fin de la position.

js.executeScript("window.scrollBy(0, 350)", "");

Utilisez des valeurs positives pour descendre, négatives pour remonter.

Quand utiliser quoi ?

  • Préférez le défilement vers un élément pour la précision et la fiabilité.
  • Utilisez le défilement par pixels pour des chargements progressifs, des effets de parallaxe, ou lorsque vous souhaitez simuler un comportement de défilement proche de celui d’un utilisateur.

Défilement vers le haut/bas de la page et gestion du défilement infini

Défilement vers le bas :

js.executeScript("window.scrollTo(0, document.body.scrollHeight)");

Défilement vers le haut :

js.executeScript("window.scrollTo(0, 0)");

Gestion du défilement infini :
Vous aurez besoin d’une boucle : défiler, attendre le nouveau contenu, répéter jusqu’à ce qu’il n’y ait plus de chargement.

long lastHeight = (Long) js.executeScript("return document.body.scrollHeight");
while (true) {
    js.executeScript("window.scrollTo(0, document.body.scrollHeight);");
    Thread.sleep(2000); // Utilisez des attentes explicites dans les vrais tests !
    long newHeight = (Long) js.executeScript("return document.body.scrollHeight");
    if (newHeight == lastHeight) break;
    lastHeight = newHeight;
}

Ce modèle garantit que vous chargez tout le contenu, comme le ferait un vrai utilisateur (Testsigma).

Défilement personnalisé dans Selenium avec execute_script

Pour tout ce qui dépasse les bases, execute_script de JavaScript est votre meilleur allié. Vous pouvez :

  • Dérouler le défilement par étapes pour un comportement fluide, proche de l’utilisateur.
  • Attendre le chargement du contenu après chaque défilement.
  • Défiler à l’intérieur de conteneurs spécifiques (comme des tableaux ou des carrousels).
  • Gérer les cas limites (par ex. en-têtes fixes, éléments dynamiques).

Exemple : défilement fluide par étapes

for i in range(10):
    driver.execute_script("window.scrollBy(0, 500);")
    time.sleep(0.5)

Exemple : attendre le contenu après le défilement

js.executeScript("window.scrollTo(0, document.body.scrollHeight);");
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("new_element")));

Bonnes pratiques :

  • Associez toujours vos défilements à des attentes explicites pour le nouveau contenu.
  • Utilisez {block: "center"} avec scrollIntoView pour une meilleure visibilité si nécessaire.
  • Évitez les sleep figés — préférez des attentes liées à de vrais changements de contenu.
  • Pour les conteneurs, utilisez element.scrollTop = ... ou element.scrollBy(...) via JS.

Optimiser le défilement dans Selenium selon les navigateurs

C’est ici que les choses se corsent. Tous les navigateurs ne gèrent pas le défilement de la même manière :

  • Chrome / Edge / autres navigateurs basés sur Chromium (Brave, Opera, Arc) : prise en charge complète de l’entrée molette de l’API Actions (scrollToElement, scrollByAmount, scrollFromOrigin) et de JavaScript.
  • Firefox : le défilement JavaScript fonctionne comme prévu. L’entrée molette de l’API Actions n’est pas prise en charge par geckodriver — selon la documentation Selenium, les actions molette sont propres à Chromium. Utilisez plutôt JavascriptExecutor.
  • Safari : même situation que Firefox — safaridriver n’implémente pas le point de terminaison molette. Restez sur JavascriptExecutor et arguments[0].scrollIntoView(...).
  • Mode headless : définissez une taille de fenêtre explicite (driver.manage().window().setSize(...) ou --window-size=1920,1080 pour Chrome). Sans cela, la zone visible est réduite par défaut et un contenu qui s’afficherait hors écran dans un vrai navigateur peut ne pas déclencher le chargement paresseux.

Conseils :

  • Testez tôt votre logique de défilement sur tous les navigateurs ciblés.
  • Utilisez JavaScript comme solution de repli universelle pour le défilement.
  • Pour les en-têtes fixes, vous devrez peut-être ajouter quelques pixels de défilement ou utiliser du JS personnalisé pour éviter le chevauchement.
  • En mode headless, définissez la taille de fenêtre avec driver.manage().window().setSize(...) afin d’obtenir un comportement de défilement cohérent.

Thunderbit : accélérer le développement de tests Selenium avec un scraping intelligent

Extraire des données web dynamiques avec l’IA Get Started Free

Selenium pilote le navigateur, mais n’extrait pas les données à votre place — c’est à vous d’écrire les sélecteurs, les boucles, les assertions. Si la page que vous testez contient beaucoup de contenu dynamique et à défilement intensif (grilles produits, flux sociaux, tableaux à chargement paresseux), Thunderbit est utile comme outil complémentaire : pointez-le vers la page, laissez-le défiler + paginer + extraire un jeu de données structuré, puis utilisez ce jeu de données comme source de vérité pour les assertions de votre test Selenium. C’est un moyen plus rapide de construire la partie « attendue » de votre test que de bricoler un scraper ponctuel à la main.

Comment Thunderbit complète Selenium :

  • Extraire toutes les données, même depuis des pages à défilement infini : l’IA de Thunderbit gère pour vous la boucle de défilement et la pagination, et renvoie des lignes structurées (noms de produits, prix, images) exportables vers CSV ou Sheets.
  • Générer des données de référence pour vos tests : utilisez Thunderbit pour rassembler rapidement toutes les données UI attendues, puis laissez votre test Selenium défiler et vérifier que l’interface correspond.
  • Accélérer le développement de tests : la fonction « AI Suggest Fields » de Thunderbit peut vous aider à identifier les sélecteurs et la structure, ce qui facilite l’écriture des localisateurs Selenium.

Exemple de workflow :

  1. Utilisez Thunderbit pour extraire tous les produits d’une page e-commerce dynamique (il défilera et extraira tout pour vous).
  2. Exportez les données vers Google Sheets ou CSV.
  3. Dans votre test Selenium, parcourez la page en défilant, collectez les informations produit visibles, puis comparez-les au jeu de données Thunderbit.
  4. Vérifiez que tous les produits sont présents, correctement chargés, et qu’aucune donnée ne manque.

Cette combinaison vous fait passer moins de temps à écrire du code de scraping fragile et plus de temps à valider ce qui compte vraiment. Les fonctions de scraping de sous-pages et de scraping programmé de Thunderbit sont particulièrement pratiques pour les grands sites dynamiques.

Essayez l’extension Chrome Thunderbit pour un scraping intelligent

Exemples pratiques : défilement efficace dans de vrais cas de test Selenium

Passons à la pratique. Voici quelques scénarios réels et du code que vous pouvez adapter :

1. Faire défiler un grand tableau

Supposons que vous ayez une grille de données avec sa propre barre de défilement :

WebElement table = driver.findElement(By.id("data-table"));
js.executeScript("arguments[0].scrollTop = arguments[0].scrollHeight", table);

Cela fait défiler jusqu’en bas du tableau. Faites-le par incréments si vous voulez valider chaque ligne au fur et à mesure de son apparition.

2. Parcourir des flux à défilement infini

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)

Charge toutes les publications et s’arrête lorsqu’il n’y en a plus de nouvelles.

3. Vérifier des images chargées paresseusement

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);
    }
}

Fait défiler chaque image à chargement paresseux dans la zone visible et vérifie qu’elle est bien chargée.

4. Défilement horizontal dans un carrousel

WebElement carousel = driver.findElement(By.className("carousel"));
js.executeScript("arguments[0].scrollBy(300, 0);", carousel);

Fait défiler le carrousel vers la droite de 300 px.

5. Détecter les échecs de chargement du contenu

Après chaque défilement, utilisez des attentes explicites pour vérifier l’apparition d’un nouveau contenu ou de spinners de chargement. En cas de dépassement de délai, consignez l’état et marquez l’échec.

Guide pas à pas : implémenter un défilement efficace dans Selenium

En savoir plus sur les bonnes pratiques de data scraping Get Started Free

Voici votre checklist actionnable :

  1. Identifiez quand le défilement est nécessaire : le contenu est-il caché, chargé paresseusement ou paginé ?
  2. Assurez-vous de la présence de l’élément : utilisez des attentes explicites pour confirmer que les éléments existent dans le DOM.
  3. Choisissez la bonne méthode de défilement :
    • Défilement vers un élément pour la précision.
    • Défilement par pixels pour des chargements progressifs.
    • Boucle pour le défilement infini.
  4. Implémentez le défilement : utilisez JavaScript ou l’API Actions selon le cas.
  5. Synchronisez après chaque défilement : attendez le chargement du nouveau contenu — ne vous fiez pas à des sleep figés.
  6. Validez le contenu : après le défilement, vérifiez que les éléments sont visibles, chargés et interactifs.
  7. Optimisez pour les navigateurs : testez sur tous les navigateurs ciblés ; utilisez JS comme solution de repli.
  8. Intégrez Thunderbit pour l’extraction de données : utilisez Thunderbit pour précharger ou valider de grands jeux de données.
  9. Réduisez les défilements inutiles : ne faites défiler que ce qui est nécessaire.
  10. Documentez votre logique : commentez pourquoi vous avez choisi chaque approche de défilement.
ÉtapeAction clé
Identifier le besoinLe défilement est-il requis pour ce cas ?
Présence de l’élémentAttendre que les éléments existent dans le DOM
Choisir la méthodeÉlément, pixels, boucle ou défilement de conteneur
ImplémenterUtiliser JS/Actions/Touches selon le besoin
SynchroniserAttendre le contenu après chaque défilement
ValiderVérifier la visibilité et la justesse
Optimiser pour navigateurTester sur Chrome, Firefox, Edge, Safari
Intégrer ThunderbitUtiliser pour l’extraction/validation des données
MinimiserÉviter les défilements redondants
DocumenterCommenter et expliquer l’approche

Conclusion et points clés à retenir

Un défilement efficace dans Selenium est la colonne vertébrale d’une automatisation web moderne et robuste. Avec le contenu dynamique et le défilement infini omniprésents, vos tests doivent défiler comme un vrai utilisateur pour réellement valider votre interface. Voici ce qui compte le plus :

  • Défiler avec intention : identifiez quand et où le défilement est nécessaire — ne supposez pas simplement que les éléments sont visibles.
  • Utiliser les bons outils : privilégiez le défilement vers un élément pour la précision, JavaScript pour la flexibilité, et l’API Actions pour un comportement natif (là où elle est prise en charge).
  • Synchroniser et vérifier : attendez toujours que le contenu se charge après le défilement, puis vérifiez qu’il est visible et correct.
  • Optimiser pour tous les navigateurs : testez votre logique de défilement partout, et utilisez JavaScript comme solution de repli universelle.
  • Tirer parti de Thunderbit : combinez Selenium avec Thunderbit pour accélérer l’extraction et la validation des données — en particulier pour les pages riches en défilement ou dynamiques.

Prêt à faire passer vos tests Selenium au niveau supérieur ? Essayez d’intégrer l’extension Chrome de Thunderbit pour un développement de tests plus intelligent et plus rapide. Et si vous voulez encore plus de conseils sur l’automatisation, consultez le blog Thunderbit pour des analyses approfondies et des tutoriels.

Accélérez vos tests Selenium avec Thunderbit

Bon défilement — et que vos tests trouvent toujours ce qu’ils cherchent.

FAQ

1. Pourquoi Selenium échoue-t-il parfois à interagir avec des éléments présents dans le DOM ?
Parce que Selenium ne fait pas défiler automatiquement les éléments dans la zone visible. Si un élément est hors écran, vous pouvez obtenir une ElementNotInteractableException. Utilisez des actions de défilement pour vous assurer que les éléments sont visibles avant d’interagir avec eux.

2. Quelle est la meilleure façon de gérer les pages à défilement infini dans Selenium ?
Utilisez une boucle : faites défiler vers le bas, attendez le chargement du nouveau contenu, puis répétez jusqu’à ce qu’il n’y ait plus rien. Utilisez toujours des attentes explicites liées aux changements de contenu, jamais des pauses figées.

3. Comment faire pour que mon code de défilement fonctionne sur tous les navigateurs ?
execute_script de JavaScript est la méthode la plus universelle. L’API Actions fonctionne bien dans Chrome/Edge, mais peut ne pas être prise en charge dans Safari ou dans d’anciennes versions de Firefox. Testez toujours votre logique sur tous les navigateurs ciblés.

4. Puis-je faire défiler à l’intérieur de conteneurs ou de tableaux, et pas seulement la page principale ?
Oui ! Utilisez 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-t-il à l’automatisation des tests Selenium ?
Le scraping alimenté par l’IA de Thunderbit peut extraire toutes les données depuis des pages dynamiques ou à défilement infini, fournissant des jeux de données de référence pour vos tests Selenium. Cela facilite la validation du contenu UI et accélère le développement des tests — surtout pour les sites complexes et riches en données.

6. Dois-je encore écrire moi-même du code de défilement en 2026, ou Selenium a-t-il rattrapé l’auto-défilement de Playwright ?
Playwright et les versions récentes de Cypress font défiler automatiquement les éléments dans la zone visible avant d’interagir avec eux — Selenium WebDriver ne le fait toujours pas, et rien n’indique que cela changera dans la branche 4.x. Donc oui, avec Selenium, vous écrivez toujours le défilement vous-même (API Actions sur Chromium, JavascriptExecutor partout ailleurs). Si vous démarrez une nouvelle suite de tests à partir de zéro et que votre équipe n’a aucun investissement dans Selenium, ce comportement d’auto-défilement est l’une des vraies raisons qui poussent certains à choisir Playwright. Si vous maintenez une suite Selenium existante — ce qui est le cas de la plupart des équipes — les approches de ce guide restent la bonne réponse.

Pour en savoir plus sur Selenium, le web scraping et les bonnes pratiques d’automatisation, consultez le blog Thunderbit.

Essayez l’Extracteur Web IA pour les pages dynamiques Get Started Free

Shuai Guan
Shuai Guan
CEO chez Thunderbit | Expert en automatisation des données avec l’IA Shuai Guan est le CEO de Thunderbit et diplômé en ingénierie de l’Université du Michigan. Fort de près de dix ans d’expérience dans la tech et l’architecture SaaS, il se spécialise dans la transformation de modèles d’IA complexes en outils d’extraction de données pratiques et sans code. Sur ce blog, il partage des conseils sans filtre, éprouvés sur le terrain, autour du web scraping et des stratégies d’automatisation, pour vous aider à créer des workflows plus intelligents et pilotés par la donnée. Quand il n’optimise pas des flux de travail data, il met le même sens du détail au service de sa passion pour la photographie.
Topics
DéfilementScrollingSelenium
Table des matières

Récupère une page web en la demandant simplement

Dis ce qu’il te faut en français courant. Ou mieux encore, ne dis rien du tout.

Essayer Thunderbit gratuit
Extraire des données avec l’IA
Transfère facilement des données vers Google Sheets, Airtable ou Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week