Abonnements
PRODUIT
SOLUTIONS
par cas d'utilisation
AI Gestion du leadFacturationRéseaux SociauxGestion de projetGestion des donnéespar industrie
en savoir plus
BlogGabaritsVidéosYoutubeRESSOURCES
COMMUNAUTÉS ET RÉSEAUX SOCIAUX
PARTENAIRES
Fonctionnalité | Mode sans tête | Mode régulier |
---|---|---|
Vitesse d'exécution | Plus rapide (2 à 15 fois) | Standard et repiquage |
Utilisation de la mémoire | Coût en adjuvantation plus élevé. | Meilleure performance du béton |
Débogage visuel | Indisponible | Disponible |
Intégration CI/CD | Bien adapté | Moins flexible |
Dans ce guide, vous apprendrez à configurer des navigateurs Java headless, à configurer des outils tels que Selenium et HtmlUnit et à optimiser les flux de travail d'automatisation pour plus de rapidité et de fiabilité.
Voici comment vous pouvez configurer un navigateur Java headless en utilisant les bons outils et configurations.
Pour commencer, vous aurez besoin des éléments suivants :
Une fois que vous les avez, intégrez-les dans votre projet en utilisant Maven or gradle.
Si vous utilisez Maven, créez un nouveau projet et incluez les dépendances suivantes dans votre pom.xml
fichier:
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.6.0</version>
</dependency>
<dependency>
<groupId>org.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
<version>4.10.0</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.6.1</version>
<scope>test</scope>
</dependency>
</dependencies>
Vous devrez également définir la propriété système pour ChromeDriver dans votre code :
System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
Cela garantit que Selenium peut localiser le ChromeDriver lors de l'exécution des tests.
Les navigateurs headless sont parfaits pour les tests automatisés et le scraping Web. Par exemple, Optimizely ont réussi à réduire considérablement leur temps de test - de 8 heures à seulement 1 heure - en utilisant des tests parallèles avec des outils comme Automatisation de BrowserStack.
« Selenium automatise les navigateurs. C'est tout ! » - Selenium
« HtmlUnit est un « navigateur sans interface graphique pour les programmes Java ». Il modélise les documents HTML et fournit une API qui vous permet d'appeler des pages, de remplir des formulaires, de cliquer sur des liens, etc., comme vous le faites dans votre navigateur « normal ». » - HtmlUnit
La configuration de Selenium WebDriver en mode headless peut améliorer considérablement les performances des tests. Le mode headless de Chrome, introduit dans la version 59, permet d'automatiser les tests sans interface graphique, ce qui les rend plus rapides et plus efficaces.
Pour activer le mode sans tête dans Chrome, utilisez le ChromeOptions
classe. Vous trouverez ci-dessous deux façons de le configurer :
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
WebDriver driver = new ChromeDriver(options);
Ou bien:
ChromeOptions options = new ChromeOptions();
options.setHeadless(true);
WebDriver driver = new ChromeDriver(options);
Une fois que votre navigateur headless est prêt, vous pouvez commencer à automatiser les tâches. Voici une comparaison rapide des navigateurs headless et classiques :
Fonctionnalité | Mode sans tête | Mode régulier |
---|---|---|
Vitesse d'exécution | 2 à 15 fois plus rapide | Standard et repiquage |
Utilisation de la mémoire | Coût en adjuvantation plus élevé. | Meilleure performance du béton |
La consommation de ressources | Coût en adjuvantation plus élevé. | Meilleure performance du béton |
Débogage visuel | Indisponible | Disponible |
Intégration CI/CD | Bien adapté | Moins flexible |
Cette comparaison met en évidence pourquoi les navigateurs headless sont idéaux pour les workflows d’automatisation, en particulier dans les pipelines CI/CD.
Lorsque vous travaillez avec des navigateurs sans tête, gardez ces conseils à l’esprit :
« Bien que PhantomJs ne soit pas en soi un framework de test, c'est un très bon canari dans une mine de charbon pour vous donner une certaine confiance ; si vos tests réussissent, vous pouvez avoir un haut degré de confiance que votre code est correct. » - Rob Friesel, auteur de Livre de recettes PhantomJS
Voici quelques commandes essentielles pour démarrer avec l’automatisation Selenium :
// Navigate to a URL
driver.get("https://your-website.com");
// Locate and interact with elements
WebElement element = driver.findElement(By.id("elementId"));
element.sendKeys("test input");
// Capture a screenshot
File screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(screenshot, new File("./screenshot.png"));
Pour des tests stables, agrandissez la fenêtre du navigateur après le chargement de la page et définissez le niveau de zoom sur 100 %. Cela garantit un placement cohérent des éléments et améliore la fiabilité des tests.
HtmlUnit est un outil léger conçu pour les tâches d'automatisation Java où le rendu visuel n'est pas nécessaire. C'est une option solide pour rationaliser les processus qui ne nécessitent pas une interface de navigateur complète.
HtmlUnit apporte une gamme de fonctionnalités, ce qui en fait un choix pratique pour l'automatisation sans tête :
Catégorie d'entité | Compétences |
---|---|
Support de protocole | Gère HTTP, HTTPS et SSL complet |
Authentification | Prend en charge l'authentification de base et NTLM |
JavaScript | Fonctionne avec les bibliothèques AJAX avancées et la gestion des événements |
Traitement des demandes | Prend en charge des méthodes telles que POST, GET, HEAD et DELETE |
Options réseau | Inclut la prise en charge du serveur proxy et les paramètres d'en-tête personnalisés |
Émulation de navigateur | Simule des navigateurs comme Chrome, Firefox et Edge |
Sa nature sans tête accélère l’exécution des tests, ce qui en fait une solution idéale pour les pipelines d’intégration continue.
« HtmlUnit est un « navigateur sans interface graphique pour les programmes Java ». Il modélise les documents HTML et fournit une API qui vous permet d'appeler des pages, de remplir des formulaires, de cliquer sur des liens, etc., comme vous le faites dans votre navigateur « normal ». » - HtmlUnit
Démarrer avec HtmlUnitDriver est simple :
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>htmlunit3-driver</artifactId>
<version>4.29.0</version>
</dependency>
final HtmlUnitDriverOptions driverOptions = new HtmlUnitDriverOptions(BrowserVersion.FIREFOX);
driverOptions.setCapability(HtmlUnitOption.optThrowExceptionOnScriptError, false);
HtmlUnitDriver driver = new HtmlUnitDriver(driverOptions);
Cette configuration est rapide et efficace, ce qui en fait un choix judicieux pour les tests axés sur les performances plutôt que sur l'émulation complète du navigateur.
Bien que HtmlUnit ne soit pas idéal pour tester des applications front-end complexes et lourdes en JavaScript, il excelle dans des tâches telles que le scraping Web de base, les tests d'API et les soumissions de formulaires automatisées. La dernière version (version 4.10.0 du 22 février 2025) améliore la gestion de JavaScript et ajoute davantage de fonctionnalités, ce qui permet à HtmlUnit de rester pertinent dans les flux de travail d'automatisation modernes.
Des outils et techniques avancés peuvent faire passer l'automatisation de votre navigateur sans tête Java au niveau supérieur, rendant les tâches de test et de scraping plus efficaces et plus efficientes.
La capture de captures d'écran pleine page est un besoin courant pour le débogage ou la documentation. Des outils comme un coup simplifiez ce processus et fournissez des résultats de haute qualité.
// Using Selenium WebDriver with aShot
WebDriver driver = new ChromeDriver(options);
Screenshot screenshot = new AShot()
.shootingStrategy(ShootingStrategies.viewportPasting(1000))
.takeScreenshot(driver);
ImageIO.write(screenshot.getImage(), "PNG", new File("full-page-screenshot.png"));
Voici quelques paramètres recommandés pour garantir la cohérence :
Paramètre | Valeur recommandée | Objectif |
---|---|---|
Largeur de l'écran | 1920px | Résolution de bureau standard |
Hauteur de l'écran | 1080px | Assure une capture cohérente |
Format Image | PNG | Maintient une qualité sans perte |
DPI | 96 | Densité d'écran standard |
Une fois les captures d’écran configurées, l’étape suivante consiste à gérer les sessions pour des flux de travail automatisés plus fluides.
La gestion des sessions est essentielle pour maintenir l'état des interactions automatisées, en particulier dans les scénarios nécessitant une authentification. Vous pouvez enregistrer et réutiliser les cookies pour rationaliser ce processus :
// Save cookies after successful login
Set<Cookie> cookies = driver.manage().getCookies();
FileWriter writer = new FileWriter("cookies.json");
new Gson().toJson(cookies, writer);
writer.close();
// Load cookies for subsequent sessions
FileReader reader = new FileReader("cookies.json");
Cookie[] cookies = new Gson().fromJson(reader, Cookie[].class);
for (Cookie cookie : cookies) {
driver.manage().addCookie(cookie);
}
Pour les applications avec authentification à deux facteurs (2FA), la génération de mots de passe à usage unique (OTP) par programmation peut simplifier le processus :
// Generate OTP using secret key
Authenticator authenticator = new Authenticator();
String otp = authenticator.getTOTPCode(System.getenv("2FA_SECRET_KEY"));
Pour améliorer les performances et réduire le temps d’exécution, envisagez ces stratégies :
ChromeOptions options = new ChromeOptions();
options.addArguments("--disable-gpu");
options.addArguments("--disable-dev-shm-usage");
options.addArguments("--no-sandbox");
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
wait.until(ExpectedConditions.presenceOfElementLocated(By.id("dynamic-content")));
@Test(threadPoolSize = 3, invocationCount = 10)
public void parallelTest() {
// Your test code here
}
Pour les applications lourdes en JavaScript, Unité HTML offre une alternative plus rapide à l'émulation complète du navigateur. Les tests montrent que HtmlUnit peut traiter des tâches jusqu'à 60 % plus rapidement que Chrome headless pour les tâches de scraping Web de base.
Ces méthodes avancées non seulement élargissent ce que vous pouvez accomplir, mais vous aident également à travailler plus efficacement.
Voici comment relever les défis d’automatisation fréquents avec des attentes explicites et des paramètres de navigateur appropriés.
Problèmes d'interaction entre les éléments
Rencontre ElementClickInterceptedException
? Cela se produit souvent lorsque des éléments sont masqués ou pas entièrement chargés. Corrigez ce problème en ajustant les options du navigateur et en utilisant des attentes explicites :
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
options.addArguments("--disable-gpu");
options.addArguments("--window-size=1920,1200");
options.addArguments("--ignore-certificate-errors");
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
wait.until(ExpectedConditions.elementToBeClickable(By.id("target-element")));
Gestion du contenu dynamique
Pour les applications qui utilisent beaucoup JavaScript, augmentez les temps d'attente pour tenir compte des réponses AJAX. Les applications monopages, en particulier, peuvent nécessiter jusqu'à 30 secondes pour que tout le contenu soit chargé lors du rendu initial.
Stratégies de débogage
Lorsque vous travaillez sans interface visuelle en mode headless, comptez sur ces méthodes pour déboguer efficacement :
driver.getScreenshotAs(OutputType.FILE)
pour capturer l'état actuel.driver.getPageSource()
.driver.manage().logs().get(LogType.BROWSER)
.Intégrez ces outils de débogage dans votre pipeline CI/CD pour renforcer votre processus d’automatisation des tests.
Une fois les problèmes courants résolus, intégrez vos tests headless dans un workflow CI/CD pour des contrôles de qualité transparents.
Configuration de l'environnement
Configurez votre environnement de test avec des paramètres Chrome optimisés :
ChromeOptions options = new ChromeOptions();
options.addArguments("--no-sandbox");
options.addArguments("--disable-dev-shm-usage");
options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
Stratégie d'exécution des tests
Exécutez des tests parallèles pour améliorer l'efficacité :
@Test(threadPoolSize = 3, invocationCount = 10)
public void parallelTests() {
ThreadLocal<WebDriver> driver = new ThreadLocal<>();
driver.set(new ChromeDriver(options));
try {
// Test implementation
} finally {
driver.get().quit();
}
}
Gestion des ressources
Prévenez les fuites de mémoire en assurant un nettoyage approprié après chaque test :
@AfterMethod
public void cleanup() {
if (driver != null) {
driver.quit();
driver = null;
}
}
Ajoutez une journalisation détaillée pour un meilleur dépannage :
private static final Logger logger = LoggerFactory.getLogger(TestClass.class);
try {
// Test execution
} catch (Exception e) {
logger.error("Test failed: " + e.getMessage());
File screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(screenshot, new File("error-" + System.currentTimeMillis() + ".png"));
throw e;
}
Ces étapes vous aideront à créer un cadre d’automatisation des tests fiable et efficace.
Les navigateurs headless ont révolutionné les tests Java en réduisant les coûts d'infrastructure de 40 % et en réduisant le temps de test de 3 jours à seulement 8 heures. Leur combinaison de rapidité, d'efficacité et de fiabilité en a fait un élément clé des flux de travail de développement modernes.
Voici quelques avantages remarquables :
Si vous souhaitez approfondir votre compréhension, consultez les ressources ci-dessous.
Améliorez vos connaissances avec ces outils et guides utiles :
Documentation officielle
Outils et bibliothèques avancés
Une success story qui mérite d'être mentionnée est celle d'une start-up fintech qui a adopté Puppeteer pour l'automatisation de ses tests. Leurs résultats ? Une augmentation de 60 % de la couverture des tests et une réduction massive du temps de test, de 3 jours à seulement 8 heures par version.
Selenium WebDriver et HtmlUnit offrent tous deux des options fiables et évolutives pour l'automatisation Java. Avec les modes headless natifs désormais disponibles dans Chrome (depuis la version 59) et Firefox (depuis la version 56), la mise en place de tests automatisés et de scraping Web n'a jamais été aussi simple.