Kuidas küpsiseid sees käsitleda Selenium Veebidraiver

⚡ Nutikas kokkuvõte

Küpsised salvestavad kasutaja eelistusi ja seansi identifikaatoreid võtme-väärtuse paaridena ja Selenium WebDriver saab neid lugeda, salvestada ja taasesitada, nii et automatiseeritud test jätab sisselogimisekraani iga järgneva käivitamise korral vahele.

  • 🔘 Küpsiste põhitõed: Küpsis kannab nime, väärtust, domeeni, teed, aegumiskuupäeva ning lippe „turvaline” ja „HttpOnly”.
  • ☑️ Kuus käsku: Käsklused getCookies, getCookieNamed, addCookie, deleteCookie, deleteCookieNamed ja deleteAllCookies hõlmavad kõiki toiminguid.
  • Kaheastmeline demo: Esimene samm kirjutab autentimisküpsise faili, teine ​​samm taasesitab selle uue seansi autentimiseks.
  • 🧪 Säästetud aeg: Seansiküpsise korduv esitamine eemaldab sisselogimisetapid igalt testijuhtumilt ja lühendab kogu täitmisaega.
  • 🛠️ Redigeerimist pole: Küpsist ei saa kohapeal muuta, seega kustutage vana ja lisage Cookie.Builderi kaudu taastatud koopia.
  • ⚠️ Domeenireegel: Enne addCookie kutsumist navigeeri sihtveebisaidile, vastasel juhul lükkab brauser küpsise otse tagasi.

Kuidas küpsiseid hallata Selenium Veebidraiver

HTTP-küpsis sisaldab teavet kasutaja ja tema eelistuste kohta. See salvestab teavet võtme-väärtuse paari abil. See on väike andmekogum, mille veebirakendus saadab ja salvestab veebibrauserisse ajal, mil kasutaja seda veebisaiti sirvib.

Kui teema on teie jaoks uus, alustage selle juhendiga küpsiste testimine.

Selenium Küpsiste käsud

In Selenium WebDriveris saame küpsistega päringuid esitada ja nendega suhelda allpool toodud sisseehitatud meetodite abil. Igaüheni neist jõutakse driver.manage() kaudu, mis tagastab valikute liidese.

Selenium Päringu käsud Väljund
draiver.halda().getKüpsised(); Tagastab kõigi küpsiste loendi
driver.manage().getCookieNamed(arg0); Tagastab konkreetse küpsise vastavalt nimele
draiver.halda().addCookie(arg0); Loob ja lisab küpsise
draiver.halda().deleteCookie(arg0); Kustutab konkreetse küpsise
driver.manage().deleteCookieNamed(arg0); Kustutab konkreetse küpsise nime järgi
driver.manage().deleteAllCookies(); Kustutab kõik küpsised

Miks küpsiseid tuleb käsitleda (aktsepteerida) Selenium?

Iga küpsis on seotud nime, väärtuse, domeeni, tee, aegumise ja olekuga, kas see on turvaline või mitte. Kliendi kinnitamiseks parsib server kõik need väärtused küpsises.

Kui testimine veebirakendus, mis kasutab Selenium WebDriveri kasutamiseks peate võib-olla küpsise looma, värskendama või kustutama.

Näiteks veebipoe automatiseerimiselping rakenduse puhul peate võib-olla automatiseerima testimisstsenaariume, nagu tellimuse esitamine, ostukorvi vaatamine, makseteabe esitamine, tellimuse kinnitamine jne.

Kui küpsiseid ei salvestata, peate enne ülaltoodud testistsenaariumide käivitamist iga kord sisselogimistoimingu tegema. See suurendab teie kodeerimistööd ja täitmisaega.

Lahendus on küpsiste salvestamine faili. Later, hankige sellest failist küpsise väärtused ja lisage need oma praegusesse brauseriseanssi. Selle tulemusel saate iga sisselogimisetapi vahele jätta. testjuhtum sest teie juhiseansis on see teave sees.

Rakendusserver käsitleb nüüd teie brauseriseanssi autentituna ja suunab teid otse teie soovitud lehele. URL.

Kuidas küpsiseid sees käsitleda Selenium

Me kasutame https://demo.guru99.com/test/cookie/selenium_aut.php meie demo eesmärgil.

See on 2-etapiline protsess.

1. samm) Logige rakendusse sisse ja salvestage loodud autentimisküpsis.

Demorakendus kuvab allpool näidatud lihtsa sisselogimisvormi.

Guru99 Selenium küpsiste demo sisselogimisvorm kasutajanime ja parooli väljadega

2. samm) Kasutage salvestatud küpsist, et rakendusse uuesti sisse logida ilma kasutajanime ja parooli kasutamata.

Samm 1) Küpsiste teabe salvestamine

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

⚠️ Versiooni märkus: System.setProperty rida jäetakse täpselt selliseks, nagu algses õpetuses see kirjutati. Alates Selenium 4.6 ja edasi Selenium Haldur laadib vastava chromedriveri automaatselt alla ja konfigureerib selle, seega pole see rida praeguses seadistuses enam vajalik. Algset koodi jäetakse allpool puutumata ja see kompileerub ikkagi.

Code Selgitus

  • Loo WebDriveri eksemplar.
  • Külasta veebilehte käsuga driver.get(“https://demo.guru99.com/test/cookie/selenium_aut.php”).
  • Logi rakendusse sisse.
  • Lugege küpsiste teavet kasutades
    driver.manage().getCookies();
  • Salvesta küpsiste teave faili abilWriter klass märkide voogude kirjutamiseks ja BufferedWriter teksti kirjutamiseks faili nimega Cookies.data.
  • Fail Cookies.data salvestab kogu küpsiste teabe koos nime, väärtuse, domeeni ja teega. Saame selle teabe kätte ja rakendusse sisse logida ilma sisselogimisandmeid sisestamata.

Kui olete ülaltoodud koodi käivitanud, luuakse projekti kaustastruktuuri fail Cookies.data. Avage fail ja näete AUT-i sisselogimisandmeid küpsise vormingus, nagu on näidatud alloleval esiletõstetud ekraanipildil.

Cookies.data faili sisu, mis kuvab salvestatud seansi küpsist nime väärtuse domeeni tee vormingus

2. samm) Salvestatud küpsise kasutamine rakendusse sisselogimiseks

Nüüd pääseme juurde 1. etapis loodud küpsisele ja kasutame seda rakenduses oma seansi autentimiseks.

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

Väljund: Teid suunatakse otse sisselogimise õnnestumise ekraanile ilma sisestatud kasutajanime ja parooli sisestamata.

MÄRKUS. Kui pärast ülaltoodud skripti käivitamist kuvatakse sisselogimisleht, kasutage kõva värskendust.

⚠️ Java märkused: Lugemisskript kasutab funktsioone new Boolean(String) ja new Date(String), mille JDK on juba ammu aegunud. Tänapäevases JDK-s on vasteteks Boolean.parseBoolean(token.nextToken()) ja java.time parser. Algsed read on ülalpool säilitatud; käsitle märkust pigem moodsa asendusena kui muudatusena.

Küpsiste atribuudid ja Selenium Küpsiseklass

Kaks ülaltoodud skripti liigutavad faili sisse ja välja kuus välja. Need väljad on täpselt need, mida org.openqa.selenium.Cookie klass avaldab, ja nende tundmine muudab 2. sammu tokenizer-tsükli palju lihtsamini loetavaks.

Atribuut Juurdepääsusüsteem Mida see tähendab
Eesnimi getName () Võti, mida server otsib, näiteks JSESSIONID.
Väärtus getValue () Salvestatud andmed, tavaliselt seansi identifikaator.
Domeen getDomain() Host, kuhu brauser küpsise tagasi saadab.
Tee getPath() . URL eesliide, millele küpsis kehtib.
Aegumine getExpiry() Küpsise suremise kuupäev. Nullväärtus tähendab seansiküpsist.
Kindlustage onTurvaline() Tõsi, kui küpsist saadetakse ainult HTTPS-i kaudu.
Ainult HTTP-protokoll isHttpOnly() Tõsi, kui JavaLehel olev skript ei saa küpsist lugeda.
Sama sait getSameSite() Range, Lõtv või Puudub. Lisatud Selenium 4.

2. etapis kasutatud kuueargumendilise konstruktori asemel loob praegune kood tavaliselt küpsise sisemise Builder-klassi kaudu, mis võimaldab teil määrata ainult need väljad, mis teile olulised on.

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

driver.manage().addCookie(sessionCookie);

Üks reegel jääb enamikule inimestele silma: küpsiseobjekti ei saa pärast loomist muuta. Väärtuse muutmiseks kustutate vana küpsise ja lisate taastatud koopia, mistõttu on Builder nii kasulik.

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

Levinud küpsiste vead saidil Selenium WebDriver ja kuidas neid parandada

Küpsisekood kipub ebaõnnestuma mitmel etteaimataval viisil. Allolev tabel loetleb kõige sagedamini teatatud vead koos põhjuse ja lahendusega.

Sümptom Põhjus Määrama
Kehtetu küpsise domeeni erand Funktsioon addCookie kutsuti välja enne saidile navigeerimist, seega on brauser endiselt about:blank peal. Kutsu esmalt sihtdomeenil käsk driver.get ja seejärel lisa küpsis.
UnableToSetCookieException Küpsise domeen ei vasta praegu laetud lehele. Eemalda domeeniväli või määra see avatud lehe täpseks hostiks.
Sisselogimisleht kuvatakse ikka ka pärast küpsise lisamist Leht renderdati enne küpsise olemasolu. Kutsu välja driver.navigate().refresh(), mis ongi ülaltoodud MÄRKUSes kõva värskenduse all mõeldud.
getCookieNamed tagastab nullväärtuse Nimi on valesti kirjutatud või kuulub küpsis teisele teele või alamdomeenile. Käivita iga küpsise dump käsuga getCookies ja võrdle nimesid.
Salvestatud küpsis lükatakse hilisemal käivitamisel tagasi Aegumistähtaeg on möödas või server lõpetas seansi. Küpsiste.andmete taastamiseks käivita 1. samm uuesti.

Kui brauser avaneb ja autentib õigesti, kuid skript ebaõnnestub pärast seda, pole küpsis tõenäoliselt süüdi. erandite käsitlemine Selenium on sellest punktist kiirem marsruut ja spetsiaalne Firefox profiil on tavaline alternatiiv, kui soovite, et seansiandmed säiliksid ilma failita.

KKK

Kaks võimalust. Klõpsake nupul „Nõustu“ nagu iga elemendi puhul või määrake saidi nõusolekuküpsis enne uuesti laadimist funktsiooniga addCookie, et bännerit kunagi ei renderdataks. Teine lähenemisviis on kiirem ja eemaldab ebaühtlaste esimeste sammude tavalise allika.

Python kasutab draiveril endal `snake_case` ekvivalente: driver.get_cookies(), driver.get_cookie(name), driver.add_cookie(dict) ja driver.delete_all_cookies(). Küpsised tagastatakse sõnastike, mitte küpsiseobjektidena, seega loe väärtused nurksulgudes.

Jah. WebDriver suhtleb brauseriga draiveri, mitte ... kaudu. JavaSkript, nii et HttpOnly küpsised on getCookies kaudu nähtavad. Nende lippude kontrollimiseks kutsuge Cookie objektil välja isHttpOnly ja isSecure.

Tehisintellekti abil analüüsitud rühmitused ebaõnnestunud katsete puhul kasutavad jagatud signaale ja sageli traces vahelduvad väljalogimise tõrked aegunud või puuduva seansiküpsise tõttu. Mõned tööriistad õpivad ka, milliseid küpsiseid läbiv käivitamine sisaldab, ja hoiatavad, kui seanss sellest baasjoonest kõrvale kaldub.

GitHubi koopia kirjutab lugemis-, kirjutamis- ja taastamistsüklid kiiresti, kuid sageli taastoodab see aegunud uusi Boole'i ​​ja uusi kuupäeva konstruktoreid. Revvõrdle iga genereeritud koodijuppi praegusega Java ja Selenium API-d.

Ei. Seansiküpsis on reaalajas mandaat, seega võimaldab kinnitatud Cookies.data fail kõigil, kellel on juurdepääs repositooriumile, seda kontot jäljendada. Hoidke fail versioonikontrollist väljas ja genereerige see iga keskkonna jaoks uuesti.

Mitte vaikimisi. Iga seanss algab puhta brauseriprofiiliga, mistõttu küpsis kirjutatakse kettale ja esitatakse uuesti. Salvestatud brauseriprofiili lisamine on teine ​​viis seansi elus hoidmiseks erinevate seansside vahel.

Seansiküpsistel on aegumiskuupäeva ajatempel ja ka server tracks oma seansi eluea. Kui kumbki neist aegub, lükatakse taasesitatud küpsis tagasi ja sisselogimisleht naaseb, seega tuleks salvestatud küpsis uuesti genereerida, mitte vana faili uuesti kasutada.

Võta see postitus kokku järgmiselt: