-
Selenium 2: tester vos interfaces graphiques
Pour automatiser vos tests UI, la suite Selenium offre de grande possibilité. Supportant mutile langage C#, php, python et bien évidement Java, la suite propose également un plugin firefox ( Selenium IDE) pour enregistrer, à la façon des macros excels, toutes les actions utilisateur ( clics, drag and drop, saisie etc…). Ces actions seront ensuite exporter sous forme de TestCase qu’il suffira d’importer dans vos projets. Certaines actions ne sont malheureusement pas enregistrable par le plugin: gestion des pop up, authentification par basic form ( la fameuse fenêtre Authentification Required) par exemple.
- Dependance Maven
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>fr.cadjee.testUI</groupId> <artifactId>CadjeeSelenium</artifactId> <version>1.0</version> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <testFailureIgnore>true</testFailureIgnore> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.46.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> </project>
- Selenium IDE
Toutes les actions sont enregistrées puis exportable via le Menu File > Export Test Case As …> Java Junit 4 / Web Driver. Les autres options (WebDriver Backed…ect ) seront bientôt obsolètes. Ils sont la uniquement pour assurer la rétro comptabilité entre la version selenium 1 RC et selenium 2 WebDriver.
Les classes java sont à importer dans votre projet sous forme de test ou main exécutable. La forme ‘testCase’ permet d’automatiser plus naturellement votre application avec Maven et Jenkins.
- Forcer Selenium à utiliser un autre navigateur différent du navigateur par défaut
Les test UI peuvent s’exécuter sur différent navigateurs sachant que le navigateur par défaut de Selenium est FireFox. Pour cela il va chercher dans le Path de votre OS le chemin vers votre FireFox. Dans mon cas je veux plutôt utiliser un FireFoxPortable ( donc non présent dans le PATH):
</pre> public class SeleniumForFirefoxCase { protected static WebDriver driver; protected static String baseUrl; protected boolean acceptNextAlert = true; protected static StringBuffer verificationErrors = new StringBuffer(); private static final String URL_EXE_FIREOX = "C:\\Documents\\selenium\\FirefoxPortable\\FirefoxPortable.exe"; ... @BeforeClass public static void init() { File pathToBinary = new File(URL_EXE_FIREOX); FirefoxBinary ffBinary = new FirefoxBinary(pathToBinary); FirefoxProfile firefoxProfile = new FirefoxProfile(); driver = new FirefoxDriver(ffBinary, firefoxProfile); } }
J’ai déclarer le driver en static afin d’avoir une seule instance du firefox pour mes tests. Cela évite d’ouvrir plusieurs fenêtres de fireFox. Je peux ainsi enchaîner mes tests sur la même fenêtre.
Pour info il est possible d’exécuter les tests sur IE, Chrome, Safari…Ect et même en mode non graphique via le driver HtmlUnitDriver.- Form Based Authentication : Fenêtre d’authentification
Ces fenêtres vous demandent de vous authentifier pour accéder à une page donnée. Souvent l’oeuvre d’un JAAS ou Valve défini au sein de votre application:
L’IDE ne sait pas enregistrer cette action. Il va falloir passer par programmation. L’astuce est simple: ajouter dans l’url le mot de passe et le login :
public class SeleniumForFirefoxCase { ... protected static String baseUrl; ... @BeforeClass public static void init() { ... baseUrl = "http://login:motDePasse@localhost:8080/monAppli/"; driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); driver.get(baseUrl); ... }
- Gestion des pop up
Pour gérer la pop up il faut indiquer au driver de switcher de fenêtre car par défaut c’est toujours la fenêtre principale qui est prise en compte:
@Test public void Scenario1_OuverturePopUp() throws Exception { // ouverture de la pop up driver.findElement(By.xpath("//a[contains(@href, \"lienPopUp')\")]")).click(); // On recupere l'id des fenetres actives Set<String> windowId = driver.getWindowHandles(); Iterator<String> itererator = windowId.iterator(); //1er fenetre String mainWinID = itererator.next(); System.out.println(mainWinID); //2de fenetre le pop up String popUpID = itererator.next(); System.out.println(popUpID); //On switch de fenetre driver.switchTo().window(popUpID); System.out.println(driver.getTitle()); Assert.assertEquals("Refus demande", driver.getTitle()); driver.findElement(By.name("commentaire")).clear(); //envoie d'une valeur dans la zone de texte de la pop up driver.findElement(By.name("commentaireRefus")).sendKeys("test pop up selenium");
-
Conclusion
L’intégration par Maven permet l’exécution des tests de la même façon q’un test unitaire classique. Mais ne nous y méprenons pas, Selenium n’a pas vocation à remplacer un TU et vis versa!
Pour aller un peu plus loin, il est même conseillé d’utiliser une base mémoire tel que H2. On peux également utiliser un serveur Jetty plus léger et plus rapide. Enfin Une connaissance de Xpath est obligatoire pour mener à bien votre intégration de Selenium.
Script VB pour excel Tester une fonctionnalité complexe avec DBUnit
Comments are currently closed.
One thought on “Selenium 2: tester vos interfaces graphiques”
Selenium 2: tester vos interfaces graphiques
Articles récents
Avec cet article, je vais prйsenter Selenium, un outil qui nous permettra de tester l’interface utilisateur des applications Web, comment йcrire des tests simples а l’aide du pattern Page Object, et comment automatiser ces tests avec Maven.