Na posledním projektu jsem dělal větší část práce na GUI a nehodlal jsem stále dokola klikat jak cvičená opice a raději jsem si dal trochu práce s nasazením Selenium remote control. Nešlo ani tak o jednot­kové testy jako spíš o integ­rační a regresní testování. Zvolil jsem remote control a ne plugin do firefoxu (Sele­nium IDE), protože takto jsem měl k dispo­zici servisní vrstvu a mohl kontro­lovat zápis do databáze. Potře­boval jsem ale pokroč­i­lejší postupy než ty, které nalez­nete v getting started, a o ty bych se s vámi rád podělil.

Firefox 3

Přečtěte si návod jak zprovoznit selenium remote control s firefox 3

AJAX

Pro testování AJAXu můžete využít vlastní aktivní čekání nebo elegant­něji použít metodu waitForCondition a nastavit i timeout čekání.

Například chcete testo­vat, zda se po kliknutí na link add hoo přidá nějaký DOM element identi­fi­ko­vaný id hoo-1

selenium.click( "link=add hoo" );
selenium.waitForCondition( "selenium.browserbot.getCurrentWindow().document.getElementById('hoo-1')", MAX_WAIT_TIME_IN_MS ); 

Analo­gicky mazání, všimněte si zejména podmínky === null

selenium.click( "link=remove hoo" );
selenium.waitForCondition( "selenium.browserbot.getCurrentWindow().document.getElementById('hoo-1') <b>=== null</b>", MAX_WAIT_TIME_IN_MS );

Dynamicky generované DOM id

I dynamicky genero­vané DOM id je snadné testo­vat. Potře­bu­je­te-li například znát id nově přidaného elementu hoo, zjistíte si nejprve pomocí XPath počet těch stávajících.

int nextHooIndex = selenium.getXpathCount( "//div[contains(@id,'hoo-')]" ).intValue();

Rychlost klikání

Výchozí nasta­vení je, že selenim kliká jak zběsilé bez jakého­koliv prodlení a to se pak dějí věci. Doporučuji nastavit nějaké rozumné zpoždění, třeba vteřinu, alespoň můžete vizuálně kontro­lo­vat, co se děje.

selenium.setSpeed( "1000" );

Psaní teček

Bug SEL-519 jsem vyřešil podle návodu na stackoverfow.com

Prostě nemůžete do formuláře napsat tečku, takže musíte string podle teček split­nout a napsat po částech. Tečka se napíše následovně.

selenium.getEval("window.document.getElementById('fooId').value += '.'");

Simulace psaní a test našeptávače

Past je ve vyplňování formulářů, selenium.type zajistí zapsání stringu do DOMu, ale potře­bu­je­te-li testovat třeba našep­távač, použijte selenium.typeKeys ale ještě předtím potře­bu­jete na prvek získat focus

Nabízenou možnosti z našep­távače potvr­díte entrem následovně

selenium.keyDown( "//input[@id='myInput']", "\\13" );

Confirm dialog

Otevření a potvr­zení confirm dialogu prove­dete následovně

assertEquals("Are you sure to delete foo?", selenium.getConfirmation())

XPath

Pro efektivní práci se seleniem budete potře­bovat znalost XPath, můžete začít třeba na w3school.com Hodí se i plugin do firefoxu - XPather

Závěr

Psaní testů vyžaduje čas a u selenium testů to platí dvojnásob. A právě čas bývá nejčas­tější výmluva, proč testy nepsat. Snad vás nemusím přesvědč­o­vat, že selenium vám v důsledku spoustu času ušetří. Navíc je to tak pohodlné pustit selenium testy a mezitím chvilku vydechnou a místo usilov­ného a soustředěného klikání, do kterého se vám už po sté nechce, si vychutnat kafe.