如果你刚开始接触自动化测试,可能会有一种错觉。
好像只要学会几条命令,让浏览器自己打开网页、输入账号、点击按钮,就算掌握自动化了。
我刚开始学的时候也很容易被这种画面吸引。鼠标没有动,浏览器却自己打开了;用户名和密码自动填进去;页面跳转以后,控制台出现一个绿色的 passed。
确实挺酷。
但那只是自动化最表面的一层。
真正有价值的自动化,不是替你点几下鼠标,而是把一套原本需要人反复确认的规则,交给程序稳定地执行。
所以这个系列的第一章,我们先不安装软件,也不急着写代码。
先把三个问题说清楚。
Playwright 是什么?它能帮我们做什么?学完这套教程,你最后能得到什么?
01 先从每天都在重复的测试说起
假设你负责测试一个后台管理系统。
每次版本上线前,你都要完成下面这些操作。
打开登录页面。 输入管理员账号和密码。 点击登录。 检查是否进入首页。 打开用户管理。 新建一个用户。 搜索刚刚创建的用户。 修改用户资料。 删除测试数据。
第一次做,这叫测试。
第二次做,还是测试。
但当你每周都要重复一遍,甚至需要在 Chrome、Firefox 和不同测试环境里反复执行时,这件事就开始变得机械了。
更麻烦的是,人会累。
你可能漏看一条提示消息,可能忘记清理测试数据,也可能因为赶时间,只验证了“按钮能不能点”,没有确认点击后的数据到底对不对。
自动化测试,就是把这类高频、重复、规则明确、结果可以判断的工作交给程序。
程序不会嫌烦,也不会因为今天心情不好少检查一步。
这才是我们学习 Playwright 的真正原因。
02 Playwright 到底是什么
Playwright 是一个浏览器自动化工具。
它最初由微软团队推出,可以通过代码控制 Chromium、Firefox 和 WebKit 等浏览器引擎。
大白话说,你平时用鼠标和键盘在网页上做的很多事情,Playwright 都可以通过代码完成。
打开一个网页 点击按钮或链接 输入文字 勾选复选框 选择下拉选项 上传和下载文件 切换标签页 操作 iframe 读取页面文字 检查元素是否出现 验证页面是否跳转成功
例如,以后我们会写出类似这样的代码。
def test_login(page): page.goto("https://example.com/login") page.get_by_label("用户名").fill("admin") page.get_by_label("密码").fill("123456") page.get_by_role("button", name="登录").click() expect(page).to_have_url("https://example.com/home")现在看不懂完全没关系。
你只需要注意最后一行。
前面几行是在操作页面,最后一行是在验证结果。
有操作,也有验证,才是一条真正的自动化测试。
如果代码只负责打开页面、输入内容、点击按钮,却从来不判断结果是否正确,那它更像一个自动操作脚本,而不是测试。
这个区别,我们后面会反复强调。
03 Playwright 不只是“自动点击器”
很多初学者第一次看到 Playwright,会把它理解成一个高级按键精灵。
其实差别非常大。
普通的鼠标录制工具往往依赖坐标。按钮从页面左边挪到右边,脚本可能就点错了。
Playwright 更关心页面结构和用户语义。
我们可以告诉它“找到名称为登录的按钮”,而不是告诉它“点击屏幕坐标 620、480”。
page.get_by_role("button", name="登录").click()页面布局发生小幅变化时,只要这个按钮的角色和名称没有改变,测试通常仍然可以工作。
Playwright 还会在执行操作前自动检查很多条件。
例如按钮是否已经出现、是否可见、是否稳定、是否可以点击。
这套机制通常被称为自动等待。
它解决了 UI 自动化里非常常见的问题。
页面还没加载完,代码已经急着点击,于是测试时好时坏。
当然,自动等待不是魔法。它不能替我们理解业务,也不能替我们选择正确的验证目标。
但它确实能减少大量没有必要的固定等待,让脚本更快,也更稳定。
04 为什么这套教程选择 Python 版
Playwright 支持多种编程语言,包括 JavaScript、TypeScript、Python、Java 和 .NET。
这套教程选择 Python,主要有三个原因。
第一,Python 的语法相对简洁。
对于第一次接触代码的人来说,我们希望你把注意力放在测试思路上,而不是一开始就被复杂语法劝退。
第二,Python 在测试领域拥有成熟的工具生态。
我们后面会使用 pytest 管理测试,用 fixture 处理前置条件,用参数化运行多组数据,再用 Allure 生成测试报告。
第三,Python 不只可以写 UI 自动化。
以后你还可以继续学习接口测试、数据处理、数据库操作和测试平台开发。
不过也要把话说完整。
如果你的团队主要使用 TypeScript,或者希望与前端项目共享技术栈,TypeScript 版 Playwright 也可能是更合适的选择。
语言没有绝对的高下,只有是否适合当前团队和学习目标。
我们选择 Python,是因为它更适合这套面向零基础读者的学习路线。
05 Playwright、Selenium 和 Cypress 怎么选
这是初学者很容易纠结的问题。
先给结论。
如果你的目标是从零学习现代 Web 自动化,Playwright 是一个非常合适的起点。
Selenium 出现得更早,生态非常成熟,历史项目和企业存量项目很多。学习 Selenium 仍然有价值,尤其是你准备接手已经使用 Selenium 的团队项目。
Cypress 的开发体验也很好,在前端团队和组件测试场景中拥有自己的优势。
Playwright 吸引人的地方,则是浏览器上下文隔离、自动等待、网络拦截、Trace Viewer,以及对现代浏览器功能较完整的支持。
但不要把工具选择变成站队。
工具只是工具。
真正决定自动化质量的,仍然是下面这些东西。
你有没有选择值得自动化的场景 元素定位是否稳定 断言是否真正验证业务结果 测试数据是否相互隔离 失败以后能不能快速定位原因 项目是否方便别人继续维护
不会这些,换成任何工具都只是写出一堆容易失败的脚本。
06 哪些场景适合交给 Playwright
Playwright 很强,但不是所有测试都应该自动化。
下面这些场景通常比较适合。
核心业务冒烟测试
例如登录、下单、支付前校验、创建订单、提交审批。
每次发布都必须确认,而且步骤和结果比较稳定。
高频回归测试
每个版本都要重复执行的功能,人工成本高,也容易漏测。
多浏览器兼容验证
同一组测试可以在不同浏览器引擎上运行,帮助发现兼容性问题。
表单和后台管理系统
登录、查询、新增、修改、删除、导入、导出等流程,规则通常比较明确。
UI 与接口联合验证
通过接口准备测试数据,再使用页面验证展示结果,可以显著减少无意义的页面操作。
07 哪些场景不应该急着自动化
下面这些场景,需要谨慎判断。
需求还在频繁变化
页面和业务规则每天都在改,脚本维护成本可能比人工测试还高。
只执行一次的临时需求
写脚本需要时间。如果一个场景只验证一次,手工测试可能更划算。
强依赖主观感受
页面“好不好看”、动画“顺不顺”、文案“有没有感染力”,这些通常需要人的判断。
验证码、真实支付等高风险流程
这类流程涉及安全控制、真实资金或第三方系统,不能为了跑通自动化就绕过安全规则,更不能在生产环境随意执行。
自动化不是越多越好。
真正专业的判断,是知道什么值得做,也知道什么不该做。
08 学完这套教程,你会得到什么
这套教程不会停在“打开百度”或者“点击一个按钮”。
我们会从零开始,一步步完成下面这些事情。
安装 Python、PyCharm 和 Playwright。 写出第一条浏览器自动化测试。 掌握元素定位、页面操作、断言和等待。 使用 pytest 管理用例、数据和前置条件。 使用 Page Object Model 拆分页面与业务逻辑。 管理不同环境、测试账号和登录状态。 在失败时自动保存日志、截图、视频和 Trace。 使用 Allure 生成测试报告。 使用接口准备数据并与 UI 测试配合。 把项目放进 Git,并接入持续集成。
最终,你会拥有一套真正可以放进代码仓库、交给团队运行和继续维护的 Playwright Python 项目。
这条路不会只有“复制代码然后运行”。
我们还会解释每段代码为什么这样写,什么情况下会失败,以及真实项目里应该如何取舍。
09 第一章只需要记住三句话
如果前面的内容有点多,第一章只记住下面三句话就够了。
第一,Playwright 是用代码控制浏览器并验证业务结果的自动化工具。
第二,自动化测试的价值不是替人点击,而是稳定、重复地执行规则。
第三,不是所有场景都值得自动化,选择正确的场景比写出代码更重要。
到这里,你还没有安装任何软件,也没有运行任何命令。
但你已经知道我们为什么出发。
下一章,我们正式搭建环境。
从安装 Python 和 PyCharm 开始,创建一个干净、独立、可以运行的项目。安装 Python
、Pyharm 和项目环境