WebTest a Webdriver- „most priateľstva“- prostredníctvom Groovy, časť II.

Roman Hesteric  /  07. 04. 2009, 13:39

Spojenie dvoch nezávislých open-source projektov na automatické testovanie webových aplikácií do jedného celku.

V prvej časti som sľúbil, že sa podrobnejšie pozrieme na kódy v Jave, Groovy a že podrobnejšie popíšem postupy integrácie Google Webdriver do Canoo WebTest.

Poďme teda pekne po poriadku. Google Webdriver je možné stiahnuť z jeho domáceho webu. V čase písania tohto článku bola aktuálna verzia r870. Tu si dovolím upozorniť, že staršie verzie Webdriver-a sú k dispozícii vybratím „Deprecated downloads“ a stlačením buttona „Search“:

webdriver-download

Od verzie r280, s ktorou som začínal pri písaní článkov o Google Webdriver, sa toho dosť zmenilo. Okrem zmien popísaných v uvedenom článku, veľmi pozitívnou zmenou je použite prehliadača Mozilla Firefox bez nutnosti použitia WebDriver pluginu - [webdriver-firefox.xpi]. Teraz je teda možné používať Firefox bez dodatočnej inštalácie xpi.

Poďme ale priamo na testovacie kódy v ich jednotlivých modifikáciách [Java, Groovy, WebTest].


Java:

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.firefox.*;

 

public class Example  {

 public static void main(String[] args) {

     WebDriver driver = new FirefoxDriver();

 

     driver.get("http://www.google.com/ncr");

 

     WebElement element = driver.findElement(By.name("q"));

 

     element.sendKeys("Cheese!");

 

     element.submit();

 

     System.out.println("Page title is: " + driver.getTitle());

     driver.close();

  }

}

Tento kód postupne vykoná nasledujúce akcie:

  • Otvorí Firefox [new FirefoxDriver()].
  • Naviguje na stránku google [driver.get("http://www.google.com/ncr")].
  • Do vyhľadávacieho poľa zadá reťazec „Cheese!“ [element.sendKeys("Cheese!")].
  • Klikne na button „Google search“ [element.submit()].
  • Vypíše na konzolu titul result-stránky [System.out.println("Page title is: " + driver.getTitle())] .
  • Zatvorí Firefox [driver.close()].

 

Rovnaký kód v jazyku Groovy, v ktorom pribudol záverečný test na výskyt reťazca „Cheese“ v titulku odpovede zo servera.

Groovy:

/**

 * @author Roman Hesteric (www.together.sk)

 */

 import org.openqa.selenium.By;

 import org.openqa.selenium.WebDriver;

 import org.openqa.selenium.WebElement;

 import org.openqa.selenium.firefox.*;

 import com.canoo.webtest.engine.StepFailedException as SFE

 

public class GExample{

 

    /**

     * @param args

     */

    public static void main(def args){

        WebDriver driver = new FirefoxDriver();

 

        driver.get("http://www.google.com/ncr");

 

        WebElement element = driver.findElement(By.name("q"));

       

        element.sendKeys("Cheese!");

 

        element.submit();

 

        String sTitle = driver.getTitle();

       

        println("Page title is: " + sTitle);

        driver.close();

       

        if(!sTitle.contains("Cheese")) {

              throw new SFE("Problem found!")

       }

    }   

}

 

Pomocou triedy „StepFailedException” som pripravil budúcu komunikáciu groovy kódu s Canoo WebTestom. Ak totiž potrebujeme oznámiť Canoo WebTestu, že test nedopadol dobre a že teda nechceme aby sa test vykonával ďalej, vyhodíme StepFailedException – čim zastavíme vykonávanie testu a zobrazíme výsledky testu s zlyhaním v kroku <groovy>.

Na spustenie groovy kódu v prostredí Eclipse potrebujete plug-in do Eclipse, ktorý nájdete tu.
 

Na úspešné skompilovanie nezabudneme pridať jar-súbory Google Webdriver  a Canoo WebTest do classpath groovy projektu :

 

Samotné spustenie programu sa vykoná pomocou „Run As => Groovy”

Výsledok spustenia groovy projektu v prostredí Eclipse:

 

Teraz to celé „zlepíme“ dohromady a zapíšeme to v Canoo WebTest XML zápise nasledovne:

 

Canoo WebTest:

<?xml version="1.0"?>

<!--

| Author        : Ing. Roman Hesteric (www.together.sk)

-->

 

<project name="canoo_webdriver" basedir="." default="canoo_webdriver">

 

 <target name="canoo_webdriver">

    <antcall target="canoo_webdriver1"/>

 </target>

   

 <target name="canoo_webdriver1">

    <webtest name="canoo_webdriver1">

      <steps>

       <storeProperty name="find" value="Cheese"/>

       <groovy>     

         import org.openqa.selenium.By;

         import org.openqa.selenium.WebDriver;

         import org.openqa.selenium.WebElement;

         import org.openqa.selenium.firefox.*;

         import com.canoo.webtest.engine.StepFailedException as SFE

 

         WebDriver driver = new FirefoxDriver();

 

         driver.get("http://www.google.com/ncr");

 

         WebElement element = driver.findElement(By.name("q"));

                                        

         String sFind = step.getWebtestProperty("find").toString();

      

         element.sendKeys(sFind);

 

         element.submit();

             

  String sTitle = driver.getTitle();

                                 

         println("Page title is: " + sTitle);

         driver.close();

                          

         if(!sTitle.contains("Cheese")) {

           throw new SFE("Problem found!");

         }

       </groovy>

        <echo message="Test OK"/>

     </steps>

   </webtest>

 </target>                      

</project>

 

 

Všimnite si ako komunikuje Groovy kód s kontextom Canoo Webtest. WebTest uložil do property/premennej [storeProperty name="find" value="Cheese"/>] „find“ hodnotu „Cheese“. Groovy ju prečítal [String sFind = step.getWebtestProperty("find").toString()] a použil. Opačným spôsobom [step.setWebtestProperty()] zafunguje aj komunikácia smerom z Groovy do WebTest-u.

 

Autor pracuje ako programátor vo firme www.together.sk

 

Neprehliadnite: