如何处理 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。
步骤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 格式保存,请参见下面突出显示的屏幕
步骤 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,从而节省了大量时间。