Ü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:
- Nyisd meg az IntelliJ IDEA-t.
- Válaszd a „New Project” lehetőséget.
- A bal oldalon válaszd a „Maven” lehetőséget.
- Adj egy „GroupId”-t (pl.
com.example
) és egy „ArtifactId”-t (pl.selenium-first-steps
). - 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.
- ChromeDriver (Google Chrome): Töltsd le a megfelelő verziót a ChromeDriver letöltőoldaláról. Fontos, hogy a letöltött driver verziója megegyezzen a Chrome böngésződ verziójával.
- GeckoDriver (Mozilla Firefox): Töltsd le a GitHub oldalról.
- MSEdgeDriver (Microsoft Edge): Töltsd le a Microsoft Developer oldaláról.
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:
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
).WebDriver driver = new ChromeDriver();
Létrehozunk egy példányt aChromeDriver
osztályból. Ez a parancs indítja el a Chrome böngészőt, és egyWebDriver
objektumot ad vissza, amellyel innentől kezdve vezérelhetjük a böngészőt.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á.driver.get("https://www.google.com");
Ez a parancs navigálja a böngészőt a megadott URL-re.WebElement searchBox = driver.findElement(By.name("q"));
Itt azonosítjuk a Google keresőmezőjét. AfindElement()
metódus aBy
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 aname
attribútumaq
. 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.searchBox.sendKeys("Selenium teszt automatizálás");
Miután megtaláltuk a keresőmezőt (searchBox
), asendKeys()
metódussal beírhatunk szöveget.searchBox.sendKeys(Keys.ENTER);
AKeys.ENTER
segítségével szimuláljuk az Enter billentyű lenyomását, ezzel elindítva a keresést.String pageTitle = driver.getTitle();
AgetTitle()
metódus lekéri az aktuális oldal címét. Ezt használjuk az ellenőrzéshez.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ítettassert
metódusokkal rendelkeznek a pontosabb ellenőrzéshez.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 nincsid
, próbálkozz aname
vagy acssSelector
-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.
- Mindig próbálj meg a legstabilabb és legspecifikusabb elem azonosító módszert használni. Az
- 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();
- SOHA ne használd a
- 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
vagyclassName
) 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).
- Ok: Az elemek azonosítói (pl.
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