Testautomation för WebApplikationer – Selenium

Skrivet av:
Paul Arcombe,
Certified ISTQB Foundation SoftwareTester,
Örestad-Linux, Malmö

Projektet går ut på att

  1. Undersöka vad Selenium kan erbjuda inom automatiserad test av webapplikationer.
  2. Installera och sätta upp Selenium.
  3. Bygga och slutligen använda enskilda tester med hjälp av Selenium.
  4. Att sätta upp och få igång en fungerande testmiljö bestående av Selenium, Java och JUnit
  5. BASICS: Hur man använder testsviter/multipla test från Selenium m.h.a. Java och JUnit.
  6. ADVANCED (I): Skriva/modifiera skript m.h.a. skriptspråket Selenese.
  7. ADVANCED (II): Loggar, Test sammanfattningar och Test rapporter

Projektet är avsett att uppdateras en gång per vecka, med start 091116.  Avslutat 091231.

<TIDIGARE>                                                                             <NÄSTA>


Kapitel 7: ADVANCED (II): Loggar, Test sammanfattningar och Test rapporter


INLEDNING:
Detta kapitel kommer att ge dig sammanfattande information, länkar och nyttiga tips om loggar, test och rapporter. Detta för att du skall få en grundläggande helhetsbild med i bagaget innan du ger dig in i Seleniums värld av test med Java och JUnit på allvar. Kapitlet kommer inte att återge stora textmassor som kan hittas på annat håll, utan kommer att focusera på uppgiften att ge dig tips och länkar till var relevant information kan hittas. Det är sedan upp till dig själv att grotta ner dig i de områden och länkar som DU vill studera på djupet.


LOGGING & TESTRAPPORTER:
Logging har som bekant redan berörts i

  • Kapitel 3 under ” SELENIUM-IDE EGENSKAPER
    beskriver logging i Selenium IDE
  • Kapitel 4 under ” Starta Selenium RC-Server:
    Beskriver hur man aktiverar logging med server-startkommandot
  • Kapitel 5 under ” Att köra multipla testfall (Skriv många standalone TC)
    Beskriver hur man skapar sina egna logfiler genom batch-skript

Selenium javaklient ger som default inga snygga testrapporter (sammanfattande html sidor).
Börja med att läsa igenom Selenium manualen, Kapitel 6.7 Reporting Results här
Ett annat exempel som kan vara nyttigt att titta på är loggingselenium projektet för att få testrapporter som är värda namnet (och som du vågar presentera för dina chefer och kunder).
Om du använder detta exempel måste du tänka på att det använder sig även av de inbäddade skärmdumparna i htmlfilen. Bästa sättet att run/edit- efter right click/saving denna  attached code eftersom användningen på deras webbsida inte är komplett samt förvirrande. Vidare är den beroende av loggingselenium och apache commons jar. Är man medveten om dessa problem, är detta projekt guld värt att studera för att få en bild av och tips hur man kan väva ihop egna skräddarsydda testrapporter.


DEBUGGING:
Debugging hör egentligen hemma i det programmeringsspråk du väljer från Selenium RC (Java). Det kommer inte att tas upp i denna manual. Vi kommer endast att titta på det generella avsnitt som står i Seleniums egna manual. Läs igenom Kapitel 4.8 Debugging här och tom avsnittet Locator Assistance


SELENIUM TEST:
Att köra Selenium som embedded plugin i Eclipse beskrivs i Selenium Manualen här:
(Selenium Documentation, Release 1.0, Selenium Project October 20, 2009 under kapitel
JAVA CLIENT DRIVER CONFIGURATION  11.1 Configuring Selenium-RC With Eclipse.)


CubicTest:
Ett annat område som är mycket intressant och nyttigt är CubicTest .
CubicTest är en grafisk Eclipse plug-in för att skriva Selenium och Watir tester. Det gör webbtester snabbare och lättare att skriva, samt det tillhandahåller abstraktioner som gör testen mera robusta och återanvändbara.
Mha CubicTest’s Recorder kan du spela in dina test direkt från Firefox in i editorn.
Mha CubicTest’s Runner kör du dina test omedelbart , med din favorit webbläsarer. Utan inställningar av mål applikation etc.


TIPS & TRICK
Selenium Tips och Trick/FAQ

  • Selenium Documentation manual hittar du här
  • Reference Manual hittar du här . I den finns information om Selenium locators koncept och de olika kommando som finns. Du hittar en komprimerad version av manualen här.
  • Vidare så hittar du reguljära uttryck här:
    Reguljära uttryck – generellt: här
    Selenium Reguljära uttryck här samt något exempel:
    här och här.
  • Assert vs verify: Om du använder seleniums verify kommando – kommer din test suite/case – att fortsätta köra – och misslyckas (fail) mot slutet. Därför bör du i de flesta fall använda dig av assert kommando som gör att testet stoppar som det skall.
  • Ibland kan Selenium IDE använda sig av ”click” istället för av ”clickAndWait”, för vissa ”submit” knappar resulterar testfallen i att din nästa sidas assert/verify misslyckas (fail). Däför behöver du editera testfallet manuellt eller addera waitForPageToLoad med någon timeout.
  • Om recording inte fungerar – gå till firefox och klicka på ”Tools->Add on -> Selenium IDE ” .Disabla det först och sedan enabla det och slutligen starta om webbläsaren. Ibland hjälper det att klicka på Selenium IDEs Options->HTML Format.
  • Om webbsidan inte tillåter ramar av någon anledning, måste du välja att använda -multiwindow option(istället för -interactive) med Selenium RC.
  • För att eliminera certificate warning(och arbeta ”cross domains” ) använd chrome/iehta modes – vilken numera är default(i jämförelse med rc beta1 versionen)
    här

Om du kollar selenium rc options mao ”java -jar selenium-server.jar -h” så kommer du att finna att det finns en ”timeout” option. Men den timeouten gäller för hela serverprocessen (och inte för individuella ”clickAndWait” processer). Dock kan det ibland vara bra att använda ”setTimeOut” via ditt java program eller i de fall man använder HTML med -Selenium IDE. Då gör du så här: open test case-> Add Insert new command -> setTimeout med value(inte Target) till låt oss säga 240000 (ms)

  • Selenium har har detta coola – captureEntirePageScreenShot kommando som fungerar bra med IDE/HTML . Överväg att använda det vid kritiska punkter (för att debugga potentiella problem, då du schemalägger dina testfall). Men tillsammans med programmeringsspråk som java – är det inte säkert att det fungerar. Läs lite om diskussionen kring detta captureEntirePageScreenShot här . Om så är fallet bör du istället överväga att använda dig av den experimentella captureScreenshot här .
  • Överväg att skriva en wrapper för dina TestCase/TestSuite i .net/jsp så kan du underhålla dina testcase/test suite i HTML.
  • Ibland dödas inte webbläsaren eller java processen efter att testet har körts. Då behöver du döda processen manuellt (du kan försöka använda några automatiserade verktyg som Pskill i Windows ).
  • När ditt client java test (vid användande av RC) avslutar med error – kommer det inte att ge ett klart och definierat error – du får bara rad numret av den assert fail som misslyckats i stack trace – I vissa fall får du göra egna tillägg för att fånga alla exceptions och  - skriva ut hela det sista body test som utförts.

Om du testar sidor där id förändras dynamiskt – då kan du behöva använda många xpath i dina test . I sådana fall installera firebug och använd:
”Inspect element” genom att högerklicka på elementet
Copy XPath genom att högerklicka längst ned
Add ”/” före värdet du har i din clipboard
klistra in detta som ett ”target” i Selenium IDE för ditt ”clickAndWait” kommando. Du kan kontrollera validiteten genom att – klicka på ”find” knappen i Selenium IDE för att försäkra dig om att din XPath är korrekt(det förutsättes att sidan är öppen) . Du hittar fler tips om xpath och firebug/xpather här

  • Om du använder Selenium HTML test fall – då kan ett sätt att ta bort hårdkodade värden i ditt selenium test vara att ha enkla JSP(eller asp/php) som konverterar CSV filer to HTML filer.
    Då behöver du bara kalla på den JSP sidan (för specifik CSV) – kalla på olika ”store” värden och ersätta de hårdkodade värden i ditt test med ”get” värdena . På så sätt kan du ändra dina test/data genom att ersätta CSV filen med en ny.
  • Den senaste selenium rc supportar Firefox 3..
    Med firefox 3 kan du med lätthet addera din lokala https server med icke giltiga certifikat i safe list(för att framkalla varnings meddelanden). Det är svårt att göra detta i Firefox 2, om du av någon anledning fortfarande kör med denna.
  • Om du kör selenium rc test med IE på en site som redan har ogiltigt certifikat – då kommer IE att varna för ”invalid certificate”. Du kan ställa in selenium att automatiskt stå i mode click on ”Continue” link (vilket har  ID som gör overridelink) genom att addera nedanstående kommando i ditt IE specifika testfall.
    .
    <tr>
    <td>clickAndWait</td>
    <td>//a[@id=’overridelink’] </td>
    <td></td>
    </tr>

Du kan också överväga att ändra IE options till att vara strikta(t.ex. Tool->Internet Options->Advanced->Display Notification på allascript error) att selenium fångar alla javascript issues/bugs i din webbsida.

Överväg användandet av UI-Element – vilka numera supportas i RC här

Det finns ytterligare goda tips här:
9-important-tips-for-selenium-remote-control-java-client-test-tool

Selenium core faq(eg permission denied)

Selenium rc Faq


Utöka Selenium

Det finn en trevlig artikel, ”Selenium IDE Flow Control – Goto and While Loops” som länkar till

- google download code
- extend selenium to support loop(while) and goto.

http://51elliot.blogspot.com/2008/02/selenium-ide-goto.html

Detta förutsätter att dit testfall är exporterat i ett programmeringsspråk (Java). Eller så kan du försöka wrap HTML i JSP/asp .net.

Du får en lista på alla supportade extensions (t.ex. UI-Element) på följande site:

http://wiki.openqa.org/display/SIDE/Contributed+Extensions+and+Formats


Load testing med Selenium

Selenium är inte designad för load testing. Emellertid – vissa företag kan använda sig av Selenium Grid för low load testing där man kör testsuites med många webbläsare. Det finns även intressanta försök till att med ”PushtoTest” försöka konvertera selenium test till low level – ”htmlunit” test – som sedan anpassas i större sammanhang för load testing. Jag vet inte hur stabila dessa är än, men här är länken till det projektet:

http://www.pushtotest.com/products/selenium-how-to/

I framtida Selenium(2.0) – kommer man troligtvis att kunna köra seleniumtester utan webbläsare (webbdrivern är inbyggd) vilket kommer att föra Selenium ett steg närmare load test. Det står mer om detta i följande länk:

http://groups.google.com/group/webdriver/browse_thread/thread/b089f9a193e4eec9?pli=1


Bra Resources/Externa Länkar:

Selenium Main site

Using selenium with command line for IE or using Ant

Effective Selenium presentation zip

Advanced Selenium presentation pdf

Selenium with Maven

Om du använder ”exported” java client code med Selenium RC, då är API för två main class följande:

a)   http://release.openqa.org/selenium-remote-control/0.9.2/doc/java/com/thoughtworks/selenium/SeleneseTestCase.html

(Det finns faciliteter för screen shot – men de tycks vara protected )

b) http://release.openqa.org/selenium-remote-control/0.9.0/doc/java/com/thoughtworks/selenium/DefaultSelenium.html


Alternativ till Selenium

Selenium vs Low/Network level tools som Webtest/HttpUnit/HtmlUnit(java)

Om du använder dig av ”low/network” level tool som htmlunit har detta fördelen att vara snabbt – men dess javascript kommer inte att fungera i de flesta komplexa webbsites (såvida det inte bara är ett rent webbläsartest såklart…)
Selenium(java, .net) code har också nackdelen att bli beroende av RC servern (förvisso inget stort problem).

Du borde fortsätta använda low level tools som httpunit etc inom monitoring – men inte använda dessa tools för browser/regression testing.

Selenium vs Watir
Om du gillar att ha dina testfall i Ruby (eller kanske  .net) och är villig att gräva dig igenom ”hard to understand” dokumentation – då är Watir ditt verktyg!.(om du är perl/php/java shop – användare, bry dig inte ens om att tänka tanken på att överväga Watir tills vidare.). Watir har förvisso sina egenheter, t.ex. att dess recorder använder IE för att spela in. När du använder det med Selenium – och din site av ngn anledning inte fungerar med Firefox (Seleniums default webbläsare) – tvingas du att manuellt skriva om koden för användning på annan webbläsare (ingen stor grej, men endå merarbete som måste tas hänsyn till.).

Den största fördelen med Selenium är dess support för FIT HTML och alla de programmeringsspråk/webbläsare/plattformar som den supportar. (med hyfsat bra dokumentation).


Du har nu tagit dig igenom och lärt dig så mycket om Selenium och dess användning inom Java / JUnit mm. att du kan stå på dina egna ben och börja testa på egen hand mot ditt företag och deras kunder/klienter. Detta är ett stort område, under ständig utveckling så du kommer att få ligga i med att hålla dig ajour via nätet, bloggar, bbs’er, twitter och allt vad de olika info-mediavägarna heter. Den primära källan till det senaste är dock Seleniums hemsida för pågående projekt och deras FAQ. Lycka till med Selenium och ditt testande!

/Paul Arcombe 091231


<TIDIGARE>                            <ÖVERST>                                <NÄSTA>