špička v každém směru
IT3
Selenium testování GUI
IT3
špička v každém směru
Co je Selenium IDE
Automatické testování aplikace jako Automatické testování aplikace jako černé skříňkyčerné skříňky
Minimální konfiguraceMinimální konfigurace Firefox plugin Selenium IDEFirefox plugin Selenium IDE
Viz. Viz. tutorialtutorial video video Náš vlastní google searchNáš vlastní google search
IT3
špička v každém směru
Pro koho je Selenium IDE?
Pro testeryPro testery Automatizace testování podle testovacích scénářůAutomatizace testování podle testovacích scénářů Testovací scénáře v jednoduché HTML podoběTestovací scénáře v jednoduché HTML podobě
Pro vývojářePro vývojáře Smoke testy buildovacího procesu (např. Ant skriptů)Smoke testy buildovacího procesu (např. Ant skriptů) Integrační testování jako součást nočních buildůIntegrační testování jako součást nočních buildů Testování Ajax částí aplikace a GUITestování Ajax částí aplikace a GUI
IT3
špička v každém směru
Nativní formát testu
Jednoduché HTMLJednoduché HTML Srozumitelné i Srozumitelné i
pro nevývojářepro nevývojáře
<tr><tr>
<td>type</td><td>type</td>
<td>jusername</td><td>jusername</td>
<td>vjohn</td><td>vjohn</td>
</tr></tr>
<tr><tr>
<td>type</td><td>type</td>
<td>jpassword</td><td>jpassword</td>
<td>vjohn</td><td>vjohn</td>
</tr></tr>
<tr><tr>
<td>clickAndWait</td><td>clickAndWait</td>
<td>login</td><td>login</td>
<td></td><td></td>
</tr></tr>
IT3
špička v každém směru
Testování více prohlížečů
Jeden test lze spustit protiJeden test lze spustit proti ExploreruExploreru FirefoxuFirefoxu
IT3
špička v každém směru
Základní commandy
Často používané příkazyČasto používané příkazy typetype clickclick
savesave link=Jdi na seznamlink=Jdi na seznam
clickAndWait – klepne a počká, než se nahraje stránkaclickAndWait – klepne a počká, než se nahraje stránka select – výběr hodnoty z rolovací nabídky <select>select – výběr hodnoty z rolovací nabídky <select>
label=Hasičlabel=Hasič assertTextPresent – test skončí, pokud selžeassertTextPresent – test skončí, pokud selže verifyTextPresent – test pokračuje dál, i když selževerifyTextPresent – test pokračuje dál, i když selže
Další commandy i s nápovědou najdete v Selenium IDE* Další commandy i s nápovědou najdete v Selenium IDE* okněokně
Formát commandů: JMENO SELECTOR [HODNOTA]Formát commandů: JMENO SELECTOR [HODNOTA] Tlačítko k nezaplacení - FindTlačítko k nezaplacení - Find
IT3
špička v každém směru
Možnosti spouštění testů
RučněRučně Okno firefox pluginu – jeden testOkno firefox pluginu – jeden test Pomocí testrunneru – více testů (testsuite)Pomocí testrunneru – více testů (testsuite)
AutomatickyAutomaticky Pomocí ANTuPomocí ANTu Pomocí jUnitPomocí jUnit Ostatní jazykyOstatní jazyky
RubyRuby PythonPython PHPPHP ……
IT3
špička v každém směru
Best practices
Toto je asi nejdůležitější část prezentace!Toto je asi nejdůležitější část prezentace! Provádějte reuse částí testůProvádějte reuse částí testů
V jUnit Java metoda, např. public void login()V jUnit Java metoda, např. public void login() V HTML nelze (jak na to viz. další snímek)V HTML nelze (jak na to viz. další snímek)
Raději vytvářejte hodně malých testů, než málo velkých a Raději vytvářejte hodně malých testů, než málo velkých a složitých testůsložitých testů Testy by měli testovat co nejmenší uživatelský scénářTesty by měli testovat co nejmenší uživatelský scénář Je snazší vypátrat chybu, pokud mi 4 testy z 50ti existujících Je snazší vypátrat chybu, pokud mi 4 testy z 50ti existujících
selžou, než pokud mi selže 1 test ze 2 existujících.selžou, než pokud mi selže 1 test ze 2 existujících. Používejte XPath s uživatelským textem jako selectoryPoužívejte XPath s uživatelským textem jako selectory
Špatně: clickAndWaitŠpatně: clickAndWait //table[2]/tr[1]/td[4]//table[2]/tr[1]/td[4] Dobře: clickAndWaitDobře: clickAndWait //td[text() = 'Založit Nový SP']//td[text() = 'Založit Nový SP']
Výsledkem jsou samopopisné, dobře udržovatelné testyVýsledkem jsou samopopisné, dobře udržovatelné testy
IT3
špička v každém směru
Kvízová otázka
Uvažujme, že máme sadu Uvažujme, že máme sadu 10ti Seleniových testů v 10ti Seleniových testů v HTML formátu, login HTML formátu, login sekvence se na začátku sekvence se na začátku každého testu opakujekaždého testu opakuje
Jak by šlo docílit re-use login Jak by šlo docílit re-use login sekvence v těchto testech?sekvence v těchto testech?
<tr><tr>
<td>type</td><td>type</td>
<td>jusername</td><td>jusername</td>
<td>vjohn</td><td>vjohn</td>
</tr></tr>
<tr><tr>
<td>type</td><td>type</td>
<td>jpassword</td><td>jpassword</td>
<td>vjohn</td><td>vjohn</td>
</tr></tr>
<tr><tr>
<td>clickAndWait</<td>clickAndWait</td>td>
<td>//<td>//input[@value="Prihlasit input[@value="Prihlasit se"]</td>se"]</td>
<td></td><td></td>
</tr></tr>
Možné řešení: Použijte Možné řešení: Použijte JSP kontejner pro testy a JSP kontejner pro testy a jsp:includejsp:include
<jsp:include <jsp:include page="include/login.jsp"/>page="include/login.jsp"/>
IT3
špička v každém směru
Seskupování testů
testsuite.html - HTML soubor, který linkuje více testůtestsuite.html - HTML soubor, který linkuje více testů<html><html> <head><head> <title>Testsuite Example</title><title>Testsuite Example</title> </head></head><body><body> <table cellpadding="1" cellspacing="1" border="1"><table cellpadding="1" cellspacing="1" border="1"> <tbody><tbody> <tr><tr> <td>Etar tests</td><td>Etar tests</td> </tr></tr> </tbody></tbody> <tr><td><a href="Login.html">Login</a></td></tr><tr><td><a href="Login.html">Login</a></td></tr> <tr><td><a href="NovySP.html">Nový SP</a></td></tr><tr><td><a href="NovySP.html">Nový SP</a></td></tr> </table></table></body></body></html></html>
IT3
špička v každém směru
Úskalí 1 – formuláře
Formuláře – Recorder nenahrává odeslání formuláře Formuláře – Recorder nenahrává odeslání formuláře stisknutím klávesy <Enter>stisknutím klávesy <Enter> Použijte submitForm(formId) commandPoužijte submitForm(formId) command
IT3
špička v každém směru
Úskalí 2 – práce s iframes
Práce s iframes - Recorder nenahrává Práce s iframes - Recorder nenahrává selectFrameselectFrame commandcommand Nutné ručně přidatNutné ručně přidat
selectFrame(frameId)selectFrame(frameId) Operace v iframeOperace v iframe selectFrame(relative=top)selectFrame(relative=top)
IT3
špička v každém směru
Úskalí 3 – timeout problém
ClickAndWait spadne na timeoutClickAndWait spadne na timeout Může se stát, pokud odezva aplikace je velmi rychláMůže se stát, pokud odezva aplikace je velmi rychlá Stejný problém i s ostatním XxxAndWait commandyStejný problém i s ostatním XxxAndWait commandy Použijte waitForElementPresentPoužijte waitForElementPresent
NamístoNamísto PoužijtePoužijte
<tr><tr>
<td>clickAndWait</td><td>clickAndWait</td>
<td>save</td><td>save</td>
<td></td><td></td>
</tr></tr>
<tr><tr>
<td>type</td><td>type</td>
<td>name</td><td>name</td>
<td>Pavel</td><td>Pavel</td>
</tr></tr>
<tr><tr>
<td>click</td><td>click</td>
<td>save</td><td>save</td>
<td></td><td></td>
</tr></tr>
<tr><tr>
<td>waitForElementPresent</td><td>waitForElementPresent</td>
<td>name</td><td>name</td>
<td></td><td></td>
</tr></tr>
<tr><tr>
<td>type</td><td>type</td>
<td>name</td><td>name</td>
<td>Pavel</td><td>Pavel</td>
</tr></tr>
IT3
špička v každém směru
Kvízová otázka XPath
V aplikaci máme zobrazenou tuto tabulkuV aplikaci máme zobrazenou tuto tabulku
Potřebujeme klepnout na odkaz Smazat u uživatele Jan Potřebujeme klepnout na odkaz Smazat u uživatele Jan Hasič. Při nahrávání v Selenium IDE recorder nahrál Hasič. Při nahrávání v Selenium IDE recorder nahrál tento command:tento command: click //tr[3]/td[2]/aclick //tr[3]/td[2]/a
Jak nahradit XPath na odkaz Smazat, aby fungoval Jak nahradit XPath na odkaz Smazat, aby fungoval nezávisle na pořadí řádku s Janem Hasičem v tabulce (a nezávisle na pořadí řádku s Janem Hasičem v tabulce (a byl srozumitelnější, co se děje)?byl srozumitelnější, co se děje)?
Click //tr[td[text()='Jan Hasič']]/td[2]/aClick //tr[td[text()='Jan Hasič']]/td[2]/a
JménoJméno AkceAkce
Tom ŘidičTom Řidič SmazatSmazat
Jan HasičJan Hasič SmazatSmazat
IT3
špička v každém směru
Úskalí 4 – mizení testrunneru Aplikace může následujícím Javascriptem zrušit Selenium Aplikace může následujícím Javascriptem zrušit Selenium
testrunner windowtestrunner window
parent.window.location = parent.window.location = ''http://www.seznam.czhttp://www.seznam.cz';'; Řešení – použijte multiWindow = trueŘešení – použijte multiWindow = true
IT3
špička v každém směru
Další úskalí
Při použití https a neplatném certifikátu se test zastaví na varovném Při použití https a neplatném certifikátu se test zastaví na varovném hlášení prohlížečehlášení prohlížeče
Buď registrovat certifikát u CA nebo pro testy spustit aplikaci na httpBuď registrovat certifikát u CA nebo pro testy spustit aplikaci na http Pokud aplikace javascriptem otevře popup okno s názvem _new, Pokud aplikace javascriptem otevře popup okno s názvem _new,
recorder nenahraje odpovídající recorder nenahraje odpovídající selectWindow _new commandselectWindow _new command Buď v aplikaci používejte vlastní jména (např. mywindow) nebo doplňte Buď v aplikaci používejte vlastní jména (např. mywindow) nebo doplňte
do testů po nahrání do testů po nahrání selectWindow _newselectWindow _new command command Pokud ve firefox použijete zapamatovanou dříve napsanou hodnotu Pokud ve firefox použijete zapamatovanou dříve napsanou hodnotu
formuláře (form input field history), recorder to nezaznamenáformuláře (form input field history), recorder to nezaznamená Při nahrávání testu vždy hodnotu ručně pište (nepoužívejte form Při nahrávání testu vždy hodnotu ručně pište (nepoužívejte form
history)history)
IT3
špička v každém směru
Jak vnořovat testsuite?
Z jedné testsuite nelze zavolat jinou testsuiteZ jedné testsuite nelze zavolat jinou testsuite Řešení - TestSuiteGeneratorŘešení - TestSuiteGenerator
Z adresářové struktury testů automaticky vytvoří testsuite.htmlZ adresářové struktury testů automaticky vytvoří testsuite.html Parametrem volání je root složka s testyParametrem volání je root složka s testy
IT3
špička v každém směru
Ukázka z praxe
Testy pro přerušení servisního požadavku (projekt etar)Testy pro přerušení servisního požadavku (projekt etar) Bez účasti dodavateleBez účasti dodavatele S účastí dodavateleS účastí dodavatele
IT3
špička v každém směru
Odkazy
Selenium homepageSelenium homepage Selenium IDESelenium IDE Selenium Remote Control (used by jUnit sel. tests)Selenium Remote Control (used by jUnit sel. tests)
Selenium-RC and Continuous IntegrationSelenium-RC and Continuous Integration Ajax testing with Selenium using waitForConditionAjax testing with Selenium using waitForCondition
IT3
špička v každém směru
Otázky nakonec
Nebojte se a ptejte se Nebojte se a ptejte se