set_window_size不能替代真实设备分辨率测试,因其仅调整窗口尺寸而不改变UA、devicePixelRatio、触摸支持等关键设备特征;必须用viewport+device emulation(如Playwright.devices)或Selenium+CDP命令模拟真实环境。

set_window_size 不够用,真机分辨率适配必须靠 viewport 和 device emulation,否则测出来的是“缩放窗口”,不是“真实设备渲染”。
为什么 set_window_size 不能代替分辨率兼容性测试
调用 driver.set_window_size(375, 667) 只是把浏览器窗口拉成那个尺寸,但 User-Agent、devicePixelRatio、touch 等关键指标仍是桌面环境。页面里 @media (max-width: 480px) 可能不触发,window.devicePixelRatio 仍为 1,matchMedia 检测会失真。
- 实际效果:CSS 媒体查询没生效,响应式断点未命中
- JavaScript 中
screen.width和window.innerWidth数值可能不一致 - 移动端特有的交互(如双指缩放、滚动惯性)完全无法模拟
用 Playwright 模拟真实设备 viewport + UA
Playwright 的 playwright.devices 提供预设设备参数,直接覆盖 viewport、user agent、hasTouch、defaultBrowserType 等,比 Selenium 手动拼接可靠得多。
- 不用自己查 iPhone 14 Pro 的
viewport尺寸和 UA 字符串 - 一行
**playwright.devices['iPhone 14 Pro']就注入全部设备上下文 - 自动启用
hasTouch=True,触发移动端事件监听(如touchstart) - 支持
colorScheme='dark'、locale='zh-CN'等扩展参数,覆盖更多兼容性变量
from playwright.sync_api import sync_playwright
<p>def test_on_iPhone():
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
context = browser.new_context(**p.devices['iPhone 14 Pro'])
page = context.new_page()
page.goto("<a href="https://www.php.cn/link/b05edd78c294dcf6d960190bf5bde635">https://www.php.cn/link/b05edd78c294dcf6d960190bf5bde635</a>")</p><h1>此时 page.viewport_size == {'width': 430, 'height': 932}</h1><pre class="brush:php;toolbar:false;"> # window.devicePixelRatio 在页面内实测为 3
assert page.evaluate("window.devicePixelRatio") == 3
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
Selenium 中手动设置 viewport 的风险点
如果必须用 Selenium(比如老项目无法迁移到 Playwright),set_window_size 要配合 execute_cdp_cmd 强制设置 device metrics,否则仍不可靠。
-
driver.set_window_size(414, 896)后必须再执行 CDP 命令,否则screen.width返回的是缩放后值 - CDP 命令需在页面加载前调用,否则部分属性(如
deviceScaleFactor)会被忽略 - ChromeDriver 版本低于 115 时,
Emulation.setDeviceMetricsOverride对某些 CSS 属性(如vh单位)支持不完整 - Firefox 不支持等效 CDP 命令,只能靠
set_window_size+ CSS@media手动校验,覆盖度有限
分辨率测试要验证的三个硬指标
光看页面“看起来像手机”没用,必须检查 JS 运行时暴露的真实设备信息:
-
screen.width/screen.height—— 应等于目标设备物理像素(如 iPhone 14 Pro 是 1170×2532) -
window.devicePixelRatio—— 必须匹配设备真实 dpr(iPhone 14 Pro 是 3) -
matchMedia('(prefers-reduced-motion: reduce)').matches—— 验证系统级偏好是否透出(影响动画兼容性)
这些值一旦错,前端基于 screen 或 dpr 做的图片适配、canvas 渲染、字体缩放都会出问题,而 UI 自动化脚本往往只验证 DOM 结构,漏掉这一层就等于没测。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










