Teszt automatizálás Seleniummal: az első lépések

Üdvözöllek a teszt automatizálás izgalmas világában! Ha valaha is azon gondolkodtál, hogyan lehetne gyorsabban, hatékonyabban és megbízhatóbban tesztelni webes alkalmazásaidat, akkor jó helyen jársz. Ez a cikk egy átfogó, mégis könnyen emészthető bevezetőt nyújt a Selenium WebDriver használatába, ami az egyik legnépszerűbb eszköz a webes tesztek automatizálásához. Akár fejlesztő vagy, akár minőségbiztosítási szakember, vagy csak egyszerűen érdekel a témakör, itt megtalálod azokat az alapokat, amelyekre építkezve elindíthatod első automatizált tesztjeidet.

Miért fontos a teszt automatizálás?

A mai gyorsan változó digitális környezetben a szoftverfejlesztés felgyorsult tempója megköveteli a tesztelési folyamatok optimalizálását is. A manuális tesztelés, bár továbbra is elengedhetetlen, időigényes, monoton és hajlamos az emberi hibákra, különösen regressziós tesztelés során, amikor újra és újra végig kell futtatni ugyanazokat a teszteseteket. Itt jön képbe a teszt automatizálás.

  • Gyorsaság és hatékonyság: Az automatizált tesztek sokkal gyorsabban futnak le, mint a manuális tesztek, lehetővé téve a gyorsabb visszajelzést a fejlesztői csapatnak.
  • Pontosság és megbízhatóság: A gépek nem fáradnak el, és nem vétenek figyelmetlenségi hibákat. Egy jól megírt automatizált teszt mindig ugyanazt a logikát követi, konzisztens eredményeket szolgáltatva.
  • Költséghatékonyság: Hosszú távon az automatizálás csökkenti a tesztelésre fordított időt és erőforrásokat, így megtakarítást eredményez.
  • Regressziós tesztelés: Új funkciók bevezetésekor vagy hibajavítások után könnyedén ellenőrizhető, hogy az előzőleg működő részek továbbra is megfelelően viselkednek-e.
  • Fokozott tesztlefedettség: Lehetővé teszi komplexebb és több teszteset lefuttatását, mint amennyit manuálisan valaha is meg lehetne valósítani.

Mi is az a Selenium?

A Selenium nem egyetlen eszköz, hanem egy szoftvercsomag, amely különböző komponenseket tartalmaz a webes teszt automatizálás céljára. A legfontosabb komponensek a következők:

  • Selenium WebDriver: Ez a csomag legfontosabb része, amellyel közvetlenül interakcióba léphetünk a böngészőkkel. A WebDriver API segítségével programozottan vezérelhetünk egy böngészőt, szimulálva egy valós felhasználó tevékenységét (kattintás, szövegbevitel, navigáció, stb.). Támogatja a legnépszerűbb böngészőket (Chrome, Firefox, Edge, Safari) és több programozási nyelvet is (Java, Python, C#, Ruby, JavaScript, Kotlin).
  • Selenium IDE: Egy böngészőbővítmény (Chrome és Firefox számára), amellyel rögzíthetjük és lejátszhatjuk az interakcióinkat. Kezdőknek ideális lehetőség a teszt automatizálás alapjainak megismerésére, de komplexebb forgatókönyvekhez a WebDriver rugalmassága elengedhetetlen.
  • Selenium Grid: Lehetővé teszi a tesztek párhuzamos futtatását több gépen és különböző böngészőkben egyszerre, drasztikusan csökkentve ezzel a tesztelési időt nagy projektméret esetén.

Ebben a cikkben a Selenium WebDriver-re fókuszálunk, mivel ez nyújtja a legnagyobb rugalmasságot és hatékonyságot az automatizált tesztek írásához.

Az első lépések: Előfeltételek és környezet beállítása

Mielőtt belevágnánk az első szkript megírásába, gondoskodnunk kell arról, hogy a megfelelő eszközök rendelkezésre álljanak a fejlesztői környezetünkben.

1. Programozási nyelv és fejlesztői környezet (IDE)

A Selenium számos programozási nyelvet támogat. A legnépszerűbbek a Java és a Python. Ebben a cikkben a Java nyelvet és az IntelliJ IDEA IDE-t fogjuk használni a példákhoz, de a koncepciók más nyelveken és IDE-kben is érvényesek.

  • Java Development Kit (JDK) telepítése: Győződj meg róla, hogy a gépedre telepítve van a JDK (minimum 8-as verzió). Ezt letöltheted az Oracle webhelyéről vagy az OpenJDK disztribúciókból (pl. Adoptium).
  • Integrált Fejlesztői Környezet (IDE) telepítése: Ajánlott egy modern IDE használata, mint például az IntelliJ IDEA (Community Edition ingyenes) vagy az Eclipse. Ezek jelentősen megkönnyítik a kódolást, a hibakeresést és a projektkezelést.

2. Projekt létrehozása és függőségek kezelése

A Java projektekhez leggyakrabban a Maven vagy a Gradle build rendszereket használjuk a függőségek kezelésére. Ezek automatikusan letöltik a szükséges könyvtárakat (például a Seleniumot).

  • Új Maven projekt létrehozása IntelliJ-ben:
    1. Nyisd meg az IntelliJ IDEA-t.
    2. Válaszd a „New Project” lehetőséget.
    3. A bal oldalon válaszd a „Maven” lehetőséget.
    4. Adj egy „GroupId”-t (pl. com.example) és egy „ArtifactId”-t (pl. selenium-first-steps).
    5. Kattints a „Finish” gombra.
  • Selenium WebDriver függőség hozzáadása: A projekt gyökérkönyvtárában található pom.xml fájlba add hozzá a következő függőséget a <dependencies> tagen belül:
    <dependencies>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.X.X</version> <!-- Használd a legújabb stabil verziót -->
        </dependency>
    </dependencies>
    

    Ne felejtsd el frissíteni a Maven projektet (IntelliJ-ben általában egy felugró értesítés jelenik meg, vagy a Maven eszköztárban kattints a frissítés ikonra).

3. Böngésző driverek letöltése

A Selenium WebDriver közvetlenül nem tud kommunikálni a böngészőkkel. Szüksége van egy köztes programra, az úgynevezett böngésző driver-re, amely lefordítja a Selenium parancsokat a böngésző számára érthető utasításokká. Minden böngészőnek megvan a saját drivere.

Miután letöltötted a választott böngésző driverét (ami általában egy .exe fájl Windows-on, vagy egy futtatható fájl macOS/Linux-on), helyezd el egy könnyen hozzáférhető mappába, például a projekt gyökérkönyvtárában egy drivers mappába, vagy egy globálisan elérhető helyre.

Az első Selenium szkript megírása

Most, hogy minden készen áll, írjuk meg az első egyszerű automatizált tesztünket. Ez a szkript megnyitja a Google-t, rákeres egy kifejezésre, majd ellenőrzi az oldal címét.

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

public class GoogleSearchTest {

    public static void main(String[] args) throws InterruptedException {

        // 1. Böngésző driver elérési útvonalának beállítása
        // Helyettesítsd be a saját chromedriver.exe fájlod elérési útvonalát!
        System.setProperty("webdriver.chrome.driver", "C:/drivers/chromedriver.exe"); 

        // Opcionális: böngésző opciók beállítása (pl. fej nélküli mód, nyelv)
        // ChromeOptions options = new ChromeOptions();
        // options.addArguments("--headless"); // Fej nélküli mód: böngésző grafikus felület nélkül fut
        // options.addArguments("--lang=hu"); // Magyar nyelvű böngésző indítása

        // 2. WebDriver inicializálása (böngésző indítása)
        // WebDriver driver = new ChromeDriver(options); // Ha használsz opciókat
        WebDriver driver = new ChromeDriver(); // Alapértelmezett beállításokkal

        // Maximális ablakméretre állítás a jobb láthatóság érdekében
        driver.manage().window().maximize();

        // 3. Navigáció egy URL-re
        String url = "https://www.google.com";
        System.out.println("Navigálás a következő URL-re: " + url);
        driver.get(url);

        // Rövid várakozás, hogy az oldal betöltődjön (nem ajánlott éles környezetben, lásd lentebb!)
        // Thread.sleep(2000); 

        // 4. Elem azonosítása és interakció
        // Az elemeket különböző stratégiákkal azonosíthatjuk:
        // By.id("valami")
        // By.name("valami")
        // By.className("valami")
        // By.tagName("valami")
        // By.linkText("valami")
        // By.partialLinkText("valami")
        // By.cssSelector("valami")
        // By.xpath("valami")

        // Keresőmező azonosítása név alapján (a Google keresőmezőjének neve 'q')
        WebElement searchBox = driver.findElement(By.name("q"));
        System.out.println("Keresőmező megtalálva.");

        // Szöveg beírása a keresőmezőbe
        String searchText = "Selenium teszt automatizálás";
        searchBox.sendKeys(searchText);
        System.out.println("Beírt szöveg: " + searchText);

        // Enter lenyomása a keresés indításához
        searchBox.sendKeys(Keys.ENTER);
        System.out.println("Keresés indítva.");

        // Rövid várakozás az eredmények betöltésére
        // Thread.sleep(3000); 

        // 5. Ellenőrzés (Assert)
        // Ellenőrizzük, hogy az oldal címe tartalmazza-e a keresett kifejezést
        String pageTitle = driver.getTitle();
        System.out.println("Az oldal címe: " + pageTitle);

        if (pageTitle.contains(searchText)) {
            System.out.println("Teszt sikeres: Az oldal címe tartalmazza a keresett kifejezést.");
        } else {
            System.out.println("Teszt sikertelen: Az oldal címe NEM tartalmazza a keresett kifejezést.");
        }

        // 6. Böngésző bezárása
        System.out.println("Böngésző bezárása.");
        driver.quit(); // Bezárja az összes ablakot és leállítja a WebDriver-t
        // driver.close(); // Csak az aktuális ablakot zárja be
    }
}

Kódmagyarázat lépésről lépésre:

  1. System.setProperty("webdriver.chrome.driver", "C:/drivers/chromedriver.exe");
    Ez a sor adja meg a Selenium-nak, hol találja a Chrome böngésző driverét. Győződj meg róla, hogy a megadott útvonal helyes a te rendszereden. Ugyanez vonatkozik a Firefox-ra (webdriver.gecko.driver) és az Edge-re (webdriver.edge.driver).
  2. WebDriver driver = new ChromeDriver();
    Létrehozunk egy példányt a ChromeDriver osztályból. Ez a parancs indítja el a Chrome böngészőt, és egy WebDriver objektumot ad vissza, amellyel innentől kezdve vezérelhetjük a böngészőt.
  3. driver.manage().window().maximize();
    Maximalizálja a böngésző ablakát. Ez jó gyakorlat, mivel bizonyos elemek csak nagyobb felbontásban válnak láthatóvá.
  4. driver.get("https://www.google.com");
    Ez a parancs navigálja a böngészőt a megadott URL-re.
  5. WebElement searchBox = driver.findElement(By.name("q"));
    Itt azonosítjuk a Google keresőmezőjét. A findElement() metódus a By osztály különböző statikus metódusai (id, name, className, xpath, cssSelector stb.) segítségével képes megtalálni egy HTML elemet az oldalon. A Google keresőmezőjének a name attribútuma q. Fontos, hogy pontosan add meg az azonosítót, különben a Selenium nem találja meg az elemet, és hibát fog dobni.
  6. searchBox.sendKeys("Selenium teszt automatizálás");
    Miután megtaláltuk a keresőmezőt (searchBox), a sendKeys() metódussal beírhatunk szöveget.
  7. searchBox.sendKeys(Keys.ENTER);
    A Keys.ENTER segítségével szimuláljuk az Enter billentyű lenyomását, ezzel elindítva a keresést.
  8. String pageTitle = driver.getTitle();
    A getTitle() metódus lekéri az aktuális oldal címét. Ezt használjuk az ellenőrzéshez.
  9. if (pageTitle.contains(searchText)) { ... }
    Ez a rész egy egyszerű ellenőrzés. Azt vizsgáljuk, hogy az oldal címe tartalmazza-e a keresett kifejezést. Éles tesztesetekben gyakran használnak unit teszt keretrendszereket (pl. JUnit, TestNG Java esetén), amelyek beépített assert metódusokkal rendelkeznek a pontosabb ellenőrzéshez.
  10. driver.quit();
    Ez a legfontosabb parancs a teszt végén. Bezárja az összes megnyitott böngészőablakot, és leállítja a WebDriver folyamatot. Ha ezt elfelejted, a böngésző továbbra is nyitva marad, és a driver folyamat a háttérben futhat, feleslegesen fogyasztva az erőforrásokat.

Gyakorlati tanácsok kezdőknek

Az első szkript megírása után érdemes néhány bevált gyakorlatot megismerni a robusztusabb és megbízhatóbb automatizált tesztek érdekében.

  • Elem azonosítás (Locators):
    • Mindig próbálj meg a legstabilabb és legspecifikusabb elem azonosító módszert használni. Az id az elsődleges választás, mivel egyedi. Ha nincs id, próbálkozz a name vagy a cssSelector-rel.
    • Az XPath és a teljes CSS Selector-ok erősek, de könnyen törhetnek az UI változásaival. Csak akkor használd őket, ha nincs jobb alternatíva.
    • Használd a böngésződ fejlesztői eszközeit (F12) az elemek vizsgálatára és a megfelelő lokátorok megtalálására.
  • Várakozási stratégiák:
    • SOHA ne használd a Thread.sleep()-et éles tesztkódban, hacsak nem abszolút elengedhetetlen (pl. hibakeresés). Ez egy statikus várakozás, amely lelassítja a teszteket, és ha az elem korábban betöltődik, feleslegesen várakozik, ha pedig később, akkor a teszt elbukik.
    • Implicit Waits (Implicit Várakozás): Ez beállít egy alapértelmezett várakozási időt az összes findElement() híváshoz. Ha az elem nem található azonnal, a Selenium addig vár a megadott időn belül, amíg az elem megjelenik.
      driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10)); // Max 10 másodpercet vár
      
    • Explicit Waits (Explicit Várakozás): Ez a legrugalmasabb és leginkább ajánlott módszer. Csak akkor vár, ha egy adott feltétel teljesül (pl. egy elem láthatóvá válik, vagy kattinthatóvá válik).
      import org.openqa.selenium.support.ui.ExpectedConditions;
      import org.openqa.selenium.support.ui.WebDriverWait;
      import java.time.Duration;
      
      // ...
      WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
      WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("elemId")));
      element.click();
      
  • Kód szervezése (Page Object Model – POM):
    Ahogy a tesztek száma nő, a kód karbantarthatatlanná válhat. A Page Object Model (POM) egy tervezési minta, amely szerint minden weboldalt vagy annak egy részét egy különálló Java (vagy más nyelvű) osztály képvisel. Ezáltal a tesztek olvashatóbbá, karbantarthatóbbá és újrafelhasználhatóbbá válnak.

Gyakori kihívások és megoldások

  • Elem nem található (NoSuchElementException):
    • Ok: Az elem lokátora rossz, vagy az elem még nem töltődött be az oldalon.
    • Megoldás: Ellenőrizd a lokátort. Használj explicit várakozásokat, hogy megvárd az elem megjelenését.
  • Elem interakciója nem lehetséges (ElementNotInteractableException):
    • Ok: Az elem látható, de még nem kattintható vagy nem szerkeszthető (pl. takarásban van egy felugró ablaktól, vagy még nem aktív).
    • Megoldás: Használj explicit várakozást arra, hogy az elem kattintható legyen (ExpectedConditions.elementToBeClickable()).
  • Böngésző kompatibilitás:
    • Ok: A teszt csak egy böngészőben működik megfelelően.
    • Megoldás: Teszteld a szkriptet különböző böngészőkben (Chrome, Firefox, Edge). Használj Selenium Grid-et a párhuzamos teszteléshez.
  • Dinamikus elemek:
    • Ok: Az elemek azonosítói (pl. id vagy className) minden oldalbetöltéskor megváltoznak.
    • Megoldás: Keress stabilabb lokátorokat (pl. name attribútum, egyedi szövegtartalom, vagy reláció más stabil elemekhez XPath/CSS segítségével).

Az első lépéseken túl: Hova tovább?

Az alapok elsajátítása után számos irányba fejlődhetsz tovább a Selenium és a teszt automatizálás területén:

  • TestNG/JUnit: Ismerkedj meg a Java unit teszt keretrendszerekkel, amelyekkel professzionális teszteseteket, tesztcsomagokat és riportokat hozhatsz létre.
  • Page Object Model (POM) implementáció: Tanulj meg hatékonyan szervezni a tesztkódodat a POM segítségével a jobb karbantarthatóság érdekében.
  • CI/CD integráció: Integráld az automatizált teszteket a Continuous Integration/Continuous Delivery (CI/CD) pipeline-odba (pl. Jenkins, GitHub Actions), hogy minden kódmódosítás után automatikusan lefusson a teszt.
  • Selenium Grid: Fedezd fel, hogyan futtathatsz teszteket párhuzamosan több gépen és böngészőben.
  • Adatvezérelt tesztelés (Data-Driven Testing): Tanulj meg tesztadatokat külső forrásokból (CSV, Excel, adatbázis) beolvasni, hogy ugyanazt a tesztet különböző bemenetekkel futtathasd.
  • Fejlett locators és JavaScript executor: Mélyedj el a komplexebb elem azonosítási technikákban és a JavaScript kód futtatásának lehetőségében a böngészőben.

Összegzés

Gratulálok! Megtetted az első lépéseket a webes teszt automatizálás és a Selenium világában. Létrehoztad a fejlesztői környezetedet, megírtad és futtattad az első automatizált teszt szkriptedet, és megismertél néhány alapvető, de annál fontosabb bevált gyakorlatot. Ne feledd, a gyakorlat teszi a mestert. Kísérletezz, próbálj ki különböző weboldalakat, és tesztelj le minél több funkciót. Az automatizálás egy folyamatosan fejlődő terület, de a most megszerzett alapokkal szilárdan állhatsz a lábadon, és jelentősen hozzájárulhatsz a szoftvertermékek minőségéhez és megbízhatóságához. Sok sikert a további tanuláshoz és a tesztek automatizálásához!

Leave a Reply

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük