
公司最近在推广用 Playwright 做自动化测试,不少测试同事试了一键录制功能后大为震撼,但紧接着问题就出现了:录制的代码不一定能跑通,需要有人来改😂
——这代码啥意思啊?!怎么改啊?! 就是被问的最多的问题,没有之一😂
小编索性花了半天时间,写了一份内部使用手册,就是那种全是人话,没一点啰嗦废话的手册
我们拿“登录 GitHub”这个场景来说,毕竟公司内部的网站是保密的
Playwright 的代码主要分三大块:
这部分几乎固定,基本上不用改,大概了解(如果你想的话😂)
async def test_github_login():
asyncwith async_playwright() as p:
# 1. 启动浏览器
browser = await p.webkit.launch(headless=False)
# 2. 创建上下文和页面
context = await browser.new_context(
viewport={'width': 1280, 'height': 720}
)
page = await context.new_page()
# 3. 监听请求和响应
page.on("request", lambda req: print(f">> {req.method} {req.url}"))
page.on("response", lambda res: print(f"<< {res.status} {res.url}"))
async def:定义一个"异步函数",后续会使用async with async_playwright() as p::创建 Playwright 实例browser = await p.webkit.launch(headless=False):启动 WebKit 浏览器(并显示浏览器界面)page = await context.new_page() :创建一个新页面(标签页)page.on("request", lambda req):监听网络请求和响应(request和response)这是页面上的输入、点击、滑动等操作的实现代码(是我们修改代码的重点部分)
# 跳转到登录页
await page.goto("https://github.com/login")
# 填写账号密码
await page.fill("#login_field", "你的用户名")
await page.fill("#password", "你的密码")
# 点击登录按钮
await page.click('input[name="commit"]')
# 添加等待时间,让页面跳转
await page.wait_for_timeout(9000)
2.1、await page.goto("URL") :URL就是我们自己的测试网址
2.2、最常用的几个鼠标动作:
click()(还有双击、右击)fill()set_input_files()query_selector()2.3、页面元素
await page.click('input[name="commit"]')括号里 '' 的部分就是我们要定位的元素,支持 CSS 和 XPath 等选择器写法
关于元素选择怎么获取,之前有一篇专门介绍,可以点击查看哈👇👇
python+chrome自动化2-XPath、CSS一篇精通
2.4、特殊处理:
await page.click('text=Login'):使用文字进行精确元素匹配聪明的你可能发现了,代码里到处都是 await这其实是 Playwright 的一大优点——智能等待。我们不用自己写time.sleep(3)等待3秒时间了,Playwright 会自动等元素准备好再执行,如果一直没出来……它才会报错(默认等 30 秒)
比如截图,保存PDF,Frame表单切换,执行js脚本,集成pytest报告等等,这些等用熟了再研究也不迟,今天咱们主打一个“能跑起来就行”
这个错误就是没有安装 Playwright 内置浏览器,执行命令playwright install即可解决

TimeoutError一般都是忘记加await等待语句了,先检查一下自己代码是否存在此问题

当然,想学习任何一门技术都是有门槛的,相信可以耐心看到这里的小伙伴并不多😂,但小编还是觉得在这个AI遍地开花的年代,自身的学习和沉淀很重要,不然我们人类还剩下什么?
-END-
不要忘记点赞哦~