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 jednotkové testy jako spíš o integrační a regresní testování. Zvolil jsem remote control a ne plugin do firefoxu (Selenium IDE), protože takto jsem měl k dispozici servisní vrstvu a mohl kontrolovat zápis do databáze. Potřeboval jsem ale pokročilejší postupy než ty, které naleznete 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 elegantněji použít metodu waitForCondition a nastavit i timeout čekání.

Například chcete testovat, zda se po kliknutí na link add hoo přidá nějaký DOM element identifikovaný id hoo-1

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

Analogicky 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 generované DOM id je snadné testovat. Potřebujete-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í nastavení je, že selenim kliká jak zběsilé bez jakéhokoliv 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ě kontrolovat, 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 splitnout 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řebujete-li testovat třeba našeptávač, použijte selenium.typeKeys ale ještě předtím potřebujete na prvek získat focus

Nabízenou možnosti z našeptávače potvrdíte entrem následovně

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

Confirm dialog

Otevření a potvrzení confirm dialogu provedete následovně

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

XPath

Pro efektivní práci se seleniem budete potřebovat 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častější výmluva, proč testy nepsat. Snad vás nemusím přesvědčovat, ž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 usilovného a soustředěného klikání, do kterého se vám už po sté nechce, si vychutnat kafe.