Skip to content

Latest commit

 

History

24 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

browser-playwright

Playwright 这个测试软件现在的运行环境是 Node JS 去操控前端的浏览器。我想开发一个前端库,运行在浏览器上, 需要对齐以下目标:

  1. 需要覆盖页面操作的所有API, 用法与官方一致。 Locator, 断言, 页面事件的触发,鼠标键盘操作,注入脚本等是必须要具备的。 触发事件时,要接近真实的事件,比如鼠标点击,先产生pointevent,然后mousedown, mouseup事件,最后click事件, 类似这种事件要模拟真实环境来触发。 估计playwright源码中也是类似来实现的。
  2. 不需要它的配置,启动与 Browser,BrowserServer等API, 因为这个库会直接在页面执行,直接可以获得当前页面
  3. 网络请求的拦截和模拟,如果前端可以就实现。 截图与截图比较的功能,如果前端可以做就实现
  4. 页面元素的Role信息,不知道仅通过页面上,能否获得,还是必须得有扩展或者CDP协议才能获得。 如果从页面上无法获取准确的role信息, 那就做一个模拟版本,可以通过标签名或属性来动态识别。
  5. 定时器使用真实的定时器即可,无须模拟定时器或 模拟 Clock

复刻完 这个库之后,我目前写的众多的playwright脚本就可以用它在页面运行了,比如

 import { test, expect } from 'browser-playwright'

test('弹窗的事件', async ({ page }) => {
  page.on('pageerror', (exception) => expect(exception).toBeNull())
  await page.goto('modal#modal-event')
  const content = page.locator('.is-message')
  await page.getByRole('button', { name: '打开带事件弹窗' }).first().click()
  await expect(content).toHaveText(/show 事件触发了/)
 })

这样,它就可以无缝的嵌入 vue, react等前端项目中。 然后我需要一个运行函数runScript,它无框架依赖,接收脚本,然后可以逐行执行script脚本, 每执行一步就触发一下事件,告知外界它的当前执行的位置

 function runScript( script: string){

}

最后,还需要一个Vue组件,使用runScript 这个函数,这个组件的script属性接收一个脚本字符串,然后在浏览器上浮动一个UI界面,中间是当前执行的代码下,旁边有有播放,单步,下一步,暂停等按钮。 类似一个调试功能的设计。 这样,我有这个vue组件的话,就可以在前端工程中悬浮一个页面级的自动测试工具了。 传入一段测试脚本,它就能执行,断言成功或失败,都可以从界面上看到。 执行结束,还有和playwright测试结束后一致的测试结果, 多少个成功,多少个失败这样的结果 。

playwright-main 文件夹是截止到2026.7.23号的playwright的官方源码。 你可以参考它的实现,但禁止修改文件夹内容。

在根目录要生成一个 AGENT.md, 记录这个仓库的开发规范。

构建与启动示例

工程代码在 browser-playwright/ monorepo(pnpm + Vite+)。环境要求:Node.js >= 22.18pnpm 11+

# 进入 monorepo
cd browser-playwright

# 安装依赖
pnpm install
# 或:vp install

# 构建全部包(core / browser-playwright-vue / site)
pnpm build

# 启动演示站(apps/site)
pnpm dev

浏览器打开终端里提示的本地地址(一般为 http://localhost:5173)。页面右下角有浮动调试面板,可对 README 同类脚本做播放 / 暂停 / 单步 / 停止。

常用命令

命令 说明
pnpm install 安装 workspace 依赖
pnpm build 构建所有包
pnpm dev 启动 apps/site 演示(已 alias 到源码,改库可 HMR)
pnpm --filter site accept 无头验收 README 脚本(getByRoleclicktoHaveText
pnpm ready 全量校验(check + test + build)

单独构建某个包:

pnpm --filter browser-playwright build          # packages/core
pnpm --filter browser-playwright-vue build      # Vue 调试组件
pnpm --filter site build                       # 演示站生产构建

About

Playwright的直接浏览器页面执行的版本

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages