Les entretiens Selenium évaluent deux choses : votre capacité à écrire des tests d'interface stables (attentes, localisateurs, objets de page) et votre capacité à concevoir un framework avec lequel une équipe peut vivre (structure, données, reporting, exécution en CI). Les tests instables sont le sujet qui revient le plus souvent, car quiconque a utilisé Selenium a dû les affronter.
Voici 24 questions avec leurs réponses. Les exemples utilisent la syntaxe Java et Python là où le code aide, et les idées s'appliquent dans n'importe quel langage.
Les bases
1. Qu'est-ce que Selenium, et quels sont ses composants ?
Selenium est une suite open source pour automatiser les navigateurs web. Selenium WebDriver contrôle les navigateurs via leurs drivers et c'est la partie à laquelle la plupart des gens font référence. Selenium Grid exécute les tests en parallèle sur de nombreuses machines et navigateurs. Selenium IDE est une extension d'enregistrement et de relecture. Selenium ne gère pas les applications de bureau ni le reporting de tests intégré, vous le combinez donc avec un framework de test.
2. Comment fonctionne WebDriver ?
Votre test envoie des commandes via le protocole W3C WebDriver en HTTP à un driver de navigateur tel que ChromeDriver ou GeckoDriver, qui contrôle le navigateur et renvoie les résultats. Les versions récentes de Selenium incluent Selenium Manager, qui trouve et télécharge le bon driver.
3. Quels localisateurs Selenium prend-il en charge, et lesquels préférez-vous ?
ID, name, class name, tag name, link text, partial link text, sélecteur CSS et XPath. Préférez un ID stable ou un attribut de test dédié tel que data-testid, puis CSS. Utilisez XPath lorsque vous devez remonter l'arborescence ou faire correspondre du texte. Évitez les chemins longs basés sur la position comme /html/body/div[3]/div[2], qui se cassent lorsque la mise en page change.
4. Quelle est la différence entre findElement et findElements ?
findElement renvoie la première correspondance et lève NoSuchElementException s'il n'y en a aucune. findElements renvoie une liste, qui est vide si rien ne correspond, ce qui est donc utile pour vérifier qu'un élément n'est pas présent.
5. Quelle est la différence entre driver.close() et driver.quit() ?
close() ferme la fenêtre courante. quit() ferme toutes les fenêtres et met fin à la session. Utilisez quit() dans le teardown pour qu'aucun processus de navigateur ne soit laissé en arrière-plan.
Attentes et tests instables
6. Quels sont les types d'attentes ?
| Attente | Fonctionnement |
|---|---|
| Implicite | Un délai d'attente global pour la recherche d'éléments |
| Explicite | Attend une condition spécifique sur un élément spécifique |
| Fluent | Une attente explicite avec intervalle d'interrogation personnalisé et exceptions ignorées |
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
WebElement button = wait.until(ExpectedConditions.elementToBeClickable(By.id("submit")));
Préférez les attentes explicites. Mélanger attentes implicites et explicites peut provoquer des délais imprévisibles.
7. Pourquoi ne faut-il pas utiliser Thread.sleep ?
Il attend toujours la durée complète, ce qui ralentit la suite, et c'est encore trop court un jour de lenteur. Une attente basée sur une condition se poursuit dès que la condition est remplie et échoue avec un message clair dans le cas contraire.
8. Qu'est-ce qui cause les tests instables, et comment les corriger ?
Causes courantes et corrections :
- Timing : utilisez des attentes explicites pour la condition exacte, pas des sleeps.
- Données partagées ou résiduelles : créez des données de test par test et nettoyez-les.
- Dépendance entre les tests : rendez chaque test indépendant et exécutable seul.
- Localisateurs instables : ajoutez des identifiants de test et évitez les chemins basés sur la position.
- Animations et superpositions : attendez que la superposition disparaisse ou désactivez les animations dans l'environnement de test.
- Problèmes d'environnement : stabilisez l'environnement de test, et vérifiez le réseau et les appels tiers.
- Interférences parallèles : isolez l'état par thread.
Mettez un test instable en quarantaine pour qu'il ne bloque pas tout le monde, puis corrigez-le correctement. N'ajoutez pas simplement des retries partout, car cela masque de vrais bugs.
9. Qu'est-ce que StaleElementReferenceException ?
L'élément que vous avez trouvé n'est plus attaché à la page, généralement parce que la page s'est re-rendue. Corrigez cela en localisant à nouveau l'élément juste avant de l'utiliser, ou en attendant le nouvel élément, plutôt que de conserver des références pendant longtemps.
10. Comment gérer les éléments qui ne sont pas cliquables (ElementClickInterceptedException) ?
Quelque chose couvre l'élément, comme une bannière ou une superposition de chargement. Attendez que la superposition disparaisse, faites défiler l'élément dans la vue, ou fermez la bannière. Utiliser un clic JavaScript doit être un dernier recours, car un vrai utilisateur ne pourrait pas cliquer dessus et le test masquerait un vrai bug.
Gérer les fonctionnalités des pages
11. Comment gérez-vous les listes déroulantes, les alertes, les frames et les fenêtres ?
- Listes déroulantes : la classe Select pour les éléments select standards, et des étapes basées sur des clics pour les listes personnalisées.
- Alertes : driver.switchTo().alert() pour accepter, rejeter ou lire.
- Frames : switchTo().frame(...) puis retour à defaultContent().
- Fenêtres et onglets : récupérer les handles de fenêtre, basculer vers la nouvelle, puis revenir.
12. Comment gérez-vous les téléversements et téléchargements de fichiers ?
Pour les téléversements, envoyez le chemin du fichier à l'élément input type="file" avec sendKeys. Pour les téléchargements, définissez le répertoire de téléchargement du navigateur dans les options et attendez que le fichier apparaisse, puis vérifiez son nom et son contenu.
13. Comment exécuter du JavaScript dans Selenium ?
Via JavascriptExecutor.executeScript, par exemple pour faire défiler la page ou lire une valeur inaccessible via l'API. À utiliser avec parcimonie.
14. Qu'est-ce que le mode headless ?
Le navigateur s'exécute sans fenêtre visible, ce qui est plus rapide et fonctionne sur les serveurs et en CI. Vérifiez avec une exécution visible lors du débogage, et contrôlez la taille du viewport, car les mises en page peuvent différer.
Conception de framework
15. Qu'est-ce que le Page Object Model ?
Chaque page ou composant est une classe qui contient ses localisateurs et les actions associées. Les tests appellent des méthodes telles que loginPage.loginAs(user) et ne touchent pas directement aux localisateurs. Quand l'interface change, vous corrigez une seule classe au lieu de nombreux tests.
class LoginPage:
def __init__(self, driver):
self.driver = driver
def login_as(self, user, password):
self.driver.find_element(By.ID, "user").send_keys(user)
self.driver.find_element(By.ID, "pass").send_keys(password)
self.driver.find_element(By.ID, "submit").click()
16. Que doit contenir un bon framework de test ?
Un runner de tests (TestNG, JUnit, pytest), des page objects, une factory de drivers pour différents navigateurs, une configuration par environnement, une gestion des données de test, des helpers pour les attentes, du reporting, de la journalisation, des captures d'écran en cas d'échec et une intégration CI.
17. Comment gérez-vous les données de test ?
Créez les données dont un test a besoin via une API ou une configuration de base de données au démarrage, pas via l'interface, et supprimez-les ensuite. Conservez les données dans des fichiers ou des builders, pas codées en dur dans les tests, et évitez les tests qui dépendent de données laissées par un autre test.
18. Comment exécuter des tests en parallèle ?
Utilisez la fonctionnalité de parallélisme du runner, donnez à chaque thread son propre driver (par exemple avec ThreadLocal), gardez les tests indépendants et exécutez sur Selenium Grid ou un service de navigateurs cloud pour passer à l'échelle sur plusieurs navigateurs.
19. Qu'est-ce que Selenium Grid ?
Un système avec un hub et des nœuds (ou une configuration distribuée dans Grid 4) qui exécute des tests sur différents navigateurs et systèmes d'exploitation en parallèle. Il réduit le temps d'exécution total et permet de couvrir davantage de navigateurs.
Stratégie et scénarios
20. Que faut-il automatiser avec Selenium, et que faut-il éviter ?
Automatisez les flux stables, à forte valeur et répétables comme la connexion, le paiement et les parcours de régression critiques. N'automatisez pas les vérifications ponctuelles, les interfaces qui changent fréquemment ou ce qui est mieux testé à un niveau inférieur. Une suite saine comporte beaucoup de tests unitaires et d'API, moins de tests d'interface et un petit ensemble de flux de bout en bout.
21. Comment testez-vous une application avec un captcha ou une connexion à deux facteurs ?
N'essayez pas de les contourner dans le test. Utilisez un environnement de test où ils sont désactivés, un compte de test avec un code fixe ou un flag de contournement, ou une API de test pour créer une session.
22. Un test passe en local mais échoue en CI. Que vérifiez-vous ?
Les versions du navigateur et du driver, la taille d'écran et les différences en mode headless, les temps d'attente sur des machines plus lentes, les données d'environnement, l'accès réseau, les fuseaux horaires et la locale, et les exécutions parallèles qui partagent des données. Capturez des captures d'écran, le code source de la page et les logs en cas d'échec pour comparer.
23. Comment choisir entre Selenium, Playwright et Cypress ?
Selenium prend en charge de nombreux langages et navigateurs et dispose d'un écosystème immense. Playwright et Cypress offrent des attentes intégrées, une configuration plus simple et de bons outils de débogage, et peuvent mieux convenir aux nouveaux projets. Le bon choix dépend du langage, des besoins en navigateurs et des compétences de l'équipe. Donnez vos raisons, pas une préférence de marque.
24. Décrivez-moi l'automatisation d'un parcours de paiement.
« Je créerais un utilisateur et un produit via l'API, puis je me connecterais via l'interface ou je réutiliserais une session. Un page object pour chaque étape : recherche, produit, panier et paiement. J'utiliserais un moyen de paiement de test, j'attendrais l'élément de confirmation, je vérifierais la commande via l'interface et l'API, et je prendrais une capture d'écran en cas d'échec. Le test nettoierait sa commande, s'exécuterait en parallèle et tournerait dans le pipeline à chaque merge. »
Comment se préparer
Écrivez une petite suite pour un site de démonstration avec des page objects, des attentes explicites, des captures d'écran en cas d'échec et une exécution en CI. Entraînez-vous à expliquer comment vous avez corrigé un test instable, avec la cause et la modification. Soyez prêt à coder un localisateur et une attente en direct. Consultez notre guide de l'assistant d'entretien de codage pour les routines d'entraînement et le guide de l'entretien comportemental pour l'étape des soft skills.
Dites vos réponses à voix haute, et relisez une transcription pour les passages vagues comme « il suffit d'ajouter une attente ». Respectez les règles de l'employeur concernant les outils d'IA lors de tout entretien en direct.
Entraînez-vous aux réponses d'entretien Selenium avec YesToTheOffer
Passez un entretien technique simulé, expliquez votre framework à voix haute et examinez votre transcription par la suite. 30 minutes gratuites, sans abonnement.



