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.

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


