Dernière modification : 18/11/2022

Présentation de Selenium

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.

 

1. Prérequis

Il est nécessaire de disposer sur son poste du driver permettant d'exécuter le navigateur embarqué :

 

2. Dépendances Maven

Tout d'abord, il est nécessaire d'insérer les dépendances Maven ci-dessous dans le fichier pom.xml :


    org.seleniumhq.selenium
    selenium-java
    4.6.0


    org.junit.jupiter
    junit-jupiter-engine
    5.9.1
    test

 

3. Configuration de Selenium

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 :

  • La méthode connect, permettant la connexion à l'URL fournie en paramètre,
  • La méthode tearDown permet de fermer Selenium.
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;
	}

}

 

4. Création des tests

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 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.toList());

    Assertions.assertTrue(laulemLinks.size() > 0);
}

 

Pour aller plus loin :