移动端E2E测试时,React组件在不同设备下样式错位怎么调试?
在用Cypress做移动端E2E测试时,发现一个React按钮组件在模拟iPhone 12时显示正常,但换成三星Galaxy Fold时文字溢出容器了。代码明明设置了rem单位和flex布局…
组件代码是这样的:
function ActionButton({ label }) {
return (
<button
style={{
padding: '0.8rem 1.2rem',
fontSize: '1.1rem',
whiteSpace: 'nowrap',
overflow: 'hidden',
textOverflow: 'ellipsis'
}}
>
{label}
</button>
)
}
我试过在测试代码里用cy.viewport(400, 900)切换尺寸,也加了meta viewport标签,但Galaxy Fold模式下还是显示不全。报错提示是button text exceeds container width by 18px…
该怎么排查是CSS计算问题还是E2E测试环境配置的问题?
通用的做法是先在Cypress测试里打印出实际计算样式,确认是不是CSS预期的问题。加一行调试:
你会发现Galaxy Fold模拟下font-size可能是按1rem=16px算的,而iPhone模拟器是1rem=14px这类差异。解决方案是在index.html里强制统一根字体:
或者用meta viewport更精确控制:
加上maximum-scale=1是为了防止某些安卓浏览器自动放大文本。另外建议把padding和fontSize换成em单位试试,em相对于元素自身font-size,不会受root影响太大。
最后一步验证:在Cypress里分别模拟两个设备跑同一段测试,用cy.viewport('samsung-s10')这种预设别名,确保环境一致。如果这时候还错位,基本就是组件没适配高宽比极端的屏幕,得加个min-width或媒体查询兜底。