Selenium est un framework de test, développé en Java. Il permet d'interagir avec différents navigateurs web tel que Google Chrome ou Mozilla Firefox comme le ferait un utilisateur. Par conséquent, il simule des saisies clavier, des clics souris par exemple et réalise des vérifications des données présentes sur la page. Il fait partie de la catégorie des outils de test dynamique, facilitant les tests fonctionnels et permet la réalisation des tests de non-régression.
Nous allons voir dans cet article comment mettre en place des tests automatisés avec Selenium et Firefox en Java.
Il est nécessaire de disposer sur son poste du driver permettant d'exécuter le navigateur embarqué :
Tout d'abord, il est nécessaire d'insérer les dépendances Maven ci-dessous dans le fichier pom.xml :
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.6.0</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.9.1</version>
<scope>test</scope>
</dependency>
Création de la configuration minimale de Selenium. La valeur de la variable GECKO_DRIVER_PATH est à modifier avec le chemin local vers le driver du navigateur précédemment téléchargé.
Dans notre configuration ci-dessous, deux méthodes seront utilisées lors des tests :
public class SeleniumConfiguration {
// TODO : To be placed in a property file
private static final String GECKO_DRIVER_PATH = "/Users/alexandre/Downloads/geckodriver";
private final WebDriver driver;
public SeleniumConfiguration() {
System.setProperty("webdriver.gecko.driver", GECKO_DRIVER_PATH);
this.driver = new FirefoxDriver();
}
public void tearDown() {
driver.quit();
}
public void connect(final String url) throws InterruptedException {
driver.get(url);
Thread.sleep(1000L);
}
/**
* @return the driver
*/
public WebDriver getDriver() {
return driver;
}
}
Dans un premier temps, création du fichier de test SeleniumTest. Le paramètre URL définit le lien renseigné dans le navigateur ouvert par Selenium.
import java.time.Duration;
import java.util.List;
import java.util.stream.Collectors;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class SeleniumTest {
private static SeleniumConfiguration seleniumConfiguration;
private final String URL = "https://www.google.com";
@BeforeAll
public static void setUp() throws Exception {
seleniumConfiguration = new SeleniumConfiguration();
}
@AfterAll
public static void tearDown() {
seleniumConfiguration.tearDown();
}
}
Ensuite, création d'un test permettant la réalisation d'une vérification via Selenium. Ici, vérification de la présence du site laulem.com dans la première page de recherche google via Selenium :
@Test
void testSelenium() throws InterruptedException {
final WebDriver driver = seleniumConfiguration.getDriver();
// URL connection
seleniumConfiguration.connect(URL);
// Closing the GDPR pop-up
driver.findElement(By.id("W0wltc")).click(); // ID to be modified
// Search "q" input, write "LauLem.com" and press "Enter"
driver.findElement(By.name("q")).sendKeys("LauLem.com" + Keys.ENTER);
// Initialize and wait till element(link) became clickable - timeout in 10 sec
new WebDriverWait(driver, Duration.ofSeconds(10))
.until(ExpectedConditions.elementToBeClickable(By.xpath("//a/h3")));
// Check presence of LauLem.com on the web page
List<String> laulemLinks = driver.findElements(By.className("g")).stream()
.map(element -> element.findElement(By.tagName("a")).getAttribute("href"))
.filter(x -> x.toLowerCase().contains("laulem.com")).collect(Collectors.<String>toList());
Assertions.assertTrue(laulemLinks.size() > 0);
}
Pour aller plus loin :
LauLem.com - Conditions Générales d'Utilisation - Informations Légales - Charte relative aux cookies - Charte sur la protection des données personnelles - A propos