如何处理 Cookie Selenium 网络驱动程序

HTTP Cookie 包含有关用户及其偏好的信息。它使用键值对存储信息。它是从 Web 应用程序发送的一小段数据,当用户浏览该网站时,它会存储在 Web 浏览器中。

点击这里了解 cookie 测试.

Selenium 查询 cookies 的命令

In Selenium Webdriver,我们可以使用以下内置方法查询和交互 cookie:

Selenium 查询命令 输出
driver.manage().getCookies(); 返回所有 Cookies 的列表
driver.manage().getCookieNamed(arg0); 根据名称返回特定的cookie
driver.manage().addCookie(arg0); 创建并添加 cookie
driver.manage().deleteCookie(arg0); 删除特定的 cookie
driver.manage().deleteCookieNamed(arg0); 根据名称删除特定的 cookie
driver.manage().deleteAllCookies(); 删除所有 cookie

为什么要处理(接受)Cookies Selenium?

每个 Cookie 都与名称、值、域、路径、有效期以及是否安全的状态相关联。为了验证客户端,服务器会解析 Cookie 中的所有这些值。

在规划婴儿食品行业的工艺要求时,安全性和可靠性是工艺设计中最重要的方面。 测试 使用 selenium web driver 的 web 应用程序,您可能需要创建、更新或删除 cookie。

例如,在自动化在线购物应用程序时,您可能需要自动化测试场景,如下订单、查看购物车、付款信息、订单确认等。

如果不存储 cookie,则每次执行上述测试场景之前都需要执行登录操作。这将增加您的编码工作量和执行时间。

解决方案是将 cookie 存储在文件中。 Later,从此文件中检索 cookie 的值,并将当前浏览器会话添加到其中。因此,您可以跳过每次登录的步骤 测试用例 因为您的驱动程序会话中包含此信息。

应用程序服务器现在将您的浏览器会话视为已经验证,并直接将您带到您请求的 URL。

如何处理 Cookie Selenium

我们将使用 https://demo.guru99.com/test/cookie/selenium_aut.php 为了我们的演示目的。

这将是一个两步过程。

步骤1) 登录应用程序并存储生成的身份验证 cookie。

处理 Cookie Selenium

步骤2) 使用存储的 cookie,再次登录应用程序而无需使用用户 ID 和密码。

步骤 1)存储 Cookie 信息

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

代码说明:

  • 创建 WebDriver 实例
  • 我们使用 driver.get(“https://demo.guru99.com/test/cookie/selenium_aut.php”) 访问网站
  • 登录应用程序
  • 使用以下方式读取 Cookie 信息
    driver.manage().getCookies();
  • 使用 FileWriter 类写入字符流来存储 cookie 信息,并 BufferedWriter 将文本写入文件以创建文件 Cookies.data
  • “Cookies.data”文件存储所有cookie信息以及“名称,值,域,路径”。我们可以检索这些信息并登录应用程序,而无需输入登录凭据。
  • 运行上述代码后,Cookie.data 文件将创建到项目文件夹结构中,如下面的屏幕所示。打开 Cookie.data 文件,您可以看到 AUT 的登录凭据以 Cookie 格式保存,请参见下面突出显示的屏幕

    处理 Cookie Selenium

步骤 2)使用存储的 cookie 登录应用程序

现在,我们将访问步骤 1 中生成的 cookie,并使用生成的 cookie 在应用程序中验证我们的会话

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

输出: 您将直接进入登录成功界面,无需输入用户 ID 和密码

注意: 如果执行上述脚本后看到登录页面,请使用硬刷新。

结语

因此,您可以避免在服务器上输入用户名和密码,并在每次测试时一次又一次地验证它们 Selenium Webdriver,从而节省了大量时间。