auto-playwright
auto-playwright 是一款创新的开源工具,旨在利用人工智能(如 ChatGPT)自动化执行 Playwright 浏览器测试步骤。传统的前端自动化测试往往需要开发者编写大量繁琐的选择器代码和交互逻辑,不仅耗时且容易因页面结构变动而失效。auto-playwright 通过引入自然语言处理技术,让测试人员只需使用通俗的中文或英文指令(例如“获取标题文本”或“在搜索框输入内容”),AI 即可自动识别页面元素并生成相应的操作代码,从而大幅降低编写和维护测试脚本的门槛。
这款工具特别适合前端开发者、测试工程师以及希望快速构建自动化流程的技术团队使用。其核心亮点在于将复杂的 DOM 查询与操作抽象为简单的自然语言提示,支持数据提取、界面交互及状态断言等多种功能。此外,auto-playwright 具备良好的灵活性,既兼容标准的 OpenAI 接口,也支持 Azure OpenAI 部署,并提供调试模式以透明展示 AI 的执行逻辑。它支持所有 Playwright 适用的浏览器环境,能够帮助用户更高效地专注于测试策略本身,而非底层的代码实现细节,是提升 Web 自动化测试效率的有力助手。
使用场景
某电商团队的测试工程师正在为频繁变动的商品详情页编写自动化回归测试脚本,需验证页面标题、搜索框填充及结果一致性。
没有 auto-playwright 时
- 每次前端微调 DOM 结构(如修改类名或嵌套层级),硬编码的选择器立即失效,导致测试报错,维护成本极高。
- 编写断言逻辑繁琐,工程师需手动查找元素路径并编写复杂的定位代码,耗时且容易出错。
- 面对动态内容(如随机生成的促销标语),难以快速提取文本并用于后续步骤的输入验证,流程经常中断。
- 新加入的测试人员需要深入学习 Playwright 的高级 API 才能上手,团队整体效率受限于个人技术熟练度。
使用 auto-playwright 后
- 只需输入自然语言指令(如“获取标题文本”),auto-playwright 利用 AI 自动识别元素,即使 DOM 结构变化也能智能适应,大幅减少脚本维护。
- 将“在搜索框输入刚才获取的标题”这类复杂操作简化为一行代码,AI 自动完成元素查找与交互,开发速度显著提升。
- 直接通过自然语言提问(如“搜索框内容是否等于标题?”)即可完成状态断言,无需关心底层实现细节,逻辑清晰直观。
- 降低了自动化门槛,业务测试人员也能通过描述需求快速生成测试步骤,加速了测试用例的覆盖与迭代。
auto-playwright 通过将自然语言转化为可靠的浏览器操作,让自动化测试从“维护选择器”的泥潭中解放出来,真正实现了敏捷高效的智能测试。
运行环境要求
- 未说明
不需要
未说明

快速开始
Auto Playwright
使用 AI 运行 Playwright 测试。
设置
- 安装
auto-playwright依赖:
npm install auto-playwright -D
- 本包依赖于与 OpenAI(https://openai.com/)的交互。您必须将 API 密钥导出为环境变量,或将其添加到您的
.env文件中:
export OPENAI_API_KEY='sk-...'
- 导入并使用
auto函数:
import { test, expect } from "@playwright/test";
import { auto } from "auto-playwright";
test("auto Playwright 示例", async ({ page }) => {
await page.goto("/");
// `auto` 可以查询数据
// 在此例中,结果是标题的纯文本内容。
const headerText = await auto("获取标题文本", { page, test });
// `auto` 可以执行操作
// 在此例中,`auto` 会找到搜索框并输入文本。
await auto(`在搜索框中输入 "${headerText}"`, { page, test });
// `auto` 可以断言页面状态
// 在此例中,结果是一个布尔值。
const searchInputHasHeaderText = await auto(
`搜索框的内容是否等于 "${headerText}"?`,
{ page, test },
);
expect(searchInputHasHeaderText).toBe(true);
});
使用 Azure OpenAI 进行设置
包含 StepOptions 类型,并提供连接 Azure OpenAI 所需的值。
import { test, expect } from "@playwright/test";
import { auto } from "auto-playwright";
import { StepOptions } from "../src/types";
const apiKey = "apikey";
const resource = "azure-resource-name";
const model = "model-deployment-name";
const options: StepOptions = {
model: model,
openaiApiKey: apiKey,
openaiBaseUrl: `https://${resource}.openai.azure.com/openai/deployments/${model}`,
openaiDefaultQuery: { "api-version": "2023-07-01-preview" },
openaiDefaultHeaders: { "api-key": apiKey },
};
test("auto Playwright 示例", async ({ page }) => {
await page.goto("/");
// `auto` 可以查询数据
// 在此例中,结果是标题的纯文本内容。
const headerText = await auto("获取标题文本", { page, test }, options);
// `auto` 可以执行操作
// 在此例中,`auto` 会找到搜索框并输入文本。
await auto(`在搜索框中输入 "${headerText}"`, { page, test }, options);
// `auto` 可以断言页面状态
// 在此例中,结果是一个布尔值。
const searchInputHasHeaderText = await auto(
`搜索框的内容是否等于 "${headerText}"?`,
{ page, test },
options,
);
expect(searchInputHasHeaderText).toBe(true);
});
使用方法
至少,auto 函数需要一个 纯文本提示 和一个包含 page 和 test 对象(可选)的 参数。
auto("<你的提示>", { page, test });
浏览器自动化
不带 test 参数运行:
import { chromium } from "playwright";
import { auto } from "auto-playwright";
(async () => {
const browser = await chromium.launch({ headless: true });
const context = await browser.newContext();
const page = await context.newPage();
// 导航到某个网站
await page.goto("https://www.example.com");
// `auto` 可以查询数据
// 在此例中,结果是标题的纯文本内容。
const res = await auto("获取标题文本", { page });
// 使用 res.query 获取查询结果。
console.log(res);
await page.close();
})();
调试
您可以将 debug 属性作为第三个参数传递给 auto 函数。这将打印提示以及 OpenAI 执行的命令。
await auto("获取标题文本", { page, test }, { debug: true });
您也可以设置环境变量 AUTO_PLAYWRIGHT_DEBUG=true,这将为所有 auto 调用启用调试模式。
export AUTO_PLAYWRIGHT_DEBUG=true
支持的浏览器
Playwright 支持的所有浏览器。
其他选项
您可以作为第三个参数传递其他选项:
const options = {
// 如果为 true,则会在控制台打印调试信息。
debug: boolean,
// OpenAI 模型(https://platform.openai.com/docs/models/overview)
model: "gpt-4-1106-preview",
// OpenAI 的 API 密钥
openaiApiKey: "sk-...",
};
auto("<你的提示>", { page, test }, options);
支持的操作与返回值
根据操作的 类型(由 auto 函数推断),会有不同的行为和返回类型。
操作
操作(例如“点击”)是指模拟用户与页面的交互,比如点击链接。如果操作成功,将返回 undefined;如果失败,则会抛出错误,例如:
try {
await auto("点击链接", { page, test });
} catch (e) {
console.error("点击链接失败");
}
查询
查询会以字符串形式返回页面上请求的数据,例如:
const linkText = await auto("获取第一个链接的文本", { page, test });
console.log("链接文本是", linkText);
断言
断言是一个问题,它会返回 true 或 false,例如:
const thereAreThreeLinks = await auto("页面上有 3 个链接吗?", {
page,
test,
});
console.log(`"页面上有 3 个链接" 是一个 ${thereAreThreeLinks} 的陈述`);
为什么使用 Auto Playwright?
| 方面 | 常规方法 | 使用 Auto Playwright 测试 |
|---|---|---|
| 与标记的耦合 | 与应用程序的标记紧密相关。 | 消除了对选择器的依赖;操作由 AI 助手在运行时决定。 |
| 实现速度 | 由于需要为每个操作精确编写代码,实现速度较慢。 | 使用简单、纯文本指令即可快速创建测试,用于执行操作和进行断言。 |
| 处理复杂场景 | 自动化复杂场景具有挑战性,且容易频繁失败。 | 通过关注预期的测试结果,可以更轻松地测试复杂场景。 |
| 编写测试的时间点 | 只能在功能完全开发完成后才能编写测试。 | 支持测试驱动开发(TDD)模式,允许在功能开发的同时或之前编写测试。 |
支持的 Playwright 操作
locator.blurlocator.boundingBoxlocator.checklocator.clearlocator.clicklocator.countlocator.filllocator.getAttributelocator.innerHTMLlocator.innerTextlocator.inputValuelocator.isCheckedlocator.isEditablelocator.isEnabledlocator.isVisiblelocator.pressKeylocator.selectOptionlocator.textContentlocator.uncheckpage.gotopage.keyboard.press
添加新的操作非常简单:只需更新 src/completeTask.ts 中的 functions。
定价
本库是免费的。然而,使用 OpenAI 会产生费用。有关定价的更多信息,请参阅:https://openai.com/pricing/。
示例
以 https://ray.run/ 为例,使用 GPT-4 Turbo 运行一个测试步骤的成本大约为 0.01 美元(而使用 GPT-3.5 Turbo 则为 0.001 美元)。
成本较低的部分原因在于 auto-playwright 使用 HTML 净化来减少负载大小,例如,以下是针对 https://ray.run/ 将被提交的负载内容。
当然,价格会根据负载的不同而有很大差异。
<div class="cYdhWw dKnOgO geGbZz bGoBgk jkEels">
<div class="kSmiQp fPSBzf bnYmbW dXscgu xJzwH jTWvec gzBMzy">
<h1 class="fwYeZS fwlORb pdjVK bccLBY fsAQjR fyszFl WNJim fzozfU">
学习 Playwright
</h1>
<h2 class="cakMWc ptfck bBmAxp hSiiri xJzwS gnfYng jTWvec fzozfU">
使用 Playwright 自动化框架学习端到端测试的资源
</h2>
<div
class="bLTbYS gvHvKe cHEBuD ddgODW jsxhGC kdTEUJ ilCTXp iQHbtH yuxBn ilIXfy gPeiPq ivcdqp isDTsq jyZWmS ivdkBK cERSkX hdAwi ezvbLT jNrAaV jsxhGJ fzozCb"
></div>
</div>
<div class="cYdhWw dpjphg cqUdSC fasMpP">
<a
class="gacSWM dCgFix conipm knkqUc bddCnd dTKJOB leOtqz hEzNkW fNBBKe jTWvec fIMbrO fzozfU group"
href="/blog"
><div class="plfYl bccLBY hSiiri fNBpvX">博客</div>
<div class="jqqjPD fWDXZB pKTba bBmAxp hSiiri evbPEu">
<p>深入了解端到端测试的相关主题。</p>
</div></a
><a
class="gacSWM dCgFix conipm knkqUc bddCnd dTKJOB leOtqz hEzNkW fNBBKe jTWvec fIMbrO fzozfU group"
href="/ask"
><div class="plfYl bccLBY hSiiri fNBpvX">向 AI 提问</div>
<div class="jqqjPD fWDXZB pKTba bBmAxp hSiiri evbPEu">
<p>向 ChatGPT 提出关于 Playwright 的问题。</p>
</div></a
><a
class="gacSWM dCgFix conipm knkqUc bddCnd dTKJOB leOtqz hEzNkW fNBBKe jTWvec fIMbrO fzozfU group"
href="/tools"
><div class="plfYl bccLBY hSiiri fNBpvX">开发工具</div>
<div class="jqqjPD fWDXZB pKTba bBmAxp hSiiri evbPEu">
<p>面向 QA 工程师的一体化工具箱。</p>
</div></a
><a
class="gacSWM dCgFix conipm knkqUc bddCnd dTKJOB leOtqz hEzNkW fNBBKe jTWvec fIMbrO fzozfU group"
href="/jobs"
><div class="plfYl bccLBY hSiiri fNBpvX">QA 职位</div>
<div class="jqqjPD fWDXZB pKTba bBmAxp hSiiri evbPEu">
<p>精心挑选的 QA 和自动化相关机会。</p>
</div></a
><a
class="gacSWM dCgFix conipm knkqUc bddCnd dTKJOB leOtqz hEzNkW fNBBKe jTWvec fIMbrO fzozfU group"
href="/questions"
><div class="plfYl bccLBY hSiiri fNBpvX">问题</div>
<div class="jqqjPD fWDXZB pKTba bBmAxp hSiiri evbPEu">
<p>向 AI 提问并获得关于 Playwright 的解答。</p>
</div></a
><a
class="gacSWM dCgFix conipm knkqUc bddCnd dTKJOB leOtqz hEzNkW fNBBKe jTWvec fIMbrO fzozfU group"
href="/discord-forum"
><div class="plfYl bccLBY hSiiri fNBpvX">Discord 论坛</div>
<div class="jqqjPD fWDXZB pKTba bBmAxp hSiiri evbPEu">
<p>关于 Playwright 的 Discord 论坛帖子存档。</p>
</div></a
><a
class="gacSWM dCgFix conipm knkqUc bddCnd dTKJOB leOtqz hEzNkW fNBBKe jTWvec fIMbrO fzozfU group"
href="/videos"
><div class="plfYl bccLBY hSiiri fNBpvX">视频</div>
<div class="jqqjPD fWDXZB pKTba bBmAxp hSiiri evbPEu">
<p>教程、会议演讲以及发布视频。</p>
</div></a
><a
class="gacSWM dCgFix conipm knkqUc bddCnd dTKJOB leOtqz hEzNkW fNBBKe jTWvec fIMbrO fzozfU group"
href="/browser-extension"
><div class="plfYl bccLBY hSiiri fNBpvX">浏览器扩展</div>
<div class="jqqjPD fWDXZB pKTba bBmAxp hSiiri evbPEu">
<p>用于生成 Playwright 定位器的图形界面。</p>
</div></a
><a
class="gacSWM dCgFix conipm knkqUc bddCnd dTKJOB leOtqz hEzNkW fNBBKe jTWvec fIMbrO fzozfU group"
href="/wiki"
><div class="plfYl bccLBY hSiiri fNBpvX">QA 百科</div>
<div class="jqqjPD fWDXZB pKTba bBmAxp hSiiri evbPEu">
<p>常见端到端测试术语的定义。</p>
</div></a
>
</div>
<div
class="kSmiQp fPSBzf pKTba eTDpsp legDhJ hSiiri hdaZLM jTWvec gzBMzy bGySga fzoybr"
>
<p class="dXhlDK leOtqz glpWRZ fNCcFz">
使用 <kbd class="bWhrAL XAzZz cakMWc bUyOMB bmOrOm fyszFl dTmriP">⌘</kbd> +
<kbd>k</kbd> + “工具”可快速访问所有工具。
</p>
</div>
</div>
实现
HTML 净化
auto 函数使用 sanitize-html 对页面的 HTML 进行净化,然后再将其发送给 OpenAI。这样做是为了降低成本并提高生成文本的质量。
ZeroStep
该项目的灵感来源于 ZeroStep。ZeroStep 提供类似的 API,但通过其专有的后端实现了更为健壮的功能。Auto Playwright 的诞生旨在探索 ZeroStep 的底层技术,并为其软件的开源版本奠定基础。对于生产环境,我建议选择使用 ZeroStep。
以下是 Auto Playwright 和 ZeroStep 的对比:
| 标准 | Auto Playwright | ZeroStep |
|---|---|---|
| 是否使用 OpenAI API | 是 | 否[^3] |
| 是否使用纯文本提示 | 是 | 否 |
是否使用 functions SDK |
是 | 否 |
| 是否进行 HTML 转义 | 是 | 否 |
| 是否使用 Playwright API | 是 | 否[^4] |
| 是否使用截图 | 否 | 是 |
| 是否使用队列 | 否 | 是 |
| 是否使用 WebSockets | 否 | 是 |
| 快照格式 | HTML | DOM |
| 是否实现并行处理 | 否 | 是 |
| 是否支持滚动 | 否 | 是 |
| 是否提供测试夹具 | 否 | 是 |
| 许可证 | MIT | MIT |
[^3]: 使用 ZeroStep 专有 API。
[^4]: 使用 部分 Playwright API,但主要依赖 Chrome 开发者工具协议 (CDP)。
Zero Step 许可证
MIT 许可证
版权所有 © 2023 Reflect Software Inc
特此授予任何人免费获取本软件及其相关文档文件(以下简称“软件”)副本的权利,允许在不受限制的情况下处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售该软件副本的权利;同时允许向任何获得本软件的人提供服务,但须遵守以下条件:
上述版权声明及本许可声明应包含在所有副本或本软件的重要部分中。
本软件按“原样”提供,不提供任何形式的明示或暗示保证,包括但不限于适销性、特定用途适用性和非侵权性。在任何情况下,作者或版权所有者均不对因合同、侵权或其他原因引起的任何索赔、损害赔偿或其他责任负责,无论这些责任是基于本软件还是基于对本软件的使用或其他方式而产生的。
版本历史
v1.16.12025/05/01v1.16.02024/07/09v1.15.12024/07/09v1.15.02024/06/04v1.14.02023/11/17v1.13.02023/11/15v1.12.22023/11/15v1.12.12023/11/15v1.12.02023/11/14v1.11.12023/11/14v1.11.02023/11/14v1.10.02023/11/14v1.9.02023/11/14v1.8.12023/11/12v1.8.02023/11/12v1.7.02023/11/12v1.6.12023/11/12v1.6.02023/11/12v1.5.02023/11/11v1.4.02023/11/11常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备