Cum să gestionați cookie-urile în Selenium webdriver
⚡ Rezumat inteligent
Cookie-urile stochează preferințele utilizatorilor și identificatorii de sesiune ca perechi cheie-valoare și Selenium WebDriver le poate citi, salva și reda, astfel încât un test automat sări peste ecranul de conectare la fiecare rulare ulterioară.
Un cookie HTTP este alcătuit din informații despre utilizator și preferințele acestuia. Stochează informații folosind o pereche cheie-valoare. Este o mică porțiune de date trimisă de o aplicație web și stocată în browserul web, în timp ce utilizatorul navighează pe site-ul respectiv.
Dacă ești nou în acest subiect, începe cu acest ghid pentru testarea cookie-urilor.
Selenium Comenzi de interogare pentru cookie-uri
In Selenium WebDriver, putem interoga și interacționa cu cookie-urile folosind metodele încorporate de mai jos. Fiecare dintre ele este accesată prin driver.manage(), care returnează interfața Opțiuni.
| Selenium Comenzi de interogare | producție |
|---|---|
| driver.manage().getCookies(); | Returnează lista tuturor cookie-urilor |
| driver.manage().getCookieNamed(arg0); | Returnează un cookie specific în funcție de nume |
| driver.manage().addCookie(arg0); | Creează și adaugă cookie-ul |
| driver.manage().deleteCookie(arg0); | Șterge un anumit cookie |
| driver.manage().deleteCookieNamed(arg0); | Șterge un anumit cookie în funcție de nume |
| driver.manage().deleteAllCookies(); | Șterge toate cookie-urile |
De ce să gestionați (acceptați) cookie-urile în Selenium?
Fiecare cookie este asociat cu un nume, valoare, domeniu, cale, expirare și starea dacă este sigur sau nu. Pentru a valida un client, un server analizează toate aceste valori într-un cookie.
Atunci când de testare o aplicație web folosind Selenium WebDriver, este posibil să fie nevoie să creați, să actualizați sau să ștergeți un cookie.
De exemplu, atunci când automatizați un magazin onlineping aplicație, este posibil să fie nevoie să automatizați scenarii de testare precum plasarea comenzii, vizualizarea coșului, informațiile de plată, confirmarea comenzii și așa mai departe.
Dacă nu sunt stocate cookie-uri, va trebui să efectuați acțiunea de conectare de fiecare dată înainte de a executa scenariile de testare enumerate mai sus. Acest lucru va crește efortul de codare și timpul de execuție.
Soluția este stocarea cookie-urilor într-un fișier. Later, preia valorile cookie-ului din acest fișier și adaugă-le în sesiunea curentă a browserului. Prin urmare, puteți sări peste pașii de conectare din fiecare caz de testare deoarece sesiunea de șofer conține aceste informații.
Serverul de aplicații tratează acum sesiunea browserului dvs. ca fiind autentificată și vă duce direct la sesiunea solicitată. URL.
Cum să gestionați cookie-urile în Selenium
Noi vom folosi https://demo.guru99.com/test/cookie/selenium_aut.php pentru scopul nostru demonstrativ.
Acesta va fi un proces în 2 pași.
Pasul 1) Conectați-vă la aplicație și stocați cookie-ul de autentificare generat.
Aplicația demo prezintă formularul de autentificare simplu, așa cum este arătat mai jos.
Pasul 2) Folosește cookie-ul stocat pentru a te conecta din nou la aplicație fără a utiliza un nume de utilizator și o parolă.
Pasul 1) Stocarea informațiilor despre cookie-uri
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(); } } }
⚠️ Notă privind versiunea: Linia System.setProperty este păstrată exact așa cum a fost scrisă în tutorialul original. De la Selenium 4.6 încoace, Selenium Manager descarcă și configurează automat driverul Chrome corespunzător, astfel încât linia respectivă nu mai este necesară în configurația curentă. Codul original este lăsat nemodificat mai jos și se compilează în continuare.
Code Explicație
- Creați o instanță WebDriver.
- Accesați site-ul web folosind driver.get(„https://demo.guru99.com/test/cookie/selenium_aut.php”).
- Conectați-vă la aplicație.
- Citiți informațiile despre cookie folosind
driver.manage().getCookies();
- Stocați informațiile despre cookie-uri folosind fișierulWriter clasă pentru a scrie fluxuri de caractere și BufferedWriter pentru a scrie textul într-un fișier numit Cookies.data.
- Fișierul Cookies.data stochează toate informațiile despre cookie-uri, împreună cu numele, valoarea, domeniul și calea. Putem recupera aceste informații și ne putem conecta la aplicație fără a introduce datele de autentificare.
După ce rulați codul de mai sus, fișierul Cookies.data este creat în structura de foldere a proiectului. Deschideți fișierul și puteți vedea datele de autentificare ale AUT-ului salvate în format cookie, așa cum se arată în ecranul evidențiat de mai jos.
Pasul 2) Utilizarea cookie-urilor stocate pentru a vă autentifica în aplicație
Acum, vom accesa cookie-ul generat la pasul 1 și îl vom folosi pentru a ne autentifica sesiunea în aplicație.
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"); } }
Rezultat: Veți fi direcționat direct către ecranul de autentificare reușită fără a introduce numele de utilizator și parola.
NOTĂ: Folosiți reîmprospătarea completă în cazul în care vedeți pagina de conectare după executarea scriptului de mai sus.
⚠️ Java Note: Scriptul cititorului folosește new Boolean(String) și new Date(String), ambele fiind depreciate de JDK cu mult timp în urmă. Pe un JDK modern, echivalentele sunt Boolean.parseBoolean(token.nextToken()) și un parser java.time. Liniile originale sunt păstrate mai sus; tratați nota ca înlocuitor modern, mai degrabă decât ca o editare.
Atributele cookie-urilor și Selenium Clasa de cookie-uri
Cele două scripturi de mai sus mută șase câmpuri într-un fișier și le scot din el. Aceste câmpuri sunt exact ceea ce expune clasa org.openqa.selenium.Cookie, iar cunoașterea lor face ca bucla tokenizer din Pasul 2 să fie mult mai ușor de citit.
| Atribut | Accesor | Ce înseamnă |
|---|---|---|
| Nume | getName () | Cheia pe care o caută serverul, de exemplu JSESSIONID. |
| Valoare | getValue () | Datele stocate, de obicei identificatorul sesiunii. |
| domeniu | obțineDomeniu() | Gazda căreia browserul îi va trimite cookie-ul înapoi. |
| Cale | obțineCale() | URL prefixul la care se aplică cookie-ul. |
| Expirare | obțineExpirare() | Data la care cookie-ul este inactiv. O valoare nulă înseamnă un cookie de sesiune. |
| Asigura | esteSecur() | Adevărat când cookie-ul este trimis doar prin HTTPS. |
| Numai Http | esteNumaiHttp() | Adevărat când JavaScriptul de pe pagină nu poate citi cookie-ul. |
| SameSite | obțineAcelașiSite() | Strict, Lax sau Niciunul. Adăugat în Selenium 4. |
În loc de constructorul cu șase argumente folosit în Pasul 2, codul curent construiește de obicei un cookie prin intermediul clasei interioare Builder, care vă permite să setați doar câmpurile care vă interesează.
Cookie sessionCookie = new Cookie.Builder("JSESSIONID", "A1B2C3D4") .domain("demo.guru99.com") .path("/") .isSecure(true) .isHttpOnly(true) .build(); driver.manage().addCookie(sessionCookie);
O regulă îi ia în derâdere pe majoritatea oamenilor: un obiect cookie nu poate fi editat după ce a fost creat. Pentru a modifica o valoare, ștergeți cookie-ul vechi și adăugați o copie reconstruită, motiv pentru care Builder este atât de util.
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);
Erori frecvente ale cookie-urilor în Selenium WebDriver și cum să le remediați
Codul cookie-urilor tinde să eșueze într-un număr mic de moduri previzibile. Tabelul de mai jos le prezintă pe cele raportate cel mai des, împreună cu cauza și remedierea.
| Simptom | Provoca | Repara |
|---|---|---|
| Excepție DomeniuCookie Invalid | Funcția addCookie a fost apelată înainte de navigarea pe site, deci browserul este încă activat `about:blank`. | Apelați mai întâi driver.get pe domeniul țintă, apoi adăugați cookie-ul. |
| Excepție imposibilă de setat cookie-uri | Domeniul cookie-ului nu corespunde paginii încărcate în prezent. | Eliminați câmpul domeniu sau setați-l la gazda exactă a paginii deschise. |
| Pagina de conectare apare în continuare după adăugarea cookie-ului | Pagina a fost redată înainte de existența cookie-ului. | Apelați driver.navigate().refresh(), ceea ce NOTA de mai sus înțelege prin reîmprospătare completă. |
| getCookieNamed returnează nul | Numele este scris greșit sau cookie-ul aparține unei alte căi sau unui alt subdomeniu. | Ștergeți fiecare cookie cu getCookies și comparați numele. |
| Cookie-ul stocat este respins la o rulare ulterioară | Expirarea a trecut sau serverul a încheiat sesiunea. | Regenerați Cookies.data rulând din nou Pasul 1. |
Dacă browserul se deschide și se autentifică corect, dar scriptul eșuează ulterior, probabil că nu este vina cookie-ului. gestionarea excepțiilor în Selenium este ruta mai rapidă din acel punct și o rută dedicată Firefox profil este alternativa obișnuită atunci când doriți ca datele de sesiune să supraviețuiască fără un fișier.


