špička v každém směru IT 3 Začínáme testovat web pomocí Selenium Školení pro začátečníky
IT 3 špička v každém směru Co je Selenium IDE Automatické testování webové aplikace jako černé skříňky Automatické testování webové aplikace jako černé skříňky Minimální konfigurace Minimální konfigurace Firefox plugin Selenium IDE Firefox plugin Selenium IDESelenium IDESelenium IDE Viz. HelloWorld – stripes-shop Viz. HelloWorld – stripes-shophttp://selenium-ide.openqa.org/download.jsp
IT 3 špička v každém směru Pro koho je Selenium IDE? Pro testery Pro 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áře Pro 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 GUI Testování Ajax částí aplikace a GUI
IT 3 špička v každém směru Nativní formát testu Jednoduché HTML Jednoduché HTML Srozumitelné i pro nevývojáře Srozumitelné i pro nevývojáře <tr><td>type</td><td>jusername</td><td>vjohn</td></tr><tr><td>type</td><td>jpassword</td><td>vjohn</td></tr><tr><td>clickAndWait</td><td>login</td><td></td></tr>
IT 3 špička v každém směru Testování více prohlížečů Jeden test lze spustit proti Jeden test lze spustit proti Exploreru Exploreru Firefoxu Firefoxu
IT 3 špička v každém směru Selenium command Jeden řádek v testu Jeden řádek v testu Instrukce pro selenium, co má s aplikací dělat Instrukce pro selenium, co má s aplikací dělat 1. buňkaCommand Název příkazu (např. type) 1. buňkaCommand Název příkazu (např. type) 2. buňkaElement selector Určení elementu na stránce pro provedení příkazu 2. buňkaElement selector Určení elementu na stránce pro provedení příkazu 3. buňkaDalší argument pro příkaz 3. buňkaDalší argument pro příkaz <tr><td>type</td><td>jusername</td><td>vjohn</td></tr>
IT 3 špička v každém směru Jak testovat commandy V selenium IDE napište příkaz V selenium IDE napište příkaz Spusťte příkaz Spusťte příkaz A) Poklepáním A) Poklepáním B) Pomocí klávesové zkratky X B) Pomocí klávesové zkratky X Nápověda k příkazům v Selenium IDE Nápověda k příkazům v Selenium IDE V Selenium IDE obsahuje jednoduchou Code completion V Selenium IDE obsahuje jednoduchou Code completion Karta Reference obsahuje nápovědu Karta Reference obsahuje nápovědu
IT 3 špička v každém směru Commands - typy Actionsprovádějí uživatelské akce v aplikaci Actionsprovádějí uživatelské akce v aplikaci type type click click select select submit submit Pozn.: Varianta andWait způsobí počkání na nahrání další stránky (např. clickAndWait) Assertionsověřují stav aplikace očekávání Assertionsověřují stav aplikace očekávání assertText assertText assertTitle assertTitle Accessorsukládají stav aplikace do proměnné Accessorsukládají stav aplikace do proměnné storeValue storeValue storeEval storeEval storeAttribute storeAttribute
IT 3 špička v každém směru Práce s formulářem typenapíše hodnotu do formulářového pole Syntaxe: type Např.: typenamePavel Jetenský typenapíše hodnotu do formulářového pole Syntaxe: type Např.: typenamePavel Jetenský submitodešle formulář Syntaxe: submit Např.: submitdocument.forms[0] submitodešle formulář Syntaxe: submit Např.: submitdocument.forms[0] selectvybere hodnoty z rolovací nabídky Syntaxe: select Např.: select osobySelect Franta selectvybere hodnoty z rolovací nabídky Syntaxe: select Např.: select osobySelect Franta check/uncheckzaškrtne/odškrtne checkbox Syntaxe: check Např.: check faktura.odberatel.sendNewsletter check/uncheckzaškrtne/odškrtne checkbox Syntaxe: check Např.: check faktura.odberatel.sendNewsletter
IT 3 špička v každém směru Element locator Určuje objekt v HTML stránce pro provedení příkazu Více možností pro locatorType – identifier, id, name, dom, xpath, link, css identifier= Najdi element nenajdeš-li pak identifier= Najdi element nenajdeš-li pak id= najdi element id= najdi element name= najdi element name= najdi element dom= najdi element podle dom výrazu dom=document.forms['myForm'].myDropdown dom= najdi element podle dom výrazu dom=document.forms['myForm'].myDropdown xpath= najdi element podle XPATH výrazu xpath= najdi element podle XPATH výrazu link= najdi odkaz ( ) podle textu link=Odhlásit se link= najdi odkaz ( ) podle textu link=Odhlásit se Syntaxe: locatorType=argument
IT 3 špička v každém směru Jak testovat locatory V selenium IDE napište příkaz V selenium IDE napište příkaz Do druhého políčka příkazu napište element selector Do druhého políčka příkazu napište element selector Klepněte na tlačítko u selectoru Find Klepněte na tlačítko u selectoru Find
IT 3 špička v každém směru Locator – zjednodušená syntaxe Bez locatorTypelocatorType = Identifier type Bez locatorTypelocatorType = Identifier type type Locator začínající na // locatorType = XPath Locator začínající na // locatorType = XPath type type Locator začínající na document. locatorType = dom Locator začínající na document. locatorType = dom click dom=document.images[56] click document.images[56]
IT 3 špička v každém směru Kvízová otázka XPath V aplikaci máme zobrazenou tuto tabulku V aplikaci máme zobrazenou tuto tabulku Potřebujeme klepnout na odkaz Smazat u uživatele Jan Hasič. Při nahrávání v Selenium IDE recorder nahrál tento command: Potřebujeme klepnout na odkaz Smazat u uživatele Jan Hasič. Při nahrávání v Selenium IDE recorder nahrál tento command: click //tr[3]/td[2]/a click //tr[3]/td[2]/a Jak nahradit XPath na odkaz Smazat, aby fungoval nezávisle na pořadí řádku s Janem Hasičem v tabulce (a byl srozumitelnější, co se děje)? Jak nahradit XPath na odkaz Smazat, aby fungoval nezávisle na pořadí řádku s Janem Hasičem v tabulce (a byl srozumitelnější, co se děje)? Click //tr[td[text()='Jan Hasič']]/td[2]/a Click //tr[td[text()='Jan Hasič']]/td[2]/aJménoAkce Tom Řidič Smazat Jan Hasič Smazat Studenti mají přednost Studenti mají přednost
IT 3 špička v každém směru Assertions commands assertTextTest na přítomnost textu ve stránce assertTextTest na přítomnost textu ve stránce assertValueTest na hodnotu ve formuláři assertValueTest na hodnotu ve formuláři assertTitleTest na titulek stránky (podpora pro nahrání v recorderu) assertTitleTest na titulek stránky (podpora pro nahrání v recorderu) assertVisible, assertEditableTest na často používané DHTML vlastnosti elementů assertVisible, assertEditableTest na často používané DHTML vlastnosti elementů
IT 3 špička v každém směru Assertions varianty assertXXXPři nesplnění kontroly test selže a nepokračuje assertXXXPři nesplnění kontroly test selže a nepokračuje verifyXXXPři nesplnění kontroly se chyba zaloguje, ale test pokračuje verifyXXXPři nesplnění kontroly se chyba zaloguje, ale test pokračuje assertNotXXX,verifyNotXXXNegovaná kontrola assertNotXXX,verifyNotXXXNegovaná kontrola Stejné jako assertXXX, ale kontrola se vyhodnocuje negativně. Stejné jako assertXXX, ale kontrola se vyhodnocuje negativně. Např. assertNotValue – test selže, elementu obsahuje Např. assertNotValue – test selže, elementu obsahuje assertVisibleKontrola viditelnosti prvku na stránce assertVisibleKontrola viditelnosti prvku na stránce assertEditableKontrola editovatelnosti prvku na stránce assertEditableKontrola editovatelnosti prvku na stránce
IT 3 špička v každém směru Možnosti spouštění testů Ručně Ručně Okno firefox pluginu – jeden test Okno firefox pluginu – jeden test Pomocí testrunneru – více testů (testsuite) Pomocí testrunneru – více testů (testsuite)
IT 3 špička v každém směru Kvízová otázka Uvažujme, že máme sadu 10ti Seleniových testů v HTML formátu, login sekvence se na začátku každého testu opakuje Uvažujme, že máme sadu 10ti Seleniových testů v HTML formátu, login sekvence se na začátku každého testu opakuje Jak by šlo docílit re-use login sekvence v těchto testech? Jak by šlo docílit re-use login sekvence v těchto testech? <tr><td>type</td><td>jusername</td><td>vjohn</td></tr><tr><td>type</td><td>jpassword</td><td>vjohn</td></tr><tr> clickAndWait clickAndWait Prihlasit se"] Prihlasit se"] <td></td></tr> Možné řešení: Použijte JSP kontejner pro testy a jsp:include Studenti mají přednost Studenti mají přednost
IT 3 š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> Testsuite Example Testsuite Example <body> Etar tests Etar tests Login Login Nový SP Nový SP </body></html>
IT 3 špička v každém směru Praktický příklad (stripes- shop) Vytvoření testů Vytvoření testů Test “Přihlášení” Test “Přihlášení” Test přidání zboži do košíku Test přidání zboži do košíku Test validace formuláře Test validace formuláře Další ukázky – co by vás zajímalo? Další ukázky – co by vás zajímalo? Vytvoření testsuite Spuštění testsuite z test runneru Vytvoření testsuite Spuštění testsuite z test runneru Spuštění testu z junit Spuštění testu z junit Re-use login sekvence pomocí jsp:include Re-use login sekvence pomocí jsp:include Spuštění testu proti Internet Explorer Spuštění testu proti Internet Explorer Best practices pro psaní snadno udržovatelných testů Best practices pro psaní snadno udržovatelných testů
IT 3 špička v každém směru Odkazy Selenium homepage Selenium homepage Selenium homepage Selenium homepage Selenium IDE Selenium IDE Selenium IDE Selenium IDE Selenium Remote Control (used by jUnit sel. tests) Selenium Remote Control (used by jUnit sel. tests) Selenium Remote Control Selenium Remote Control Selenium-RC and Continuous Integration Selenium-RC and Continuous Integration Selenium-RC and Continuous Integration Selenium-RC and Continuous Integration Selenium testování GUI –přednáška o Seleniu, obsahující některá pokročilejší témata (např. best practices, spouštění testů přes ANT nebo jUnit atp.) Selenium testování GUI –přednáška o Seleniu, obsahující některá pokročilejší témata (např. best practices, spouštění testů přes ANT nebo jUnit atp.) Selenium testování GUI Selenium testování GUI
IT 3 špička v každém směru Otázky nakonec Nebojte se a ptejte se Nebojte se a ptejte se