如何在 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 的帮助下,您可以避免在服务器上反复输入用户名和密码进行验证,从而节省大量时间。