Comment gérer les cookies dans Selenium WebDriver

Un cookie HTTP est composé d'informations sur l'utilisateur et ses préférences. Il stocke les informations à l'aide d'une paire clé-valeur. Il s'agit d'un petit morceau de données envoyé depuis l'application Web et stocké dans le navigateur Web, pendant que l'utilisateur navigue sur ce site Web.

Cliquez ici pour en savoir plus test des cookies.

Commandes de requête Selenium pour les cookies

Dans Selenium Webdriver, nous pouvons interroger et interagir avec les cookies avec la méthode intégrée ci-dessous :

Commandes de requête Selenium Sortie
driver.manage().getCookies(); Retourner la liste de tous les cookies
driver.manage().getCookieNamed(arg0); Renvoie un cookie spécifique en fonction du nom
driver.manage().addCookie(arg0); Créer et ajouter le cookie
driver.manage().deleteCookie(arg0); Supprimer un cookie spécifique
driver.manage().deleteCookieNamed(arg0); Supprimer un cookie spécifique en fonction du nom
driver.manage().deleteAllCookies(); Supprimer 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.

Quand Essais une application Web utilisant le pilote Web Selenium, vous devrez peut-être créer, mettre à jour ou supprimer un cookie.

Par exemple, lors de l'automatisation d'une application d'achat en ligne, vous devez souvent automatiser des scénarios de test tels que passer une commande, afficher le panier, les informations de paiement, la confirmation de commande, etc.

Si les cookies ne sont pas stockés, vous devrez effectuer une action de connexion à chaque fois avant d'exécuter les scénarios de test répertoriés ci-dessus. Cela augmentera votre effort de codage et votre temps d’exécution.

La solution est de stocker les cookies dans un Fichier. Plus tard, récupérez les valeurs du cookie de ce fichier et ajoutez-y votre session de navigateur actuelle. Par conséquent, vous pouvez ignorer les étapes de connexion à chaque fois. Cas de test car votre session de pilote contient ces informations.

Le serveur d'applications traite désormais votre session de navigateur comme authentifiée et vous amène directement à l'URL demandée.

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

Gérer les cookies au sélénium

Étape 2) J'ai utilisé le cookie stocké pour me reconnecter à l'application sans utiliser l'ID utilisateur ni le 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();			
        }		
    }		
}

Explication du code :

  • Créer une instance WebDriver
  • Nous visitons le site Web en utilisant le 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 de la classe FileWriter pour écrire des flux de caractères et de BufferedWriter pour écrire le texte dans un fichier à créer dans un fichier Cookies.data
  • Le fichier « Cookies.data » stocke toutes les informations sur les cookies ainsi que « Nom, Valeur, Domaine, Chemin ». Nous pouvons récupérer ces informations et nous connecter à l'application sans saisir les informations de connexion.
  • Une fois que vous avez exécuté le code ci-dessus, le fichier Cookie.data est créé dans la structure des dossiers du projet, comme indiqué dans l'écran ci-dessous. Ouvrez le fichier Cookie.data, vous pouvez voir que les informations de connexion de l'AUT sont enregistrées au format Cookie, voir l'écran en surbrillance ci-dessous

    Gérer les cookies au sélénium

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

Maintenant, nous allons accéder au cookie généré à l'étape 1 et utiliser le cookie généré 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");					
}	
	}	

Sortie : Vous êtes directement redirigé vers l'écran de réussite de la connexion sans saisir l'identifiant utilisateur et le mot de passe saisis.

REMARQUE: Utilisez l'actualisation matérielle au cas où vous verriez la page de connexion après avoir exécuté le script ci-dessus.

Conclusion

Ainsi, vous pouvez éviter de saisir le nom d'utilisateur et le mot de passe sur le serveur en les validant encore et encore à chaque test à l'aide de Selenium Webdriver, et ainsi gagner beaucoup de temps.