Selenium自动化测试 -复用浏览器+Cookies复用

文章目录

✨✨✨学习的道路很枯燥,希望我们能并肩走下来!

编程真是一件很奇妙的东西。你只是浅尝辄止,那么只会觉得枯燥乏味,像对待任务似的应付它。但你如果深入探索,就会发现其中的奇妙,了解许多所不知道的原理。知识的力量让你沉醉,甘愿深陷其中并发现宝藏。



本文开始

浏览器复用

1. 复用浏览器作用

复用浏览器好处:

1.自动化测试过程中,需要人为介入场景

如:人为扫描登录等情况

2.提高调试 UI 自动化测试脚本效率

如:可以复用浏览器,再已经登录的页面进行自动化操作

2. 复用已有浏览器-配置步骤

  1. 需要退出当前所有的谷歌浏览器(特别注意)
    包括后台进程中的都需要查看-win环境
  2. 输入启动命令,通过命令启动谷歌浏览器
    前提配置:
    a. 找到 chrome 的启动路径(下一页 ppt)s
    b. 配置环境变量(下一页 ppt)
  3. 验证是否启动成功

启动命令:

windows:

bash 复制代码
chrome --remote-debugging-port=9222

mac:

bash 复制代码
Google\ Chrome --remote-debugging-port=9222

【注】想要代码中复用浏览器,必须先启动浏览器

验证启动成功命令

浏览器输入:localhost:9222

如果页面显示空白,不是错误提示,代表启动成功;

浏览器环境变量配置

windows 环境变量配置:
  1. 获取chrome启动路径
  2. 配置环境变量-将chrome浏览器路径配置到系统环境变量中(win-path路径中)
  3. 重启命令行,执行命令验证(也就是执行-chrome --remote-debugging-port=9222)

【注】前提-win 需要关闭谷歌浏览器全部进程

Mac 环境变量配置

1.获取启动路径(注意:使用 tab 键,不要手动输入)

2.将启动路径配置到环境变量中

bash 复制代码
export PATH=$PATH:/Applications/Google\ Chrome.app/Contents/MacOS

复用浏览器适用场景

场景 1:

企业微信登录无法通过输入用户名密码的方式解决登录问题,后面所有的脚本都无法执行。

解决方案:

通过 remote 复用浏览器人工登录企业微信,不用多次登录,后面的脚本自动执行。

场景 2:

编写自动化测试脚本过程中,用例的某一步骤出现问题。调试时需要将此步骤前面所有的步骤执行完成之后再复现调试。

解决方案:

使用复用浏览器的方式,使浏览器到执行的某个步骤(跳过前面的自动化执行步骤),轻松复现出问题的场景,只对问题行代码进行调试(不用重复登录等过程);

3. 代码中复用已有浏览器

python代码中配置:

【注】前提:需要命令行执行浏览器启动命令,再在代码中使用命令,不然不生效代码;

python 复制代码
from selenium.webdriver.chrome.options import Options
option = Options()
option.debugger_address = "localhost:9222"
self._driver = webdriver.Chrome(options=option)
self._driver.get("https://work.weixin.qq.com/wework_admin/frame")

java代码中配置

【注】前提:需要命令行执行浏览器启动命令,再在代码中使用命令,不然不生效代码;

java 复制代码
public class RemoteTest {
    @Test
    void remoteLogin(){
        // 1.设置chromeOptions实例对象
        ChromeOptions chromeOptions = new ChromeOptions();
        // 2.配置debug地址
        chromeOptions.setExperimentalOption("debuggerAddress","localhost:9222");
        // 3.初始化浏览器并添加配置信息
        WebDriver driver = new ChromeDriver(chromeOptions);
        driver.get("https://baidu.com/");
    }
}

2. Cookie的复用

Cookie 是一些认证数据信息,存储在电脑的浏览器上,每次请求会带上Cookie信息,服务器会验证相遇Cookie;

使用Cookie自动化登录的理由

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

Cookie复用流程

添加前置依赖

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>

Java代码实现Cookie复用

核心:

获取 cookie driver.manage().getCookies();

添加 cookie driver.manage().addCookie()

java 复制代码
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.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.ExpectedConditions;
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;
import static java.lang.Thread.sleep;

public class CookieTest {
    private static ChromeDriver driver;
    private static WebDriverWait wait;
    final ObjectMapper mapper = new ObjectMapper(new YAMLFactory());

    @BeforeAll
    static void setupClass(){
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        driver = new ChromeDriver(options);
        wait = new WebDriverWait(driver,Duration.ofSeconds(30));
    }

    @AfterAll
    static void afterAll() throws InterruptedException {
        Thread.sleep(10000);
        driver.quit();
    }
    // Cookie读取的步骤
    @Test
    public void saveCookies() throws IOException {
        // 1. 访问企业微信登陆页面
        driver.get("https://work.weixin.qq.com/wework_admin/loginpage_wx");
        // 2. 手动扫码登录,确定成功跳转页面
        // 3. 显式等待判断当前的url不等于前面获取的url
        // wait.until(webDriver -> !webDriver.getCurrentUrl().equals(url));
		//验证页面url包含路径xxx
        wait.until(ExpectedConditions.urlContains("https://work.weixin.qq.com/wework_admin/frame"));

        // 4. 登录成功后获取当前的cookie信息
        Set<Cookie> cookies = driver.manage().getCookies();
        // 5. 将获取的Cookie写入cookie文件
        mapper.writeValue(new File("cookies.yaml"), cookies);
    }
    // Cookie写入的步骤
    @Test
    void loadCookies() throws IOException {
        //1.访问企业微信登陆页面
        driver.get("https://work.weixin.qq.com/wework_admin/loginpage_wx");
        //2.从yaml文件读取cookies信息
        TypeReference<List<HashMap<String,Object>>> typeRef = new TypeReference<>(){};
        List<HashMap<String, Object>> cookies = mapper.readValue(new File("cookies.yaml"), typeRef);
        //3.将cookies信息使用add方法添加到浏览器中
        cookies.stream().forEach(cookie -> {
            driver.manage().addCookie(new Cookie(
                    cookie.get("name").toString(),
                    cookie.get("value").toString()
            ));
        });
        //4.刷新页面
        driver.navigate().refresh();
    }

【注】如果存储的 Cookie 来自多个不同网站,而只想恢复特定网站(如企业微信)的登录状态时使用。

java 复制代码
// 使用过滤
.filter(cookie -> cookie.get("domain").toString().
                contains("work.weixin.qq.com"))

总结

✨✨✨各位读友,本篇分享到内容是否更好的帮助你理解,如果对你有帮助给个👍赞鼓励一下吧!!
🎉🎉🎉世上没有绝望的处境,只有对处境绝望的人。
🎉🎉🎉一遇挫折就灰心丧气的人,永远是个失败者。而一向努力奋斗,坚韧不拔的人会走向成功。
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

相关推荐
南通DXZ21 小时前
Python爬虫进阶:Selenium模拟真人操作(解决反爬+动态网页)
爬虫·python·selenium
123过去21 小时前
samdump2使用教程
linux·测试工具·安全
愈努力俞幸运21 小时前
核cpu,核gpu,芯片,核数,主频,集成显卡,独立显卡,显存,内存
经验分享
测试19981 天前
使用Python自动化生成接口测试用例
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
卡梅德生物科技小能手1 天前
[CD33(Siglec-3)] 靶点技术深度解析:免疫抑制机制、ADC药物开发与临床转化
经验分享·深度学习·生活
中屹指纹浏览器1 天前
2026多账号运营的零信任架构:指纹浏览器与网络安全的深度融合实践
经验分享·笔记
LaughingZhu2 天前
Product Hunt 每日热榜 | 2026-04-03
数据库·人工智能·经验分享·神经网络·chatgpt·语音识别
lifewange2 天前
Cypress是什么
测试工具