Como lidar com cookies em 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.
Selenium Comandos de consulta para cookies
In Selenium Webdriver, podemos consultar e interagir com cookies com o método integrado abaixo:
Selenium Comandos de consulta | 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 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.
Quando Ensaios 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 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.
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
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
OBSERVAÇÃO: 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 de Selenium Webdriver e, assim, economiza muito tempo.