À venir : une vidéo démonstrative montrant l'exécution multi-navigateurs, une exploration détaillée du code, des explications sur le fichier POM.xml, ainsi qu'une vue d'ensemble des principaux scripts du projet.
🧪 Projet java_demo
✅ Framework de test automatisé avec Java 21, Selenium 4, Cucumber, TestNG, WebDriverManager, et Maven.
🇫🇷 Présentation
Ce projet permet d'automatiser des scénarios de test sur Google en utilisant Selenium avec Cucumber et TestNG.
✅ Fonctionnalités principales
- ⚙️ Selenium WebDriver (Chrome)
- 🥒 Cucumber (BDD)
- ✅ TestNG (runner)
- 🔎 Exemple de test : recherche Google
- 📦 Maven (
clean
,verify
,install
)
📁 Arborescence
src ├── main │ └── java │ └── com.example.utils │ └── Driver.java ├── test │ ├── java │ │ └── com.example │ │ ├── pages │ │ ├── stepdefs │ │ ├── tests │ │ └── utils │ └── resources │ ├── drivers │ └── features └── target
▶️ Lancer les tests
mvn clean verify
💡 Définition de scénario Gherkin
Feature: Recherche Google
Scenario: L'utilisateur effectue une recherche avec un terme contenant des caractères spéciaux
Given je suis sur la page d'accueil de Google
When je recherche "JavaScript: Le guide complet!"
And j'accepte
Then l'utilisateur voit les résultats suivants :
| JavaScript: Le guide complet - Hondermarck, Olivier - Livres |
| Apprenez à programmer avec JavaScript - OpenClassrooms |
💡 Implémentation d’un step Cucumber
@Then("l'utilisateur voit les résultats suivants :")
public void l_utilisateur_voit_les_resultats_suivants(io.cucumber.datatable.DataTable dataTable) {
// ⏳ Attente explicite jusqu’à ce que la zone des résultats s'affiche
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
wait.until(ExpectedConditions.visibilityOf(GooglePage.firstResultTitle.getElement()));
// 🔍 Récupération de tous les blocs de résultats visibles
List resultats = driver.findElements(By.xpath("//*[@id=\"main\"]//h3/div"));
// 🔡 On nettoie les textes des résultats pour une comparaison plus douce
List textes = resultats.stream()
.map(e -> e.getText().trim().toLowerCase())
.toList();
// 🖨️ Log pour debug : affiche tous les résultats trouvés
System.out.println("\n📋 [DEBUG] Résultats trouvés par Selenium :");
textes.forEach(t -> System.out.println("🔹 " + t.replace("\n", " | ")));
// 📌 Liste des résultats attendus (issus du DataTable dans le fichier .feature)
List attendus = dataTable.asList();
// 🔁 Vérifie que chaque élément attendu est présent dans les résultats réels
for (String attendu : attendus) {
boolean trouve = textes.stream().anyMatch(t -> t.contains(attendu.toLowerCase()));
// 🎯 Log de validation pour chaque résultat attendu
if (trouve) {
System.out.println("✅ Résultat trouvé pour : '" + attendu + "'");
} else {
System.out.println("❌ Aucun résultat ne contient : '" + attendu + "'");
}
// 🧨 Fait échouer le test si un attendu est absent
assertTrue("Aucun résultat ne contient : '" + attendu + "'", trouve);
}
}
🧬 Nettoyage automatique
Le dossier target/
est automatiquement vidé grâce au plugin maven-clean-plugin
.
🇬🇧 English Version
✅ Automated testing framework with Java 21, Selenium 4, Cucumber, TestNG, WebDriverManager, and Maven.
📌 Features
- ⚙️ Selenium WebDriver (Chrome)
- 🥒 Cucumber (BDD)
- ✅ TestNG (test runner)
- 🔎 Example test: Google search automation
- 📦 Maven (
clean
,verify
,install
)
📁 Project Structure
src ├── main │ └── java │ └── com.example.utils │ └── Driver.java ├── test │ ├── java │ │ └── com.example │ │ ├── pages │ │ ├── stepdefs │ │ ├── tests │ │ └── utils │ └── resources │ ├── drivers │ └── features └── target
▶️ Run tests
mvn clean verify
💡 Sample Scenario
Feature: Google Search
Scenario: L'utilisateur effectue une recherche avec un terme contenant des caractères spéciaux
Given je suis sur la page d'accueil de Google
When je recherche "JavaScript: Le guide complet!"
And j'accepte
Then l'utilisateur voit les résultats suivants :
| JavaScript: Le guide complet - Hondermarck, Olivier - Livres |
| Apprenez à programmer avec JavaScript - OpenClassrooms |
💡 Implementing a Cucumber Step
@Then("the user sees the following results:")
public void user_sees_the_following_results(io.cucumber.datatable.DataTable dataTable) {
// ⏳ Explicit wait until the results section is visible
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
wait.until(ExpectedConditions.visibilityOf(GooglePage.firstResultTitle.getElement()));
// 🔍 Retrieve all visible result blocks
List<WebElement> results = driver.findElements(By.xpath("//*[@id=\"main\"]//h3/div"));
// 🔡 Clean up the text for softer comparison
List<String> texts = results.stream()
.map(e -> e.getText().trim().toLowerCase())
.toList();
// 🖨️ Debug log: print all found results
System.out.println("\n📋 [DEBUG] Results found by Selenium:");
texts.forEach(t -> System.out.println("🔹 " + t.replace("\n", " | ")));
// 📌 Expected results from the DataTable in the .feature file
List<String> expected = dataTable.asList();
// 🔁 Check that each expected item is present in the actual results
for (String exp : expected) {
boolean found = texts.stream().anyMatch(t -> t.contains(exp.toLowerCase()));
// 🎯 Validation log for each expected result
if (found) {
System.out.println("✅ Match found for: '" + exp + "'");
} else {
System.out.println("❌ No result contains: '" + exp + "'");
}
// 🧨 Fail the test if any expected result is missing
assertTrue("No result contains: '" + exp + "'", found);
}
}
🧬 Automatic Cleanup
The target/
folder is automatically cleaned using maven-clean-plugin
.