使用playwright做前端项目的端对端自动化测试

1.在项目根目录下执行

javascript 复制代码
npm init playwright@latest

2.下载浏览器内核

javascript 复制代码
npx playwright install chromium

3.编写配置文件

javascript 复制代码
import { defineConfig, devices } from '@playwright/test'

/**
 * Read environment variables from file.
 * https://github.com/motdotla/dotenv
 */
// import dotenv from 'dotenv';
// import path from 'path';
// dotenv.config({ path: path.resolve(__dirname, '.env') });

/**
 * @see https://playwright.dev/docs/test-configuration
 */
export default defineConfig({
  testDir: './e2e',
  fullyParallel: true,
  forbidOnly: !!process.env.CI,
  retries: process.env.CI ? 2 : 0,
  workers: process.env.CI ? 1 : undefined,
  reporter: 'html',
  use: {
    baseURL: 'https://localhost:3434/#/',
    // 失败时自动截图
    screenshot: 'only-on-failure',
    // 失败时自动录像
    video: 'retain-on-failure',
    trace: 'on-first-retry',
  },
  webServer: {
    command: 'npm run dev',           // 启动 Vite 开发服务器的命令
    url: 'https://localhost:3434/#/',     // 等待服务器就绪的 URL
    reuseExistingServer: !process.env.CI,  // CI 环境下每次重建,本地复用
    timeout: 120 * 1000,              // 启动超时时间
    ignoreHTTPSErrors: true,           // 忽略 HTTPS 错误
  },

  projects: [
    {
      name: 'chromium',
      use: { ...devices['Desktop Chrome'] },
    },

    {
      name: 'firefox',
      use: { ...devices['Desktop Firefox'] },
    },

    {
      name: 'webkit',
      use: { ...devices['Desktop Safari'] },
    },

  ],
})

4.编写测试用例

javascript 复制代码
import { test, expect } from '@playwright/test'

test.use({
  ignoreHTTPSErrors: true,
})

test('自动化测试用例', async ({ page }) => {
  await page.goto('https://localhost:3434/#/login')
  await page.getByRole('textbox', { name: '请输入用户名' }).click()
  await page.getByRole('textbox', { name: '请输入用户名' }).fill('pengchangbin')
  await page.getByRole('textbox', { name: '请输入登录密码' }).click()
  await page.getByRole('textbox', { name: '请输入登录密码' }).fill('Guide12345678+')
  await page.getByRole('button', { name: '登录' }).click()
  await page.getByText('角色管理').click()
  await page.getByRole('button').filter({ hasText: /^$/ }).nth(3).click()
  await page.getByRole('button', { name: '保存' }).click()
  await page.getByText('文件中心').click()
  await page.getByText('图片文件').click()
  await page.getByRole('button', { name: '查询' }).click()
  await page.getByText('事件中心').click()
  await page.getByText('统计分析').click()
  await page.getByText('温度统计').click()
  const downloadPromise = page.waitForEvent('download')
  await page.locator('.icon-download').click()
  const download = await downloadPromise
  await page.getByRole('button', { name: '查询' }).click()
  await page.getByText('在线监测').click()
  await page.getByText('视频监控').click()
  await page.locator('.icon-pause').click()
  await page.locator('.icon-play').click()
  await page.getByRole('button', { name: '轮巡计划' }).click()
  await page.getByText('添加').click()
  await page.getByRole('button', { name: '关闭此对话框' }).click()
  await page.getByRole('button').nth(4).click()
  await page.getByRole('button', { name: '保存' }).click()
})

5.执行测试命令

javascript 复制代码
npm run test:e2e:chromium 

其他:可视化编写测试用例

javascript 复制代码
npx playwright codegen http://localhost:5013
相关推荐
hiahiahia12319 分钟前
Streaming Model Output
开发语言·前端
paopaokaka_luck20 分钟前
基于springboot+vue的益暖微光公益服务平台(DeepSeek公益助手、善款信息追溯、志愿服务积分闭环、ECharts运营分析、活动状态自动流转)
java·前端·javascript·spring boot·mysql·架构·echarts
栀椩30 分钟前
Electron 内嵌页面跨域问题(CORS/PNA)解决全记录
前端·javascript·electron
asaotomo36 分钟前
截图识题、AI 讲解、笔记沉淀:Chrome 扩展体验
前端·chrome·笔记
前端架构师-老李38 分钟前
HTML与CSS基础第五课—HTML的空格、换行、横线相关知识
前端·css·html
SEO_juper39 分钟前
Chrome 扩展一键查看当前页面 SEO 信息:不用切页面,点一下全出来
前端·javascript·chrome
Nymph_Zhu1 小时前
vue3+element-plus 文件上传
前端·typescript·vue3·element-plus
echome8881 小时前
CSS 布局:Flex 和 Grid 怎么选,附常见坑
前端·css·html
计算机魔术师1 小时前
科技巨头砸7400亿押注AI,为什么苹果成了唯一赢家?
前端
QianhangQianping1 小时前
撤销重做不是「存快照」:一个可视化编辑器的Operation 设计
java·前端·数据库·typescript·编辑器·前端架构·撤销重做