Hogwarts测试开发
07-05·北京测吧员工
避开 Playwright 常见陷阱 二
坑2:定位器写得“太聪明”复杂CSS选择器、依赖文本内容的选择器、XPath——这些东西写的时候觉得很爽,一改版全废。比如你写了个page.locator('#main-content > div:nth-child(3) > button'),开发同事把页面结构调整了一下,你的测试就挂了。正确的做法:**优先用data-testid**。让开发在核心UI元素上加上测试专用的属性,这是代码和测试之间的“契约”。# ❌ 脆弱的选择器page.locator('#app > div.container > button.btn-primary')# ✅ 稳定的选择器page.locator('[data-testid="submit-button"]')如果项目里暂时没有data-testid,退而求其次可以用get_by_role 或get_by_text,但尽量选择不容易变动的属性。坑3:自动等待“撞上”组件重渲染这个坑比较隐蔽,很多人都没意识到。Playwright的自动等待机制是这样的:它检查元素是否可见、稳定、可操作,检查通过之后立即执行操作。但如果就在“检查通过”和“执行操作”之间的那个瞬间,你的组件正好重新渲染了——按钮被替换成了一个新按钮——点击就会失败,报错Element is not attached to the DOM。典型场景:点击保存按钮,按钮变成“保存中...”的禁用状态,保存完成后再变回可点击状态。第二次点击就可能撞上重渲染。解决方案:# 方案一:用 data-testid 定位到不会重渲染的外层元素save_button = page.locator('[data-testid="save-container"] button')save_button.click()# 方案二:点击前先显式等待一下save_button.wait_for(state="visible")save_button.click()或者更干脆——在测试环境里把动画效果关掉,减少重渲染的触发。
发布于 北京
分享
评论
未登录
友善发言
image-upload
评论
加载中