Comment gérer les cookies dans Selenium pilote web

⚡ Résumé intelligent

Les cookies stockent les préférences de l'utilisateur et les identifiants de session sous forme de paires clé-valeur, et Selenium WebDriver peut les lire, les enregistrer et les relire afin qu'un test automatisé puisse ignorer l'écran de connexion à chaque exécution suivante.

  • (I.e. Principes de base des cookies : Un cookie contient un nom, une valeur, un domaine, un chemin, une date d'expiration et les attributs secure et HttpOnly.
  • ☑️ Six commandes : Les fonctions getCookies, getCookieNamed, addCookie, deleteCookie, deleteCookieNamed et deleteAllCookies couvrent toutes les opérations.
  • Démonstration en deux étapes : La première étape consiste à écrire le cookie d'authentification dans un fichier, la deuxième étape consiste à le réutiliser pour authentifier une nouvelle session.
  • 🧪 Temps gagné : La réutilisation d'un cookie de session supprime les étapes de connexion de chaque cas de test et raccourcit le temps d'exécution total.
  • Aucune modification : Un cookie ne peut pas être modifié directement ; supprimez donc l’ancien et ajoutez-en une nouvelle copie via Cookie.Builder.
  • ⚠️ Règle de domaine : Accédez au site cible avant d'appeler addCookie, sinon le navigateur rejettera d'emblée le cookie.

Comment gérer les cookies dans Selenium pilote web

Un cookie HTTP contient des informations sur l'utilisateur et ses préférences. Il stocke ces informations sous forme de paires clé-valeur. Il s'agit d'un petit fichier de données envoyé par une application web et stocké dans le navigateur pendant la navigation de l'utilisateur sur le site.

Si vous débutez sur le sujet, commencez par ce guide. test des cookies.

Selenium Commandes de requête pour les cookies

In Selenium Avec WebDriver, nous pouvons interroger les cookies et interagir avec eux grâce aux méthodes intégrées ci-dessous. Chacune d'elles est accessible via `driver.manage()`, qui renvoie l'interface `Options`.

Selenium Commandes de requête Sortie
pilote.gérer().getCookies(); Renvoie la liste de tous les cookies
pilote.manage().getCookieNamed(arg0); Renvoie un cookie spécifique en fonction de son nom.
pilote.manage().addCookie(arg0); Crée et ajoute le cookie
pilote.manage().deleteCookie(arg0); Supprime un cookie spécifique
pilote.manage().deleteCookieNamed(arg0); Supprime un cookie spécifique en fonction de son nom.
pilote.manage().deleteAllCookies(); Supprime tous les cookies

Pourquoi gérer (accepter) les cookies dans Selenium?

Chaque cookie est associé à un nom, une valeur, un domaine, un chemin, une expiration et un statut indiquant s'il est sécurisé ou non. Afin de valider un client, un serveur analyse toutes ces valeurs dans un cookie.

Lorsque vous vers les tests une application web utilisant Selenium WebDriver, vous devrez peut-être créer, mettre à jour ou supprimer un cookie.

Par exemple, lors de l'automatisation d'une boutique en ligneping Dans l'application, vous pourriez avoir besoin d'automatiser des scénarios de test tels que passer une commande, consulter le panier, les informations de paiement, la confirmation de commande, etc.

Si les cookies ne sont pas enregistrés, vous devrez vous connecter avant chaque exécution des scénarios de test mentionnés ci-dessus. Cela augmentera le temps de développement et d'exécution.

La solution consiste à stocker les cookies dans un fichier. LaterRécupérez les valeurs du cookie à partir de ce fichier et ajoutez-les à votre session de navigation actuelle. Ainsi, vous pourrez éviter les étapes de connexion à chaque fois. cas de test car votre session de pilote contient ces informations.

Le serveur d'applications considère désormais votre session de navigation comme authentifiée et vous redirige directement vers la page demandée. URL.

Comment gérer les cookies dans Selenium

Nous utiliserons https://demo.guru99.com/test/cookie/selenium_aut.php à des fins de démonstration.

Ce sera un processus en 2 étapes.

Étape 1) Connectez-vous à l'application et stockez le cookie d'authentification généré.

L'application de démonstration présente le formulaire de connexion simple illustré ci-dessous.

Guru99 Selenium Formulaire de connexion de démonstration de cookies avec champs nom d'utilisateur et mot de passe

Étape 2) Utilisez le cookie enregistré pour vous reconnecter à l'application sans utiliser d'identifiant et de mot de passe.

Étape 1) Stockage des informations sur les cookies

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

⚠️ Note de version : La ligne System.setProperty est conservée exactement comme dans le tutoriel original. Selenium 4.6 et suivants, Selenium Le gestionnaire télécharge et configure automatiquement le pilote ChromeDriver correspondant ; cette ligne n’est donc plus nécessaire dans la configuration actuelle. Le code original reste inchangé ci-dessous et compile toujours.

Code Explication

  • Créez une instance de WebDriver.
  • Visitez le site web en utilisant driver.get(“https://demo.guru99.com/test/cookie/selenium_aut.php”).
  • Connectez-vous à l'application.
  • Lisez les informations des cookies en utilisant
    driver.manage().getCookies();
  • Stockez les informations des cookies à l'aide du fichierWriter classe pour écrire des flux de caractères, et BufferedWriter écrire le texte dans un fichier nommé Cookies.data.
  • Le fichier Cookies.data stocke toutes les informations relatives aux cookies, notamment leur nom, leur valeur, leur domaine et leur chemin d'accès. Nous pouvons récupérer ces informations et nous connecter à l'application sans saisir nos identifiants.

Une fois le code ci-dessus exécuté, le fichier Cookies.data est créé dans le répertoire du projet. Ouvrez-le : vous y trouverez les identifiants de connexion de l’application testée, enregistrés au format cookie, comme illustré dans la capture d’écran ci-dessous.

Contenu du fichier Cookies.data affichant le cookie de session enregistré au format nom, valeur, domaine et chemin.

Étape 2) Utilisation du cookie stocké pour vous connecter à l'application

Nous allons maintenant accéder au cookie généré à l'étape 1 et l'utiliser pour authentifier notre session dans l'application.

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

Résultat : Vous êtes directement redirigé vers l’écran de confirmation de connexion sans avoir à saisir votre identifiant et votre mot de passe.

REMARQUE : Utilisez la fonction d'actualisation forcée si la page de connexion s'affiche après l'exécution du script ci-dessus.

⚠️ Java Notes: Le script de lecture utilise `new Boolean(String)` et `new Date(String)`, deux fonctions obsolètes depuis longtemps dans le JDK. Sur un JDK moderne, les équivalents sont `Boolean.parseBoolean(token.nextToken())` et un analyseur `java.time`. Les lignes originales sont conservées ci-dessus ; considérez cette note comme le remplacement moderne et non comme une modification.

Attributs des cookies et Selenium Classe de biscuits

Les deux scripts ci-dessus déplacent six champs dans et hors d'un fichier. Ces champs correspondent exactement à ceux exposés par la classe org.openqa.selenium.Cookie, et leur connaissance facilite grandement la lecture de la boucle d'analyse lexicale de l'étape 2.

Attribut Accesseur Ce que cela veut dire
Nom getName () La clé que le serveur recherche, par exemple JSESSIONID.
Valeur getValue () Les données stockées, généralement l'identifiant de session.
Domaine obtenirDomain() L'hôte auquel le navigateur renverra le cookie.
Chemin obtenirPath() Le URL préfixe auquel le cookie s'applique.
Expiration getExpiry() Date d'expiration du cookie. Une valeur nulle indique un cookie de session.
Sécurisés est sécurisé() Vrai lorsque le cookie est uniquement envoyé via HTTPS.
HttpOnly estHttpOnly() Vrai lorsque JavaLe script présent sur la page ne peut pas lire le cookie.
MêmeSite obtenirSameSite() Strict, laxiste ou aucun. Ajouté dans Selenium 4.

Plutôt que le constructeur à six arguments utilisé à l'étape 2, le code actuel construit généralement un cookie via la classe Builder interne, qui vous permet de définir uniquement les champs qui vous intéressent.

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

driver.manage().addCookie(sessionCookie);

Une règle piège souvent les utilisateurs : un objet cookie ne peut être modifié après sa création. Pour changer une valeur, il faut supprimer l’ancien cookie et en ajouter une nouvelle copie ; c’est là toute l’utilité de Builder.

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

Erreurs courantes liées aux cookies dans Selenium WebDriver et comment les réparer

Le code des cookies présente généralement quelques défaillances prévisibles. Le tableau ci-dessous répertorie les plus fréquentes, ainsi que leur cause et leur solution.

Symptôme Causes Fixer
Exception de domaine de cookie invalide La fonction addCookie a été appelée avant la navigation vers le site, le navigateur est donc toujours sur about:blank. Appelez d'abord driver.get sur le domaine cible, puis ajoutez le cookie.
Exception Impossible de définir le cookie Le domaine du cookie ne correspond pas à la page actuellement chargée. Supprimez le champ « domaine » ou indiquez-y l'hôte exact de la page ouverte.
La page de connexion s'affiche toujours après l'ajout du cookie La page a été affichée avant que le cookie n'existe. Appelez driver.navigate().refresh(), ce qui correspond à ce que la NOTE ci-dessus entend par actualisation forcée.
getCookieNamed renvoie null Le nom est mal orthographié, ou le cookie appartient à un chemin ou un sous-domaine différent. Récupérez tous les cookies avec getCookies et comparez leurs noms.
Le cookie enregistré est rejeté lors d'une exécution ultérieure. Le délai d'expiration est dépassé ou le serveur a mis fin à la session. Régénérez le fichier Cookies.data en exécutant à nouveau l'étape 1.

Si le navigateur s'ouvre et s'authentifie correctement, mais que le script échoue ensuite, le cookie n'est probablement pas en cause. En suivant les instructions, gestion des exceptions dans Selenium est le chemin le plus rapide à partir de ce point, et un dédié Firefox profil est l'alternative habituelle lorsque vous souhaitez que les données de session soient conservées sans aucun fichier.

FAQ

Deux options s'offrent à vous : soit cliquer sur le bouton « Accepter » comme sur n'importe quel autre élément, soit définir le cookie de consentement du site avec la fonction addCookie avant de recharger la page afin que la bannière ne s'affiche jamais. La seconde méthode est plus rapide et évite les problèmes courants lors de la première utilisation.

Python Utilise les équivalents snake_case sur le pilote lui-même : `driver.get_cookies()`, `driver.get_cookie(name)`, `driver.add_cookie(dict)` et `driver.delete_all_cookies()`. Les cookies sont renvoyés sous forme de dictionnaires et non d’objets `Cookie`, il faut donc lire les valeurs entre crochets.

Oui. WebDriver communique avec le navigateur via le pilote plutôt que par le biais de celui-ci. JavaDans ce script, les cookies HttpOnly sont visibles via getCookies. Appelez isHttpOnly et isSecure sur l'objet Cookie pour vérifier ces attributs.

L'analyse assistée par l'IA regroupe les exécutions défaillantes en fonction de signaux communs et souvent tracLes échecs de déconnexion intermittents sont dus à un cookie de session expiré ou manquant. Certains outils analysent également les cookies utilisés par une session et signalent tout écart par rapport à cette configuration de référence.

Copilote GitHub Il écrit rapidement les boucles de lecture, d'écriture et de restauration, mais il reproduit fréquemment les constructeurs obsolètes new Boolean et new Date. Revcomparer chaque extrait généré avec le code actuel Java et Selenium Apis.

Non. Un cookie de session est une information d'identification active ; par conséquent, un fichier Cookies.data enregistré permet à toute personne ayant accès au dépôt d'usurper l'identité de ce compte. Il est donc recommandé de ne pas inclure ce fichier dans le système de contrôle de version et de le régénérer pour chaque environnement.

Ce n'est pas le comportement par défaut. Chaque session démarre avec un profil de navigation vierge, ce qui explique pourquoi le cookie est enregistré sur le disque et réutilisé. L'utilisation d'un profil de navigation enregistré permet également de maintenir une session active d'une session à l'autre.

Les cookies de session contiennent un horodatage d'expiration et le serveur également tracLe cookie a sa propre durée de vie. Une fois l'une ou l'autre de ces durées expirée, le cookie réutilisé est rejeté et la page de connexion s'affiche. Il est donc conseillé de régénérer le cookie enregistré plutôt que de réutiliser un ancien fichier.

Résumez cet article avec :