Kako postupati s kolačićima u Selenium webdriver

⚡ Pametni sažetak

Kolačići pohranjuju korisničke postavke i identifikatore sesije kao parove ključ-vrijednost i Selenium WebDriver ih može čitati, spremati i ponovno reproducirati tako da automatizirani test preskače zaslon za prijavu pri svakom sljedećem pokretanju.

  • 🔘 Osnove kolačića: Kolačić sadrži naziv, vrijednost, domenu, putanju, rok trajanja te oznake secure i HttpOnly.
  • ☑️ Šest naredbi: getCookies, getCookieNamed, addCookie, deleteCookie, deleteCookieNamed i deleteAllCookies pokrivaju svaku operaciju.
  • Demo u dva koraka: Prvi korak zapisuje kolačić za autentifikaciju u datoteku, drugi korak ga ponavlja kako bi se autentificirala nova sesija.
  • 🧪 Ušteđeno vrijeme: Ponovnim izvođenjem kolačića sesije uklanjaju se koraci prijave iz svakog testnog slučaja i skraćuje se ukupno vrijeme izvršavanja.
  • 🛠️ Bez uređivanja: Kolačić se ne može mijenjati na mjestu, stoga izbrišite stari i dodajte obnovljenu kopiju putem Cookie.Buildera.
  • ⚠️ Pravilo domene: Prije pozivanja funkcije addCookie, idite na ciljnu stranicu, inače će preglednik odmah odbiti kolačić.

Kako rukovati kolačićima u Selenium webdriver

HTTP kolačić sastoji se od informacija o korisniku i njegovim postavkama. Pohranjuje informacije pomoću para ključ-vrijednost. To je mali dio podataka poslan iz web aplikacije i pohranjen u web pregledniku dok korisnik pregledava tu web stranicu.

Ako ste novi u ovoj temi, počnite s ovim vodičem testiranje kolačića.

Selenium Naredbe upita za kolačiće

In Selenium WebDriver, možemo slati upite i komunicirati s kolačićima koristeći ugrađene metode u nastavku. Svaki od njih dostupan je putem driver.manage(), koji vraća sučelje Options.

Selenium Naredbe upita Izlaz
driver.manage().getCookies(); Vraća popis svih kolačića
driver.manage().getCookieNamed(arg0); Vraća određeni kolačić prema nazivu
driver.manage().addCookie(arg0); Stvara i dodaje kolačić
driver.manage().deleteCookie(arg0); Briše određeni kolačić
driver.manage().deleteCookieNamed(arg0); Briše određeni kolačić prema nazivu
driver.manage().deleteAllCookies(); Briše sve kolačiće

Zašto rukovati (prihvaćati) kolačiće Selenium?

Svaki kolačić povezan je s imenom, vrijednošću, domenom, putanjom, istekom i statusom je li siguran ili ne. Kako bi potvrdio valjanost klijenta, poslužitelj analizira sve te vrijednosti u kolačiću.

Kada testiranje web aplikacija koja koristi Selenium WebDriver, možda ćete morati stvoriti, ažurirati ili izbrisati kolačić.

Na primjer, prilikom automatizacije online trgovineping aplikacije, možda ćete morati automatizirati testne scenarije poput narudžbe, pregleda košarice, podataka o plaćanju, potvrde narudžbe i tako dalje.

Ako kolačići nisu pohranjeni, morat ćete izvršiti radnju prijave svaki put prije izvršavanja gore navedenih testnih scenarija. To će povećati vaš napor kodiranja i vrijeme izvršavanja.

Rješenje je pohranjivanje kolačića u datoteku. Later, dohvatite vrijednosti kolačića iz ove datoteke i dodajte ih u trenutnu sesiju preglednika. Kao rezultat toga, možete preskočiti korake prijave u svakom testni slučaj jer vaša sesija vozača ima ove informacije u sebi.

Aplikacijski poslužitelj sada tretira vašu sesiju preglednika kao autentificiranu i izravno vas vodi na traženu URL.

Kako postupati s kolačićima u Selenium

Koristit ćemo https://demo.guru99.com/test/cookie/selenium_aut.php za našu demo svrhu.

Ovo će biti proces od 2 koraka.

Korak 1) Prijavite se u aplikaciju i spremite generirani kolačić za autentifikaciju.

Demo aplikacija prikazuje jednostavan obrazac za prijavu prikazan u nastavku.

Guru99 Selenium obrazac za prijavu na demo kolačiće s poljima za korisničko ime i lozinku

Korak 2) Pomoću pohranjenog kolačića ponovno se prijavite u aplikaciju bez korištenja korisničkog imena i lozinke.

Korak 1) Pohranjivanje informacija o kolačićima

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();			
        }		
    }		
}

⚠️ Napomena o verziji: Linija System.setProperty je sačuvana točno onako kako je napisana u izvornom vodiču. Od Selenium 4.6 nadalje, Selenium Manager automatski preuzima i konfigurira odgovarajući chromedriver, tako da ta linija više nije potrebna u trenutnoj konfiguraciji. Izvorni kod ostaje netaknut u nastavku i i dalje se kompajlira.

Code Objašnjenje

  • Stvorite instancu WebDrivera.
  • Posjetite web-stranicu koristeći driver.get(“https://demo.guru99.com/test/cookie/selenium_aut.php”).
  • Prijavite se u aplikaciju.
  • Pročitajte informacije o kolačićima pomoću
    driver.manage().getCookies();
  • Pohranite podatke o kolačićima pomoću datotekeWriter razred za pisanje nizova znakova i BufferedWriter zapisati tekst u datoteku pod nazivom Cookies.data.
  • Datoteka Cookies.data pohranjuje sve podatke o kolačićima zajedno s nazivom, vrijednošću, domenom i putanjom. Možemo dohvatiti te podatke i prijaviti se u aplikaciju bez unosa prijavnih podataka.

Nakon što pokrenete gornji kod, datoteka Cookies.data će se stvoriti u strukturi mape projekta. Otvorite datoteku i možete vidjeti prijavne podatke AUT-a spremljene u formatu kolačića, kao što je prikazano na istaknutom zaslonu u nastavku.

Sadržaj datoteke Cookies.data koji prikazuje spremljeni kolačić sesije u formatu putanje domene naziva i vrijednosti

Korak 2) Korištenje pohranjenog kolačića za prijavu u aplikaciju

Sada ćemo pristupiti kolačiću generiranom u koraku 1 i koristiti ga za autentifikaciju naše sesije u aplikaciji.

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");					
}	
	}	

Izlaz: Bit ćete izravno preusmjereni na zaslon za uspješnu prijavu bez unosa korisničkog imena i lozinke.

NAPOMENA: Koristite automatsko osvježavanje u slučaju da vidite stranicu za prijavu nakon izvršavanja gornjeg skripta.

⚠️ Java note: Skripta za čitanje koristi new Boolean(String) i new Date(String), koje je JDK odavno ukinuo. Na modernom JDK-u ekvivalenti su Boolean.parseBoolean(token.nextToken()) i java.time parser. Izvorni redovi su sačuvani iznad; tretirajte bilješku kao modernu zamjenu, a ne kao uređivanje.

Atributi kolačića i Selenium Klasa kolačića

Dva gornja skripta premještaju šest polja u i iz datoteke. Ta polja su upravo ono što klasa org.openqa.selenium.Cookie otkriva, a njihovo poznavanje čini petlju tokenizatora u 2. koraku mnogo lakšom za čitanje.

Atribut Pristupnik Što to znači
Ime getName () Ključ koji poslužitelj traži, na primjer JSESSIONID.
Još malo brojeva getValue () Pohranjeni podaci, obično identifikator sesije.
Domena dohvatiDomenu() Host kojem će preglednik poslati kolačić natrag.
Put getPath() The URL prefiks na koji se kolačić odnosi.
istek getExpiry() Datum prestanka valjanosti kolačića. Null vrijednost označava kolačić sesije.
Osigurati jeSecure() Vrijedi istina kada se kolačić šalje samo putem HTTPS-a.
HttpOnly jeSamoHttp() Istina kada JavaSkripta na stranici ne može pročitati kolačić.
Isto mjesto dohvatiSamuStranicu() Strogo, Labavo ili Ništa. Dodano u Selenium 4.

Umjesto konstruktora sa šest argumenata korištenog u koraku 2, trenutni kod obično gradi kolačić putem unutarnje klase Builder, koja vam omogućuje postavljanje samo polja koja su vam važna.

Cookie sessionCookie = new Cookie.Builder("JSESSIONID", "A1B2C3D4")
        .domain("demo.guru99.com")
        .path("/")
        .isSecure(true)
        .isHttpOnly(true)
        .build();

driver.manage().addCookie(sessionCookie);

Jedno pravilo zavarava većinu ljudi: objekt kolačića ne može se uređivati ​​nakon što je stvoren. Da biste promijenili vrijednost, izbrišete stari kolačić i dodate obnovljenu kopiju, zbog čega je Builder toliko koristan.

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);

Uobičajene pogreške kolačića u Selenium WebDriver i kako ih popraviti

Kod kolačića obično ne uspijeva na nekoliko predvidljivih načina. Tablica u nastavku navodi one koji se najčešće prijavljuju, zajedno s uzrokom i rješenjem.

Simptom Izazvati Popraviti
Iznimka nevažeće domene kolačića Funkcija addCookie pozvana je prije navigacije na stranicu, pa je preglednik još uvijek na about:blank. Prvo pozovite driver.get na ciljnoj domeni, a zatim dodajte kolačić.
Iznimka nije moguće postaviti kolačić Domena kolačića ne odgovara trenutno učitanoj stranici. Izbacite polje domene ili ga postavite na točan host otvorene stranice.
Stranica za prijavu se i dalje pojavljuje nakon dodavanja kolačića Stranica je prikazana prije nego što je kolačić postojao. Pozovite driver.navigate().refresh(), što je ono što gornja NAPOMENA podrazumijeva pod tvrdim osvježavanjem.
getCookieNamed vraća null Naziv je krivo napisan ili kolačić pripada drugoj putanji ili poddomeni. Ispiši svaki kolačić pomoću getCookies i usporedi imena.
Pohranjeni kolačić je odbijen pri kasnijem pokretanju Istek je istekao ili je poslužitelj završio sesiju. Ponovno generirajte Cookies.data ponovnim pokretanjem 1. koraka.

Ako se preglednik otvori i ispravno provjeri autentičnost, ali skripta nakon toga ne uspije, kolačić vjerojatno nije kriv. Prolazak kroz obrada iznimki u Selenium je brža ruta od te točke i namjenski Firefox profil je uobičajena alternativa kada želite da podaci sesije prežive bez ikakve datoteke.

Pitanja i odgovori

Dvije su mogućnosti. Kliknite gumb Prihvati kao i za bilo koji element ili postavite kolačić pristanka web-mjesta pomoću addCookie prije ponovnog učitavanja kako se banner nikada ne bi prikazao. Drugi pristup je brži i uklanja uobičajeni izvor nesigurnih prvih koraka.

Python koristi ekvivalente snake_case na samom upravljačkom programu: driver.get_cookies(), driver.get_cookie(name), driver.add_cookie(dict) i driver.delete_all_cookies(). Kolačići se vraćaju kao rječnici, a ne kao objekti Cookie, pa se vrijednosti čitaju s uglatim zagradama.

Da. WebDriver komunicira s preglednikom putem upravljačkog programa, a ne putem JavaSkripta, tako da su HttpOnly kolačići vidljivi putem getCookies. Pozovite isHttpOnly i isSecure na objektu Cookie kako biste pregledali te zastavice.

Grupe za analizu potpomognute umjetnom inteligencijom ne uspijevaju se izvoditi na temelju zajedničkih signala i često tracuzrokuje povremene neuspjehe odjave zbog isteklog ili nedostajućeg kolačića sesije. Neki alati također uče koje kolačiće nosi prolazno pokretanje i upozoravaju kada sesija odstupi od te osnovne linije.

GitHub kopilot brzo zapisuje petlje za čitanje, pisanje i vraćanje, ali često reproducira zastarjele konstruktore new Boolean i new Date. Revusporedite svaki generirani isječak s trenutnim Java i Selenium Apis.

Ne. Kolačić sesije je aktivna vjerodajnica, pa potvrđena datoteka Cookies.data omogućuje bilo kome s pristupom repozitoriju da se lažno predstavlja kao taj račun. Datoteku držite izvan kontrole verzija i regenerirajte je po okruženju.

Ne prema zadanim postavkama. Svaka sesija započinje s čistim profilom preglednika, što je upravo razlog zašto se kolačić zapisuje na disk i ponovno reproducira. Prilaganje spremljenog profila preglednika drugi je način održavanja sesije aktivnom tijekom izvođenja.

Sesijski kolačići nose vremensku oznaku isteka, a i poslužitelj tracks vlastitog vijeka trajanja sesije. Nakon isteka bilo kojeg od njih, ponovno reproducirani kolačić se odbacuje i vraća se stranica za prijavu, stoga regenerirajte pohranjeni kolačić umjesto ponovne upotrebe stare datoteke.

Sažmite ovu objavu uz: