在Selenium WebDriver中处理Cookies-教程

1,715 阅读9分钟

我们大多数人都使用在线平台来做诸如网上购物、支付账单、订票等事情。这些在线平台(或网站)使用cookies来识别何时有新的访问。 说得轻松一点,这些不是你通常在甜点菜单上看到的cookies🙂 这些是计算机cookies(或HTTP cookies或网络cookies)。

简单地说,cookie是一个由你的机器接收的数据包,并在不被改变或更改的情况下送回服务器。例如,当你访问任何网站时,网站会向你的机器发送cookies。由于这些cookies包含信息,它可以帮助网站跟踪你的访问或活动(不放纵你的隐私区)。

gif

来源

网站所有者(例如,在线购物门户网站)在浏览网站时使用cookies来保持对您的购物车的关注。如果没有cookies的存在,每次你在网站上打开一个新的链接时,你的购物车可能会变成空的(或者物品数量会重置为零)。

Selenium cookies可以广泛用于测试自动化项目,在Selenium自动化测试过程中执行与cookie相关的操作。为了实现这一要求,Selenium WebDriver API提供了内置的方法来与cookie进行交互。

在本博客结束时,你将会更好地与Selenium cookies API合作。我们还涵盖了一些常见的操作,如如何在Selenium WebDriver中获取cookie,使用Selenium清除会话cookie,等等。

那么,让我们开始咬住cookie吧🙂

内容表

Cookies简介

Cookies通常用于识别网站上用户的身份。简单地说,cookie是由网络应用程序发送并存储在浏览器中的一部分数据。每当用户浏览一个网站时,有关该用户和他们的收藏夹的信息就会以键值对的形式存储在cookie中。

当用户再次访问该网站时,被存储的信息将被用于识别。

下面是LambdaTest网站使用cookie来识别用户的一个例子。在下面的截图中,你可以看到一个小的弹出窗口,显示了cookies的使用情况。

cross browser testing

  • 名称 - 这个字段包含cookie的名称。
  • 值 - 这个字段包含cookie的值。
  • 域 - 这个字段包含允许接收该cookie的主机。
  • 路径 - 这个字段包含在请求的URL中需要发送Cookie头的URL。
  • Expires / Max-Age - 这个字段包含过期日期或cookie的最大年龄。
  • 大小 - 这个字段包含了cookie的大小。
  • HttpOnly - 这个字段表示该cookie是否必须只通过HTTP使用。
  • 安全 - 这个字段表示cookie只能通过安全的HTTPS连接发送到服务器(设置为真)。
  • SameSite - 这个字段包含如果cookie使用实验性的SameSite属性的值(严格或宽松)。
  • 优先权 - 这个字段包含低、中(默认)或高的值,如果启用了贬值的cookie优先权属性。

website cookies

以下是网站cookies的主要功能。

  1. 跟踪用户的浏览活动
  2. 记忆用户的登录细节
  3. 跟踪网站中的访客数量,进一步帮助网站所有者识别他们每天的独特访客。

为什么要在Selenium Automation WebDriver中处理cookies?

本节揭示了在测试自动化脚本中使用Selenium cookies API的主要原因。在我们的自动化脚本中存储cookie和处理它们的重要方面是为了减少执行和实施的时间。

以我们有多个测试案例的情况为例,每个案例都有登录网站的前提条件。在这种情况下,我们可以存储cookies,然后用于登录目的。这反过来有助于减少执行时间。

Selenium Cookies API简介

Selenium WebDriver为处理网站中的cookies提供了多个命令。这些Selenium cookies API为你提供了互动和查询cookies所需的机制。在Selenium Java中,这些方法是org.openqa.selenium.Cookie包的一部分。

下面是在Selenium中处理cookie的各种方法,可以使用driver.manage()方法访问。

方法

目的

getCookies()

它返回所有Cookie的列表

getCookieNamed("Cookie的名称")

它返回符合作为参数指定的名称的cookie。

addCookie("Cookie")

它创建并添加一个新的cookie

deleteCookie("Cookie")

它删除了一个特定的cookie

deleteCookieName("Cookie的名称")

它删除了与作为参数指定的名称相匹配的cookie

deleteAllCookies

它删除了所有的cookie

行动中的Selenium Cookies API

现在我们已经涵盖了在Selenium WebDriver中处理cookie的基本方面,让我们动手实现一下吧。为了演示在Selenium中处理cookie,我们首先在本地Selenium网格上使用相应的Selenium API。如果你想快速提高你的Selenium技能,请查看我们详细的Selenium WebDriver教程

让我们在脚本中使用LambdaTest主页来了解使用Selenium WebDriver处理cookie的命令。

1.如何在Selenium WebDriver中获取Cookies

如前所述,如果你想获得所有存储的cookies,你可以使用下面的Selenium WebDriver命令。

driver.manage().getCookies()

这将检索到所有存储的cookie的详细信息。下面是一个在Selenium WebDriver中获取cookies的简单脚本。

import java.util.Set;
import java.util.concurrent.TimeUnit;
 
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
 
public class HandleCookies {
    
    public static void main(String args[]) {
 System.setProperty("webdriver.chrome.driver", "ChromeDriver Path");
        WebDriver driver = new ChromeDriver();
        String url ="https://www.lambdatest.com/";
        driver.get(url);
        driver.manage().window().maximize();
        driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
        Set<Cookie> cookiesList =  driver.manage().getCookies();
        for(Cookie getcookies :cookiesList) {
            System.out.println(getcookies);
        }
        driver.close();
    }
}

Cookie信息可以存储在一个文件中,可以用来在没有凭证的情况下登录网站。

要获得某个特定cookie的信息,请使用下面的命令。

driver.manage().getCookieNamed(arg0);

下面是一个简单的脚本,用于获取特定cookie的信息。

import java.util.Set;
import java.util.concurrent.TimeUnit;
 
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
 
public class HandleCookies {
    
    public static void main(String args[]) {
        System.setProperty("webdriver.chrome.driver", "ChromeDriver Path");
        WebDriver driver = new ChromeDriver();
        String url ="https://www.lambdatest.com/";
        driver.get(url);
        driver.manage().window().maximize();
        driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
        
        Cookie cookieValue = driver.manage().getCookieNamed("JSESSIONID");
        System.out.println(cookieValue.getValue());
        
        driver.close();
    }
}

其实现是不言自明的;因此,我们不做相同的代码演练。

2.如何在Selenium WebDriver中添加一个新的Cookie

要添加一个新的cookie,你可以使用以下命令

driver.manage().addCookie(cookieName); //specify the name of the cookie to be added

在添加一个cookie之前,我们必须先创建它并添加值。之后,我们应该传递新创建的cookie的名称。

这里有一个简单的脚本,演示了Selenium cookies API添加一个新的cookie。

import java.util.Set;
import java.util.concurrent.TimeUnit;
 
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
 
public class HandleCookies {
    
    public static void main(String args[]) {
        System.setProperty("webdriver.chrome.driver", "ChromeDriver Path");
        WebDriver driver = new ChromeDriver();
        String url ="https://www.lambdatest.com/";
        driver.get(url);
        driver.manage().window().maximize();
        driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
        
        //For creating a new cookie we should pass the name of the cookie and its value
        Cookie cname = new Cookie("myCookie", "12345678999");
        driver.manage().addCookie(cname);
 
//retrieve the cookies to view the newly added cookie
        Set<Cookie> cookiesList =  driver.manage().getCookies();
        for(Cookie getcookies :cookiesList) {
            System.out.println(getcookies );
        }
        driver.close();
    }
}

一旦你运行这个测试脚本,你就能在输出控制台看到新添加的cookie。

cookies

3.如何在Selenium WebDriver中删除一个cookie

在Selenium WebDriver命令的帮助下,你可以删除一个特定的cookie或删除所有的cookie。

该命令用于删除一个特定的cookie。

driver.manage().deleteCookie(arg0); // Deletes the specific cookie

该命令用于删除使用其名称匹配的特定cookie。

driver.manage().deleteCookieNamed(arg0); // Deletes the specific cookie by its name

该命令用于删除所有的cookie。

driver.manage().deleteAllCookies(); // Deletes all the cookies

下面是同样的脚本,演示了如何删除一个特定的cookie。

下面的脚本演示了如何使用Selenium cookies API来删除所有的cookie。

如何在云Selenium网格上使用Selenium Cookies API

与其在本地Selenium网格上运行Selenium测试,不如在LambdaTest等基于云的Selenium网格上执行同样的测试。在云上进行网站测试有许多好处,因为它有助于实现急需的可扩展性、可靠性和性能。

LambdaTest提供了一个在线云平台,可以轻松地运行你的所有Selenium测试。此外,将使用本地Selenium网格的代码移植到LambdaTest基于云的Selenium网格也很容易。因此,你可以通过将Selenium测试自动化转移到基于云的网格中,最大限度地利用Selenium的并行测试

cross browser testing

一旦你在LambdaTest上创建了一个账户,请注意LambdaTest的个人资料部分中的用户名和访问密钥。用户名和访问密钥的组合被用来访问LambdaTest的远程Selenium网格。这些能力是使用LambdaTest能力生成器生成的。

下面显示的是Selenium cookies API的演示,其执行是在LambdaTest Selenium网格上进行的。

正如上面所看到的,没有任何逻辑上的变化,大部分的实现都没有改变。然而,远程WebDriver取代了本地Selenium WebDriver,用于访问基于云的Selenium Grid。

由于我们在测试套件中有四个测试,我们利用TestNG Selenium的并行测试来实现线程级别的并行性。下面显示的是testng.xml文件,在@Test注解下并行运行测试。此外,你可以在LambdaTest上查看更多的TestNG学习中心,以获得对TestNG框架的深入了解。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="TestSuite" parallel="tests">
<test name="ChromeBrowserTest">
<parameter name="browser" value="chrome"/>
<classes>
<class name="Pages.HandleCookies">
</class>
</classes>
</test>
</suite>

下面是我们在Eclipse中测试的执行状态。

selenium webdriver

要在LambdaTest平台上运行这个测试,请右键单击你在IDE中创建的testng.xml。点击Run As -> TestNG Suite。这样,测试就会在LambdaTest平台上被触发。

下面显示的是控制台输出,这表明测试执行成功了。

webdriver

跳到LambdaTest的自动化仪表板,检查测试执行的状态。

Automation Dashboard on LambdaTest

Automation Dashboard

通过这些,我们已经展示了主要的Selenium cookies API,这些API可以用来对cookies进行操作。

结束了

ezgif.com-gif-maker

总而言之,我们深入研究了cookie的各个方面,它主要用于网站所有者跟踪用户的访问或活动。Selenium提供了一些方法(或API),你可以利用这些方法对cookie进行各种操作。我们演示了如何在Selenium中获取cookie,如何在Selenium中删除所有的cookie,如何删除某个cookie,等等。

与其在本地Selenium网格上进行Selenium自动化测试,建议使用LambdaTest这样基于云的Selenium网格来加快测试执行。它可以让你在2,000多个浏览器和操作系统上大规模地运行Selenium测试。

youtube channel

我希望你觉得这篇文章非常有用,信息量大。我很想听听你是如何将Selenium cookies API用于大规模网站(或网络应用)的。请随时与你的朋友和同事分享这个博客。

测试愉快...!

常见的问题

什么是Selenium中的cookie?

Cookie是当你访问某些网站时存储在你电脑上的一个小文件。Cookie用于收集和存储有关你如何与我们的网站互动的信息,并允许我们记住你,即使你在以后的时间返回到网站。

Selenium可以操纵cookies吗?

Selenium提供捕捉、操纵和设置cookies的功能。它还提供了检查某个cookie是否存在的功能。你可以使用以下方法与Selenium cookies互动和查询。

  • .getCookies()- 返回所有cookies的列表
  • .getCookieNamed("cookie name")- 根据cookie的名字返回cookie
  • .addCookie("cookie")- 创建并添加一个cookie
  • .deleteCookie("cookie")- 删除一个cookie
  • .deleteCookieName("cookie name")- 基于它的名字删除cookie
  • .deleteAllCookies- 删除所有的cookie

Lt现在就把你的网站测试自动化,申请100分钟免费测试

开始免费测试

X