playwright的调试模式,方便调试selector, locator语法及查找效果

下面是一套"边写边测 "的通用套路,确保 page.locator() / wait_for_selector() 在提交代码前就能一次跑通,不用每次都重跑完整流程。


  1. 官方"秒测"工具:Playwright Inspector

命令行里加 --paused 即可打开自带调试器:

bash 复制代码
# Python 例子
PWDEBUG=1 pytest my_test.py
# 或直接
playwright codegen https://your-site.com
  • 左侧 "Pick" 图标点一下,再点页面元素 → 自动生成最稳的 locator 代码。
  • 右侧 "Explore" 面板会实时显示:
    -- 匹配到几个节点
    -- 实际文本/属性值
    -- 高亮渲染
    → 把生成的代码复制进脚本即可,零手写。

  1. 在代码里快速"断言+高亮"

python 复制代码
loc = page.locator('span.text-20px.font-bold')

# 1) 断言存在且唯一
expect(loc).to_have_count(1)   # 多于 1 个会立即失败

# 2) 临时高亮 2 秒,肉眼确认
loc.evaluate('el => el.style.border = "3px solid red"')
page.wait_for_timeout(2000)

跑单条用例时一眼就能看到是不是你想找的元素。


  1. 交互式 REPL ------ 边敲边回车

官方提供 sync_playwright 的交互模式:

python 复制代码
from playwright.sync_api import sync_playwright
p = sync_playwright().start()
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto('https://your-site')
# 现在可以随便敲
loc = page.locator('button.el-button--primary')
loc.count()        # 立即返回匹配数量
loc.text_content() # 立即返回文本
loc.highlight()    # 页面直接闪绿框

调试完把确认好的 locator 复制到正式脚本即可。


  1. 脚本内"打印调试法"(最轻量)

python 复制代码
loc = page.locator('span:has-text("崔新")')
print('匹配数:', loc.count())      # → 1 才继续
print('文本:', loc.text_content()) # → 崔新

  1. 常见踩坑 checklist

  • 元素在 iframe → 先 page.frame_locator('#xxx').locator(...)
  • 等待时机不对 → 外加 loc.wait_for() 或 expect(loc).to_be_visible()
  • 动态 class 顺序变化 → 用 [class*="text-20px"] 而非完整串
  • 文本前后有空格 → text=/\s*崔新\s*/(Playwright 正则语法)

一句话流程

  1. PWDEBUG=1 pytest → Inspector 自动生成 locator
  2. 脚本里 expect(loc).to_have_count(1) + loc.highlight() 确认
  3. 通过后再集成到完整用例,基本一次写对。
相关推荐
凤山老林4 小时前
Spring Boot 启动冲刺:耗时剖析、懒加载策略与事件驱动初始化优化
spring boot·后端·python
朱涛的自习室5 小时前
我给 Gemini 4 和 DeepSeek 搞了套「末位淘汰」,AI 干活会更猛吗?(Day 3)
android·前端·后端
woniu_maggie8 小时前
SAP MDG主数据治理实战:从架构原理到项目实施全解析
后端
xiaoqiMikko8 小时前
Redis 实战(一):内存满了 —— 拒写、淘汰、被系统杀掉,以及删了 key 内存为什么不降(6.2.4 实测)
redis·后端
工程师小爱8 小时前
电芯尺寸合格,不等于电池包尺寸合格
后端
geovindu8 小时前
rust:Memento Pattern(续)
开发语言·后端·设计模式·rust·行为模式·备忘录模
闲云lazycloud8 小时前
第 1 课:Harness 与 Agent 运行时
人工智能·后端
熊哈哈O_o8 小时前
260+异构同步链路:DDL语法自动翻译在大规模数据同步中的实现原理
后端
用户9888321871749 小时前
别把 IOptionsSnapshot 注入单例:从生命周期看 .NET 配置读取
后端