Python+Playwright自动化入门
一、Playwright介绍
Playwright 是专门为满足端到端测试的需求而创建的。Playwright 支持所有现代渲染引擎,包括 Chromium、WebKit 和 Firefox。在 Windows、Linux 和 macOS 上进行测试,在本地或在 CI 上进行测试,无头或使用本机移动仿真。
参考:
中文版:Playwright 入门介绍和使用指南_playwright中文手册-CSDN博客
英文版:Installation | Playwright Python(官方文档)
注:Python版本需要3.8及以上
二、使用准备
Playwright安装:
step1、以管理员身份运行cmd:
step2、执行安装命令:
pip install playwright
step3、检查安装:
在Python安装路径Script文件夹下:C:\Python312\Scripts,可以看到playwright.exe
在在Python安装路径site-packages文件夹下:C:\Python312\Lib\site-packages,可以看到playwright包
浏览器安装
step1、执行安装命令:
# 下载Chromium、Firefox和WebKit的最新版本
playwright install
# 下载单个浏览器
playwright install chromium
playwright install firefox
playwright install webKit
step2、检查安装:
保存路径:C:\Users\<YourUsername>\AppData\Local\ms-playwright
三、入门实践
入门示范代码:
# 导入非异步执行的模块
from playwright.sync_api import sync_playwright
# 启动非异步服务
p = sync_playwright().start()
# 实例化chromium浏览器,"headless=False"参数表示打开展示浏览器窗口
browser = p.chromium.launch(headless=False)
# 新建标签页
page = browser.new_page()
# 打开指定网址
page.goto('https://www.baidu.com')
# 打印标签页的title
print(page.title())
# 输入搜索关键字
page.locator('#kw').fill('bigseller')
# 点击搜索按钮
page.locator('#su').click()
# 等待搜索内容加载
page.wait_for_timeout(2000)
# 获取搜索内容
lcs = page.locator('//a[@data-showurl-highlight="true"]').all()
# 打印搜索内容
print(lcs)
for i in lcs:
print(i.inner_text())
# 关闭浏览器
browser.close()
# 停止playwright服务
p.stop()
执行效果:
20240504124721_rec_
元素定位:
page.locator() # 通过CSS选择器或者Xpath路径定位
page.get_by_text() # 通过文本内容定位
page.get_by_role() # 通过元素角色定位
page.get_by_placeholder() # 通过用户视觉定位
page.get_by_label() # 通过元素关联的 label 定位
page.get_by_alt_text() # 通过元素关联的 alt属性 定位
page.get_by_title() # 根据元素的 title 定位
拓展:Playwright常用元素定位方法https://mp.csdn.net/mp_blog/creation/success/143329763
四、录入转脚本
启动录入工具:
执行命令,自动打开工具和浏览器:
playwright codegen
playwright codegen wwww.baidu.com
录入操作生成代码:
录入行为:
20240504153525_rec_
粘贴代码:
import re
from playwright.sync_api import Playwright, sync_playwright, expect
def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto("https://www.baidu.com/")
page.locator("#kw").click()
page.locator("#kw").fill("bigseller")
page.locator("#kw").press("Enter")
# ---------------------
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)
五、跟踪功能
跟踪功能里面,可以看到每一个执行节点的执行信息,包括有:执行时长,执行前中后的截图,参数等,如果执行存在问题,可以通过这个方法去回溯定位
代码加入跟踪功能:
# 导入非异步执行的模块
from playwright.sync_api import sync_playwright
# 启动非异步服务
p = sync_playwright().start()
# 实例化chromium浏览器,"headless=False"参数表示打开展示浏览器窗口
browser = p.chromium.launch(headless=False)
# 创建BrowserContext对象
context = browser.new_context()
# 启动跟踪功能
context.tracing.start(snapshots=True,sources=True,screenshots=True)
# 新建标签页
page = context.new_page()
# 打开指定网址
page.goto('https://www.baidu.com')
# 打印标签页的title
print(page.title())
# 输入搜索关键字
page.locator('#kw').fill('bigseller')
# 点击搜索按钮
page.locator('#su').click()
# 等待搜索内容加载
page.wait_for_timeout(2000)
# 获取搜索内容
lcs = page.locator('//a[@data-showurl-highlight="true"]').all()
# 打印搜索内容
print(lcs)
for i in lcs:
print(i.inner_text())
# 结束跟踪
context.tracing.stop(path='trace.zip')
# 关闭浏览器
browser.close()
# 停止playwright服务
p.stop()
执行脚本生成跟踪文件:
20240504154946_rec_
解析跟踪文件:
用于用例执行问题的排查
打开“trace.playwright.dev”网址,将文件拖入进去:
20240504155352_rec_
通过命令行的方式解析跟踪文件:
playwright show-trace trace.zip
作者:HAMYHF