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


