playwright功能/ui自动化
大模型时代,使用playwright---功能/ui自动化,需要高质量的用例--元素信息--操作,结合cursor把用例生成高质量的,基于自然语言用例--执行功能/ui自动化测试用例,这时就要在cursor里输入prd--用例--ui自动化,生成高质量的ui自动化测试用例。Playwright 测试很简单:执行操作,并将(页面)状态与预期结果进行断言校验。
Playwright核心原理:
第一个:Playwright直接操作浏览器的内核,它用websocket协议,没用http在中间转一下,它用websocket建了一个双向长连接的通道,它操作时调用浏览器内核接口来进行浏览器操作,指令不会有中转,几乎没有延迟,响应速度特别快;
第二个:它有智能等待的机制,它在做点击和输入之前检测目标是否可见,是否是稳定的可以交互的,不需要等待多长时间,直接写脚本就行;
第三个:Playwright有浏览器上下文的概念,在浏览器里创建了多个实例,每个独立的实例都有独立的上下文、独立的cookie、独立的缓存、独立的存储状态,在一个浏览器里同时并行多路测试,互不干扰,同时并行多路测试没有问题。selenium多个用户执行多个并发的时候,需要启多个浏览器进程,一个进程执行一个用例,执行5个并发的时候,要开5个进程,消耗浏览器资源很大,selenium没法支持比较高、比较大的并发。
Playwright脚本是拟人化的脚本。
HTML就是房子的毛坯结构,dom树就是房子的建筑图纸,一层是什么,二层是什么......,元素就是房间家具的标签,这个是桌子的标签等。ui自动化其实就是拿着dom树(建筑图纸),根据标签,去找到我要操作的哪个家具。说白点ui自动化就是从dom树里找到这个button在哪,输入框在哪。
Playwright 推荐定位器(优先用这一组,面向用户视角,比 css/xpath 更稳定)
原则:优先 accessibility 定位(get_by_role > get_by_label > get_by_placeholder > get_by_text),页面改样式不改语义,脚本不容易崩。
1、page.get_by_role () 【最推荐,ARIA 角色定位】
原理:根据元素的无障碍角色 (role)+ 可访问名称 name 定位,模拟屏幕阅读器识别页面,贴近真实用户感知
常见 role:button、checkbox、textbox、heading、link
python脚本:
page.get_by_role("button", name="登录").click()
page.get_by_role("textbox", name="用户名").fill("test")
js脚本:
await page.getByRole('button', {name: '登录'}).click()
2、page.get_by_text () 按文本内容定位
原理:匹配元素内部显示的文字,支持模糊 / 精确匹配
python脚本:
page.get_by_text("提交").click()
# exact=True 精确全匹配,区分大小写
page.get_by_text("提交", exact=True).click()
3、page.get_by_label () 表单输入框,通过 label 标签定位
原理:找到和<label>关联的输入框,也支持aria-label属性
python脚本:
# 直接定位输入框,不用定位label标签!
page.get_by_label("密码").fill("123456")
4、page.get_by_placeholder () 通过输入框占位符定位
原理:匹配 input 的placeholder提示文字(输入框灰色提示)
html
<input placeholder="请输入邮箱">
python脚本:
page.get_by_placeholder("请输入邮箱").fill("a@test.com")

用例------当前页面快照----ai 生成 playwright 脚本--执行
提升playwright脚本的准确性的前提是获取当前页面快照,生成一步执行一步,playwright脚本不能生成完再执行,生成playwright脚本尽可能成功。
基于prd生成case,执行ui自动化测试的核心是生成能执行的、准确的、定位率高的playwright脚本。
浙公网安备 33010602011771号