You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chrome升级后Playwright的ScrollIntoViewIfNeeded异常问题求助

问题描述

我有一段一周前正常运行且未修改的代码,但被测系统有变更,且我已将Chrome升级至116版本。现在执行ScrollIntoViewIfNeeded时,首次调用似乎正常,但后续调用会出现如下日志:

=========================== logs ===========================
waiting for element to be and stable
element is and stable
element is not displayed, retrying in 0ms
waiting for element to be and stable
element is and stable
element is not displayed, retrying in 50ms
waiting for element to be and stable
element is and stable
element is not displayed, retrying in 100ms
waiting for element to be and stable
element is and stable

日志中的“element is and stable”存在格式缺失问题。我尝试使用不同元素执行滚动操作,但问题依旧。由于Playwright版本未发生变化,我怀疑这是与新版Chrome(116版本)的兼容性问题。另外需要说明的是,首次正常调用是页面向下滚动,后续异常的调用则是向上滚动,虽看似无关但特此提及。请问是否有其他人遇到同样的问题?

解决方案建议
  • 检查Playwright版本兼容性:Chrome 116属于较新的版本,Playwright 1.37及以上版本才正式适配该Chrome版本。即便你之前版本没改动,也建议升级到对应适配版本,多数类似滚动异常都是版本不匹配导致的。
  • 替换滚动方法为原生实现:暂时绕过Playwright封装的ScrollIntoViewIfNeeded,直接用原生JS逻辑滚动,比如:
    await element.evaluate(el => el.scrollIntoView({ behavior: 'smooth', block: 'nearest' }));
    
    针对向上滚动场景,可调整block参数为start或center,测试是否能避免元素状态判断异常。
  • 排查被测系统变更的影响:被测系统的改动可能导致页面布局、动态元素渲染逻辑变化,比如向上滚动时元素被悬浮层遮挡、动态隐藏或位置计算偏差。可以在滚动前添加debug代码,打印元素关键状态:
    const isVisible = await element.isVisible();
    const boundingBox = await element.boundingBox();
    console.log(`元素可见性:${isVisible},位置信息:${JSON.stringify(boundingBox)}`);
    
  • 尝试临时规避方案:如果仅向上滚动出问题,可在滚动前先执行一次微小手动滚动:
    await page.mouse.wheel(0, -20); // 向上滚动20px
    await element.scrollIntoViewIfNeeded();
    
    或者强制等待元素稳定后再滚动:
    await element.waitFor({ state: 'visible', timeout: 3000 });
    await element.scrollIntoViewIfNeeded();
    
  • 确认官方已知问题:确实有不少用户在Chrome 116升级后遇到Playwright元素稳定性判断、滚动相关的bug,可查看Playwright的issue列表,匹配是否有对应问题及临时修复方式。

内容的提问来源于stack exchange,提问作者Drew Delano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 14:05:14