<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CADJEE Consulting &#187; Selenium</title>
	<atom:link href="http://cadjee.fr/category/selenium/feed/" rel="self" type="application/rss+xml" />
	<link>http://cadjee.fr</link>
	<description>Expertise Java &#38; Système d&#039;information</description>
	<lastBuildDate>Thu, 17 Dec 2015 21:37:19 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.39</generator>
	<item>
		<title>Selenium 2: tester vos interfaces graphiques</title>
		<link>http://cadjee.fr/selenium-2-tester-vos-interfaces-graphiques/</link>
		<comments>http://cadjee.fr/selenium-2-tester-vos-interfaces-graphiques/#comments</comments>
		<pubDate>Fri, 25 Sep 2015 13:06:53 +0000</pubDate>
		<dc:creator><![CDATA[Ismael CADJEE]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Selenium]]></category>
		<category><![CDATA[GUI test]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[TU]]></category>

		<guid isPermaLink="false">http://cadjee.fr/?p=191</guid>
		<description><![CDATA[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&#8230;).  Ces actions seront ensuite [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>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&#8230;).  Ces actions seront ensuite exporter sous forme de TestCase qu&rsquo;il suffira d&rsquo;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.<br />
<span id="more-191"></span></p>
<p>&nbsp;</p>
<ul>
<li><span style="text-decoration: underline;"><span style="text-decoration: underline;"><strong>Dependance Maven</strong></span></span></li>
</ul>
<pre class="brush: java; title: ; notranslate">

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
	xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&quot;&gt;
	&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
	&lt;groupId&gt;fr.cadjee.testUI&lt;/groupId&gt;
	&lt;artifactId&gt;CadjeeSelenium&lt;/artifactId&gt;
	&lt;version&gt;1.0&lt;/version&gt;

	&lt;build&gt;
	&lt;plugins&gt;
		&lt;plugin&gt;
			&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
			&lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;
			&lt;configuration&gt;
				&lt;testFailureIgnore&gt;true&lt;/testFailureIgnore&gt;
			&lt;/configuration&gt;
		&lt;/plugin&gt;
	&lt;/plugins&gt;
&lt;/build&gt;

	&lt;dependencies&gt;
		&lt;dependency&gt;
			&lt;groupId&gt;org.seleniumhq.selenium&lt;/groupId&gt;
			&lt;artifactId&gt;selenium-java&lt;/artifactId&gt;
			&lt;version&gt;2.46.0&lt;/version&gt;
		&lt;/dependency&gt;
		&lt;dependency&gt;
			&lt;groupId&gt;junit&lt;/groupId&gt;
			&lt;artifactId&gt;junit&lt;/artifactId&gt;
			&lt;version&gt;4.11&lt;/version&gt;
			&lt;scope&gt;test&lt;/scope&gt;
		&lt;/dependency&gt;
	&lt;/dependencies&gt;
&lt;/project&gt;

</pre>
<p>&nbsp;</p>
<ul>
<li><strong>Selenium</strong><span style="text-decoration: underline;"><strong> IDE </strong></span></li>
</ul>
<p>Toutes les actions sont enregistrées puis exportable via le Menu <em>File &gt; Export Test Case As &#8230;&gt; Java Junit 4 / Web Driver</em>. Les autres options (WebDriver Backed&#8230;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.</p>
<p><a href="http://cadjee.fr/wp-content/uploads/2015/05/seleniumIDE.jpg"><img class="alignnone size-full wp-image-194" src="http://cadjee.fr/wp-content/uploads/2015/05/seleniumIDE.jpg" alt="seleniumIDE" width="600" height="721" /></a></p>
<p>&nbsp;</p>
<p>Les classes java sont  à importer dans votre projet sous forme de test ou main exécutable. La forme &lsquo;testCase&rsquo; permet d&rsquo;automatiser plus naturellement votre application avec Maven et Jenkins.</p>
<p>&nbsp;</p>
<ul>
<li><strong><span style="text-decoration: underline;">Forcer Selenium à utiliser un autre navigateur différent du navigateur par défaut </span></strong></li>
</ul>
<p>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):</p>
<pre class="brush: java; title: ; notranslate">&lt;/pre&gt;
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 = &quot;C:\\Documents\\selenium\\FirefoxPortable\\FirefoxPortable.exe&quot;;

...

@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);
}

}
</pre>
<p>J&rsquo;ai déclarer le driver en <strong>static</strong> afin d&rsquo;avoir une seule instance du firefox pour mes tests. Cela évite d&rsquo;ouvrir plusieurs fenêtres de fireFox. Je peux ainsi enchaîner mes tests sur la même fenêtre.<br />
Pour info il est possible d’exécuter les tests sur IE, Chrome, Safari&#8230;Ect et même en mode non graphique via le driver <em><strong>HtmlUnitDriver.</strong></em></p>
<p>&nbsp;</p>
<ul>
<li><span style="text-decoration: underline;"><strong>Form Based Authentication : Fenêtre d&rsquo;authentification </strong></span></li>
</ul>
<p>Ces fenêtres vous demandent de vous authentifier pour accéder à une page donnée. Souvent l&rsquo;oeuvre d&rsquo;un JAAS ou Valve défini au sein de votre application:</p>
<p><a href="http://cadjee.fr/wp-content/uploads/2015/05/authen.png"><img class="alignnone size-full wp-image-199" src="http://cadjee.fr/wp-content/uploads/2015/05/authen.png" alt="authen" width="320" height="134" /></a></p>
<p>&nbsp;</p>
<p>L&rsquo;IDE ne sait pas enregistrer cette action. Il va falloir passer par programmation. L&rsquo;astuce est simple: ajouter dans l&rsquo;url le  mot de passe et le login :</p>
<pre class="brush: java; title: ; notranslate">

public class SeleniumForFirefoxCase {
...
protected static String baseUrl;

...

@BeforeClass
public static void init()
{
...
baseUrl = &quot;http://login:motDePasse@localhost:8080/monAppli/&quot;;
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get(baseUrl);

...
}
</pre>
<ul>
<li><strong><span style="text-decoration: underline;">Gestion des pop up </span></strong></li>
</ul>
<p>Pour gérer la pop up il faut indiquer au driver de switcher de fenêtre car par défaut  c&rsquo;est toujours la fenêtre principale qui est prise en compte:</p>
<pre class="brush: java; title: ; notranslate">
@Test
public void Scenario1_OuverturePopUp() throws Exception {

// ouverture de la pop up

driver.findElement(By.xpath(&quot;//a[contains(@href, \&quot;lienPopUp')\&quot;)]&quot;)).click();

// On recupere l'id des fenetres actives
Set&lt;String&gt; windowId = driver.getWindowHandles();

Iterator&lt;String&gt; 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(&quot;Refus demande&quot;, driver.getTitle());
driver.findElement(By.name(&quot;commentaire&quot;)).clear();

//envoie d'une valeur dans la zone de texte de la pop up
driver.findElement(By.name(&quot;commentaireRefus&quot;)).sendKeys(&quot;test pop up selenium&quot;);
</pre>
<ul>
<li>
<h4><span style="text-decoration: underline;"><strong>Conclusion</strong></span></h4>
</li>
</ul>
<p>L&rsquo;intégration par Maven permet l’exécution des tests de la même façon q&rsquo;un test unitaire classique. Mais ne nous y méprenons pas, Selenium n&rsquo;a pas vocation à remplacer un TU et vis versa!</p>
<p>Pour aller un peu plus loin, il est même conseillé d&rsquo;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 <span style="text-decoration: underline;">Xpath est obligatoire</span> pour mener à bien votre intégration de Selenium.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://cadjee.fr/selenium-2-tester-vos-interfaces-graphiques/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
