Faire des tests plus complets avec Selenium

Un test du titre d’une page et d’existence d’un élément ayant une id spécifique dans la page

from selenium import webdriver
import time
from selenium.webdriver.chrome.options import Options

options = Options()
# on va utiliser le driver "headless"
options.add_argument('--headless')
# ou browser = webdriver.Firefox()
# on fournit le chemin de chromedriver
# qui doit correspondre à la version de chrome installée
browser = webdriver.Chrome(executable_path='/usr/lib/chromium-browser/chromedriver',options=options)
time.sleep(10)
browser.get('http://www.univ-orleans.fr')
# Vérifions que le titre de la page comporte le mot 'Université'
assert 'Université' in browser.title
# Vérifions qu'il existe bien dans la page un élément d'id 'edit-search-api-fulltext' (champ de recherche)
elem = browser.find_element_by_id('edit-search-api-fulltext')
assert(elem is not None)

browser.quit()

Un test qui remplit un formulaire, le valide puis vérifie un nombre de liens dans la réponse

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
browser = webdriver.Chrome()

browser.get('http://www.univ-orleans.fr')


elem = browser.find_element_by_id('edit-search-api-fulltext')
elem.send_keys('iut orleans' + Keys.RETURN)
liens = browser.find_element_by_class_name('content').find_elements_by_tag_name('a')

# Vérifions qu'il y a au moins 3 liens
# sur cette recherche
assert(len(liens)>=3)
# Puis affichons ces liens
for l in liens:
    print(l.get_attribute('href'))

time.sleep(5)
browser.quit()

Test de routes multiples et des views correspondantes dans une app django

(adaptez aux véritables routes de votre application)

from django.core.urlresolvers import resolve
from django.test import TestCase
from lesTaches.views import home,about,task_listing,viewTask,newTask,editTask,deleteTask


class TestRoutesViews(TestCase):

    routes = {
    "/" :  home,
    "/about" :  about,
    "/list" :  task_listing,
    "/viewTask/testTask" :  viewTask,
    "/newTask" :  newTask,
    "/editTask/testTask" :  editTask,
    "/deleteTask/testTask" :  deleteTask
    }



    def test_url_resolves_to_right_view(self):
        '''Test unitaire des routes du projet'''

        for route,function in self.routes.items():
            found = resolve(route)
            self.assertEqual(found.func,function)

Exemple de test vérifiant une authentification sur une page Web

Prenons comme exemple une page d’authentification qui attend comme login “root” avec comme password “azerty”. Voici un code d’exemple en PHP effectuant cette vérification de login/password :

<?php
// Definition des constantes et variables
define('LOGIN','root');
define('PASSWORD','azerty');
$errorMessage = '';
// Test de l'envoi du formulaire
if(!empty($_POST))
{
  // Les identifiants sont transmis ?
  if(!empty($_POST['login']) && !empty($_POST['password']))
  {
    // Sont-ils ceux attendus ?
    if($_POST['login'] != LOGIN)
    {
      $errorMessage = 'Mauvais login !';
    }
    elseif($_POST['password'] != PASSWORD)
    {
      $errorMessage = 'Mauvais password !';
    }
    else //tout va bien
    {
    // On ouvre la session
    session_start();
    // On enregistre le login en variable de session
    $_SESSION['login'] = LOGIN;
    // On redirige vers le fichier suite.php
    header('Location: suite.php');
  }
}
else
{
  $errorMessage = 'Veuillez inscrire vos identifiants svp !';
}
}
?>

<!DOCTYPE HTML>
<html lang="fr">
<head>
<title>Formulaire d'authentification</title>
</head>
<body>
<?php
if (!empty($errorMessage)){
  echo $errorMessage;
}
?>
<form action="authentification.php" method="post">
<fieldset>
<legend>Identifiez-vous</legend>
<p>
<label for="login">Login :</label>
<input type="text" name="login" value="" />
</p>
<p>
<label for="password">Password :</label>
<input type="password" name="password" value=""/>
<input type="submit" value="Se logguer" />
</p>
</fieldset>
</form>
</body>
</html>

Puis écrivons un test fonctionnel correspondant à une authentification réussie

from selenium import webdriver

baseurl = "http://localhost/~roza/authentification.php"
username = "root"
password = "azerty"

xpaths = { 'loginField':    "//input[@name='login']",
           'passwordField': "//input[@name='password']",
           'submitButton':  "//input[@type='submit']"
          }

mydriver = webdriver.Chrome(executable_path='./chromedriver')
mydriver.get(baseurl)
mydriver.maximize_window()

#Clear Username Field
mydriver.find_element_by_xpath(xpaths['loginField']).clear()

#Write Username in Username Field
mydriver.find_element_by_xpath(xpaths['loginField']).send_keys(username)

#Clear Password Field
mydriver.find_element_by_xpath(xpaths['passwordField']).clear()

#Write Password in password Field
mydriver.find_element_by_xpath(xpaths['passwordField']).send_keys(password)

#Click Login button
mydriver.find_element_by_xpath(xpaths['submitButton']).click()

print(mydriver.page_source)

assert "Bienvenue ici root" in mydriver.page_source
mydriver.close()