Files
2026-07-13 21:36:47 +08:00

9.5 KiB
Raw Permalink Blame History

name, description
name description
会话管理 同时运行多个隔离的浏览器会话、管理持久化配置文件、并排比较不同浏览器状态、并行抓取或A/B测试流程。

会话管理

何时使用:同时运行多个隔离的浏览器会话、管理持久化配置文件、并排比较不同浏览器状态、并行抓取或 A/B 测试流程。 前置条件core-commands.md 了解基本 CLI 用法

快速参考

# 命名会话:每个会话拥有独立的 Cookie、存储、标签页
playwright-cli -s=auth open https://app.example.com/login
playwright-cli -s=public open https://example.com

# 在会话内交互
playwright-cli -s=auth fill e1 "user@example.com"
playwright-cli -s=public snapshot

# 列出所有活跃会话
playwright-cli list

# 清理
playwright-cli -s=auth close
playwright-cli close-all             # 关闭所有会话
playwright-cli kill-all              # 强制杀死僵尸进程

命名会话

使用 -s=<name> 标志创建隔离的浏览器实例。每个命名会话拥有独立的:

  • Cookie
  • localStorage / sessionStorage
  • IndexedDB
  • 缓存
  • 浏览历史
  • 打开的标签页

创建会话

# 为身份验证测试创建会话
playwright-cli -s=admin open https://app.example.com/login

# 为不同用户创建独立会话
playwright-cli -s=viewer open https://app.example.com/login

# 会话中的所有命令相互隔离
playwright-cli -s=admin fill e1 "admin@company.com"
playwright-cli -s=admin fill e2 "admin-password"
playwright-cli -s=admin click e3

playwright-cli -s=viewer fill e1 "viewer@company.com"
playwright-cli -s=viewer fill e2 "viewer-password"
playwright-cli -s=viewer click e3

默认会话

当省略 -s 时,所有命令共享同一个默认会话:

# 以下命令均使用同一个默认会话
playwright-cli open https://example.com
playwright-cli snapshot
playwright-cli click e1
playwright-cli close

会话隔离

会话完全独立——一个会话中的操作不会影响其他会话:

# 会话 A 以管理员身份登录
playwright-cli -s=admin open https://app.example.com
playwright-cli -s=admin fill e1 "admin@example.com"
playwright-cli -s=admin fill e2 "admin-pass"
playwright-cli -s=admin click e3

# 会话 B 访问同一网站——未登录状态
playwright-cli -s=guest open https://app.example.com
playwright-cli -s=guest snapshot
# 显示登录页面,而非管理面板

# 会话 C 可使用完全不同的浏览器
playwright-cli -s=firefox-test open https://app.example.com --browser=firefox

会话命令

# 列出所有活跃会话及其状态
playwright-cli list

# 关闭指定的命名会话
playwright-cli -s=mysession close

# 关闭默认会话
playwright-cli close

# 同时关闭所有会话
playwright-cli close-all

# 强制杀死所有浏览器守护进程(用于卡死/僵尸浏览器)
playwright-cli kill-all

# 删除会话的持久化配置文件数据
playwright-cli -s=mysession delete-data

# 删除默认会话数据
playwright-cli delete-data

持久化配置文件

默认情况下,会话在内存中运行——关闭会话后所有 Cookie、存储和浏览数据都将丢失。使用 --persistent 将状态保存到磁盘。

自动生成的配置文件

# Playwright-cli 自动管理配置文件目录
playwright-cli -s=myapp open https://example.com --persistent

# 关闭后重新打开——Cookie 和存储将被保留
playwright-cli -s=myapp close
playwright-cli -s=myapp open https://example.com --persistent
# 仍然处于登录状态!

自定义配置文件目录

# 指定配置文件数据的存储位置
playwright-cli -s=myapp open https://example.com --profile=/tmp/my-browser-profile

# 可用于在会话之间共享配置文件
playwright-cli -s=session-a open https://example.com --profile=/shared/profile
playwright-cli -s=session-a close
playwright-cli -s=session-b open https://example.com --profile=/shared/profile

清理持久化数据

# 删除存储的配置文件数据(必须先关闭会话)
playwright-cli -s=myapp close
playwright-cli -s=myapp delete-data

会话配置

按会话配置浏览器引擎和选项:

# 不同会话使用不同浏览器
playwright-cli -s=chrome-test open https://example.com --browser=chrome
playwright-cli -s=firefox-test open https://example.com --browser=firefox
playwright-cli -s=webkit-test open https://example.com --browser=webkit
playwright-cli -s=edge-test open https://example.com --browser=msedge

# 使用配置文件
playwright-cli -s=configured open https://example.com --config=my-config.json

# 有头模式(显示浏览器窗口)
playwright-cli -s=visible open https://example.com --headed

# 通过扩展连接现有浏览器
playwright-cli -s=extension open --extension

环境变量

设置默认会话名称,使所有命令无需 -s 标志即可使用:

export PLAYWRIGHT_CLI_SESSION="mysession"

# 以下命令将自动使用 "mysession"
playwright-cli open https://example.com
playwright-cli snapshot
playwright-cli close

常见模式

多用户角色测试

同时以不同用户角色测试同一应用:

# 管理员会话
playwright-cli -s=admin open https://app.example.com/login
playwright-cli -s=admin snapshot
playwright-cli -s=admin fill e1 "admin@company.com"
playwright-cli -s=admin fill e2 "admin-pass"
playwright-cli -s=admin click e3

# 普通用户会话
playwright-cli -s=user open https://app.example.com/login
playwright-cli -s=user fill e1 "user@company.com"
playwright-cli -s=user fill e2 "user-pass"
playwright-cli -s=user click e3

# 比较每个角色看到的内容
playwright-cli -s=admin snapshot     # 应显示管理面板
playwright-cli -s=user snapshot      # 不应显示管理面板

playwright-cli -s=admin screenshot --filename=admin-view.png
playwright-cli -s=user screenshot --filename=user-view.png

并发抓取

并行抓取多个网站以提高速度:

#!/bin/bash

# 同时启动所有浏览器
playwright-cli -s=site1 open https://site1.example.com &
playwright-cli -s=site2 open https://site2.example.com &
playwright-cli -s=site3 open https://site3.example.com &
wait

# 从每个会话收集数据
playwright-cli -s=site1 snapshot --filename=site1.yaml
playwright-cli -s=site2 snapshot --filename=site2.yaml
playwright-cli -s=site3 snapshot --filename=site3.yaml

# 截取屏幕截图
playwright-cli -s=site1 screenshot --filename=site1.png
playwright-cli -s=site2 screenshot --filename=site2.png
playwright-cli -s=site3 screenshot --filename=site3.png

# 清理
playwright-cli close-all

A/B 测试比较

# 变体 A
playwright-cli -s=variant-a open "https://app.example.com?variant=a"
playwright-cli -s=variant-a screenshot --filename=variant-a.png

# 变体 B
playwright-cli -s=variant-b open "https://app.example.com?variant=b"
playwright-cli -s=variant-b screenshot --filename=variant-b.png

# 并排比较
playwright-cli close-all

跨浏览器测试

在多个浏览器中运行同一流程以验证兼容性:

#!/bin/bash

for browser in chrome firefox webkit; do
  playwright-cli -s=$browser open https://example.com --browser=$browser
  playwright-cli -s=$browser snapshot
  playwright-cli -s=$browser screenshot --filename="$browser-home.png"

  playwright-cli -s=$browser goto https://example.com/features
  playwright-cli -s=$browser screenshot --filename="$browser-features.png"
done

playwright-cli close-all

跨会话共享认证状态

# 登录一次并保存状态
playwright-cli -s=login open https://app.example.com/login
playwright-cli -s=login fill e1 "user@example.com"
playwright-cli -s=login fill e2 "password123"
playwright-cli -s=login click e3
playwright-cli -s=login state-save auth.json
playwright-cli -s=login close

# 在多个会话中复用认证状态
playwright-cli -s=session-a open https://app.example.com
playwright-cli -s=session-a state-load auth.json
playwright-cli -s=session-a goto https://app.example.com/dashboard

playwright-cli -s=session-b open https://app.example.com
playwright-cli -s=session-b state-load auth.json
playwright-cli -s=session-b goto https://app.example.com/settings

最佳实践

1. 使用语义化命名会话

# 良好:用途清晰
playwright-cli -s=github-auth open https://github.com
playwright-cli -s=docs-scrape open https://docs.example.com
playwright-cli -s=checkout-flow open https://shop.example.com

# 避免:泛化命名
playwright-cli -s=s1 open https://github.com
playwright-cli -s=test open https://docs.example.com

2. 始终进行清理

# 完成后关闭单个会话
playwright-cli -s=auth close
playwright-cli -s=scrape close

# 或一次性关闭所有会话
playwright-cli close-all

# 如果浏览器无响应
playwright-cli kill-all

3. 删除过期的持久化数据

# 删除旧的持久化配置文件以释放磁盘空间
playwright-cli -s=old-session delete-data

4. 单任务工作使用默认会话

当只需要一个浏览器时,无需创建命名会话:

# 简单的单会话工作流——不需要 -s 标志
playwright-cli open https://example.com
playwright-cli snapshot
playwright-cli click e1
playwright-cli close

5. 结合状态管理

对于长时间运行的任务,定期保存状态:

playwright-cli -s=long-task open https://app.example.com --persistent
# ……多次交互……
playwright-cli -s=long-task state-save checkpoint.json
# ……更多交互……
# 如果出现问题,恢复状态:
playwright-cli -s=long-task state-load checkpoint.json