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.

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


