Quand vous développez une version de votre application web, vous aurez souvent besoin de créer une procédure de test qui testera toutes les fonctionnalités de votre application web. Ensuite, vous allez exécuter tous ces tests fonctionnels manuellement dans le but de vérifier qu’aucune régression n’est apparue. Les tests fonctionnels manuels sont long, ennuyeux et peuvent être sujet à des erreurs humaines.
Vous pouvez éviter tous ces désavantages en automatisant vos tests fonctionnels en utilisant la librairie Selenium. En utilisant la librairie Selenium avec Java, vous serez capable d’automatiser vos actions du navigateur web and vous serez capable de vérifier que ces actions ont le comportement souhaité.
Nous prendrons exemple de ce programme PHP basique:
<?php
session_start();
//Nous ajoutons l'élément à l'intérieur d'un tableau en session
if(isset($_POST['elementToAdd']))
{
//Si le tableau est déjà crée
if(is_array($_SESSION['array']))
{
//Limite de 10 éléments
if(sizeof($_SESSION['array']) < 10)
{
//Nous ajoutons notre élément
array_push($_SESSION['array'],$_POST['elementToAdd']);
}
}
else
{
//Nous créons un nouveau tableau
$_SESSION['array'] = array($_POST['elementToAdd']);
}
}
//Nous supprimons un élément du tableau en session
else if(isset($_POST['elementToDelete']))
{
unset($_SESSION['array'][array_search($_POST['elementToDelete'], $_SESSION['array'])]);
}
?>
<html>
<head>
</head>
<body>
<?php
//Nous affichons le tableau HTML si il y a des éléments en session
if(isset($_SESSION['array']) && is_array($_SESSION['array']) && sizeof($_SESSION['array']) > 0)
{
?>
<table>
<?php
//Nous affichons nos éléments en session
foreach ($_SESSION['array'] as $value)
{
?>
<tr class="aRow">
<td class="rowValue">
<?php echo $value ?>
</td>
<td>
<form method="post">
<input type="hidden" name="elementToDelete" value="<?php echo $value ?>" />
<input type="submit" class="deleteButton" value="Supprimer l'élément" />
</form>
</td>
</tr>
<?php
}
?>
</table>
<?php
}
?>
<form method="post">
<input name="elementToAdd" type="text" />
<input id="submitButton" type="submit" value="Ajouter l'élément" />
</form>
</body>
</html>
Vous pouvez cliquer ici pour voir le résultat de ce script PHP ici .
A l’intérieur de ce script PHP, nous avons un formulaire que nous utiliserons pour ajouter un élément à l’intérieur d’une session PHP limitée à 10 éléments uniquement. Quand un élément est ajouté au tableau, nous pouvons le supprimer en cliquant sur le bouton supprimer.
Nous allons ensuite créer la procédure de tests fonctionnels suivante que nous allons automatiser avec Selenium:
- Nous ajoutons un élément à l’intérieur du tableau et nous vérifions qu’il est bien ajouté.
- Nous supprimons l’élément du tableau et nous vérifions que l’élément est bien supprimé.
- Nous testons la limite de 10 éléments
public class SeleniumClass {
/**
* Driver du navigateur web
*/
private WebDriver driver;
/**
* Code à exécuter avant chaque test JUnit
*/
@Before
public void setUp() {
//Nous créons notre driver Firefox
driver = new FirefoxDriver();
//Nous l'initialisons avec une valeur maximale de 5 secondes
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
}
/**
* Test JUnit de nos tests fonctionnels
*/
@Test
public void testElementPage()
{
//Nous chargeons notre page web
driver.get("http://www.cyril-grandjean.fr/fr/selenium.php");
//Nous trouvons le champ texte avec le nom elementToAdd que nous remplissons avec la valeur element to add
driver.findElement(By.name("elementToAdd")).sendKeys("element to add");
//Nous cliquons sur le boutton avec l'id submitButton
driver.findElement(By.id("submitButton")).click();
//Nous vérifions qu'un élément avec la classe rowValue a été ajouté
assert driver.findElements(By.className("rowValue")).size() == 1;
//Nous vérifions la valeur de l'élément dans le tableau HTML
assert driver.findElement(By.className("rowValue")).getText().equals("element to add");
//Nous vérifions le champ hidden du formulaire pour supprimer un élément en vérifiant l'attribut value
assert driver.findElement(By.name("elementToDelete")).getAttribute("value").equals("element to add");
//Nous supprimons l'élément en cliquant sur le boutton supprimer
driver.findElement(By.className("deleteButton")).click();
//Nous vérifions que l'élément a bien été supprimé
assert driver.findElements(By.className("rowValue")).size() == 0;
//Nous essayons d'ajouter 11 éléments
for(int counterElementAdded = 0; counterElementAdded < 11; counterElementAdded++)
{
//Nous trouvons le champ texte avec le nom elementToAdd que nous remplissons avec la valeur element to add
driver.findElement(By.name("elementToAdd")).sendKeys("element to add");
//Nous cliquons sur le boutton avec l'id submitButton
driver.findElement(By.id("submitButton")).click();
}
//Nous vérifions qu'il y a toujours 10 éléments
assert driver.findElements(By.className("rowValue")).size() == 10;
//Nous supprimons les éléments en cliquant sur les boutons supprimer
while (driver.findElements(By.className("deleteButton")).size() == 0)
{
//Nous supprimons l'élément en cliquant sur le boutton supprimer
driver.findElements(By.className("deleteButton")).get(0).click();
}
//Nous vérifions que les éléments ont bien été supprimés
assert driver.findElements(By.className("rowValue")).size() == 0;
}
/**
* Code à exécuter après chaque test JUnit
*/
@After
public void tearDown() {
//Nous quittons le driver
driver.quit();
}
}
Avec ces tests JUnit Selenium, nous avons été capable d’automatiquement tester toutes les fonctionnalités de notre script PHP.
Vous pouvez trouver plus d’information à propos de Selenium au lien suivant : http://docs.seleniumhq.org