告别 Selenium:Playwright 现代 Web 自动化测试从入门到实战

告别 Selenium:Playwright 现代 Web 自动化测试从入门到实战

告别 Selenium:Playwright 现代 Web 自动化测试简明教程

前言:为什么选择 Playwright?

在 Web 自动化测试领域,Selenium 曾长期占据主流,但面对现代前端框架(React/Vue/Next.js)、复杂 SPA 应用和多端适配需求,其局限性逐渐凸显。Microsoft 推出的 Playwright 框架,凭借跨引擎、跨平台、智能化的特性,成为新一代自动化测试的优选方案。

相比于传统的 Selenium 或 Cypress,Playwright 具有以下优势:

  • 极致性能:基于浏览器上下文(Browser Context)隔离测试环境,启动速度比 Selenium 快 30%+,无冗余进程开销;
  • 智能等待:内置自适应等待机制,自动等待元素可交互,彻底告别sleep()硬编码; 全场景覆盖:支持 Chromium/Firefox/WebKit 三大引擎,Windows/Linux/macOS
    全平台,JavaScript/TypeScript/Python/Java/.NET 多语言;
  • 强大工具链:Codegen(代码自动生成)、Trace Viewer(测试追踪分析)、UI Mode(交互式调试)一站式提效;
  • 多端适配:原生支持移动端浏览器模拟,实验性支持安卓真机测试,覆盖 PC + 移动全场景。

安装

在已有 Node.js 环境的项目中,执行以下命令一键初始化 Playwright:

npm init playwright@latest 

执行后,脚本会引导你完成以下配置:

  1. 选择使用 TypeScript 还是 JavaScript。
  2. 指定测试文件存放目录(默认 tests)。
  3. 是否添加 GitHub Actions 工作流。
  4. 是否安装 Playwright 浏览器(建议选择是,否则后续需要手动运行 npx playwright install)。

基础使用

编写第一个测试

Playwright 的 API 非常直观。在 tests/example.spec.ts 中:

import{ test, expect }from'@playwright/test';test('has title',async({ page })=>{await page.goto('https://playwright.dev/');// 期待标题包含 "Playwright"awaitexpect(page).toHaveTitle(/Playwright/);});test('get started link',async({ page })=>{await page.goto('https://playwright.dev/');// 点击 "Get started" 链接await page.getByRole('link',{ name:'Get started'}).click();// 期待 URL 包含 introawaitexpect(page).toHaveURL(/.*intro/);});

常见测试场景

1. 元素定位与交互

Playwright 推荐使用 page.getByRolepage.getByText 等面向用户的定位方式,这能使测试更具鲁棒性。

// 填写表单await page.getByLabel('用户名').fill('admin');await page.getByLabel('密码').fill('123456');// 点击按钮await page.getByRole('button',{ name:'登录'}).click();

2. 等待网络请求

在现代单页应用(SPA)中,等待特定的接口返回是非常常见的需求。

// 等待接口返回const[response]=awaitPromise.all([ page.waitForResponse(resp => resp.url().includes('/api/login')&& resp.status()===200), page.getByRole('button',{ name:'登录'}).click(),]);

3. 处理弹窗与 Iframe

Playwright 能够轻松处理 JavaScript 警告框(Dialog)和嵌套的 Iframe。

// 处理 Dialog page.on('dialog', dialog => dialog.accept());await page.getByRole('button',{ name:'删除'}).click();// 进入 Iframe 交互const frame = page.frameLocator('#my-iframe');await frame.getByText('确认提交').click();

4. 键盘输入与快捷键

Playwright 提供了非常精细的键盘模拟能力,不仅可以输入文本,还能模拟单个按键及组合键。

// 聚焦并输入文本await page.getByLabel('搜索').focus();await page.keyboard.type('Playwright',{ delay:100});// 模拟真实打字速度// 按下回车键await page.keyboard.press('Enter');// 组合键:全选并删除 (Windows/Linux 用 Control, macOS 用 Meta)await page.keyboard.press('Control+A');await page.keyboard.press('Backspace');

5. 移动端与权限模拟

Playwright 生态内置了大量的设备预设,可以轻松模拟特定的手机或平板环境,并支持精细控制地理位置、语言和系统权限。

import{ test, devices }from'@playwright/test';test('iPhone 14 移动端模拟测试',async({ browser })=>{// 使用内置设备预设const context =await browser.newContext({...devices['iPhone 14'], locale:'zh-CN', timezoneId:'Asia/Shanghai', geolocation:{ longitude:116.39, latitude:39.9}, permissions:['geolocation']// 授予地理位置权限});const page =await context.newPage();await page.goto('https://maps.google.com');// 验证页面是否根据模拟坐标显示await context.close();});

常用命令

  • 运行所有测试npx playwright test
  • 运行指定浏览器npx playwright test --project=chromium
  • 有界面模式(Headed)npx playwright test --headed
  • UI 模式(推荐交互式调试)npx playwright test --ui
  • 查看测试报告npx playwright show-report

安卓平台测试 (实验性)

Playwright 提供了一项非常有趣的功能:直接对安卓设备上的 Chrome 或 WebView 进行自动化。

准备工作

  1. 确保已安装 ADB 并能够识别设备(adb devices)。
  2. 在安卓设备上开启“开发者模式”和“USB 调试”。
  3. 确保 Chrome (87+) 或对应的 WebView 已安装。

示例代码

const{_android: android }=require('playwright');(async()=>{// 连接到安卓设备const[device]=await android.devices(); console.log(`Model: ${device.model()}`);// 启动 Chromeawait device.shell('am force-stop com.android.chrome');const context =await device.launchBrowser();const page =await context.newPage();await page.goto('https://github.com/microsoft/playwright'); console.log(await page.title());await device.screenshot({path:'android-screenshot.png'});await context.close();await device.close();})();

注:此功能目前仍处于实验阶段。

CI 集成

Playwright 与 GitHub Actions 集成非常简单。如果你在安装时选择了添加 GitHub Actions 工作流,它会为你生成 .github/workflows/playwright.yml

name: Playwright Tests on:push:branches:[ main, master ]pull_request:branches:[ main, master ]jobs:test:timeout-minutes:60runs-on: ubuntu-latest steps:-uses: actions/checkout@v4 -uses: actions/setup-node@v4 with:node-version: lts/* -name: Install dependencies run: npm ci -name: Install Playwright Browsers run: npx playwright install --with-deps -name: Run Playwright tests run: npx playwright test -uses: actions/upload-artifact@v4 if: always() with:name: playwright-report path: playwright-report/ retention-days:30

MCP 使用

在现代开发流程中,我们可以利用 Model Context Protocol (MCP) 将 Playwright 的自动化能力暴露给 AI Agent。

通过配置 Playwright MCP 服务,AI 可以:

  1. 自动化交互:根据自然语言描述,AI 可以在浏览器中点击、输入、导航。
  2. 错误诊断:当测试失败时,AI 可以读取追踪文件(Trace)并结合源码给出修复方案。
  3. 动态录制:让 AI 生成复杂的 Playwright 测试脚本。

要在 GitHub Copilot 或其他支持 MCP 的环境中使用,你可以:

  1. 安装插件:在 VS Code 的扩展市场中搜索 @mcp playwright 并下载安装相应的 MCP 服务器插件。
  2. 配置连接:在 GitHub Copilot 的设置中添加该 MCP 服务,授予其浏览器的控制权限。

一旦配置完成,你就可以直接在 Chat 窗口中命令 AI:“帮我打开 xxx 网站并截个图”,或者“在这个页面执行一个登录流程”。

总结

Playwright 凭借高性能、智能化、全场景覆盖的特性,完美适配现代 Web 应用的自动化测试需求。从基础的页面交互到复杂的移动端 / 真机测试,从本地调试到 CI 集成,再到 AI 协同提效,Playwright 构建了完整的自动化测试生态。相比 Selenium,它更简洁、更稳定、更贴合现代开发流程,是值得投入学习的下一代自动化测试框架。

作者:Smoothcloud润云

Read more

5步实现ESP32无人机合规识别:ArduRemoteID开源方案详解

5步实现ESP32无人机合规识别:ArduRemoteID开源方案详解 【免费下载链接】ArduRemoteIDRemoteID support using OpenDroneID 项目地址: https://gitcode.com/gh_mirrors/ar/ArduRemoteID 面临FAA无人机识别法规的合规难题?ArduRemoteID为您提供完整的开源无人机识别解决方案。这个基于ESP32芯片的开源项目,通过实现MAVLink和DroneCAN协议的OpenDroneID发射器,帮助无人机爱好者轻松满足RemoteID法规要求。 硬件选择与连接指南 ArduRemoteID支持ESP32-S3和ESP32-C3两种主流芯片,兼容7种开发板。推荐使用ESP32-S3开发板,其引脚配置如下: * UART TX引脚:18 * UART RX引脚:17 * CAN TX引脚:47 * CAN RX引脚:38 通过USB连接到标有"UART"的端口用于MAVLink通信和调试,或通过UART连接到飞行控制器的RX(17)/TX(18)/GND引脚。CAN连

无人机操控模式解析:美国手、日本手、中国手

无人机操控模式解析:美国手、日本手、中国手

无人机操控模式解析:美国手、日本手、中国手 无人机飞行中的“美国手”“日本手”“中国手”,并非指操控者的国籍或手部特征,而是全球主流的三种遥控器摇杆功能分配模式。其核心差异在于“油门(控制升降)”“俯仰(控制前后)”“横滚(控制左右)”“偏航(控制机头转向)”四大基础控制通道的分配逻辑不同,直接影响飞行操作的直觉性和适配场景。现代主流无人机遥控器均支持这三种模式的切换,选择核心取决于个人习惯、使用场景及技术门槛。 一、核心定义:三种模式的操作逻辑拆解 无人机遥控器通常有两个核心操纵摇杆(左手摇杆+右手摇杆),每种“手型”的本质是将四大控制功能分配给不同摇杆的“上下/左右”动作,以下是详细拆解: 1. 美国手(Mode 2):全球主流,新手首选 **定义**:因早期美国航模玩家广泛使用并推广而得名,是目前消费级无人机的默认模式,全球用户占比超70%,也是CAAC(中国民航局)执照培训的推荐模式。

KaiwuDB+CodeArts 智能体,让ai快速构建一个智能家居本地化数据处理系统

针对智能家居云端数据处理模式的网络依赖、低延迟性差、隐私泄露三大痛点,基于 KaiwuDB(KWDB)多模时序数据库 + 华为 CodeArts 代码智能体的本地化数据处理解决方案。从环境搭建、KWDB 自动化部署,到系统全模块开发、接口测试实现全流程落地,打造零云端依赖、低延迟、高隐私的智能家居本地化数据处理系统,方案基于开源技术栈与自动化开发工具,降低技术门槛,适配新手开发者与实际家庭场景需求。         随着智能家居设备渗透率持续提升,家庭中温湿度传感器、智能灯、空调、门锁等设备呈规模化增长,设备运行产生的时序数据(温湿度、能耗、设备状态)与关系型数据(设备信息、规则配置)呈爆发式增长,对数据的存储、处理与利用提出更高要求。 本文选择KaiwuDB作为本地化数据存储与计算核心,华为 CodeArts 代码智能体作为自动化研发引擎,二者结合实现智能家居本地化数据处理系统的高效构建,核心优势如下: 1.1 KaiwuDB:适配 AIoT 场景的多模数据库基座 KaiwuDB(开源版本简称

人形机器人:百万亿美元赛道的终极逻辑从“万物皆可机器人化”到“人形机器人是终极通用平台”

人形机器人:百万亿美元赛道的终极逻辑从“万物皆可机器人化”到“人形机器人是终极通用平台”

人形机器人:百万亿美元赛道的终极逻辑 从“万物皆可机器人化”到“人形机器人是终极通用平台” 一、用户洞察的深刻性:为什么“百万亿美元”不是夸张 “未来汽车也可以发展成为人形机器人控制的智能汽车,可以说现有的一切工业制造可以人形机器人化,因此人形机器人是百万亿美元的赛道。” 这个洞察触及了人形机器人产业的终极本质——它不是单一产品,而是重塑一切物理世界交互方式的通用平台。 让我们用数字说话: 可被“人形机器人化”的领域当前全球市场规模人形机器人化后的潜在价值汽车产业3万亿美元汽车成为“人形机器人的移动座舱”工业制造15万亿美元工厂成为“人形机器人集群的协作网络”商业服务10万亿美元商场、酒店、餐厅成为“人形机器人服务场景”家庭经济20万亿美元家庭成为“人形机器人的生活空间”医疗康养8万亿美元医院成为“人形机器人辅助诊疗平台”特种作业5万亿美元危险环境成为“人形机器人专属作业区”教育科研4万亿美元实验室、教室成为“人形机器人教学空间”农业矿业6万亿美元田间、矿井成为“人形机器人作业场”物流运输7万亿美元仓库、港口成为“人形机器人调度中心”国防安保2万亿美元战场、边境成为“