Como lidar com cookies no Selenium WebDriver

Um cookie HTTP é composto por informações sobre o usuário e suas preferências. Ele armazena informações usando um par de valores-chave. É um pequeno dado enviado do aplicativo Web e armazenado no navegador da Web, enquanto o usuário navega naquele site.

Clique aqui para saber mais sobre teste de cookies.

Comandos de consulta Selenium para cookies

No Selenium Webdriver, podemos consultar e interagir com cookies com o método integrado abaixo:

Comandos de consulta Selenium saída
driver.manage().getCookies(); Retorne a lista de todos os cookies
driver.manage().getCookieNamed(arg0); Retornar cookie específico de acordo com o nome
driver.manage().addCookie(arg0); Crie e adicione o cookie
driver.manage().deleteCookie(arg0); Excluir cookie específico
driver.manage().deleteCookieNamed(arg0); Exclua cookie específico de acordo com o nome
driver.manage().deleteAllCookies(); Excluir todos os cookies

Por que lidar (aceitar) cookies no Selenium?

Cada cookie está associado a um nome, valor, domínio, caminho, validade e o status de ser seguro ou não. Para validar um cliente, um servidor analisa todos esses valores em um cookie.

Quando ensaio um aplicativo da web usando o driver da web Selenium, pode ser necessário criar, atualizar ou excluir um cookie.

Por exemplo, ao automatizar o aplicativo de compras online, muitos precisam automatizar cenários de teste, como fazer pedido, visualizar carrinho, informações de pagamento, confirmação de pedido, etc.

Se os cookies não forem armazenados, você precisará realizar uma ação de login sempre antes de executar os cenários de teste listados acima. Isso aumentará seu esforço de codificação e tempo de execução.

A solução é armazenar cookies em um arquivo. Later, recupere os valores do cookie deste arquivo e adicione a ele sua sessão atual do navegador. Como resultado, você pode pular as etapas de login em cada Caso de teste porque sua sessão de driver contém essas informações.

O servidor de aplicativos agora trata a sessão do seu navegador como autenticada e leva você diretamente ao URL solicitado.

Como lidar com cookies no Selenium

Nós vamos usar https://demo.guru99.com/test/cookie/selenium_aut.php para nosso propósito de demonstração.

Este será um processo de 2 etapas.

Passo 1) Faça login no aplicativo e armazene o cookie de autenticação gerado.

Lidar com cookies em Selenium

Passo 2) Usou o cookie armazenado para fazer login novamente no aplicativo sem usar ID de usuário e senha.

Etapa 1) Armazenar informações de 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();			
        }		
    }		
}

Explicação do código:

  • Criar instância do WebDriver
  • Visitamos o site usando driver.get (“https://demo.guru99.com/test/cookie/selenium_aut.php”)
  • Faça login no aplicativo
  • Leia as informações do cookie usando
    driver.manage().getCookies();
  • Armazene as informações do cookie usando a classe FileWriter para escrever fluxos de caracteres e BufferedWriter para escrever o texto em um arquivo para criar em um arquivo Cookies.data
  • O arquivo “Cookies.data” armazena todas as informações dos cookies junto com “Nome, Valor, Domínio, Caminho”. Podemos recuperar essas informações e fazer login no aplicativo sem inserir as credenciais de login.
  • Depois de executar o código acima, o arquivo Cookie.data é criado na estrutura de pastas do projeto, conforme mostrado na tela abaixo. Abra o arquivo Cookie.data, você pode ver a credencial de login do AUT salva no formato de Cookie, veja a tela destacada abaixo

    Lidar com cookies em Selenium

Etapa 2) Usando o cookie armazenado para fazer login no aplicativo

Agora, acessaremos o cookie gerado no passo 1 e utilizaremos o cookie gerado para autenticar nossa sessão na aplicação

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

Saída: Você é levado diretamente para a tela de sucesso de login sem inserir o ID de usuário e a senha de entrada

NOTA: Use a atualização completa caso você veja a página de login após executar o script acima.

Conclusão

Assim, você pode evitar inserir o nome de usuário e a senha no servidor, validando-os repetidamente para cada teste com a ajuda do Selenium Webdriver, economizando muito tempo.