Selenium WebDriver中的Cookie处理

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格式保存的,见下图高亮显示的屏幕

Cookie Handling in Selenium WebDriver
Cookie Handling in Selenium WebDriver

步骤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的帮助下为每次测试反复验证用户名和密码,从而节省了大量时间。

IT赶路人

专注IT知识分享