Helena Le Goff Lead QA automation

Portfolio QA - Helena Le Goff

Certifiée ISTQB (922200)


À 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.