如何在 Selenium WebDriver 中处理 Cookies
HTTP cookie 包含有关用户及其偏好的信息。它使用键值对存储信息。它是从 Web 应用程序发送并存储在 Web 浏览器中的一小段数据,当用户浏览该网站时。
点击此处了解cookie 测试。
Selenium Cookie 查询命令
在 Selenium Webdriver 中,我们可以使用以下内置方法查询和与 cookie 交互
| Selenium 查询命令 | 输出 |
|---|---|
driver.manage().getCookies(); |
返回所有 Cookie 的列表 |
driver.manage().getCookieNamed(arg0); |
根据名称返回特定 cookie |
driver.manage().addCookie(arg0); |
创建并添加 cookie |
driver.manage().deleteCookie(arg0); |
删除特定 cookie |
driver.manage().deleteCookieNamed(arg0); |
根据名称删除特定 cookie |
driver.manage().deleteAllCookies(); |
删除所有 cookie |
为什么要在 Selenium 中处理(接受)Cookie?
每个 cookie 都关联一个名称、值、域、路径、过期时间以及它是否安全的状态。为了验证客户端,服务器会解析 cookie 中的所有这些值。
在使用 selenium web driver测试Web 应用程序时,您可能需要创建、更新或删除 cookie。
例如,当自动化在线购物应用程序时,您可能需要自动化诸如提交订单、查看购物车、支付信息、订单确认等测试场景。
如果未存储 cookie,则每次执行上述测试场景之前都需要执行登录操作。这将增加您的编码工作量和执行时间。
解决方案是将 cookie 存储在一个文件中。然后,从该文件中检索 cookie 的值并添加到您当前的浏览器会话中。因此,您可以跳过每个测试用例中的登录步骤,因为您的驱动程序会话中包含此信息。
应用程序服务器现在将您的浏览器会话视为已认证,并直接将您带到请求的 URL。
如何在 Selenium 中处理 Cookie
我们将使用 https://demo.guru99.com/test/cookie/selenium_aut.php 进行演示。
这将是一个两步过程。
步骤 1) 登录应用程序并存储生成的身份验证 cookie。
步骤 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 类写入字符流,并使用 BufferedWriter 将文本写入文件以创建名为 Cookies.data 的文件来存储 cookie 信息。
- “Cookies.data”文件存储所有 cookie 信息,包括“名称、值、域、路径”。我们可以检索此信息并登录应用程序,而无需输入登录凭据。
- 运行上述代码后,“Cookie.data”文件将在项目文件夹结构中创建,如以下屏幕所示。打开“Cookie.data”文件,您可以看到 AUT 的登录凭据已以 Cookie 格式保存,请参见以下突出显示的屏幕。
步骤 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 的帮助下,您可以避免在服务器上反复输入用户名和密码进行验证,从而节省大量时间。


