Hogyan kezeljük a cookie-kat Selenium webdriver
⚡ Okos összefoglaló
A sütik kulcs-érték párokként tárolják a felhasználói beállításokat és a munkamenet-azonosítókat, és Selenium A WebDriver képes olvasni, menteni és visszajátszani őket, így egy automatizált teszt minden további futtatáskor kihagyja a bejelentkezési képernyőt.
A HTTP süti a felhasználóról és a beállításairól tartalmaz információkat. Kulcs-érték pár segítségével tárolja az információkat. Ez egy kis adat, amelyet egy webes alkalmazás küld, és a webböngésző tárolja, miközben a felhasználó böngészi az adott weboldalt.
Ha újonc vagy a témában, kezdd ezzel az útmutatóval cookie tesztelés.
Selenium Parancsok lekérdezése cookie-khoz
In Selenium A WebDriverben a lenti beépített metódusok segítségével kérdezhetjük le és kezelhetjük a sütiket. Mindegyikhez a driver.manage() metóduson keresztül jutunk el, amely az Options felületet adja vissza.
| Selenium Parancsok lekérdezése | teljesítmény |
|---|---|
| driver.manage().getCookies(); | Visszaadja az összes süti listáját |
| driver.manage().getCookieNamed(arg0); | Egy adott sütit ad vissza név szerint. |
| driver.manage().addCookie(arg0); | Létrehozza és hozzáadja a sütit |
| driver.manage().deleteCookie(arg0); | Töröl egy adott sütit |
| driver.manage().deleteCookieNamed(arg0); } } Megjegyzés: Ez egy technikai parancs, amiben a "CookieNamed" kifejezés szerepel. | Név szerint töröl egy adott sütit |
| driver.manage().deleteAllCookies(); | Törli az összes sütit |
Miért kell kezelni (elfogadni) a cookie-kat? Selenium?
Minden cookie névhez, értékhez, domainhez, elérési úthoz, lejárathoz és annak állapotához van társítva, hogy biztonságos-e vagy sem. A kliens érvényesítése érdekében a szerver ezeket az értékeket egy cookie-ban elemzi.
Amikor tesztelés egy webes alkalmazás, amely Selenium A WebDriver használatához létre kell hoznia, frissítenie vagy törölnie kell egy sütit.
Például egy online áruház automatizálása soránping alkalmazásban szükség lehet olyan tesztelési forgatókönyvek automatizálására, mint a rendelés leadása, a kosár megtekintése, a fizetési információk megadása, a rendelés visszaigazolása stb.
Ha a sütik nincsenek tárolva, akkor minden alkalommal el kell végeznie a bejelentkezést a fent felsorolt tesztforgatókönyvek végrehajtása előtt. Ez növeli a kódolási erőfeszítést és a végrehajtási időt.
A megoldás az, hogy a sütiket egy fájlban tároljuk. Later, kérd le a süti értékeit ebből a fájlból, és add hozzá azokat az aktuális böngésző-munkamenetedhez. Ennek eredményeként kihagyhatod a bejelentkezési lépéseket minden próbaper mert a vezetői munkamenetben ez az információ benne van.
Az alkalmazáskiszolgáló mostantól hitelesítettként kezeli a böngésző munkamenetét, és közvetlenül a kért oldalra irányítja Önt. URL.
Hogyan kezeljük a cookie-kat Selenium
Használni fogjuk https://demo.guru99.com/test/cookie/selenium_aut.php demó célunkra.
Ez egy 2 lépésből álló folyamat lesz.
1. lépés) Jelentkezzen be az alkalmazásba, és mentse el a létrehozott hitelesítési sütit.
A demó alkalmazás az alább látható egyszerű bejelentkezési űrlapot mutatja be.
2. lépés) Használja a tárolt sütit az alkalmazásba való újbóli bejelentkezéshez felhasználói azonosító és jelszó használata nélkül.
1. lépés) Cookie-információk tárolása
package CookieExample; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.util.Set; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.Cookie; public class cookieRead{ public static void main(String[] args) { WebDriver driver; System.setProperty("webdriver.chrome.driver","G:///chromedriver.exe"); driver=new ChromeDriver(); driver.get("https://demo.guru99.com/test/cookie/selenium_aut.php"); // Input Email id and Password If you are already Register driver.findElement(By.name("username")).sendKeys("abc123"); driver.findElement(By.name("password")).sendKeys("123xyz"); driver.findElement(By.name("submit")).click(); // create file named Cookies to store Login Information File file = new File("Cookies.data"); try { // Delete old file if exists file.delete(); file.createNewFile(); FileWriter fileWrite = new FileWriter(file); BufferedWriter Bwrite = new BufferedWriter(fileWrite); // loop for getting the cookie information // loop for getting the cookie information for(Cookie ck : driver.manage().getCookies()) { Bwrite.write((ck.getName()+";"+ck.getValue()+";"+ck.getDomain()+";"+ck.getPath()+";"+ck.getExpiry()+";"+ck.isSecure())); Bwrite.newLine(); } Bwrite.close(); fileWrite.close(); } catch(Exception ex) { ex.printStackTrace(); } } }
⚠️ Verzió megjegyzés: A System.setProperty sor pontosan úgy marad, ahogy az eredeti oktatóanyagban íródott. Selenium 4.6-tól kezdődően, Selenium A Manager automatikusan letölti és konfigurálja a megfelelő chromedriver-t, így az adott sorra már nincs szükség az aktuális beállításban. Az eredeti kódot alább érintetlenül hagyjuk, és továbbra is lefordul.
Code Magyarázat
- Hozz létre egy WebDriver példányt.
- Látogassa meg a weboldalt a driver.get(“https://demo.guru99.com/test/cookie/selenium_aut.php”) paranccsal.
- Jelentkezzen be az alkalmazásba.
- Olvassa el a süti információkat a használatával
driver.manage().getCookies();
- Tárolja a sütiadatokat a Fájl segítségévelWriter osztály karakterfolyamok írásához, és BufferedWriter hogy a szöveget egy Cookies.data nevű fájlba írja.
- A Cookies.data fájl tárolja az összes sütiinformációt, beleértve a nevet, az értéket, a domaint és az elérési utat. Ezeket az információkat lekérhetjük és bejelentkezhetünk az alkalmazásba a bejelentkezési adatok megadása nélkül.
A fenti kód futtatása után létrejön a Cookies.data fájl a projekt mappastruktúrájában. Nyissa meg a fájlt, és megtekintheti az AUT bejelentkezési adatait süti formátumban mentve, ahogy az alább kiemelt képernyőn látható.
2. lépés) Tárolt cookie használata az alkalmazásba való bejelentkezéshez
Most hozzáférünk az 1. lépésben létrehozott sütihez, és azt használjuk a munkamenet hitelesítéséhez az alkalmazásban.
package CookieExample; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.Date; import java.util.StringTokenizer; import org.openqa.selenium.Cookie; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class CookieWrite { public static void main(String[] args){ WebDriver driver; System.setProperty("webdriver.chrome.driver","G://chromedriver.exe"); driver=new ChromeDriver(); try{ File file = new File("Cookies.data"); FileReader fileReader = new FileReader(file); BufferedReader Buffreader = new BufferedReader(fileReader); String strline; while((strline=Buffreader.readLine())!=null){ StringTokenizer token = new StringTokenizer(strline,";"); while(token.hasMoreTokens()){ String name = token.nextToken(); String value = token.nextToken(); String domain = token.nextToken(); String path = token.nextToken(); Date expiry = null; String val; if(!(val=token.nextToken()).equals("null")) { expiry = new Date(val); } Boolean isSecure = new Boolean(token.nextToken()). booleanValue(); Cookie ck = new Cookie(name,value,domain,path,expiry,isSecure); System.out.println(ck); driver.manage().addCookie(ck); // This will add the stored cookie to your current session } } }catch(Exception ex){ ex.printStackTrace(); } driver.get("https://demo.guru99.com/test/cookie/selenium_aut.php"); } }
Kimenet: Közvetlenül a bejelentkezési siker képernyőjére kerül a felhasználói azonosító és jelszó megadása nélkül.
MEGJEGYZÉS: Használjon kemény frissítést, ha a fenti szkript végrehajtása után megjelenik a bejelentkezési oldal.
⚠️ Java Megjegyzés: Az olvasó szkript a new Boolean(String) és a new Date(String) metódusokat használja, amelyeket a JDK már régen elavult. Egy modern JDK-n a megfelelőik a Boolean.parseBoolean(token.nextToken()) és egy java.time elemző. Az eredeti sorok fent megmaradtak; a megjegyzést modern csereként, ne pedig szerkesztésként kezeljük.
Süti attribútumok és a Selenium Süti osztály
A fenti két szkript hat mezőt mozgat be és ki egy fájlból. Pontosan ezeket a mezőket teszi elérhetővé az org.openqa.selenium.Cookie osztály, és ismeretük sokkal könnyebbé teszi a 2. lépésben szereplő tokenizer ciklus olvasását.
| Attribútum | Hozzáférő | Mit jelent |
|---|---|---|
| Név | getName () | A kulcs, amelyet a szerver keres, például JSESSIONID. |
| Érték: | getValue () | A tárolt adatok, általában a munkamenet-azonosító. |
| Domén | getDomain() | A gazdagép, ahová a böngésző visszaküldi a sütit. |
| Útvonal | getPath() | Az URL előtag, amelyre a süti vonatkozik. |
| Lejárat | Lejáratot kap() | A süti leállásának dátuma. A null érték munkamenet-sütit jelent. |
| Biztos | Biztonságos() | Igaz, ha a süti csak HTTPS-en keresztül kerül elküldésre. |
| HttpOnly | isHttpOnly() | Igaz, amikor JavaAz oldalon található szkript nem tudja beolvasni a sütit. |
| Ugyanaz a webhely | getUgyanazOldal() | Szigorú, Laza vagy Semmi. Hozzáadva Selenium 4. |
A 2. lépésben használt hat argumentumos konstruktor helyett a jelenlegi kód általában a belső Builder osztályon keresztül épít fel egy sütit, amely lehetővé teszi, hogy csak a számunkra fontos mezőket állítsuk be.
Cookie sessionCookie = new Cookie.Builder("JSESSIONID", "A1B2C3D4") .domain("demo.guru99.com") .path("/") .isSecure(true) .isHttpOnly(true) .build(); driver.manage().addCookie(sessionCookie);
Egy szabály a legtöbb embert meglep: egy süti objektum létrehozás után nem szerkeszthető. Egy érték módosításához törölni kell a régi sütit, és hozzáadni egy újjáépített másolatot, ezért olyan hasznos a Builder.
Cookie original = driver.manage().getCookieNamed("JSESSIONID"); driver.manage().deleteCookie(original); Cookie updated = new Cookie.Builder(original.getName(), "NEW-VALUE") .domain(original.getDomain()) .path(original.getPath()) .isSecure(original.isSecure()) .build(); driver.manage().addCookie(updated);
Gyakori sütihibák a következőben: Selenium WebDriver és hogyan javítsuk ki őket
A sütikód általában néhány előre látható módon hibázik. Az alábbi táblázat a leggyakrabban jelentett hibákat sorolja fel, az okokkal és a megoldással együtt.
| Tünet | Okoz | Rögzít |
|---|---|---|
| Érvénytelen Süti Tartomány Kivétel | Az addCookie függvényt a webhelyre való navigáció előtt hívták meg, így a böngésző továbbra is az about:blank értéket használja. | Először hívd meg a driver.get függvényt a céldomainben, majd add hozzá a sütit. |
| UnableToSetCookieException | A süti domainje nem egyezik a jelenleg betöltött oldallal. | Töröld a domain mezőt, vagy állítsd be a megnyitott oldal pontos hostjára. |
| A bejelentkezési oldal továbbra is megjelenik a süti hozzáadása után | Az oldal a süti létrehozása előtt lett megjelenítve. | Hívd meg a driver.navigate().refresh() függvényt, ami a fenti MEGJEGYZÉS szerint hard refresh. |
| A getCookieNamed null értéket ad vissza. | A név el van írva, vagy a süti egy másik elérési úthoz vagy aldomainhez tartozik. | Írj ki minden sütit a getCookies paranccsal, és hasonlítsd össze a neveket. |
| A tárolt sütit a rendszer egy későbbi futtatáskor elutasítja. | A lejárati idő lejárt, vagy a szerver befejezte a munkamenetet. | A Cookies.data fájl újbóli generálásához futtassa újra az 1. lépést. |
Ha a böngésző megnyílik és helyesen hitelesíti magát, de a szkript utána hibát jelez, valószínűleg nem a süti a hibás. kivételkezelés Selenium a gyorsabb útvonal onnan, és egy erre a célra kijelölt Firefox profilok a szokásos alternatíva, ha azt szeretné, hogy a munkamenet-adatok fájl nélkül is fennmaradjanak.


