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.

  • 🔘 Sütialapismeretek: Egy süti nevet, értéket, domaint, elérési utat, lejárati dátumot, valamint a secure és a HttpOnly jelzőket tartalmazza.
  • ☑️ Hat parancs: A getCookies, getCookieNamed, addCookie, deleteCookie, deleteCookieNamed és deleteAllCookies metódusok minden műveletet lefednek.
  • Kétlépéses bemutató: Az első lépésben a hitelesítési süti fájlba kerül, a második lépésben pedig újra lejátssza azt egy új munkamenet hitelesítéséhez.
  • 🧪 Megtakarított idő: Egy munkamenet-süti újrajátszása eltávolítja a bejelentkezési lépéseket minden tesztesetből, és lerövidíti a teljes végrehajtási időt.
  • 🇧🇷 Nincs szerkesztés: Egy sütit nem lehet helyben módosítani, ezért töröld a régit, és adj hozzá egy újjáépített másolatot a Cookie.Builder segítségével.
  • ⚠️ Tartományszabály: Az addCookie meghívása előtt navigálj a célwebhelyre, különben a böngésző elutasítja a sütit.

Hogyan kell kezelni a sütiket a Selenium webdriver

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.

Guru99 Selenium süti demó bejelentkezési űrlap felhasználónév és jelszó mezőkkel

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ó.

A Cookies.data fájl tartalma, amely névérték, domain elérési út formátumban mutatja a mentett munkamenet-sütit

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.

GYIK

Két lehetőség. Kattintson az Elfogadás gombra, mint bármelyik elemre, vagy állítsa be a webhely hozzájárulási sütijét az addCookie paranccsal az újratöltés előtt, így a banner soha nem jelenik meg. A második megközelítés gyorsabb, és eltávolítja a bizonytalan első lépések gyakori forrását.

Python A snake_case függvény a driveren is snake_case megfelelőit használja: driver.get_cookies(), driver.get_cookie(name), driver.add_cookie(dict) és driver.delete_all_cookies(). A sütik szótárként, és nem süti objektumként térnek vissza, ezért a szögletes zárójelben lévő értékeket kell beolvasni.

Igen. A WebDriver a meghajtón keresztül kommunikál a böngészővel, nem pedig... JavaSzkript, így a HttpOnly sütik láthatók a getCookies metóduson keresztül. Hívja meg az isHttpOnly és az isSecure metódusokat a Cookie objektumon a jelzők vizsgálatához.

A mesterséges intelligencia által támogatott elemzések megosztott jelek és gyakran a sikertelen futtatásokat csoportosítják traces időszakos kijelentkezési hibákat jelez lejárt vagy hiányzó munkamenet-süti miatt. Egyes eszközök azt is megtanulják, hogy egy adott futtatás mely sütiket tartalmazza, és figyelmeztetnek, ha egy munkamenet eltér ettől az alapértéktől.

GitHub másodpilóta gyorsan írja ki az olvasási, írási és visszaállítási ciklusokat, de gyakran reprodukálja az elavult új Boole- és új Date konstruktorokat. Revminden generált kódrészletet összehasonlítani a jelenlegivel Java és a Selenium API-k.

Nem. A munkamenet-süti élő hitelesítő adat, így egy véglegesített Cookies.data fájl lehetővé teszi bárki számára, aki rendelkezik hozzáféréssel a tárházhoz, hogy megszemélyesítse az adott fiókot. Tartsa a fájlt a verziókövetésen kívül, és generálja újra környezetenként.

Alapértelmezés szerint nem. Minden munkamenet egy tiszta böngészőprofillal kezdődik, pontosan ezért kerül a süti lemezre írásra és lejátszásra. Egy mentett böngészőprofil csatolása a másik módja annak, hogy egy munkamenet életben maradjon a futtatások között.

A munkamenet-sütik lejárati időbélyeggel rendelkeznek, és a szerver is tracks a saját munkamenet-élettartamát. Ha bármelyik lejár, a lejátszott süti elutasításra kerül, és a bejelentkezési oldal tér vissza, ezért a tárolt süti újragenerálása a régi fájl újrafelhasználása helyett.

Foglald össze ezt a bejegyzést a következőképpen: