Como lidar com cookies em Selenium webdriver
⚡ Resumo Inteligente
Os cookies armazenam as preferências do usuário e os identificadores de sessão como pares de chave-valor, e Selenium O WebDriver consegue ler, salvar e reproduzir esses dados, de forma que um teste automatizado ignore a tela de login em todas as execuções subsequentes.

Um cookie HTTP é composto por informações sobre o usuário e suas preferências. Ele armazena informações usando um par chave-valor. Trata-se de um pequeno arquivo de dados enviado por uma aplicação web e armazenado no navegador enquanto o usuário navega pelo site.
Se você é iniciante no assunto, comece com este guia para teste de cookies.
Selenium Comandos de consulta para cookies
In Selenium Com o WebDriver, podemos consultar e interagir com cookies usando os métodos integrados abaixo. Cada um deles é acessado através de driver.manage(), que retorna a interface Options.
| Selenium Comandos de consulta | saída |
|---|---|
| driver.manage().getCookies(); | Retorna a lista de todos os cookies. |
| driver.manage().getCookieNamed(arg0); | Retorna um cookie específico de acordo com o nome. |
| driver.manage().addCookie(arg0); | Cria e adiciona o cookie. |
| driver.manage().deleteCookie(arg0); | Exclui um cookie específico. |
| driver.manage().deleteCookieNamed(arg0); | Exclui um cookie específico de acordo com o nome. |
| driver.manage().deleteAllCookies(); | Apaga todos os cookies |
Por que lidar (aceitar) cookies em 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.
Ao ensaio um aplicativo web usando Selenium Para usar o WebDriver, pode ser necessário criar, atualizar ou excluir um cookie.
Por exemplo, ao automatizar uma loja online.ping Em um aplicativo, você pode precisar automatizar cenários de teste como fazer um pedido, visualizar o carrinho, informações de pagamento, confirmação do pedido e assim por diante.
Se os cookies não forem armazenados, você precisará realizar o login sempre que executar os cenários de teste listados acima. Isso aumentará seu esforço de programação e o tempo de execução.
A solução é armazenar os cookies em um arquivo. Later, recupera os valores do cookie deste arquivo e os adiciona à sua sessão atual do navegador. Como resultado, você pode pular as etapas de login em todos os casos. caso de teste porque sua sessão de driver contém essas informações.
O servidor de aplicativos agora trata sua sessão do navegador como autenticada e o direciona diretamente para o que você solicitou. URL.
Como lidar com cookies em 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.
O aplicativo de demonstração apresenta o formulário de login simples mostrado abaixo.
Passo 2) Utilize o cookie armazenado para fazer login novamente no aplicativo sem usar um nome 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(); } } }
⚠️ Nota sobre a versão: A linha System.setProperty é mantida exatamente como estava no tutorial original. Selenium 4.6 em diante, Selenium O gerenciador baixa e configura o chromedriver correspondente automaticamente, portanto, essa linha não é mais necessária na configuração atual. O código original permanece intacto abaixo e ainda compila.
Code Explicação
- Crie uma instância do WebDriver.
- Acesse 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 o arquivo.Writer aula para escrever fluxos de caracteres, e BufferedWriter Para escrever o texto em um arquivo chamado Cookies.data.
- O arquivo Cookies.data armazena todas as informações dos cookies, incluindo nome, valor, domínio e caminho. Podemos recuperar essas informações e fazer login no aplicativo sem precisar inserir as credenciais de acesso.
Após executar o código acima, o arquivo Cookies.data será criado na estrutura de pastas do projeto. Abra o arquivo e você poderá ver as credenciais de login do AUT salvas em formato de cookie, como mostra a imagem destacada abaixo.
Etapa 2) Usando o cookie armazenado para fazer login no aplicativo
Agora, acessaremos o cookie gerado na etapa 1 e o utilizaremos para autenticar nossa sessão no aplicativo.
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"); } }
Resultado: Você é direcionado diretamente para a tela de login bem-sucedido sem precisar inserir o nome de usuário e a senha.
NOTA: Caso a página de login seja exibida após a execução do script acima, utilize a função "atualizar a página à força".
⚠️ Java notas: O script do leitor usa `new Boolean(String)` e `new Date(String)`, ambos obsoletos no JDK há muito tempo. Em um JDK moderno, os equivalentes são `Boolean.parseBoolean(token.nextToken())` e um analisador de `java.time`. As linhas originais são mantidas acima; considere a nota como a substituição moderna, e não como uma edição.
Atributos de cookies e os Selenium Aula de Biscoitos
Os dois scripts acima movem seis campos para dentro e para fora de um arquivo. Esses campos são exatamente o que a classe org.openqa.selenium.Cookie expõe, e conhecê-los torna o loop do analisador léxico na Etapa 2 muito mais fácil de ler.
| Atributo | Assessor | O que significa |
|---|---|---|
| Nome | getName () | A chave que o servidor procura, por exemplo, JSESSIONID. |
| Valor | Obter valor() | Os dados armazenados, geralmente o identificador da sessão. |
| Domínio | obterDomínio() | O host para o qual o navegador enviará o cookie de volta. |
| Caminho | obterCaminho() | O URL prefixo ao qual o cookie se aplica. |
| Termo | getExpiry () | A data em que o cookie expira. Um valor nulo significa um cookie de sessão. |
| Garanta o | éSeguro() | Verdadeiro quando o cookie é enviado apenas por HTTPS. |
| HttpOnly | isHttpOnly() | Verdadeiro quando JavaO script na página não consegue ler o cookie. |
| Mesmo Site | obterMesmoSite() | Rigoroso, flexível ou nenhum. Adicionado em Selenium 4. |
Em vez do construtor de seis argumentos usado na Etapa 2, o código atual geralmente cria um cookie por meio da classe Builder interna, que permite definir apenas os campos que lhe interessam.
Cookie sessionCookie = new Cookie.Builder("JSESSIONID", "A1B2C3D4") .domain("demo.guru99.com") .path("/") .isSecure(true) .isHttpOnly(true) .build(); driver.manage().addCookie(sessionCookie);
Uma regra costuma enganar a maioria das pessoas: um objeto cookie não pode ser editado depois de criado. Para alterar um valor, você exclui o cookie antigo e adiciona uma nova cópia, e é por isso que o Builder é tão útil.
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);
Erros comuns de cookies em Selenium WebDriver e como corrigir problemas
O código de cookies tende a falhar de algumas maneiras previsíveis. A tabela abaixo lista as falhas relatadas com mais frequência, juntamente com a causa e a solução.
| Sintoma | Causar | Fixar |
|---|---|---|
| Exceção de domínio de cookie inválido | O método addCookie foi chamado antes de navegar para o site, portanto o navegador ainda está em about:blank. | Primeiro, acesse o driver.get no domínio de destino e, em seguida, adicione o cookie. |
| Exceção não foi possível definir o cookie | O domínio do cookie não corresponde à página atualmente carregada. | Remova o campo de domínio ou defina-o com o host exato da página aberta. |
| A página de login ainda aparece mesmo após adicionar o cookie. | A página foi renderizada antes da existência do cookie. | Chame driver.navigate().refresh(), que é o que a NOTA acima quer dizer com uma atualização completa. |
| getCookieNamed retorna nulo | O nome está escrito incorretamente ou o cookie pertence a um caminho ou subdomínio diferente. | Use o comando getCookies para extrair todos os cookies e comparar os nomes. |
| O cookie armazenado será rejeitado em uma execução posterior. | O prazo de validade expirou ou o servidor encerrou a sessão. | Recompile o arquivo Cookies.data executando o Passo 1 novamente. |
Se o navegador abrir e autenticar corretamente, mas o script falhar em seguida, provavelmente o problema não está no cookie. Vamos analisar o problema. tratamento de exceções em Selenium é o caminho mais rápido a partir desse ponto, e um dedicado Firefox profile é a alternativa usual quando se deseja que os dados da sessão sobrevivam sem nenhum arquivo.


