首页 > 其他分享 >22.Web自动化测试之Cookie登录

22.Web自动化测试之Cookie登录

时间:2023-12-29 14:13:33浏览次数:31  
标签:Web 22 get driver yaml cookie import Cookie com

 
  • Cookie 是一些认证数据信息,存储在电脑的浏览器上
  • 当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息

为什么要使用Cookie自动化登录

 
  • 复用浏览器仍然在每次用例开始都需要人为介入
  • 若用例需要经常执行,复用浏览器则不是一个好的选择
  • 大部分cookie的时效性都很长,扫一次可以使用多次

思路

 

常见问题

 
  1. 企业微信cookie有互踢机制。在获取cookie成功之后。不要再进行扫码操作!!!!
  2. 获取cookie的时候,即执行代码获取cookie时,一定要确保已经登录
  3. 植入cookie之后需要进入登录页面,刷新验证是否自动登录成功。

代码(Python)

 
  • 获取 cookie driver.get_cookies()
  • 添加 cookie driver.add_cookie(cookie)

class TestCookieLogin:
    def setup_class(self):
        self.drvier = webdriver.Chrome()

    def test_get_cookies(self):
        # 1. 访问企业微信主页/登录页面
        self.drvier.get("https://work.weixin.qq.com/wework_admin/frame#contacts")
        # 2. 等待20s,人工扫码操作
        time.sleep(20)
        # 3. 等成功登陆之后,再去获取cookie信息
        cookie = self.drvier.get_cookies()
        # 4. 将cookie存入一个可持久存储的地方,文件
        # 打开文件的时候添加写入权限
        with open("cookie.yaml", "w") as f:
            # 第一个参数是要写入的数据
            yaml.safe_dump(cookie, f)

    def test_add_cookie(self):
        # 1. 访问企业微信主页面
        self.drvier.get("https://work.weixin.qq.com/wework_admin/frame#contacts")
        # 2. 定义cookie,cookie信息从已经写入的cookie文件中获取
        cookie = yaml.safe_load(open("cookie.yaml"))
        # 3. 植入cookie
        for c in cookie:
            self.drvier.add_cookie(c)
        time.sleep(3)
        # 4.再次访问企业微信页面,发现无需扫码自动登录,而且可以多次使用
        self.drvier.get("https://work.weixin.qq.com/wework_admin/frame#contacts")

代码(Java)

 
  • 获取 cookie driver.manage().getCookies();
  • 添加 cookie driver.manage().addCookie()
/**
 * @Author: 霍格沃兹测试开发学社
 * @Desc: '更多测试开发技术探讨,请访问:https://ceshiren.com/t/topic/15860'
 */
package com.ceshiren.hogwarts;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.io.File;
import java.io.IOException;
import java.time.Duration;
import java.util.HashMap;
import java.util.List;
import java.util.Set;

public class CookieTest {

    private static ChromeDriver driver;
    private static WebDriverWait wait;
    final ObjectMapper mapper = new ObjectMapper(new YAMLFactory());

    @BeforeAll
    public static void beforeAll() {
        driver = new ChromeDriver();
        driver.get("https://work.weixin.qq.com/wework_admin/frame");
        wait = new WebDriverWait(driver, Duration.ofSeconds(1000));
    }
    @AfterAll
    public static void afterAll() throws InterruptedException {
        Thread.sleep(10000);
        driver.quit();
    }
    // Cookie读取的步骤
    @Test
    public void saveCookies() throws IOException {
        // 1. 获取当前的url
        String url = driver.getCurrentUrl();
        // 2. 扫码跳转页面
        // 3. 显式等待判断当前的url不等于前面获取的url
        wait.until(webDriver -> !webDriver.getCurrentUrl().equals(url));
        // 4. 登录成功后获取当前的cookie信息
        Set<Cookie> cookies = driver.manage().getCookies();
        // 5. 写入cookie
        mapper.writeValue(new File("cookies.yaml"), cookies);
    }
    // Cookie写入的步骤
    @Test
    public void loadCookies() throws IOException {
        // 1.声明一个泛型
        TypeReference<List<HashMap<String, Object>>> typeReference = 
                new TypeReference<>() {};
        // 2. 从yaml中获取cookies
        List<HashMap<String, Object>> cookies =
                mapper.readValue(new File("cookies.yaml"), 
                        typeReference);
        cookies.stream()
        // 找到domain包含work.weixin.qq.com
        .filter(cookie -> cookie.get("domain").toString().
                contains("work.weixin.qq.com"))
        .forEach(cookie -> {
            driver.manage().addCookie(
                new Cookie(cookie.get("name").toString(), 
                        cookie.get("value").toString()));
        });
        // 4. 刷新页面,登录成功
        driver.navigate().refresh();
    }
}

yaml相关依赖

 
<properties>
  <!--对应解析-->
  <jackson.version>2.13.1</jackson.version>
</properties>

<dependencies>
  <!--        yaml文件解析-->
  <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson.version}</version>
  </dependency>
  <dependency>
      <groupId>com.fasterxml.jackson.dataformat</groupId>
      <artifactId>jackson-dataformat-yaml</artifactId>
      <version>${jackson.version}</version>
  </dependency>
</dependencies>

标签:Web,22,get,driver,yaml,cookie,import,Cookie,com
From: https://www.cnblogs.com/csfsz/p/17934748.html

相关文章

  • 如何保障Cookie的信息安全
    一、支持策略保障Cookie的安全性可以从以下几个方面进行:1.1使用HttpOnly属性设置HttpOnly属性可以防止JavaScriptDocument.cookieAPI无法访问带有HttpOnly属性的cookie;此类Cookie仅作用于服务器。例如,持久化服务器端会话的Cookie不需要对JavaScript可用,而应......
  • python_使用selenium进行webui测试的浏览器驱动安装步骤
    以chrome浏览器为例。(前提是:python和pycharm安装成功,且能正常运行)1、查看chrome浏览器的版本方式一:打开Chrome浏览器。在浏览器右上角,点击三个点的图标。在弹出的菜单中,选择“设置”。在设置页面中,滚动到底部,点击“关于Chrome”。在关于Chrome页面中,你可以看到C......
  • Windows 10 on ARM, version 22H2 (updated Nov 2023) ARM64 AArch64 中文版、英文版
    Windows10onARM,version22H2(updatedNov2023)ARM64AArch64中文版、英文版下载基于ARM的Windows10作者主页:sysin.orgWindows10,version22H2(releasedNov2021)ARM64ChineseSimplifiedWindows10,version22H2(releasedNov2021)ARM64ChineseTraditiona......
  • VMware NSX Advanced Load Balancer (NSX ALB) 22.1.5 - 多云负载均衡平台
    VMwareNSXAdvancedLoadBalancer(NSXALB)22.1.5-多云负载均衡平台应用交付:多云负载均衡、Web应用防火墙和容器Ingress服务作者主页:sysin.org负载均衡平台NSXAdvancedLoadBalancerNSXAdvancedLoadBalancer(Avi)可简化应用交付,并提供多云负载均衡、Web应用防火墙......
  • 时序数据库的深入浅出介绍(2022)
    时序数据库是一类专门用于存储和分析时间序列数据的数据库。时间序列数据通常包含时间戳和对应的指标值,用于监控和分析某个目标的变化趋势。时序数据库需要高效存储大量时间序列数据,并支持相关的分析与运算,如聚合、下采样、滚动窗口等。起源时序数据库的起源可以追溯到20世纪70......
  • 深入浅出几款开源时序数据的设计(2022)
    InfluxdbInfluxDB是一款流行的开源时序数据库,用于存储和分析时间序列数据。在InfluxDB中,时间序列数据通过Measurement、Tag和Field来表示。Measurement:相当于数据表,用于归档某一类相关时序数据。例如可以有CPUmeasurement和Memorymeasurement。Measurement只包含时序字段,没......
  • 【五期杨志】CCF-A(CVPR'22) Dual-Key Multimodal Backdoors for Visual Question Answe
    WalmerM,SikkaK,SurI,etal.Dual-KeyMultimodalBackdoorsforVisualQuestionAnswering[C]//ProceedingsoftheIEEE/CVFConferenceonComputerVisionandPatternRecognition(CVPR).2022:15375-15385.  目前多模态学习在多种领域方面取得了重要进展,但......
  • 09.web 浏览器控制
    目录 打开网页刷新回退最大化最小化浏览器控制 模拟功能测试中对浏览器的操作 操作使用场景get打开浏览器web自动化测试第一步refresh浏览器刷新模拟浏览器刷新back浏览器退回模拟退回步骤maximize_window最大化浏览器模拟浏览器......
  • Asp.net WebApi Swagger Tag 标记分组归纳显示Api接口路由
    官方文档说明地址https://swagger.io/docs/specification/2-0/grouping-operations-with-tags/创建一个自定义的特性类publicclassControllerGroupAttribute:Attribute{publicControllerGroupAttribute(stringgroupName){if......
  • Ubuntu22.04上使用systemctl命令配置开机自启动服务、脚本、命令
    systemctl介绍systemctl是Linux系统上用于管理系统服务(systemd单元)的命令行工具。它可以用来启动、停止、重启、禁用、启用、查询和管理系统服务的状态。以下是一些常用的systemctl命令:systemctlstartservicename:启动一个服务。systemctlstopservicename:停止一个服务。s......