HOWTO: 保持浏览器登录状态

在 Web 应用的自动化测试中,很多场景都需要先完成用户登录,才能继续后续操作。如果每次录制脚本时都要重复输入账号和密码,不仅效率低,还容易造成脚本维护的繁琐。为此,CukeTest 在 Web 录制设置 中提供了 user-data-dir 录制参数,用于指定浏览器的用户数据目录,从而简化此类流程。

功能介绍

通过 user-data-dir 参数,您可以为浏览器指定一个本地目录,作为其用户数据存储位置。浏览器会自动将 Cookies、登录凭证以及会话信息保存到该目录中。

这意味着您只需在第一次录制时手动完成一次登录,之后在同一目录下再次录制时,就能自动保持登录状态,无需重复输入账号密码。这一功能对于需要身份认证的 Web 应用测试非常实用。

使用场景

  • 企业内部系统:如 OA、CRM、ERP 等需要统一账号登录的系统。
  • 第三方平台:如 GitHub、GitLab、Jira 等 SaaS 服务。
  • 电商或会员网站:测试购物车、订单、支付等流程时,避免频繁重复登录。

在这些场景下,使用 user-data-dir 能显著缩短测试准备时间,提升脚本录制与执行效率。

配置方法

您可以在 Web 录制设置 中直接添加 user-data-dir 参数,并指定一个本地目录。例如:

配置user-data-dir参数

  • 目录路径可以是任意本地文件夹。若该目录不存在,浏览器会自动创建。
  • 每个目录代表一份独立的用户数据,可以根据不同测试账号或环境配置多个目录。
  • 请勿直接配置Chrome的默认用户目录(例如 C:\Users\<用户名>\AppData\Local\Google\Chrome\User Data),否则可能导致浏览器冲突或自动化脚本异常。建议始终为测试准备独立目录。

配置完成后,再次启动录制,浏览器会读取该目录中的 Cookies 和登录状态,实现自动保持登录。

代码示例

除了在 IDE 中配置外,您也可以在自动化脚本中直接指定 user-data-dir,方式是使用 持久化上下文 (Persistent Context) 来启动浏览器。

JavaScript
Python
const { chromium } = require('leanpro.web');

(async () => {
    const userDataDir = "C:/cuketest/browser-data"; // 指定用户数据目录
    const executablePath = "C:/Program Files/Google/Chrome/Application/chrome.exe"; // Chrome路径

    const browser = await chromium.launchPersistentContext(userDataDir, {
        headless: false,
        executablePath: executablePath
    });

    const page = await browser.newPage();
    await page.goto("https://example.com"); // 登录一次后,后续会保持状态

    await browser.close();
})();
from leanproWeb import WebAuto

user_data_dir = "C:/cuketest/browser-data"  # 指定用户数据目录
executable_path = "C:/Program Files/Google/Chrome/Application/chrome.exe"  # Chrome路径

browser = WebAuto().__enter__().chromium.launch_persistent_context(
    user_data_dir=user_data_dir,
    headless=False,
    executable_path=executable_path
)

page = browser.new_page()
page.goto("https://example.com")  # 登录一次后,后续会保持状态

browser.close()

在以上代码中:

  • user_data_dir 用于保存 Cookies、会话等数据。
  • executablePath 用于指定 Chrome 浏览器的安装路径。
  • 使用 launchPersistentContext() 启动后,每次执行脚本都会复用已有的登录状态。

多账号测试实践案例

在实际测试中,常常需要使用不同账号来验证系统的权限和功能。例如在电商系统中,既要测试买家账号,也要测试卖家账号;在协作平台中,需要区分管理员和普通用户。

借助 user-data-dir,我们可以为每个账号单独指定一个数据目录,从而避免频繁登录/退出,保证测试流程互不干扰。

示例:为不同账号配置独立目录

假设我们有两个 GitHub 账号:账号A账号B。可以为它们分别配置两个目录:

  • C:/cuketest/browser-data/profileA
  • C:/cuketest/browser-data/profileB

JavaScript
Python
const { chromium } = require('leanpro.web');

(async () => {
    // 为账号A配置独立的用户目录
    const browserA = await chromium.launchPersistentContext(
        "C:/cuketest/browser-data/profileA",
        { headless: false }
    );
    const pageA = await browserA.newPage();
    await pageA.goto("https://github.com/"); // 第一次运行需手动登录账号A

    // 为账号B配置独立的用户目录
    const browserB = await chromium.launchPersistentContext(
        "C:/cuketest/browser-data/profileB",
        { headless: false }
    );
    const pageB = await browserB.newPage();
    await pageB.goto("https://github.com/"); // 第一次运行需手动登录账号B

    // 后续运行将保持两个账号的独立登录状态
})();
from leanproWeb import WebAuto

# 账号A
browserA = WebAuto().__enter__().chromium.launch_persistent_context(
    user_data_dir="C:/cuketest/browser-data/profileA",
    headless=False
)
pageA = browserA.new_page()
pageA.goto("https://github.com/")  # 第一次运行需手动登录账号A

# 账号B
browserB = WebAuto().__enter__().chromium.launch_persistent_context(
    user_data_dir="C:/cuketest/browser-data/profileB",
    headless=False
)
pageB = browserB.new_page()
pageB.goto("https://github.com/")  # 第一次运行需手动登录账号B

通过这种方式:

  • 账号A账号B 的登录状态保存在不同的目录中,互不影响。
  • 在后续的自动化运行中,无需重复输入用户名和密码。
  • 适合需要模拟多角色、多身份操作的场景(如管理员、普通用户、游客)。

注意事项

  1. 目录隔离:如果需要测试多个账号,请为每个账号指定不同的 user-data-dir 目录,以避免数据冲突。
  2. 初次登录:第一次运行时仍需手动输入账号密码,之后即可复用登录状态。
  3. 安全性:目录中保存了 Cookies 和会话信息,请避免在多人共享环境下暴露敏感数据。
  4. 清理数据:若要重新开始测试,可以删除或更换用户数据目录,以恢复为初始状态。
  5. 避免默认目录:在代码中调用 launchPersistentContext() 时,切勿传入 Chrome 默认的用户目录路径(如 C:\Users\<用户名>\AppData\Local\Google\Chrome\User Data)。使用默认目录可能造成浏览器冲突或脚本运行异常,应始终指定单独的测试目录。

results matching ""

    No results matching ""