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 参数,并指定一个本地目录。例如:

- 目录路径可以是任意本地文件夹。若该目录不存在,浏览器会自动创建。
- 每个目录代表一份独立的用户数据,可以根据不同测试账号或环境配置多个目录。
- 请勿直接配置
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/profileAC:/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 的登录状态保存在不同的目录中,互不影响。
- 在后续的自动化运行中,无需重复输入用户名和密码。
- 适合需要模拟多角色、多身份操作的场景(如管理员、普通用户、游客)。
注意事项
- 目录隔离:如果需要测试多个账号,请为每个账号指定不同的
user-data-dir目录,以避免数据冲突。 - 初次登录:第一次运行时仍需手动输入账号密码,之后即可复用登录状态。
- 安全性:目录中保存了 Cookies 和会话信息,请避免在多人共享环境下暴露敏感数据。
- 清理数据:若要重新开始测试,可以删除或更换用户数据目录,以恢复为初始状态。
- 避免默认目录:在代码中调用
launchPersistentContext()时,切勿传入 Chrome 默认的用户目录路径(如C:\Users\<用户名>\AppData\Local\Google\Chrome\User Data)。使用默认目录可能造成浏览器冲突或脚本运行异常,应始终指定单独的测试目录。