Les tests constituent une phase essentielle du développement logiciel et sont absolument indispensables pour obtenir un logiciel irréprochable aligné sur les besoins des clients. Tester un logiciel manuellement peut demander beaucoup de temps et d’efforts, surtout lorsque cela est réalisé par des personnes manquant d’expérience et des compétences nécessaires dans ce domaine.
Mais qu’en est-il des machines ? C’est précisément ce dont nous allons discuter dans cet article — les tests d’automatisation avec Selenium.
Selenium est l’un des frameworks open-source les plus populaires et les plus utilisés pour l’automatisation web. Il accélère les tests, minimise les erreurs humaines et garantit des résultats cohérents. Cependant, comme tout framework ou outil, il présente ses propres avantages et inconvénients. L’article suivant aborde les principales limitations et défis des tests d’automatisation avec Selenium, ainsi que des solutions potentielles pour les surmonter.
Principaux Défis de Selenium
Sans plus tarder, passons en revue les défis les plus courants des tests d’automatisation :
1. Gestion des Popups et des Alertes
Dans l’automatisation web, une alerte est une boîte de message contenant des informations ou des notifications pour l’utilisateur. Elle peut nécessiter des actions supplémentaires, comme la saisie de données, ou demander une permission pour passer aux étapes suivantes. L’interaction avec une application web implique de gérer différents types de popups et d’alertes. Parmi eux, nous pouvons distinguer les groupes suivants :
- Notifications au niveau du navigateur
- Alertes web (alertes JavaScript)
- Popups au niveau du système d’exploitation
Notifications au niveau du navigateur
Dans ce groupe, nous pouvons inclure des exemples d’alertes tels que :
- « Connaître votre localisation »
- « Accéder à la caméra/au microphone »
- « Afficher les notifications »
Solutions pour les notifications au niveau du navigateur
Étant donné que ces alertes sont liées au niveau du navigateur, leur gestion varie selon le navigateur. Par exemple, dans le cas du navigateur Chrome, nous pouvons utiliser la classe ChromeOptions, qui inclut des méthodes spécifiques pour configurer les capacités de ChromeDriver. Vous trouverez ci-dessous des extraits de code pour gérer les alertes « Géolocalisation » et « Notifications ».
public class BrowserAlert {
protected WebDriver webDriver;
@BeforeMethod (alwaysRun = true)
public void setUp(){
WebDriverManager.chromedriver().setup();
// create object of ChromeOptions class
ChromeOptions options = new ChromeOptions();
// disable notifications
options.addArguments("--disable-notifications");
// disable geolocation
options.addArguments("--disable-geolocation");
webDriver = new ChromeDriver(options);
}
}
public class BrowserAlert {
protected WebDriver webDriver;
@BeforeMethod (alwaysRun = true)
public void setUp(){
WebDriverManager.chromedriver().setup();
// create Map to store preferences
Map prefs = new HashMap<>();
// set appropriate value: 1-allow; 2-block; 0-default state
// notifications
prefs.put("profile.default_content_setting_values.notifications", 1);
// geolocation
prefs.put("profile.default_content_setting_values.geolocation", 1);
// create object of ChromeOptions class
ChromeOptions options = new ChromeOptions();
// set Experimental Option - prefs
options.setExperimentalOption("prefs", prefs);
// initialize ChromeDriver with predefined settings
webDriver = new ChromeDriver(options);
}
}
Alertes web
Les types d’alertes suivants sont disponibles dans Selenium :
- Alerte Simple : Utilisée pour afficher des informations à l’utilisateur. Une alerte simple contient un message avec un bouton [OK].
- Alerte de Saisie : Cette alerte contient un champ de texte dans sa boîte et est utilisée lorsque l’utilisateur doit y saisir des données.
- Alerte de Confirmation : Cette alerte offre la possibilité de l’accepter ou de la rejeter (en utilisant les boutons [OK] ou [Annuler]).
Solutions pour les alertes web
Les alertes, comme mentionné ci-dessus, peuvent être gérées via l’interface Alert, disponible dans Selenium WebDriver. Cette interface propose des méthodes appropriées pour interagir avec les alertes :
- void accept()
- void dismiss()
- String getText()
- void sendKeys(String text)
Voici quelques extraits de code pour la gestion des alertes :
Accepter l’alerte :
wait.until(ExpectedConditions.alertIsPresent());
Alert alert = webDriver.switchTo().alert();
// press the [OK] button
alert.accept();
Rejeter l’alerte :
wait.until(ExpectedConditions.alertIsPresent());
Alert alert = webDriver.switchTo().alert();
// press the [Cancel] button
alert.dismiss();
Obtenir le texte de l’alerte :
wait.until(ExpectedConditions.alertIsPresent());
Alert alert = webDriver.switchTo().alert();
// get Alert text
String alertText = alert.getText();
Saisir des données dans le champ texte de l’alerte :
wait.until(ExpectedConditions.alertIsPresent());
Alert alert = webDriver.switchTo().alert();
// enter text into Alert
alert.sendKeys("Sample Alert text");
alert.accept();
Popups au niveau du système d’exploitation
Lors de l’automatisation d’applications web, il arrive que nous devions interagir avec des popups de bureau (par exemple, des popups d’importation/exportation de fichiers, etc.). Cependant, il est impossible de gérer de tels popups au niveau du système d’exploitation avec Selenium WebDriver, car il n’interagit qu’avec les navigateurs.
Solutions pour les popups au niveau du système d’exploitation
Dans de telles situations, nous devons analyser et intégrer des outils tiers (comme AutoIT, WinAppDriver, etc.), qui offrent la possibilité d’automatiser les applications Windows.
2. Gestion du Contenu Dynamique
De nombreuses applications et sites web contiennent des éléments web dynamiques, caractérisés par les particularités suivantes :
- Les éléments apparaissent sur la page après un certain délai
- Les éléments deviennent visibles sur la page après des actions spécifiques de l’utilisateur
- Des éléments différents sont disponibles pour différents utilisateurs, selon leurs besoins
- Les éléments ont des attributs dynamiques (par exemple, des identifiants)
L’automatisation d’applications web à contenu dynamique peut devenir complexe dans les tests d’automatisation avec Selenium. En effet, les localisateurs d’éléments web peuvent changer fréquemment, entraînant des causes potentielles d’échecs des tests.
Solutions pour la Gestion du Contenu Dynamique
Les éléments web dynamiques peuvent être gérés grâce aux options suivantes :
1. Utilisation des attentes dans Selenium WebDriver (Implicite, Explicite et Fluente)
- Attente implicite. Cela demande au WebDriver d’attendre un certain délai avant de lancer une exception. Les attentes implicites peuvent être déclarées au format suivant :
webDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(30));
- Attente explicite. Il s’agit de demander au WebDriver d’attendre que des conditions spécifiques soient remplies ou qu’un délai maximum soit dépassé avant de lancer une exception. Plusieurs types de conditions attendues (à titre d’exemples), utilisables dans l’attente explicite, sont listés ci-dessous :
- alertIsPresent()
- elementToBeClickable()
- elementToBeSelected()
- frameToBeAvailableAndSwitchToIt()
- presenceOfElementLocated()
- visibilityOfElementLocated()
Pour déclarer l’attente explicite, nous devons créer un objet de la classe WebDriverWait :
WebDriverWait wait = new WebDriverWait(webDriver, Duration.ofSeconds(30));
wait.until(ExpectedConditions.elementToBeClickable(By.id("element_id")));
- Attente fluente. Cela définit la durée maximale d’attente pour qu’une condition appropriée soit remplie et la fréquence à laquelle vérifier cette condition. Les utilisateurs peuvent également configurer l’attente pour ignorer certaines exceptions lors de la recherche d’un élément sur la page.
Wait wait = new FluentWait<>(webDriver)
.withTimeout(Duration.ofSeconds(30))
.pollingEvery(Duration.ofSeconds(20))
.ignoring(NoSuchElementException.class);
wait.until(ExpectedConditions.alertIsPresent());
}
2. Utilisation de sélecteurs XPath / CSS dynamiques
Dans le cas d’un contenu dynamique, il est possible que nous ne puissions pas identifier les éléments web à l’aide de localisateurs tels que id, name, tagName, className, etc. Dans de telles situations, des sélecteurs XPath ou CSS personnalisés doivent être utilisés.
3. Gestion des Délais et Synchronisation des Événements
Ce défi est devenu l’un des problèmes les plus courants et répandus dans les tests d’automatisation. Des problèmes de synchronisation surviennent lorsque nous devons effectuer des opérations sur des éléments web qui ne sont pas encore présents sur la page ou qui ne sont pas dans un état approprié (non cliquables, non activés, non visibles, etc.). Dans la plupart des cas, ces problèmes entraînent des échecs de scripts de test. Il est donc crucial de résoudre ces défis pour améliorer la stabilité et la précision des scripts de test.
Solutions pour la Gestion des Délais
Pour résoudre les problèmes mentionnés ci-dessus, les méthodes suivantes sont disponibles :
- Utilisation des attentes (Implicite, Explicite, Fluente). Celles-ci sont accessibles dans Selenium WebDriver (comme décrit dans le paragraphe précédent)
- Utilisation des méthodes de délai, telles que pageLoadTimeout(), scriptTimeout(), etc. Les valeurs de ces délais sont configurées au niveau du WebDriver
webDriver.manage().timeouts().pageLoadTimeout(Duration.ofSeconds(50));
webDriver.manage().timeouts().scriptTimeout(Duration.ofSeconds(60));
4. Rapports Limités
Les rapports jouent un rôle crucial dans l’ensemble du processus d’automatisation des tests. Des rapports détaillés aident les ingénieurs QA en automatisation à analyser les résultats et à obtenir des informations précises sur l’exécution des tests, notamment le temps d’exécution, le nombre de cas de test réussis/échoués, et les erreurs pour les tests en échec (y compris les captures d’écran). Cependant, en raison de ses limitations, Selenium ne peut pas générer des rapports complets. C’est pourquoi la génération et la maintenance des rapports sont également devenues des défis courants dans l’automatisation avec Selenium.
Solutions pour les Rapports Limités
Des solutions sont disponibles pour générer des rapports pouvant interagir avec Selenium et offrir la possibilité d’obtenir des résultats détaillés de l’exécution des tests. En général, nous pouvons classer les outils de reporting en deux groupes :
- Les rapports intégrés sont fournis par le framework d’automatisation de tests approprié (selon le langage de programmation). Par exemple, en Java, nous pouvons utiliser des frameworks comme JUnit ou TestNG, qui incluent des fonctionnalités par défaut pour générer des rapports au format HTML. Voici des exemples de tels rapports :
TestNG :
JUnit :
- Les outils externes (bibliothèques) ne sont pas inclus par défaut dans le framework de test et nécessitent une configuration et une intégration supplémentaires avec le projet d’automatisation. Parmi ces outils, on peut citer Allure et Extent Reports.
Allure :
Extent Report :
Bien sûr, chaque outil de reporting a ses propres spécifications, avantages et limitations. Il est donc nécessaire d’analyser tous les avantages et inconvénients des outils existants et de sélectionner le plus adapté et le plus efficace pour votre projet.
5. Gestion Limitée des Captchas
À l’ère du progrès rapide des technologies numériques, la sécurité des données reste l’une des tâches les plus critiques du développement logiciel. Les pirates informatiques utilisent souvent des bots pour accéder aux informations confidentielles des utilisateurs, entraînant la perte de données essentielles et leur utilisation non autorisée. Une mesure pouvant aider à lutter contre les bots est le Captcha.
Cette technologie est utilisée pour déterminer si l’utilisateur est un humain ou un bot. Les Captchas sont des composants dynamiques par nature, ce qui implique qu’ils ne peuvent être résolus avec succès que par une analyse humaine. La gestion des Captchas est également l’un des défis de Selenium, pouvant entraîner des échecs de tests lors du processus d’automatisation.
Solutions pour la Gestion des Captchas
Bien que la gestion des Captchas dans Selenium soit une tâche délicate et ne soit pas considérée comme une bonne pratique, il existe quelques façons de gérer les Captchas :
- Désactiver le Captcha dans l’environnement de test
- Ajouter des attentes dans le script de test et procéder manuellement à la gestion du Captcha
Cependant, il est important de rappeler que tous les scénarios de test ne peuvent pas être automatisés. Certains scénarios sont mieux adaptés à une vérification manuelle. Les tests impliquant des interactions avec des Captchas font partie de ces scénarios.
Tests d’Applications Mobiles et Bureau
Bien entendu, Selenium est un framework largement utilisé pour automatiser les tests d’applications web. Il prend en charge l’interaction avec les navigateurs les plus populaires (Chrome, Edge, Firefox, Safari) sur différents systèmes d’exploitation de bureau (Windows, Mac OS, Linux). Cependant, lorsqu’il s’agit d’automatiser les tests d’applications mobiles ou de bureau, Selenium ne nous offre pas de telles capacités.
Solutions pour les Tests d’Applications Mobiles et Bureau
Comme solution alternative pour automatiser les applications mobiles, il existe Appium. C’est un framework open-source utilisé pour automatiser les applications natives, hybrides et web mobiles sur les plateformes Android et iOS.
Pour les applications de bureau, plusieurs outils sont disponibles, notamment WinAppDriver, Sikulix et Ranorex Studio. Chacun de ces outils a ses propres limitations, il est donc important d’effectuer une analyse approfondie de l’outil avant de commencer à l’utiliser.
Scalabilité
La scalabilité est considérée comme l’un des défis majeurs des tests d’automatisation. L’un des objectifs clés de l’automatisation web est de permettre l’exécution du plus grand nombre possible de tests sur différents navigateurs (avec différentes versions) et systèmes d’exploitation. Cette approche contribue à augmenter la couverture des tests dans un délai minimal.
Selenium WebDriver lui-même offre la possibilité d’exécuter des tests séquentiellement. Cependant, lorsqu’il s’agit d’un grand nombre de tests, cette approche peut prendre du temps et ne pas être aussi efficace que souhaité.
Solutions pour la Scalabilité
Parmi les approches évolutives dans les tests d’automatisation, nous pouvons identifier Selenium Grid. Cet outil vous permet d’exécuter des tests sur plusieurs combinaisons de navigateurs et de systèmes d’exploitation. Cependant, il est important de noter que Selenium Grid ne permet pas d’exécuter des tests sur un navigateur et un système d’exploitation spécifiques simultanément. En alternative, vous pouvez utiliser un outil basé sur le cloud qui offre la possibilité d’exécuter des tests sur plusieurs navigateurs et systèmes d’exploitation en parallèle.
En Résumé
Dans le processus d’automatisation web, nous rencontrons fréquemment divers défis et limitations, étant donné que les technologies changent, se développent et évoluent constamment. Chaque outil et framework utilisé à des fins d’automatisation présente ses propres avantages et inconvénients. Les ingénieurs QA en automatisation doivent être conscients de ces facteurs et les prendre en compte lors de l’utilisation de ces outils.
Selenium ne fait pas exception. C’est un framework puissant pour l’automatisation web, mais il présente également des limitations qui doivent être prises en compte. Cet article a décrit les principaux défis des tests d’automatisation avec Selenium. Malgré ces limitations, il existe des moyens de les résoudre ou de les gérer pour maximiser les avantages de Selenium. Il est important de se rappeler qu’aucun outil n’est parfait ! Nous devons considérer les avantages et les inconvénients de chaque outil.
Qu’il s’agisse de tests manuels ou automatisés (les deux sont des étapes importantes du processus QA), ils doivent être réalisés par une équipe hautement qualifiée.
See how we helped Kazidomi
speed up feature delivery with test automation and become #1 startup in Belgium