HTTP cookie由有关用户及其首选项的信息组成。它是用户在浏览网站时从Web应用程序发送并存储在Web浏览器中的一小段数据。
单击此处了解有关Cookie测试的信息。
在本教程中,将学习-
- cookie的Selenium查询命令
- 为什么要处理含Selenium的饼干呢?
- 演示:Selenium中的Cookie处理。
- 步骤1)存储cookie信息。
- 步骤2)使用存储的cookie登录应用。
cookie的Selenium查询命令
在Selenium Webdriver中,我们可以通过以下内置方法来查询和交互cookie:
driver.manage().getCookies(); // Return The List of all Cookies
driver.manage().getCookieNamed(arg0); //Return specific cookie according to name
driver.manage().addCookie(arg0); //Create and add the cookie
driver.manage().deleteCookie(arg0); // Delete specific cookie
driver.manage().deleteCookieNamed(arg0); // Delete specific cookie according Name
driver.manage().deleteAllCookies(); // Delete all cookies
为什么要处理含Selenium的饼干呢?
每个Cookie都与名称、值、域、路径、过期时间以及是否安全的状态相关联。为了验证客户端,服务器解析Cookie中的所有这些值。
在使用Selenium Web驱动程序测试Web应用程序时,可能需要创建、更新或删除cookie。
例如,当自动化在线购物应用程序时,可能需要自动化测试场景,如下订单、查看购物车、支付信息、订单确认等。
如果没有存储Cookie,则在执行上面列出的测试场景之前,每次都需要执行登录操作。这将增加编码工作量和执行时间。
解决方案是将Cookie存储在文件中。稍后,从该文件中检索cookie的值,因此,可以跳过每个测试用例中的登录步骤,因为驱动程序会话中包含此信息。
应用程序服务器现在将浏览器会话视为经过身份验证,并直接将带到所求的URL。
演示:Selenium中的Cookie处理。
我们将使用http://www.itxiaonv.com/test/cookie/selenium_aut.php进行演示。
这将是一个2步的过程。
步骤1)登录应用程序,保存生成的认证cookie。
步骤2)使用存储的cookie,在不使用userid和密码的情况下再次登录应用。
步骤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("http://www.itxiaonv.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(“http://www.itxiaonv.com/test/cookie/selenium_aut.php”) 访问网站
- 登录到应用程序
- 使用以下命令读取Cookie信息
Java driver.manage().getCookies();
-
使用FileWriter类写入字符流,使用BufferedWriter将文本写入文件以创建Cookies.data文件来存储Cookie信息
- “Cookies.data”文件存储所有Cookie信息以及“Name,Value,Domain,Path”。我们可以检索此信息并登录到应用程序,而无需输入登录凭据。
-
一旦运行上面的代码,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("http://www.itxiaonv.com/test/cookie/selenium_aut.php");
}
}
输出:无需输入用户ID和密码,即可直接进入登录成功屏幕
注意:如果在执行上述脚本后看到登录页面,使用硬刷新。
结论
因此,可以避免在服务器上输入用户名和密码,从而在Selenium Webdriver的帮助下为每次测试反复验证用户名和密码,从而节省了大量时间。