Kuinka käsitellä evästeitä Selenium web-ajuri

⚡ Älykäs yhteenveto

Evästeet tallentavat käyttäjän asetukset ja istuntotunnisteet avain-arvo-pareina, ja Selenium WebDriver voi lukea, tallentaa ja toistaa ne, joten automaattinen testi ohittaa kirjautumisnäytön jokaisella seuraavalla ajokerralla.

  • 🔘 Evästeiden perusteet: Evästeessä on nimi, arvo, verkkotunnus, polku, voimassaoloaika sekä secure- ja HttpOnly-liput.
  • ☑️ Kuusi käskyä: getCookies-, getCookieNamed-, addCookie-, deleteCookie-, deleteCookieNamed- ja deleteAllCookies-metodit kattavat kaikki toiminnot.
  • Kaksivaiheinen demo: Vaihe yksi kirjoittaa todennusevästeen tiedostoon ja vaihe kaksi toistaa sen uuden istunnon todentamiseksi.
  • 🧪 Säästynyt aika: Istuntoevästeen toistaminen poistaa kirjautumisvaiheet jokaisesta testitapauksesta ja lyhentää kokonaissuoritusaikaa.
  • 🛠️ Ei muokkausta: Evästettä ei voi muokata paikallisesti, joten poista vanha ja lisää uudelleenrakennettu kopio Cookie.Builderin kautta.
  • ⚠️ Verkkotunnussääntö: Siirry kohdesivustolle ennen addCookie-funktion kutsumista, muuten selain hylkää evästeen suoraan.

Evästeiden käsittely Selenium web-ajuri

HTTP-eväste sisältää tietoja käyttäjästä ja hänen mieltymyksistään. Se tallentaa tietoja avain-arvo-parin avulla. Se on pieni tietomäärä, jonka verkkosovellus lähettää ja tallentaa verkkoselaimeen käyttäjän selatessa kyseistä verkkosivustoa.

Jos olet uusi aiheen parissa, aloita tästä oppaasta evästeiden testaus.

Selenium Kysely komennot evästeille

In Selenium WebDriverissa voimme tehdä kyselyitä ja olla vuorovaikutuksessa evästeiden kanssa käyttämällä alla olevia sisäänrakennettuja metodeja. Jokainen niistä saavutetaan driver.manage()-metodin kautta, joka palauttaa Options-rajapinnan.

Selenium Kyselykomennot ulostulo
ajuri.hallitse().getEvästeet(); Palauttaa kaikkien evästeiden luettelon
ajuri.hallitse().getCookieNamed(arg0); Palauttaa tietyn evästeen nimen perusteella
ajuri.hallitse().lisääEväste(arg0); Luo ja lisää evästeen
ajuri.hallitse().deleteCookie(arg0); Poistaa tietyn evästeen
driver.manage().deleteCookieNamed(arg0); Poistaa tietyn evästeen nimen perusteella
driver.manage().deleteAllCookies(); Poistaa kaikki evästeet

Miksi käsitellä (hyväksyä) evästeitä Selenium?

Jokainen eväste liittyy nimeen, arvoon, verkkotunnukseen, polkuun, vanhenemiseen ja sen tilaan, onko se suojattu vai ei. Asiakkaan validoimiseksi palvelin jäsentää kaikki nämä arvot evästeessä.

Kun testaus verkkosovellus, joka käyttää Selenium WebDriver-selaimessasi sinun on ehkä luotava, päivitettävä tai poistettava eväste.

Esimerkiksi verkkokauppaa automatisoitaessaping sovelluksessa sinun on ehkä automatisoitava testiskenaarioita, kuten tilauksen tekeminen, ostoskorin tarkastelu, maksutiedot, tilauksen vahvistus ja niin edelleen.

Jos evästeitä ei tallenneta, sinun on kirjauduttava sisään joka kerta ennen yllä lueteltujen testiskenaarioiden suorittamista. Tämä lisää koodaustyötäsi ja suoritusaikaasi.

Ratkaisu on tallentaa evästeet tiedostoon. Later, nouta evästeen arvot tästä tiedostosta ja lisää ne nykyiseen selainistuntoosi. Tämän seurauksena voit ohittaa kirjautumisvaiheet jokaisessa testitapaus koska kuljettajaistunnossasi on nämä tiedot.

Sovelluspalvelin käsittelee nyt selainistuntoasi todennetuksi ja ohjaa sinut suoraan pyydettyyn sivustoosi. URL.

Kuinka käsitellä evästeitä Selenium

Käytämme https://demo.guru99.com/test/cookie/selenium_aut.php demo tarkoitukseemme.

Tämä on 2-vaiheinen prosessi.

Vaihe 1) Kirjaudu sovellukseen ja tallenna luotu todennuseväste.

Demosovellus näyttää alla olevan yksinkertaisen kirjautumislomakkeen.

Guru99 Selenium evästedemon kirjautumislomake käyttäjätunnuksen ja salasanan kentät

Vaihe 2) Kirjaudu sovellukseen uudelleen tallennetun evästeen avulla ilman käyttäjätunnusta ja salasanaa.

Vaihe 1) Evästetietojen tallentaminen

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

⚠️ Versiohuomautus: System.setProperty-rivi säilytetään täsmälleen sellaisena kuin se alkuperäisessä tutoriaalissa kirjoitettiin. Selenium 4.6 eteenpäin, Selenium Manager lataa ja konfiguroi vastaavan chromedriver-ajurin automaattisesti, joten kyseistä riviä ei enää tarvita nykyisessä asennuksessa. Alkuperäinen koodi jätetään koskemattomaksi alla ja se käännetään silti.

Code Selitys

  • Luo WebDriver-instanssi.
  • Käy verkkosivustolla käyttämällä driver.get(“https://demo.guru99.com/test/cookie/selenium_aut.php”).
  • Kirjaudu sisään sovellukseen.
  • Lue evästetiedot käyttämällä
    driver.manage().getCookies();
  • Tallenna evästetiedot tiedoston avullaWriter luokka kirjoittaa merkkijonoja ja BufferedWriter kirjoittaaksesi tekstin tiedostoon nimeltä Cookies.data.
  • Cookies.data-tiedosto tallentaa kaikki evästetiedot sekä nimen, arvon, verkkotunnuksen ja polun. Voimme hakea nämä tiedot ja kirjautua sovellukseen antamatta kirjautumistietoja.

Kun olet suorittanut yllä olevan koodin, Cookies.data-tiedosto luodaan projektin kansiorakenteeseen. Avaa tiedosto ja näet AUT:n kirjautumistiedot evästemuodossa, kuten alla olevassa korostetussa näytössä näkyy.

Cookies.data-tiedoston sisältö, joka näyttää tallennetun istuntoevästeen nimen, arvon ja verkkotunnuksen polun muodossa

Vaihe 2) Tallennetun evästeen käyttö sovellukseen kirjautumiseen

Nyt käytämme vaiheessa 1 luotua evästettä ja käytämme sitä istuntomme todentamiseen sovelluksessa.

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

Tuloste: Sinut ohjataan suoraan kirjautumisen onnistumisnäyttöön ilman käyttäjätunnuksen ja salasanan syöttämistä.

HUOMAUTUS: Käytä kovaa päivitystä, jos näet kirjautumissivun yllä olevan komentosarjan suorittamisen jälkeen.

⚠️ Java toteaa: Lukijan skripti käyttää funktioita new Boolean(String) ja new Date(String), jotka molemmat on JDK:ssa vanhentunut jo kauan sitten. Nykyaikaisessa JDK:ssa vastineet ovat Boolean.parseBoolean(token.nextToken()) ja java.time-jäsennin. Alkuperäiset rivit on säilytetty yllä; käsittele huomautusta nykyaikaisena korvauksena äläkä muokkauksena.

Evästeiden ominaisuudet ja Selenium Evästeluokka

Yllä olevat kaksi skriptiä siirtävät kuusi kenttää tiedostoon ja tiedostosta ulos. org.openqa.selenium.Cookie-luokka paljastaa juuri nämä kentät, ja niiden tunteminen tekee vaiheessa 2 olevasta tokenizer-silmukasta paljon helpomman lukea.

Ominaisuus Accessor Mitä se tarkoittaa
Nimi getName () Palvelimen hakema avain, esimerkiksi JSESSIONID.
Arvo getValue () Tallennetut tiedot, yleensä istunnon tunniste.
Domain getDomain() Isäntä, jolle selain lähettää evästeen takaisin.
Polun, getPath() URL etuliite, johon eväste liittyy.
päättymistä getExpiry() Evästeen kuolemanpäivämäärä. Null-arvo tarkoittaa istuntokohtaista evästettä.
Varmista onTurvallinen() Tosi, kun eväste lähetetään vain HTTPS:n kautta.
HttpOnly isHttpOnly() Totta, kun JavaSivulla oleva skripti ei voi lukea evästettä.
Samasivusto getSamaSivusto() Tiukka, Löyhä tai Ei mitään. Lisätty Selenium 4.

Vaiheessa 2 käytetyn kuusiargumenttisen konstruktorin sijaan nykyinen koodi yleensä rakentaa evästeen sisäisen Builder-luokan kautta, jonka avulla voit asettaa vain ne kentät, joista välität.

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

driver.manage().addCookie(sessionCookie);

Yksi sääntö yllättää useimmat: evästeobjektia ei voi muokata sen luomisen jälkeen. Arvon muuttamiseksi poista vanha eväste ja lisää uudelleenrakennettu kopio, minkä vuoksi Builder on niin hyödyllinen.

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

Yleisiä evästevirheitä Selenium WebDriver ja niiden korjaaminen

Evästekoodi epäonnistuu usein muutamalla ennustettavalla tavalla. Alla olevassa taulukossa luetellaan useimmin raportoidut ongelmat sekä niiden syy ja korjauskeino.

Oire Aiheuttaa Korjata
Virheellinen evästeverkkotunnuksen poikkeus addCookie-funktiota kutsuttiin ennen sivustolle siirtymistä, joten selain on edelleen about:blank-tilassa. Kutsu ensin driver.get-funktiota kohdeverkkotunnukseen ja lisää sitten eväste.
UnableToSetCookieException Evästeverkkotunnus ei vastaa parhaillaan ladattua sivua. Poista verkkotunnuskenttä tai aseta se avoimen sivun tarkkaan isäntään.
Kirjautumissivu näkyy edelleen evästeen lisäämisen jälkeen Sivu renderöitiin ennen evästeen olemassaoloa. Kutsu driver.navigate().refresh(), mikä on yllä olevan HUOMAUTUKSEN mukainen kova päivitys.
getCookieNamed palauttaa null-arvon Nimi on kirjoitettu väärin, tai eväste kuuluu eri polkuun tai aliverkkotunnukseen. Dumpaa jokainen eväste getCookies-funktiolla ja vertaa nimiä.
Tallennettu eväste hylätään myöhemmällä suorituskerralla Vanhenemisaika on umpeutunut tai palvelin on lopettanut istunnon. Luo Cookies.data uudelleen suorittamalla vaihe 1 uudelleen.

Jos selain avautuu ja todennetaan oikein, mutta komentosarja epäonnistuu sen jälkeen, eväste ei todennäköisesti ole syyllinen. poikkeusten käsittely Selenium on nopein reitti tuosta pisteestä, ja erillinen Firefox profiili on tavallinen vaihtoehto, kun haluat istuntodatan säilyvän ilman tiedostoa.

UKK

Kaksi vaihtoehtoa. Napsauta Hyväksy-painiketta kuten mitä tahansa elementtiä tai aseta sivuston suostumuseväste addCookie-komennolla ennen uudelleenlatausta, jotta banneria ei koskaan renderöidä. Toinen lähestymistapa on nopeampi ja poistaa yleisen epätasaisen ensimmäisten vaiheiden lähteen.

Python käyttää ajurissa itsessään snake_case-vastineita: driver.get_cookies(), driver.get_cookie(name), driver.add_cookie(dict) ja driver.delete_all_cookies(). Evästeet palautetaan sanakirjoina eikä evästeobjekteina, joten lue arvot hakasulkeissa.

Kyllä. WebDriver kommunikoi selaimen kanssa ajurin kautta eikä JavaSkripti, jotta HttpOnly-evästeet ovat näkyvissä getCookies-funktion kautta. Kutsu isHttpOnly- ja isSecure-funktioita Cookie-objektille tarkistaaksesi nämä merkinnät.

Tekoälyavusteinen analyysi ryhmittelee epäonnistuneet ajot jaettujen signaalien ja usein traces ajoittaiset uloskirjautumisvirheet vanhentuneen tai puuttuvan istuntoevästeen vuoksi. Jotkin työkalut oppivat myös, mitä evästeitä läpimenevä suoritus sisältää, ja varoittavat, kun istunto poikkeaa tästä lähtötasosta.

GitHub Copilot kirjoittaa luku-, kirjoitus- ja palautussilmukat nopeasti, mutta se toistaa usein vanhentuneet uudet Boolean- ja Date-konstruktorit. Revvertaa jokaista luotua katkelmaa nykyiseen Java ja Selenium API.

Ei. Istuntoeväste on live-tunnistetieto, joten vahvistettu Cookies.data-tiedosto antaa kenelle tahansa, jolla on käyttöoikeudet tietovarastoon, tekeytyä kyseisestä tilistä. Pidä tiedosto versionhallinnan ulkopuolella ja luo se uudelleen ympäristökohtaisesti.

Ei oletuksena. Jokainen istunto alkaa puhtaalla selainprofiililla, minkä vuoksi eväste kirjoitetaan levylle ja toistetaan. Tallennetun selainprofiilin liittäminen on toinen tapa pitää istunto toiminnassa eri suoritusten välillä.

Istuntoevästeissä on voimassaoloaikaleima, ja myös palvelimella on tracks omaa istuntonsa elinkaarta. Kun jompikumpi aika on kulunut umpeen, toistettu eväste hylätään ja kirjautumissivu palaa, joten luo tallennettu eväste uudelleen vanhan tiedoston uudelleenkäytön sijaan.

Tiivistä tämä viesti seuraavasti: