Cómo manejar las cookies en Selenium Controlador web
⚡ Resumen inteligente
Las cookies almacenan las preferencias del usuario y los identificadores de sesión como pares clave-valor, y Selenium WebDriver puede leerlos, guardarlos y reproducirlos, de modo que una prueba automatizada omite la pantalla de inicio de sesión en cada ejecución posterior.
Una cookie HTTP contiene información sobre el usuario y sus preferencias. Almacena información mediante pares clave-valor. Se trata de un pequeño archivo de datos que una aplicación web envía y que se guarda en el navegador mientras el usuario navega por ese sitio web.
Si eres nuevo en el tema, comienza con esta guía para prueba de cookies.
Selenium Comandos de consulta para cookies
In Selenium En WebDriver, podemos consultar e interactuar con las cookies mediante los métodos integrados que se describen a continuación. A cada uno de ellos se accede a través de driver.manage(), que devuelve la interfaz Options.
| Selenium Comandos de consulta | Resultado |
|---|---|
| controlador.manage().getCookies(); | Devuelve la lista de todas las cookies. |
| controlador.manage().getCookieNamed(arg0); | Devuelve una cookie específica según su nombre. |
| controlador.manage().addCookie(arg0); | Crea y añade la cookie |
| controlador.manage().deleteCookie(arg0); | Elimina una cookie específica |
| controlador.manage().deleteCookieNamed(arg0); | Elimina una cookie específica según su nombre. |
| controlador.manage().deleteAllCookies(); | Elimina todas las cookies |
¿Por qué manejar (aceptar) cookies en Selenium?
Cada cookie está asociada con un nombre, valor, dominio, ruta, caducidad y el estado de si es segura o no. Para validar un cliente, un servidor analiza todos estos valores en una cookie.
Cuando las pruebas una aplicación web que utiliza Selenium Con WebDriver, es posible que necesite crear, actualizar o eliminar una cookie.
Por ejemplo, al automatizar una tienda online.ping En la aplicación, es posible que necesite automatizar escenarios de prueba como realizar un pedido, ver el carrito, la información de pago, la confirmación del pedido, etc.
Si no se almacenan las cookies, deberá iniciar sesión cada vez antes de ejecutar los escenarios de prueba mencionados anteriormente. Esto aumentará el esfuerzo de codificación y el tiempo de ejecución.
La solución consiste en almacenar las cookies en un archivo. Later, recupera los valores de la cookie de este archivo y agrégalos a tu sesión actual del navegador. Como resultado, puedes omitir los pasos de inicio de sesión en cada caso de prueba porque su sesión de conductor contiene esta información.
El servidor de la aplicación ahora trata su sesión del navegador como autenticada y lo lleva directamente a la página solicitada. URL.
Cómo manejar las cookies en Selenium
Usaremos https://demo.guru99.com/test/cookie/selenium_aut.php para nuestro propósito de demostración.
Este será un proceso de 2 pasos.
Paso 1) Inicie sesión en la aplicación y guarde la cookie de autenticación generada.
La aplicación de demostración presenta el formulario de inicio de sesión simple que se muestra a continuación.
Paso 2) Utilice la cookie almacenada para iniciar sesión en la aplicación nuevamente sin usar un nombre de usuario y contraseña.
Paso 1) Almacenamiento de información 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 de versión: La línea System.setProperty se mantiene exactamente como la escribió el tutorial original. Desde Selenium 4.6 en adelante, Selenium El administrador descarga y configura automáticamente el chromedriver correspondiente, por lo que esa línea ya no es necesaria en la configuración actual. El código original se mantiene sin cambios a continuación y sigue compilando.
Code Explicación
- Crea una instancia de WebDriver.
- Visite el sitio web usando driver.get(“https://demo.guru99.com/test/cookie/selenium_aut.php”).
- Inicia sesión en la aplicación.
- Lea la información de las cookies usando
driver.manage().getCookies();
- Almacenar la información de las cookies utilizando el archivoWriter clase para escribir secuencias de caracteres y BufferedWriter escribir el texto en un archivo llamado Cookies.data.
- El archivo Cookies.data almacena toda la información de las cookies, incluyendo el nombre, el valor, el dominio y la ruta. Podemos recuperar esta información e iniciar sesión en la aplicación sin necesidad de introducir las credenciales.
Una vez ejecutado el código anterior, se crea el archivo Cookies.data en la estructura de carpetas del proyecto. Abra el archivo y podrá ver las credenciales de inicio de sesión de la aplicación bajo prueba guardadas en formato de cookie, como se muestra en la captura de pantalla resaltada a continuación.
Paso 2) Usar la cookie almacenada para iniciar sesión en la aplicación
Ahora, accederemos a la cookie generada en el paso 1 y la utilizaremos para autenticar nuestra sesión en la aplicación.
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: Se le redirige directamente a la pantalla de inicio de sesión exitoso sin necesidad de introducir el nombre de usuario ni la contraseña.
NOTA: Utilice la función de actualización forzada en caso de que vea la página de inicio de sesión después de ejecutar el script anterior.
⚠️ Java Nota: El script del lector utiliza `new Boolean(String)` y `new Date(String)`, funciones que el JDK dejó de usar hace mucho tiempo. En un JDK moderno, las equivalentes son `Boolean.parseBoolean(token.nextToken())` y un analizador `java.time`. Las líneas originales se conservan arriba; considere esta nota como la sustitución moderna, no como una edición.
Atributos de cookies y la Selenium Clase de galletas
Los dos scripts anteriores transfieren seis campos dentro y fuera de un archivo. Esos campos son exactamente los que expone la clase org.openqa.selenium.Cookie, y conocerlos facilita enormemente la lectura del bucle del tokenizador en el paso 2.
| Atributo | Accesor | Qué significa |
|---|---|---|
| Nombre | getName () | La clave que busca el servidor, por ejemplo JSESSIONID. |
| Valor | getValue () | Los datos almacenados, normalmente el identificador de sesión. |
| Dominio | obtenerDominio() | El host al que el navegador enviará la cookie. |
| Path | obtenerRuta() | El URL prefijo al que se aplica la cookie. |
| Expiración | getExpiry () | La fecha en que caduca la cookie. Un valor nulo significa que se trata de una cookie de sesión. |
| Seguro | isSecure() | Esto es cierto cuando la cookie solo se envía a través de HTTPS. |
| HttpOnly | isHttpOnly() | Verdadero cuando JavaEl script de la página no puede leer la cookie. |
| MismoSitio | obtenerMismoSitio() | Estricto, laxo o ninguno. Añadido en Selenium 4. |
En lugar del constructor de seis argumentos utilizado en el paso 2, el código actual suele crear una cookie a través de la clase interna Builder, que permite configurar solo los campos que interesan.
Cookie sessionCookie = new Cookie.Builder("JSESSIONID", "A1B2C3D4") .domain("demo.guru99.com") .path("/") .isSecure(true) .isHttpOnly(true) .build(); driver.manage().addCookie(sessionCookie);
Hay una regla que suele confundir a la mayoría: una cookie no se puede editar después de su creación. Para cambiar un valor, hay que eliminar la cookie antigua y añadir una copia nueva, por eso Builder es tan ú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);
Errores comunes de cookies en Selenium WebDriver y cómo solucionarlos
El código de las cookies suele fallar de maneras predecibles. La siguiente tabla enumera las fallas más frecuentes, junto con su causa y la solución.
| Síntoma | Causa | Solución |
|---|---|---|
| InvalidCookieDomainException | Se llamó a addCookie antes de navegar al sitio, por lo que el navegador todavía está en about:blank. | Primero, llama a driver.get en el dominio de destino y luego agrega la cookie. |
| Excepción no configurable | El dominio de la cookie no coincide con la página cargada actualmente. | Elimine el campo de dominio o configúrelo con el host exacto de la página abierta. |
| La página de inicio de sesión sigue apareciendo después de añadir la cookie. | La página se generó antes de que existiera la cookie. | Llama a driver.navigate().refresh(), que es lo que la NOTA anterior quiere decir con una actualización forzada. |
| getCookieNamed devuelve null | El nombre está mal escrito o la cookie pertenece a una ruta o subdominio diferente. | Extrae todas las cookies con getCookies y compara los nombres. |
| La cookie almacenada se rechaza en una ejecución posterior. | El plazo de caducidad ha expirado o el servidor ha finalizado la sesión. | Regenera el archivo Cookies.data ejecutando de nuevo el Paso 1. |
Si el navegador se abre y se autentica correctamente, pero el script falla después, es probable que la cookie no sea la culpable. Trabajando a través de manejo de excepciones en Selenium es la ruta más rápida desde ese punto, y un dedicado Firefox perfiles Es la alternativa habitual cuando se desea que los datos de la sesión se conserven sin necesidad de un archivo.


