From 6c4b4b6072a0966b7cc245e50139cb8d2d84664e Mon Sep 17 00:00:00 2001 From: FBouquet Date: Thu, 4 Dec 2025 15:13:09 +0100 Subject: [PATCH 1/5] Initialisation Robot Selenium (+cucumber) --- .gitignore | 38 +++++++ pom.xml | 122 +++++++++++++++++++++ src/test/java/TestExample.java | 56 ++++++++++ src/test/java/acceptance/RobotTest.java | 17 +++ src/test/java/acceptance/robotFixture.java | 74 +++++++++++++ src/test/resources/robot.feature | 24 ++++ 6 files changed, 331 insertions(+) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 src/test/java/TestExample.java create mode 100644 src/test/java/acceptance/RobotTest.java create mode 100644 src/test/java/acceptance/robotFixture.java create mode 100644 src/test/resources/robot.feature diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5ff6309 --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..8420bcb --- /dev/null +++ b/pom.xml @@ -0,0 +1,122 @@ + + + 4.0.0 + + fr.test.formation + RobotSelenium + 1.0-SNAPSHOT + + + 17 + 17 + UTF-8 + 5.11.3 + 1.11.3 + 5.14.2 + 7.20.1 + 5.8.2 + 3.3 + 3.5.2 + + + + + io.cucumber + cucumber-java + ${cucumber.version} + test + + + + io.cucumber + cucumber-junit-platform-engine + ${cucumber.version} + test + + + + io.cucumber + cucumber-picocontainer + ${cucumber.version} + test + + + + org.junit.platform + junit-platform-suite + ${junit-platform.version} + test + + + + org.junit.jupiter + junit-jupiter-engine + ${junit.version} + test + + + org.seleniumhq.selenium + selenium-java + 4.27.0 + + + io.github.bonigarcia + webdrivermanager + 5.9.2 + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven.compiler.version} + + UTF-8 + ${java.version} + ${java.version} + -Werror + + + + org.apache.maven.plugins + maven-surefire-plugin + ${mavenReport.version} + + true + + + + net.masterthought + maven-cucumber-reporting + ${cucumberReport.version} + + + execution + test + + generate + + + cucumber-jvm-example + ${project.build.directory} + ${project.build.directory}/cucumber-report + + **/*.json + + + false + + false + + false + + + + + + + \ No newline at end of file diff --git a/src/test/java/TestExample.java b/src/test/java/TestExample.java new file mode 100644 index 0000000..d845799 --- /dev/null +++ b/src/test/java/TestExample.java @@ -0,0 +1,56 @@ +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.JavascriptExecutor; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.firefox.FirefoxDriver; +import org.openqa.selenium.firefox.FirefoxOptions; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; + +import java.time.Duration; +import java.util.Map; + +public class TestExample { + private WebDriver driver; + private Map vars; + JavascriptExecutor js; + WebDriverWait wait; + + @BeforeEach + public void setUp() { + // Pour l'anglais : "en-US", pour le français : "fr-FR" + FirefoxOptions options = new FirefoxOptions(); + options.addPreference("intl.accept_languages", "en-US"); + options.addArguments("--headless"); + driver = new FirefoxDriver(); + js = (JavascriptExecutor) driver; + driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3)); + wait = new WebDriverWait(driver, Duration.ofSeconds(15)); + } + + @AfterEach + public void tearDown() { + driver.quit(); + } + + @Test + public void test1() { + driver.get("https://disc.univ-fcomte.fr/m2gl-webRobot/Accueil.php?seed=12"); + WebElement newMap = wait.until(ExpectedConditions.elementToBeClickable(By.id("newMap"))); + newMap.click(); + driver.findElement(By.id("turnLeft")).click(); + driver.findElement(By.id("forward")).click(); + driver.findElement(By.id("backward")).click(); + driver.findElement(By.id("turnLeft")).click(); + driver.findElement(By.id("backward")).click(); + driver.findElement(By.id("turnRight")).click(); + Assertions.assertEquals(driver.findElement(By.id("xRobot")).getText(), "-23"); + Assertions.assertEquals(driver.findElement(By.id("yRobot")).getText(), "-22"); + Assertions.assertEquals(driver.findElement(By.id("energy")).getText(), "2"); + Assertions.assertEquals(driver.findElement(By.cssSelector("h3:nth-child(2)")).getText(), "Orientation du robot : Ouest"); + } +} diff --git a/src/test/java/acceptance/RobotTest.java b/src/test/java/acceptance/RobotTest.java new file mode 100644 index 0000000..ecd9fb1 --- /dev/null +++ b/src/test/java/acceptance/RobotTest.java @@ -0,0 +1,17 @@ +package acceptance; + +import org.junit.platform.suite.api.*; + +import static io.cucumber.junit.platform.engine.Constants.GLUE_PROPERTY_NAME; +import static io.cucumber.junit.platform.engine.Constants.PLUGIN_PROPERTY_NAME; + +@Suite +@IncludeEngines("cucumber") +@SelectPackages("acceptance") +@SelectClasspathResource(".") +@ConfigurationParameter(key = PLUGIN_PROPERTY_NAME, value = "json:target/cucumber-report/cucumber.json") +@ConfigurationParameter(key = GLUE_PROPERTY_NAME, value = "acceptance") + +public class RobotTest { + +} diff --git a/src/test/java/acceptance/robotFixture.java b/src/test/java/acceptance/robotFixture.java new file mode 100644 index 0000000..cceb4f1 --- /dev/null +++ b/src/test/java/acceptance/robotFixture.java @@ -0,0 +1,74 @@ +package acceptance; + +import io.cucumber.java.After; +import io.cucumber.java.Before; +import io.cucumber.java.BeforeAll; +import io.cucumber.java.en.And; +import io.cucumber.java.en.Given; +import io.cucumber.java.en.Then; +import io.cucumber.java.en.When; +import io.github.bonigarcia.wdm.WebDriverManager; +import org.junit.jupiter.api.Assertions; +import org.openqa.selenium.By; +import org.openqa.selenium.JavascriptExecutor; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.firefox.FirefoxDriver; + +import java.time.Duration; +import java.util.HashMap; +import java.util.Map; + +public class robotFixture { + + private WebDriver driver; + private Map vars; + JavascriptExecutor js; + + @BeforeAll + public static void beforeAll() { + WebDriverManager.firefoxdriver().setup(); + } + + @Before + public void setUp() { + driver = new FirefoxDriver(); + js = (JavascriptExecutor) driver; + vars = new HashMap(); + driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3)); + + } + @After + public void tearDown() { + driver.quit(); + } + + @Given("Le robot est en vol") + public void leRobotEstEnVol() { + + } + + + @When("Le robot atterrit sur la planète {int}") + public void leRobotAtterritSurLaPlanète(int arg0) { + driver.get("https://disc.univ-fcomte.fr/m2gl-webRobot/Accueil.php?seed="+arg0); + driver.findElement(By.id("newMap")).click(); + } + + + @Then("Les coordonnées du robot sont \\({int}, {int})") + public void lesCoordonnéesDuRobotSont(int arg0, int arg1) { + Assertions.assertEquals(driver.findElement(By.id("xRobot")).getText(), ""+arg0); + Assertions.assertEquals(driver.findElement(By.id("yRobot")).getText(), ""+arg1); + } + + @And("Il est orienté vers le {word}") + public void ilEstOrientéVers(String direction) { + Assertions.assertEquals(driver.findElement(By.cssSelector("h3:nth-child(2)")).getText(), "Orientation du robot : "+direction); + } + + @And("Il lui reste {int} d’énergie") + public void ilLuiResteDÉnergie(int arg0) { + Assertions.assertEquals(driver.findElement(By.id("energy")).getText(), ""+arg0); + + } +} diff --git a/src/test/resources/robot.feature b/src/test/resources/robot.feature new file mode 100644 index 0000000..cee8aed --- /dev/null +++ b/src/test/resources/robot.feature @@ -0,0 +1,24 @@ +Feature: Robot description générale du robot. + l’état initial le robot est en vol, il atterrit sur une planète oriente nord + + Scenario: Atterrissage + Given Le robot est en vol + When Le robot atterrit sur la planète 112 + Then Les coordonnées du robot sont (96, 59) + And Il est orienté vers le Nord + And Il lui reste 20 d’énergie + + Scenario Outline: Consommation en fonction du terrain + Given Le robot est en vol + And Le robot atterrit sur la planète 6 + When Il fait l’action de + And Il fait rotation(s) à droite + And Il fait l’action de + Then Les coordonnées du robot sont (, ) + And Il est orienté vers le + And Il lui reste d’énergie + Examples: + | action1 | nb_rot | action2 | x-axis | y-axis | Orientation | energie | + | Avancer | 0 | Avancer | 64 | -19 | Nord | 14 | + | Avancer | 0 | Reculer | 64 | -17 | Nord | 13 | + | Avancer | 1 | Avancer | 65 | -18 | EST | 9 | \ No newline at end of file -- GitLab From da4f4efd274cd67043186b51d51eafd073c35c84 Mon Sep 17 00:00:00 2001 From: FBouquet Date: Fri, 12 Dec 2025 08:55:01 +0100 Subject: [PATCH 2/5] =?UTF-8?q?Ajout=20d=C3=A9pendence=20log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.gitignore | 8 ++++++++ .idea/encodings.xml | 8 ++++++++ .idea/misc.xml | 14 ++++++++++++++ .idea/php.xml | 8 ++++++++ .idea/vcs.xml | 6 ++++++ pom.xml | 5 +++++ 6 files changed, 49 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/encodings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/php.xml create mode 100644 .idea/vcs.xml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..78bf31c --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..82dbec8 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/php.xml b/.idea/php.xml new file mode 100644 index 0000000..8250cf4 --- /dev/null +++ b/.idea/php.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 8420bcb..450f756 100644 --- a/pom.xml +++ b/pom.xml @@ -22,6 +22,11 @@ + + ch.qos.logback + logback-classic + 1.5.22 + io.cucumber cucumber-java -- GitLab From eb71d56e2763f6dc7c97dcaf179e3324d6ac5c6c Mon Sep 17 00:00:00 2001 From: FBouquet Date: Fri, 12 Dec 2025 10:41:14 +0100 Subject: [PATCH 3/5] Commentaire sur les options --- src/test/java/TestExample.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/TestExample.java b/src/test/java/TestExample.java index d845799..9e07271 100644 --- a/src/test/java/TestExample.java +++ b/src/test/java/TestExample.java @@ -26,7 +26,7 @@ public class TestExample { FirefoxOptions options = new FirefoxOptions(); options.addPreference("intl.accept_languages", "en-US"); options.addArguments("--headless"); - driver = new FirefoxDriver(); + driver = new FirefoxDriver(); // ajouter options au driver pour les prendre en compte js = (JavascriptExecutor) driver; driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3)); wait = new WebDriverWait(driver, Duration.ofSeconds(15)); -- GitLab From 6603e609ec3a18f256106e4eb383453399bedfbd Mon Sep 17 00:00:00 2001 From: FBouquet Date: Fri, 12 Dec 2025 10:50:33 +0100 Subject: [PATCH 4/5] =?UTF-8?q?Retablir=20valeur=20attendue=20et=20valeur?= =?UTF-8?q?=20r=C3=A9elle=20dans=20les=20assertions.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/TestExample.java | 8 ++++---- src/test/java/acceptance/robotFixture.java | 12 ++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/test/java/TestExample.java b/src/test/java/TestExample.java index 9e07271..6e864d6 100644 --- a/src/test/java/TestExample.java +++ b/src/test/java/TestExample.java @@ -48,9 +48,9 @@ public class TestExample { driver.findElement(By.id("turnLeft")).click(); driver.findElement(By.id("backward")).click(); driver.findElement(By.id("turnRight")).click(); - Assertions.assertEquals(driver.findElement(By.id("xRobot")).getText(), "-23"); - Assertions.assertEquals(driver.findElement(By.id("yRobot")).getText(), "-22"); - Assertions.assertEquals(driver.findElement(By.id("energy")).getText(), "2"); - Assertions.assertEquals(driver.findElement(By.cssSelector("h3:nth-child(2)")).getText(), "Orientation du robot : Ouest"); + Assertions.assertEquals("-23", driver.findElement(By.id("xRobot")).getText()); + Assertions.assertEquals("-22", driver.findElement(By.id("yRobot")).getText()); + Assertions.assertEquals("2", driver.findElement(By.id("energy")).getText()); + Assertions.assertEquals( "Orientation du robot : Ouest", driver.findElement(By.cssSelector("h3:nth-child(2)")).getText()); } } diff --git a/src/test/java/acceptance/robotFixture.java b/src/test/java/acceptance/robotFixture.java index cceb4f1..50dd15a 100644 --- a/src/test/java/acceptance/robotFixture.java +++ b/src/test/java/acceptance/robotFixture.java @@ -56,19 +56,19 @@ public class robotFixture { @Then("Les coordonnées du robot sont \\({int}, {int})") - public void lesCoordonnéesDuRobotSont(int arg0, int arg1) { - Assertions.assertEquals(driver.findElement(By.id("xRobot")).getText(), ""+arg0); - Assertions.assertEquals(driver.findElement(By.id("yRobot")).getText(), ""+arg1); + public void lesCoordonnéesDuRobotSont(int x, int y) { + Assertions.assertEquals(""+x, driver.findElement(By.id("xRobot")).getText()); + Assertions.assertEquals(""+y, driver.findElement(By.id("yRobot")).getText()); } @And("Il est orienté vers le {word}") public void ilEstOrientéVers(String direction) { - Assertions.assertEquals(driver.findElement(By.cssSelector("h3:nth-child(2)")).getText(), "Orientation du robot : "+direction); + Assertions.assertEquals("Orientation du robot : "+direction, driver.findElement(By.cssSelector("h3:nth-child(2)")).getText()); } @And("Il lui reste {int} d’énergie") - public void ilLuiResteDÉnergie(int arg0) { - Assertions.assertEquals(driver.findElement(By.id("energy")).getText(), ""+arg0); + public void ilLuiResteDÉnergie(int energy) { + Assertions.assertEquals(""+energy, driver.findElement(By.id("energy")).getText()); } } -- GitLab From 549dfe405807c4d07305e139499f1de4fda15cfe Mon Sep 17 00:00:00 2001 From: FBouquet Date: Mon, 18 May 2026 08:28:08 +0200 Subject: [PATCH 5/5] publication rapport --- .idea/misc.xml | 2 +- pom.xml | 120 +++++++++++++++++++++++++++++++--------------- src/site/site.xml | 19 ++++++++ 3 files changed, 101 insertions(+), 40 deletions(-) create mode 100644 src/site/site.xml diff --git a/.idea/misc.xml b/.idea/misc.xml index 82dbec8..4878ef2 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -8,7 +8,7 @@ - + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 450f756..0dfa564 100644 --- a/pom.xml +++ b/pom.xml @@ -9,24 +9,37 @@ 1.0-SNAPSHOT - 17 - 17 + 25 UTF-8 - 5.11.3 - 1.11.3 - 5.14.2 + 6.0.3 + 6.0.3 7.20.1 5.8.2 - 3.3 - 3.5.2 + 3.13.0 + 3.21.0 + 3.5.2 + 3.8.0 + + + + org.junit + junit-bom + ${junit.version} + pom + import + + + + ch.qos.logback logback-classic 1.5.22 + io.cucumber cucumber-java @@ -41,31 +54,33 @@ test - - io.cucumber - cucumber-picocontainer - ${cucumber.version} - test - + + io.cucumber + cucumber-picocontainer + ${cucumber.version} + test + + + + org.junit.platform + junit-platform-suite + ${junit-platform.version} + test + - - org.junit.platform - junit-platform-suite - ${junit-platform.version} - test - + + org.junit.jupiter + junit-jupiter-engine + ${junit.version} + test + - - org.junit.jupiter - junit-jupiter-engine - ${junit.version} - test - org.seleniumhq.selenium selenium-java - 4.27.0 + 4.26.0 + io.github.bonigarcia webdrivermanager @@ -75,25 +90,55 @@ + + org.apache.maven.plugins + maven-jar-plugin + 3.4.1 + + + default-jar + + none + + + org.apache.maven.plugins maven-compiler-plugin ${maven.compiler.version} - - UTF-8 - ${java.version} - ${java.version} - -Werror - + + + org.apache.maven.plugins + maven-site-plugin + ${maven.site.version} + + + org.apache.maven.skins + maven-fluido-skin + 2.1.0 + + + + + org.apache.maven.plugins + maven-project-info-reports-plugin + ${maven.project-info.version} org.apache.maven.plugins maven-surefire-plugin - ${mavenReport.version} + ${surefire.version} true + + + cucumber.junit-platform.naming-strategy=long + cucumber.plugin=json:target/cucumber-reports/cucumber.json + + + net.masterthought maven-cucumber-reporting @@ -101,22 +146,19 @@ execution - test + verify generate - cucumber-jvm-example - ${project.build.directory} + Rapport de Tests Automatisation - RobotSelenium + ${project.reporting.outputDirectory} ${project.build.directory}/cucumber-report **/*.json - false - false - false diff --git a/src/site/site.xml b/src/site/site.xml new file mode 100644 index 0000000..9a0508b --- /dev/null +++ b/src/site/site.xml @@ -0,0 +1,19 @@ + + + + org.apache.maven.skins + maven-fluido-skin + 2.1.0 + + + + + + + + + + -- GitLab