Advanced Test Automation · Introduction to Selenium · 2. önálló hét
A feladatleírásban az American Greetings szerepelt, tartaléknak a 123 Greetings, később a
123cards. Mindegyikkel gond van, és egyik sem a te hibád:
ingyenes kiút nélkül, és a listán semmi nem jelöli, melyik melyik.
Ezért kaptál egy saját gyakorlóoldalt, ami ugyanazokat a készségeket kéri, de nincs benne
fizetési fal, és egyetlen valódi e-mail sem megy ki senkinek.
Igen, szándékosan ilyen ronda. A felugró ablakok, a süti-sáv és a késleltetések is szándékosak:
pontosan ezek adják a feladat tanulnivalóját.
URL: https://csillam-expressz.pages.dev/
Fontos tudnivaló: az oldalnak nincs szervere. A „szerverválaszt" JavaScript szimulálja —
késleltetéssel és töltésjelzővel. Az adataid a böngésző tárolójában élnek.
Ebből következik két dolog:
1. A bot friss böngészőprofilban indul, ezért a belépés szabálya nyilvános:
bármilyen érvényes e-mail + legalább 8 karakteres, számot tartalmazó jelszó belép.
2. Az „Elküldött lapjaim" lista annak a böngészőnek a tárolójából olvas, amelyikben küldtél.
A bot futása alatt küldött lapok tehát a bot böngészőjében látszanak — ott ellenőrizd.
A regisztracio.html oldalon van egy egyszerű biztonsági kérdés (összeadás) — ezért ezt
te csináld, böngészőben, ne a bot. A belépésen nincs ilyen.
⚠️ A jelszó legyen legalább 8 karakter, és tartalmazzon számot — különben a belépés elutasít.
Ez a 2. task másik fele. A jelszó soha ne kerüljön a .java fájlba:
credentials.properties a projekt gyökerében, ami szerepel a .gitignore-ban,System.getenv(...)),-Dmy.password=...).A .gitignore-t még az első commit előtt írd meg. Egy jelszó, ami egyszer bekerült a
git history-ba, akkor is ott marad, ha a következő commitban törlöd.
Ellenőrzés: git status, és a credentials fájl nem szerepel a követendő fájlok között.
| Mező | Lokátor |
|---|---|
id="email" | |
| Jelszó | id="jelszo" |
| Belépés gomb | id="belep-gomb" |
| Hibaüzenet (ha van) | id="hiba" |
A gomb megnyomása után 1,5 másodpercig egy töltésjelző látszik, és csak utána dől el,
hogy sikerült-e. Sikeres belépésnél az oldal a lapok.html-re vált — erre érdemes várni.
⚠️ A süti-sáv a lap alján fixen ott ül, és eltakarhatja a gombokat:
ElementClickInterceptedException. Előbb kattintsd el: id="cookie-elfogad".
A lapok.html-en 30 lap van, id="kategoria" legördülővel szűrve — ez a Select osztály terepe.
A prémium lapok nem küldhetők (matrica jelzi őket, kattintásra felugró ablak jön). Válassz
olyat, aminek data-premium="false" az attribútuma — így a botod biztosan jó lapot fog.
A lapok oldalon 6 másodperc után felugrik egy reklám. Ha épp akkor kattintanál, elfogja a
kattintást — zárd be: id="reklam-bezar".
A kuldes.html űrlapja lépcsőzetes:
És most jön a csavar:
> Ezek a mezők végig ott vannak a DOM-ban, csak rejtve.
Vagyis a driver.findElement(...) meg fogja találni őket a Tovább előtt is — nem kapsz
NoSuchElementException-t. Aztán amikor beleírnál, elszáll:
```
org.openqa.selenium.ElementNotInteractableException: element not interactable
```
Ez nem bug, és nem a te kódod hibája. Pontosan az a helyzet, amire az explicit wait való:
nem az kell, hogy az elem *létezzen*, hanem hogy láthatóvá és használhatóvá váljon.
Amit érdemes megnézned a dokumentációban:
WebDriverWait — meddig és milyen sűrűn próbálkozzon,ExpectedConditions.visibilityOfElementLocated(...) — pont erre az esetre,ExpectedConditions.elementToBeClickable(...) — gombokra,Thread.sleep().Lokátorok a küldőoldalon:
| Mező | Lokátor | Mikor használható |
|---|---|---|
| Feladó neve | id="felado-nev" | azonnal |
| Tovább gomb | id="tovabb-gomb" | azonnal |
| Címzett neve | id="cimzett-nev" | csak a Tovább után |
| Címzett e-mail | id="cimzett-email" | csak a Tovább után |
| Tárgy | id="targy" | csak a Tovább után |
| Üzenet | id="uzenet" | csak a Tovább után |
| Mikor menjen | id="mikor" (select) | csak a Tovább után |
| Küldés gomb | id="kuldes-gomb" | csak a Tovább után |
| Visszaigazolás | id="visszaigazolas" | a küldés után ~1,8 mp |
| Küldési azonosító | id="kuldes-azonosito" | a küldés után |
Bónusz: ha a #mikor legördülőt „Később"-re állítod, megjelenik egy dátum-blokk három további
legördülővel (#nap, #honap, #ora).
A 4. task: 3–5 címzett + üzenet párt tárolj fájlban (properties, CSV, JSON — a te döntésed),
és a bot mindenkinek küldje el a lapot a saját, személyre szabott üzenetével.
Ez az előző lépés ciklusba téve — de figyelj: minden körben tölts újra a kuldes.html-re,
különben a második kör beleakad az első maradványaiba (a küldés után az űrlap eltűnik).
Az eredmény ellenőrizhető az Elküldött lapjaim oldalon:
| Elem | Lokátor |
|---|---|
| Darabszám | id="kuldott-szam" |
| Táblázat | id="kuldott-tabla" |
| Egy sor | class="kuldott-sor", data-azonosito attribútummal |
Az Elküldött lapjaim oldalon a Törlés gomb valódi JavaScript confirm ablakot nyit.
Ezen gyakorolhatod a driver.switchTo().alert().accept() / .dismiss() használatát.
Ugyanez a süti-sáv „Részletek" gombjánál is.
| Journey-kritérium | Hol / hogyan |
|---|---|
| 1.1 Compiled classes és IDE-konfig Git-ből kizárva | .gitignore — az oldaltól független |
1.2 Selenium a pom.xml-ben | a projekted — az oldaltól független |
| 2.1 A bot betölti az oldalt és belép | belepes.html → #email, #jelszo, #belep-gomb |
| 2.2 A jelszó nem kerül be a Gitbe | a regisztrációnál választott saját jelszavad, külön fájlban / env-ben |
| 3.1 A bot belép és elküld egy ingyenes lapot | nem prémium lap → kuldes.html → #visszaigazolas |
| 4.1 3–5 cím–üzenet pár fájlban | a te adatfájlod (properties / CSV / JSON) |
| 4.2 Mindenkinek a saját üzenetével megy a lap | ciklus + ellenőrzés az elkuldott.html tábláján |
A kiírás megengedi a helyettesítést: *„You can use another eCard website if you want to or need to,
if you can find one that has a working eCard sending functionality."*
Egy előny a beadás szempontjából: a Hints figyelmeztet, hogy a valódi oldalakon **minden
próbálkozásnál kimegy egy lap** a címzetteknek, ezért kérj engedélyt tőlük. Itt semmilyen valódi
levél nem megy ki, szóval nyugodtan futtathatod annyiszor, ahányszor kell.
| Tünet | Mi történik | Mit csinálj |
|---|---|---|
ElementNotInteractableException | Rejtett mezőbe írnál a Tovább előtt | Explicit wait a láthatóságra |
ElementClickInterceptedException | A süti-sáv vagy egy felugró ablak takar | Előbb zárd be az overlay-t |
| A belépés „nem csinál semmit" | Még fut az 1,5 mp-es késleltetés | Várj az URL-váltásra vagy a hibaüzenetre |
| „Hibás e-mail vagy jelszó" jó jelszóval | A jelszó rövidebb 8 karakternél, vagy nincs benne szám | Használj szabályos jelszót |
| Prémium lapnál felugró ablak | Prémium lapot választottál | [data-premium="false"] lapot válassz |
| A 2. kör elszáll a ciklusban | Az előző kör állapota megmaradt | Minden körben navigálj újra a küldőoldalra |
.gitignore kizárja a lefordított osztályokat, az IDE-konfigot és a credentials fájltpom.xml-ben függőségkéntThread.sleep() — mindenhol explicit wait vanElőbb a DevTools (F12), utána a mentor. A legtöbb elakadás két dologból jön: vagy a lokátor nem az,
aminek hitted, vagy nem vártál eleget. Mindkettő láthatóvá válik, ha megnézed az elemet a
böngészőben, és összeveted azzal, amit a kódod keres.