Umgang mit Cookies in Selenium WebTreiber

⚡ Intelligente Zusammenfassung

Cookies speichern Benutzerpräferenzen und Sitzungs-IDs als Schlüssel-Wert-Paare, und Selenium WebDriver kann diese lesen, speichern und wiedergeben, sodass ein automatisierter Test bei jedem nachfolgenden Durchlauf den Anmeldebildschirm überspringt.

  • 🔘 Grundlagen zu Cookies: Ein Cookie enthält einen Namen, einen Wert, eine Domain, einen Pfad, ein Ablaufdatum sowie die Flags secure und HttpOnly.
  • ☑️ Sechs Befehle: getCookies, getCookieNamed, addCookie, deleteCookie, deleteCookieNamed und deleteAllCookies decken alle Operationen ab.
  • Zweistufige Demo: Im ersten Schritt wird der Authentifizierungs-Cookie in eine Datei geschrieben, im zweiten Schritt wird er wiedergegeben, um eine neue Sitzung zu authentifizieren.
  • 🧪 Zeitersparnis: Durch das erneute Abspielen eines Session-Cookies entfallen die Anmeldeschritte in jedem Testfall, wodurch die gesamte Ausführungszeit verkürzt wird.
  • Keine Bearbeitung: Ein Cookie kann nicht direkt verändert werden. Löschen Sie daher den alten Cookie und fügen Sie über Cookie.Builder eine neu erstellte Kopie hinzu.
  • ⚠️ Domänenregel: Rufen Sie die Zielseite auf, bevor Sie addCookie aufrufen, andernfalls lehnt der Browser das Cookie sofort ab.

Wie man Cookies in Selenium WebTreiber

Ein HTTP-Cookie enthält Informationen über den Nutzer und seine Präferenzen. Es speichert diese Informationen mithilfe von Schlüssel-Wert-Paaren. Es handelt sich um ein kleines Datenpaket, das von einer Webanwendung gesendet und im Webbrowser gespeichert wird, während der Nutzer die Website besucht.

Wenn Sie mit diesem Thema noch nicht vertraut sind, beginnen Sie mit diesem Leitfaden. Cookie-Tests.

Selenium Abfragebefehle für Cookies

In Selenium Mit WebDriver können wir Cookies mithilfe der unten aufgeführten integrierten Methoden abfragen und mit ihnen interagieren. Jede dieser Methoden wird über driver.manage() aufgerufen, welches die Options-Schnittstelle zurückgibt.

Selenium Abfragebefehle Ausgang
driver.manage().getCookies(); Gibt die Liste aller Cookies zurück
driver.manage().getCookieNamed(arg0); Gibt einen bestimmten Cookie anhand des Namens zurück
driver.manage().addCookie(arg0); Erstellt und fügt den Cookie hinzu
driver.manage().deleteCookie(arg0); Löscht einen bestimmten Cookie
driver.manage().deleteCookieNamed(arg0); Löscht einen bestimmten Cookie anhand seines Namens
driver.manage().deleteAllCookies(); Löscht alle Cookies

Warum Cookies verarbeiten (akzeptieren)? Selenium?

Jedes Cookie ist mit einem Namen, einem Wert, einer Domäne, einem Pfad, einem Ablaufdatum und dem Status, ob es sicher ist oder nicht, verknüpft. Um einen Client zu validieren, analysiert ein Server alle diese Werte in einem Cookie.

Wenn die Funktion testing eine Webanwendung Selenium WebDriver: Möglicherweise müssen Sie ein Cookie erstellen, aktualisieren oder löschen.

Zum Beispiel bei der Automatisierung eines Online-Shopsping Bei der Anwendung müssen Sie möglicherweise Testszenarien automatisieren, wie z. B. Bestellung aufgeben, Warenkorb anzeigen, Zahlungsinformationen abrufen, Bestellbestätigung usw.

Werden keine Cookies gespeichert, müssen Sie sich vor jeder Ausführung der oben genannten Testszenarien anmelden. Dies erhöht Ihren Programmieraufwand und die Ausführungszeit.

Die Lösung besteht darin, Cookies in einer Datei zu speichern. LaterDie Werte des Cookies werden aus dieser Datei abgerufen und Ihrer aktuellen Browsersitzung hinzugefügt. Dadurch können Sie die Anmeldeschritte bei jedem Besuch überspringen. Testfall weil Ihre Fahrersitzung diese Informationen enthält.

Der Anwendungsserver behandelt Ihre Browsersitzung nun als authentifiziert und leitet Sie direkt zu der angeforderten Seite weiter. URL.

Umgang mit Cookies in Selenium

Wir werden verwenden https://demo.guru99.com/test/cookie/selenium_aut.php für unseren Demozweck.

Dies wird ein 2-stufiger Prozess sein.

Schritt 1) ​​Melden Sie sich in der Anwendung an und speichern Sie den generierten Authentifizierungs-Cookie.

Die Demo-Anwendung zeigt das unten dargestellte einfache Anmeldeformular.

Guru99 Selenium Cookie-Demo-Anmeldeformular mit Feldern für Benutzername und Passwort

Schritt 2) Verwenden Sie den gespeicherten Cookie, um sich ohne Benutzer-ID und Passwort erneut bei der Anwendung anzumelden.

Schritt 1) ​​Speichern von Cookie-Informationen

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

⚠️ Versionshinweis: Die Zeile mit System.setProperty wurde exakt so beibehalten, wie sie im ursprünglichen Tutorial beschrieben ist. Selenium ab 4.6, Selenium Der Manager lädt den passenden Chromedriver automatisch herunter und konfiguriert ihn, daher ist diese Zeile in der aktuellen Konfiguration nicht mehr erforderlich. Der ursprüngliche Code unten bleibt unverändert und lässt sich weiterhin kompilieren.

Code Erläuterung

  • Erstellen Sie eine WebDriver-Instanz.
  • Besuchen Sie die Website mit driver.get(“https://demo.guru99.com/test/cookie/selenium_aut.php”).
  • Melden Sie sich bei der Anwendung an.
  • Lesen Sie die Cookie-Informationen mit
    driver.manage().getCookies();
  • Speichern Sie die Cookie-Informationen mithilfe der DateiWriter Klasse zum Schreiben von Zeichenströmen, und BufferedWriter Der Text soll in eine Datei namens Cookies.data geschrieben werden.
  • Die Datei „Cookies.data“ speichert alle Cookie-Informationen, einschließlich Name, Wert, Domain und Pfad. Wir können diese Informationen abrufen und uns in der Anwendung anmelden, ohne die Anmeldedaten eingeben zu müssen.

Nach Ausführung des obigen Codes wird die Datei „Cookies.data“ im Projektordner erstellt. Öffnen Sie die Datei; darin finden Sie die Anmeldeinformationen des zu testenden Programms (AUT) im Cookie-Format, wie im unten markierten Screenshot dargestellt.

Inhalt der Datei „Cookies.data“, die den gespeicherten Session-Cookie im Format Name-Wert-Domänenpfad anzeigt

Schritt 2) Verwenden Sie gespeicherte Cookies, um sich bei der Anwendung anzumelden

Nun greifen wir auf den in Schritt 1 generierten Cookie zu und verwenden ihn, um unsere Sitzung in der Anwendung zu authentifizieren.

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

Ergebnis: Sie gelangen direkt zum Anmeldebildschirm, ohne Benutzer-ID und Passwort eingeben zu müssen.

HINWEIS: Führen Sie eine erzwungene Aktualisierung durch, falls nach Ausführung des obigen Skripts die Anmeldeseite angezeigt wird.

⚠️ Java Hinweise: Das Reader-Skript verwendet `new Boolean(String)` und `new Date(String)`, die beide im JDK schon lange als veraltet gelten. In einem modernen JDK sind die Entsprechungen `Boolean.parseBoolean(token.nextToken())` und ein `java.time`-Parser. Die ursprünglichen Zeilen oben bleiben erhalten; der Hinweis ist als moderne Ersetzung und nicht als Bearbeitung zu verstehen.

Cookie-Attribute und die Selenium Cookie-Klasse

Die beiden obigen Skripte verschieben sechs Felder in und aus einer Datei. Diese Felder entsprechen genau dem, was die Klasse `org.openqa.selenium.Cookie` bereitstellt, und ihre Kenntnis erleichtert das Lesen der Tokenisierungsschleife in Schritt 2 erheblich.

Attribut Zubehör Was es bedeutet
Name getName () Der Schlüssel, den der Server nachschlägt, zum Beispiel JSESSIONID.
Wert Wert erhalten() Die gespeicherten Daten, üblicherweise die Sitzungskennung.
Domain getDomain() Der Host, an den der Browser den Cookie zurücksendet.
Path getPath() Das URL Das Präfix, auf das der Cookie Anwendung findet.
Ablauf getExpiry() Das Datum, an dem der Cookie abläuft. Ein Nullwert bedeutet, dass es sich um einen Session-Cookie handelt.
und geschützt istSicher() Trifft zu, wenn der Cookie ausschließlich über HTTPS gesendet wird.
HttpOnly isHttpOnly() Wahr, wenn JavaDas Skript auf der Seite kann den Cookie nicht lesen.
GleicheSite getSameSite() Streng, locker oder gar nicht. Hinzugefügt in Selenium 4.

Anstelle des in Schritt 2 verwendeten Konstruktors mit sechs Argumenten wird im aktuellen Code üblicherweise ein Cookie über die innere Builder-Klasse erstellt, mit der Sie nur die Felder festlegen können, die Sie interessieren.

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

driver.manage().addCookie(sessionCookie);

Eine Regel wird den meisten Nutzern entgangen: Ein Cookie-Objekt kann nach seiner Erstellung nicht mehr bearbeitet werden. Um einen Wert zu ändern, muss man das alte Cookie löschen und eine neu erstellte Kopie hinzufügen. Genau deshalb ist Builder so nützlich.

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

Häufige Cookie-Fehler in Selenium WebDriver und wie man sie behebt

Cookie-Code neigt dazu, auf wenige, vorhersehbare Arten Fehler zu verursachen. Die folgende Tabelle listet die am häufigsten gemeldeten Fehler zusammen mit deren Ursache und Lösung auf.

Symptom Verursachen Fixieren
InvalidCookieDomainException addCookie wurde aufgerufen, bevor die Website aufgerufen wurde, daher befindet sich der Browser noch in der Einstellung about:blank. Rufen Sie zuerst driver.get auf der Zieldomäne auf und fügen Sie dann den Cookie hinzu.
UnableToSetCookieException Die Cookie-Domain stimmt nicht mit der aktuell geladenen Seite überein. Lassen Sie das Domain-Feld weg oder geben Sie dort den genauen Host der geöffneten Seite an.
Die Anmeldeseite wird auch nach dem Hinzufügen des Cookies weiterhin angezeigt. Die Seite wurde gerendert, bevor der Cookie existierte. Rufen Sie driver.navigate().refresh() auf, was im obigen HINWEIS mit „harter Aktualisierung“ gemeint ist.
getCookieNamed gibt null zurück. Der Name ist falsch geschrieben, oder der Cookie gehört zu einem anderen Pfad oder einer anderen Subdomain. Mit getCookies lassen sich alle Cookies ausgeben und die Namen vergleichen.
Der gespeicherte Cookie wird bei einem späteren Durchlauf abgelehnt. Die Sitzung ist abgelaufen oder der Server hat die Sitzung beendet. Generieren Sie Cookies.data neu, indem Sie Schritt 1 erneut ausführen.

Wenn der Browser sich öffnet und die Authentifizierung erfolgreich ist, das Skript aber anschließend fehlschlägt, liegt das Problem wahrscheinlich nicht am Cookie. (Anmerkung: Der letzte Satz scheint irrelevant und wurde daher nicht übersetzt.) Ausnahmebehandlung in Selenium ist von dort aus die schnellere Route, und ein dedizierter Firefox profile ist die übliche Alternative, wenn Sitzungsdaten auch ohne Datei erhalten bleiben sollen.

Häufig gestellte Fragen

Es gibt zwei Möglichkeiten. Entweder klicken Sie wie bei jedem anderen Element auf „Akzeptieren“ oder Sie setzen mit `addCookie` vor dem Neuladen der Seite ein Cookie zur Zustimmung der Website, sodass das Banner gar nicht erst angezeigt wird. Die zweite Methode ist schneller und beseitigt eine häufige Fehlerquelle beim ersten Versuch.

Python Der Treiber selbst verwendet die Entsprechungen in snake_case: driver.get_cookies(), driver.get_cookie(name), driver.add_cookie(dict) und driver.delete_all_cookies(). Cookies werden als Dictionaries und nicht als Cookie-Objekte zurückgegeben; lesen Sie die Werte daher mit eckigen Klammern.

Ja. WebDriver kommuniziert über den Treiber mit dem Browser, nicht über … JavaDas Skript sorgt dafür, dass HttpOnly-Cookies über getCookies sichtbar sind. Rufen Sie isHttpOnly und isSecure für das Cookie-Objekt auf, um diese Flags zu überprüfen.

KI-gestützte Analysen gruppieren fehlgeschlagene Läufe anhand gemeinsamer Signale und oft tracEs kann zu sporadischen Abmeldefehlern aufgrund eines abgelaufenen oder fehlenden Sitzungscookies kommen. Einige Tools lernen außerdem, welche Cookies ein aktueller Durchlauf verwendet, und warnen, wenn eine Sitzung von diesem Standard abweicht.

GitHub-Copilot Schreibt die Schleifen zum Lesen, Schreiben und Wiederherstellen schnell, reproduziert aber häufig die veralteten Konstruktoren new Boolean und new Date. RevÜberprüfen Sie jeden generierten Codeausschnitt im Vergleich zum aktuellen Java und Selenium APIs.

Nein. Ein Session-Cookie ist eine dynamische Anmeldeinformation. Daher kann jeder mit Zugriff auf das Repository durch eine gespeicherte Cookies.data-Datei dieses Konto imitieren. Speichern Sie die Datei außerhalb der Versionskontrolle und generieren Sie sie für jede Umgebung neu.

Standardmäßig nicht. Jede Sitzung beginnt mit einem neuen Browserprofil. Genau deshalb wird der Cookie auf der Festplatte gespeichert und wiederhergestellt. Das Anhängen eines gespeicherten Browserprofils ist die andere Möglichkeit, eine Sitzung über mehrere Sitzungen hinweg aufrechtzuerhalten.

Sitzungscookies enthalten einen Ablaufzeitstempel und der Server auch tracDer Cookie hat seine eigene Sitzungslebensdauer. Sobald eine der beiden abläuft, wird der erneut verwendete Cookie abgelehnt und die Anmeldeseite angezeigt. Daher sollte der gespeicherte Cookie neu generiert werden, anstatt eine alte Datei wiederzuverwenden.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: