Problème de validation dans les tests automatisés
Dans les applications web, les mécanismes de vérification (comme les CAPTCHA) sont fréquemment utilisés pour prévenir les accès automatiques ou malveillants. Cependant, ces outils compliquent l'automatisation des tests UI, car les scripts ne peuvent pas interagir directement avec ces éléments dynamiques.
Stratégies de contournement
- Entrée maneulle du CAPTCHA : simple mais réduit le niveau d'automatisation.
- CAPTCHA universel en environnement de test : une valeur fixe permet d'éviter l'interaction humaine, mais n'est valable qu’en test.
- Utilisation des cookies de session : si un utilisateur est déjà authentifié, ses cookies peuvent être récupérés et injectés pour maintenir la session sans reconnexion.
- Reconnaissance d’images (OCR) : analyse visuelle des codes, mais dépend de la clarté et de la complexité du CAPTCHA.
- Manipulation de glisser-déposer : nécessite une logique avancée pour simuler le mouvement du curseur.
Implémentation pratique avec Selenium
L'une des approches les plus efficaces consiste à réutiliser les cookies de session après une authentification initiale.
Étape 1 : Dépendances Maven
<dependencies>
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>5.8.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
Étape 2 : Configuration du navigateur
public class TestDriverConfig {
protected static WebDriver browser;
public TestDriverConfig() {
setupDriver();
}
private WebDriver setupDriver() {
WebDriverManager.chromedriver().setup();
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
browser = new ChromeDriver(options);
browser.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
return browser;
}
}
Étape 3 : Injection des cookies
Pour réutiliser une session existante, il est essentiel d'ajouter les cookies après avoir accédé au domaine cible.
@Test
public void injecterCookieSession() throws InterruptedException {
// Récupérer le cookie depuis une session valide
String jsessionId = "17B63B2D3686F19DC921FDDEFE775505";
Cookie sessionCookie = new Cookie.Builder("JSESSIONID", jsessionId)
.domain("47.97.70.52")
.path("/")
.build();
// Accéder au site avant d'ajouter le cookie
browser.get("http://47.97.70.52:8081/index.html");
// Ajout du cookie
browser.manage().addCookie(sessionCookie);
// Recharger la page : la session est maintenant active
browser.get("http://47.97.70.52:8081/index.html");
}
⚠️ Important : Le cookie ne peut être ajouté que si la requête HTTP a été effectuée sur le domaine cible. Sinon, l’opération échouera silencieusement.
Conclusion
La gestion des cookies offre une solution robuste pour éviter les étapes de connexion lors des tests automatisés, surtout dans les environnements de développement ou de test. Cette méthode permet d'accélérer les scénarios de test tout en préservant l'intégrité fonctionnelle.