内置浏览器(IAB)Playwright 点击通道整页挂起:定位正常、元素可见,click()(含 force:true)无回执超时;CUA 坐标点击正常
环境
症状
同一页面上,Playwright 通道的定位与查询全部正常,但点击指令全部挂起(等待超时),连 force: true 也一样;同一坐标走 CUA(坐标)通道立即成功。
复现步骤
- 打开上述页面(iframe 嵌入版或应用全屏版均可复现)
getByRole("button", { name: "Select Month" }) → count()=1、isVisible()=true
locator("#select-month .chosen-value") → count()=1
- 页面侧
elementFromPoint(元素中心) → 返回元素自身(无遮挡、在视口内)
locator.click() → 等满超时:Timeout waiting for locator … waiting on click for selector
locator.click({ force: true }) → 同样超时(force 已跳过 visible/stable/enabled/receives-events 全部检查)
- 对照:
tab.cua.click({ x: 505, y: 345 }) → 立即生效(aria-expanded false→true),后续月份下拉、日期下拉、图片详情全部用坐标点击完成,零失败
前奏:iframe 嵌入版上 frameLocator(...) 点击报 enter-frame 超时;改开应用全屏版(无 iframe)后问题依旧——与 iframe 无关。
定位链(四步排除)
- 两种定位器(getByRole / CSS 选择器)count 均=1、isVisible=true → 不是选择器问题
- 命中检测:元素中心 (505,345),elementFromPoint 返回元素自身 → 不是遮挡/视口外问题
click() 超时后,force:true(跳过全部可操作性检查)同样超时 → 不是可操作性检查不通过,是点击指令通道自身挂起
- CUA 坐标点击同坐标立即生效 → 页面本身可点,缺陷在客户端通道
定性
- 标准 Playwright 对
div[role=button] 本可正常点击(角色引擎认 role 属性,与标签名无关);
- force 模式在标准 Playwright 实现里,对已存在且已解析的元素不可能超时(跳过检查后派发是同步动作)——挂起说明点击指令在 IAB 桥接层排队/等待某个永不到来的回执;
- 更严重的是挂起而非快速失败:报错文本只有 "waiting on click for selector",没有原因,把排查方向误导到定位器上(实际定位三查全过)。
期望行为
click() 要么成功、要么快速失败并给出可诊断原因(如 hit-target 检测失败详情、稳定性检查失败详情);
force: true(跳过全部检查)不应挂起超时。
绕行方案(已验证,全程零失败)
- 点击一律改
tab.cua.click({x,y})(坐标从 getBoundingClientRect 中心取,配截图确认);
- 同页混用:查询/快照/evaluate 走 Playwright、点击走 CUA。
补充说明
- 页面本身无问题:真人浏览器操作正常;该缺陷只在 ZCode IAB 的 Playwright 点击通道出现。
- 触发条件与"非标准控件(React
div[role=button])+持续动画背景"的页面相关;具体触发点(动画干扰稳定性检查?桥接层回执等待逻辑?)未能进一步定位,供官方复现参考。
内置浏览器(IAB)Playwright 点击通道整页挂起:定位正常、元素可见,click()(含 force:true)无回执超时;CUA 坐标点击正常
环境
div[role=button],带aria-haspopup/aria-expanded;页面有持续动画背景层;视口 1280×720)症状
同一页面上,Playwright 通道的定位与查询全部正常,但点击指令全部挂起(等待超时),连
force: true也一样;同一坐标走 CUA(坐标)通道立即成功。复现步骤
getByRole("button", { name: "Select Month" })→count()=1、isVisible()=truelocator("#select-month .chosen-value")→count()=1elementFromPoint(元素中心)→ 返回元素自身(无遮挡、在视口内)locator.click()→ 等满超时:Timeout waiting for locator … waiting on click for selectorlocator.click({ force: true })→ 同样超时(force 已跳过 visible/stable/enabled/receives-events 全部检查)tab.cua.click({ x: 505, y: 345 })→ 立即生效(aria-expandedfalse→true),后续月份下拉、日期下拉、图片详情全部用坐标点击完成,零失败前奏:iframe 嵌入版上
frameLocator(...)点击报enter-frame超时;改开应用全屏版(无 iframe)后问题依旧——与 iframe 无关。定位链(四步排除)
click()超时后,force:true(跳过全部可操作性检查)同样超时 → 不是可操作性检查不通过,是点击指令通道自身挂起定性
div[role=button]本可正常点击(角色引擎认 role 属性,与标签名无关);期望行为
click()要么成功、要么快速失败并给出可诊断原因(如 hit-target 检测失败详情、稳定性检查失败详情);force: true(跳过全部检查)不应挂起超时。绕行方案(已验证,全程零失败)
tab.cua.click({x,y})(坐标从getBoundingClientRect中心取,配截图确认);补充说明
div[role=button])+持续动画背景"的页面相关;具体触发点(动画干扰稳定性检查?桥接层回执等待逻辑?)未能进一步定位,供官方复现参考。