拓冰建站拓冰建站
首页 / 资讯中心 / 正文

如何用一份测试跑通三个浏览器:Playwright Python 实战上手指南

如何用一份测试跑通三个浏览器:Playwright Python 实战上手指南【免费下载链接】playwright-pythonPython version of the Playwright testing and automation library.项目地址: https://gitcode.com/GitHub_Trending/pl/playwright-python同一个下拉框,在 Chrome 里瞬间收起,在 Firefox 里慢半拍,到 WebKit 上动画没放完就消失了——每次发版前手工翻三台机器验证,谁也扛不住。Playwright Python 是一个浏览器自动化库:用一套 API 自动化 Chromium、Firefox、WebKit 三个引擎,测试用例写一遍,三边都能跑。它解决什么问题:不用手写等待,不用维护三套驱动逻辑Selenium 时代的测试有两个老毛病。第一个是时序:点击之后要手动 sleep 或显式等待,页面加载快一点慢一点,用例就飘。Playwright 的操作类方法在执行前会自行等待——fill会等到元素可编辑,click会等到可点击,大部分先睡一会再试的代码可以直接删掉。第二个是引擎差异:过去要覆盖三个浏览器,就得维护三份驱动配置和一堆怪癖 workaround。这里同一句page.goto、page.locator(...)在三个引擎上行为一致,唯一的分叉点是launch时选哪个browser_type。最短上手路径:两条命令装好,八行代码跑通首条用例pip install playwright playwright install第二条命令负责下载三个浏览器二进制。wheel 里已打包 Playwright 驱动(版本由 DRIVER_VERSION 锁定),不需要单独折腾 Node.js。装完即可运行这个示例,它来自 scripts/example_sync.py,与 README 中的官方同步 API 示例同源:from playwright.sync_api import sync_playwright with sync_playwright() as p: for browser_type in [p.chromium, p.firefox, p.webkit]: browser browser_type.launch() page browser.new_page() page.goto(http://playwright.dev) page.screenshot(pathfexample-{browser_type.name}.png) browser.close()需要 CI 容器时,utils/docker/ 目录里已有多套 Ubuntu 版本的 Dockerfile,系统依赖不用自己趟。 核心能力拆解:三个值得上车的特性Locator 与自动等待locator 不是此刻抓一把的快照,而是惰性引用:动作触发时才重新查找并重新等待。examples/todomvc/ 里的示例用例就是这么写的:page.locator(.new-todo).fill(TODO_ITEMS[0]) page.locator(.new-todo).press(Enter) expect(page.locator(.view label)).to_have_text([TODO_ITEMS[0]])最后一行的expect是断言 API,同样带重试直到超时,断言也不用再补先等再验。截图对比与网络留痕仓库里 tests/golden-chromium/、tests/golden-firefox/、tests/golden-webkit/ 三目录各存一份截图测试的标准答案:这张网格图就是 screenshot-sanity 用例的基准,测试断言page.screenshot()返回的字节与它一致。三个引擎渲染有细微差异时,最先暴露问题的就是这类字节级对比。网络留痕也不用依赖外部抓包:browser.new_context(record_har_path...)能把整个会话的流量记成 HAR(tests/async/test_har.py 测的就是这条路径)。用例挂掉之后,离线重放一遍完整请求序列即可。与 pytest 集成:同一套用例如何在 CI 里跑三遍引擎仓库里的 tests/async/ 和 tests/sync/ 本身就是答案。以 tests/async/conftest.py 为例,playwrightfixture 是 session 作用域的:整个测试会话共用一个 Playwright 驱动,浏览器由browser_typefixture 按--browser参数映射到 chromium、firefox、webkit,启动成本只付一次。一个踩坑提醒:sync_api和async_api是两套并行 API,同一进程里不要混用。写 async 用例要么自己asyncio.run,要么配 pytest-asyncio;纯串行用例用 sync 版更省心,这是本项目多数示例默认选 sync 的原因。另一个为什么这样选:归档网络证据选record_har而不是第三方抓包代理,因为它直接挂在浏览器上下文上,不引入额外进程,产出的 HAR 是标准格式,丢进任何重放工具都能用。 资源导航:去哪找现成代码scripts/example_sync.py 与 scripts/example_async.py:同步/异步最小可运行示例examples/todomvc/:基于 pytest 的完整示例测试套件,fixture 写法可直接抄tests/async/、tests/sync/:覆盖各特性的官方用例,进阶用法最好的参照CONTRIBUTING.md:环境准备,以及pytest --browser chromium的运行方式utils/docker/:CI 用 Docker 镜像一句话收尾:先选 sync_api,把 todomvc 示例跑通;等需要同一用例跑三引擎或失败留证据时,Playwright Python 已经在你的项目里了。【免费下载链接】playwright-pythonPython version of the Playwright testing and automation library.项目地址: https://gitcode.com/GitHub_Trending/pl/playwright-python创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门