Selenium、Cypress、Playwright盘点

内容分享23小时前发布 DunLing
0 0 0

先给个通俗比喻,快速定调

把这三个工具比作「网页测试司机」:

  • Selenium:老资历的「全能司机」—— 啥车(浏览器 / 语言)都能开,啥路况(平台)都能走,但操作繁琐(要调座椅、调后视镜、手动挂挡),开得慢;
  • Cypress:只开「跑车(前端 JS/TS)」的专属司机 —— 不用调任何设置,踩油门就飞(速度快),还能实时看路况(调试爽),但只能开跑车,不能开货车 / 摩托车(不支持多语言 / 移动端);
  • Playwright:新一代「智能全能司机」—— 既像 Selenium 能开各种车,又像 Cypress 不用手动调太多,开得快,还能兼顾跑车、货车、摩托车(多语言 / 全浏览器 / 移动端)。

下面用「环境搭建→写用例→运行调试」的完整流程,结合百度搜索的简单例子,一步步讲透每个工具的用法和特点。


一、Selenium:老牌全能手(适合多语言 / 全场景,但麻烦)

核心特点(大白话)

  • 支持 Python/Java/JS/C# 等所有主流语言,适合团队里有前端、后端、测试多角色的场景;
  • 要手动装「浏览器驱动」(列如 Chrome 要装 ChromeDriver),不然连不上浏览器;
  • 运行时是「远程控制」浏览器(和网页不在一个程序里),所以慢,还要手动等网页加载。

【使用步骤 + 实例】(以 Python 为例,最易上手)

步骤 1:搭建环境(3 步)

  1. 装 Python(官网下载,一路下一步);
  2. 装 Selenium 库:打开命令行,输入 pip install selenium;
  3. 装浏览器驱动(关键坑!):看自己 Chrome 的版本(列如 120 版),去「ChromeDriver 官网」下载对应版本的驱动;把驱动文件(列如 chromedriver.exe)放到 Python 安装目录,或系统环境变量里(不然代码找不到)。

步骤 2:写测试用例(打开百度,搜「测试」,验证标题)

新建文件 selenium_test.py,复制下面代码(每行都标了注释,一看就懂):

# 1. 导入Selenium的核心包
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 2. 启动Chrome浏览器(如果驱动没配环境变量,要写驱动路径:webdriver.Chrome(executable_path="chromedriver.exe"))
driver = webdriver.Chrome()

try:
    # 3. 打开百度首页
    driver.get("https://www.baidu.com")
    
    # 4. 手动等待搜索框加载(Selenium不会自动等,不写这行可能报错)
    search_box = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "kw"))  # 定位搜索框(ID是kw)
    )
    
    # 5. 在搜索框输入「测试」
    search_box.send_keys("测试")
    
    # 6. 点击搜索按钮(定位按钮:ID是su)
    driver.find_element(By.ID, "su").click()
    
    # 7. 等待页面加载,验证标题是否包含「测试_百度搜索」
    WebDriverWait(driver, 10).until(
        EC.title_contains("测试_百度搜索")
    )
    print("测试成功!页面标题:", driver.title)

finally:
    # 8. 关闭浏览器
    driver.quit()

步骤 3:运行 & 调试

  • 命令行输入 python selenium_test.py,会看到 Chrome 自动打开、搜素、关闭;
  • 调试痛点:如果报错(列如驱动版本不对、没等加载),只能看文字日志,没法回看操作过程,得一点点改等待时间 / 定位方式。

【优缺点(通俗版)】

✅ 优点:

  • 啥都能测:PC 端所有浏览器、甚至结合 Appium 测手机 APP;
  • 团队里不管是写 Python 的后端,还是写 Java 的测试,都能上手;
  • 网上搜「Selenium 报错」,10 个问题 9 个有答案(社区太老了)。

❌ 缺点:

  • 配置麻烦:驱动版本不对、路径没配,第一步就卡半天;
  • 写代码累:要手动加各种「等待」,不然网页没加载完就操作会报错;
  • 运行慢:打开浏览器、操作元素都有延迟,测 10 个用例要等半天。

二、Cypress:前端专属快枪手(开箱即用,调试爽)

核心特点(大白话)

  • 只认 JS/TS,纯前端团队用着爽,后端 / 测试如果不会 JS 就别碰;
  • 不用装驱动、不用配环境,一键启动;
  • 和网页「跑在一个程序里」,操作快,还能自动等页面加载(不用写等待代码);
  • 调试时能「时间旅行」—— 每一步操作都能回看,像看监控录像。

【使用步骤 + 实例】

步骤 1:搭建环境(2 步,前提是装了 Node.js,前端都懂)

  1. 新建一个空文件夹(列如 cypress_demo),打开命令行进入该文件夹;
  2. 初始化项目 + 装 Cypress:
  3. bash
  4. 运行
  5. npm init -y # 初始化npm项目(生成package.json) npm install cypress –save-dev # 装Cypress

步骤 2:启动 Cypress(可视化界面)

  • 命令行输入 npx cypress open,第一次运行会自动装依赖,然后弹出 Cypress 的可视化界面;
  • 界面里点「E2E Testing」→ 选 Chrome → 点「Start E2E Testing in Chrome」,会自动生成示例测试文件。

步骤 3:写测试用例(百度搜索)

在 Cypress 界面的「Specs」里,新建文件 baidu_test.cy.js,复制下面代码:

// Cypress的用例写法:describe是测试套件,it是测试用例
describe('百度搜索测试', () => {
  // 每个用例执行前,先打开百度(不用重复写)
  beforeEach(() => {
    cy.visit('https://www.baidu.com')  // 打开百度
  })

  it('搜索「测试」,验证标题正确', () => {
    // 1. 定位搜索框,输入「测试」(Cypress自动等搜索框加载,不用写等待)
    cy.get('#kw').type('测试')  // #kw是CSS选择器,定位搜索框
    
    // 2. 点击搜索按钮
    cy.get('#su').click()
    
    // 3. 验证页面标题包含「测试_百度搜索」
    cy.title().should('include', '测试_百度搜索')
    
    // 4. 还能截图(自动的,报错也会截)
    cy.screenshot()
  })
})

步骤 4:运行 & 调试

  • 在 Cypress 界面点击 baidu_test.cy.js,会自动打开 Chrome,左边能看到每一步操作(列如「访问百度」「输入测试」),点哪一步就能回看当时的页面状态(时间旅行);
  • 改代码后不用重启,保存后 Cypress 会自动重新运行,实时看结果。

【优缺点(通俗版)】

✅ 优点:

  • 零配置:装完就能用,前端开发者不用学新东西(全是 JS/CSS);
  • 调试爽到爆:每一步都能回看,报错了直接看当时的页面,不用猜;
  • 写代码省事儿:不用写等待、不用处理异步,代码比 Selenium 短一半。

❌ 缺点:

  • 语言锁死:只能用 JS/TS,团队里有 Python/Java 开发者的话,没法共用;
  • 浏览器支持差:原生不支持 Safari(苹果浏览器),想测 Safari 得绕弯;
  • 搞不定多标签:列如点链接开新标签,Cypress 没法操作新标签,只能 hack(改代码)。

三、Playwright:全能新贵(平衡 Selenium 和 Cypress 的痛点)

核心特点(大白话)

  • 支持 JS/TS/Python/Java/C#,兼顾多语言团队;
  • 不用手动装驱动,一行命令装完所有浏览器(Chrome/Firefox/Safari);
  • 运行速度和 Cypress 差不多,还能自动等加载,支持多标签 / 多窗口 / 手机模拟器;
  • 微软出品,文档全,踩坑少。

【使用步骤 + 实例】(以 JS 为例,前端易理解)

步骤 1:搭建环境(2 步)

  1. 新建空文件夹(playwright_demo),命令行进入,初始化项目:
  2. bash
  3. 运行
  4. npm init -y npm install playwright –save-dev
  5. 安装浏览器(Playwright 自带,一行搞定):
  6. bash
  7. 运行
  8. npx playwright install # 自动装Chrome/Firefox/Safari

步骤 2:写测试用例(百度搜索 + 多标签演示,体现优势)

新建文件 playwright_test.js,复制下面代码:

// 1. 导入Playwright的核心包
const { test, expect } = require('@playwright/test');

// 2. 测试用例:百度搜索+打开新标签
test('百度搜索+多标签测试', async ({ page, context }) => {
  // 3. 打开百度首页
  await page.goto('https://www.baidu.com');
  
  // 4. 定位搜索框,输入「测试」(自动等待加载)
  await page.locator('#kw').fill('测试');
  
  // 5. 点击搜索按钮
  await page.locator('#su').click();
  
  // 6. 验证标题正确
  await expect(page).toHaveTitle(/测试_百度搜索/);
  console.log("搜索测试成功!");

  // --- 演示Playwright的多标签优势(Cypress做不到,Selenium要写许多代码) ---
  // 7. 新建一个标签页
  const newPage = await context.newPage();
  // 8. 新标签页打开百度图片
  await newPage.goto('https://image.baidu.com');
  // 9. 验证新标签页标题
  await expect(newPage).toHaveTitle(/百度图片/);
  console.log("多标签测试成功!");
});

步骤 3:运行 & 调试

  • 命令行运行(可选无头模式 / 可视化模式):
  • bash
  • 运行
  • # 可视化运行(能看到浏览器操作) npx playwright test playwright_test.js –headed # 生成测试报告(带截图/录屏) npx playwright show-report
  • 调试:Playwright 有内置调试器,命令行输入 npx playwright test –debug,能一步步执行代码,看每一步的页面状态。

【优缺点(通俗版)】

✅ 优点:

  • 全能:支持所有浏览器(包括 Safari)、多语言、多标签、手机模拟器(列如模拟 iPhone 打开百度);
  • 省心:不用装驱动,自动等待,代码比 Selenium 简洁,比 Cypress 稍复杂但功能全;
  • 报告友善:自动生成带截图 / 录屏的报告,报错了直接看视频。

❌ 缺点:

  • 社区比 Selenium 小:有些冷门问题(列如测老旧 IE 浏览器),网上答案少;
  • 学习曲线比 Cypress 高:多了些「上下文」「页面」的概念,前端新手要学 1 小时;
  • 相对年轻:2020 年才出,比 Selenium(2004 年)、Cypress(2015 年)新,极少数边缘场景可能有小坑。

四、通俗对比总结(表格版)

对比维度

Selenium(老全能)

Cypress(前端专属)

Playwright(新全能)

上手难度

难(要配驱动、写等待)

易(开箱即用,前端一看就会)

中(比 Selenium 易,比 Cypress 稍难)

运行速度

慢(远程控制浏览器)

极快(和网页同进程)

快(接近 Cypress)

支持语言

所有(Python/Java/JS 等)

仅 JS/TS

所有(Python/Java/JS/C# 等)

多标签 / 移动端

支持(但代码复杂)

基本不支持

原生支持(代码简单)

调试体验

差(只能看日志)

极好(时间旅行)

优秀(调试器 + 录屏)

浏览器支持

全(但 Safari 配置麻烦)

少(无原生 Safari)

全(一键装所有浏览器)

五、选型提议(大白话)

  1. 纯前端小团队(列如就 3-5 个前端,只测网页):选 Cypress,上手快、调试爽,不用折腾;
  2. 多语言大团队(前端写 JS、后端写 Python、测试写 Java):选 Playwright,所有人都能写,功能全还快;
  3. 维护老系统 / 要测手机 APP:选 Selenium(结合 Appium 测 APP),老问题都有解决方案;
  4. 要测 Safari / 多标签:直接选 Playwright,Cypress 搞不定,Selenium 太麻烦;
  5. 新手入门:先试 Cypress(最快出成果),再学 Playwright(拓展能力),Selenium 除非工作要求,否则不用先学。
© 版权声明

相关文章

暂无评论

none
暂无评论...