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

通过Cypress.IO执行Percy视觉回归测试时字体显示异常

排查Percy快照字体显示异常的方案

1. 修正字体加载检测逻辑

你当前用cy.document().its("fonts.status").should("equal", "loaded")判断字体加载,但fonts.status并非标准API,无法精准识别自定义字体的加载状态。建议改用以下两种可靠方式:

方式A:用Web Font Loader监听加载

在测试中注入Web Font Loader并监听目标字体加载完成:

describe("Article page", () => {
  it("passes", () => {
    cy.visit("/articles/augustas-story-being-youth-advisor-0", {
      onBeforeLoad(win) {
        const script = win.document.createElement('script');
        script.src = 'https://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js';
        script.onload = () => {
          win.WebFont.load({
            custom: { families: ['Helvetica LT Std Bold'] }
          });
        };
        win.document.head.appendChild(script);
      }
    });

    // 等待字体加载完成后再截图
    cy.window().its('WebFont').then(webFont => {
      return new Cypress.Promise(resolve => webFont.active(resolve));
    });

    cy.percySnapshot();
  });
});

方式B:用FontFace API验证加载

describe("Article page", () => {
  it("passes", () => {
    cy.visit("/articles/augustas-story-being-youth-advisor-0");

    cy.window().then(win => {
      const font = new win.FontFace(
        'Helvetica LT Std Bold', 
        'url(/themes/custom/planuk/fonts/HelveticaLTStd-Bold.woff2)'
      );
      return font.load().then(() => win.document.fonts.add(font));
    });

    cy.percySnapshot();
  });
});

2. 调整font-display属性测试

你设置了font-display: swap,浏览器会先显示 fallback 字体,待自定义字体加载后再替换。Percy截图时机可能卡在替换前,临时修改为font-display: block验证:

@font-face {
  font-family: 'Helvetica LT Std Bold';
  src: url('/themes/custom/planuk/fonts/HelveticaLTStd-Bold.woff2') format('woff2'),
       url('/themes/custom/planuk/fonts/HelveticaLTStd-Bold.woff') format('woff'),
       url('/themes/custom/planuk/fonts/HelveticaLTStd-Bold.ttf') format('truetype'),
       url('/themes/custom/planuk/fonts/HelveticaLTStd-Bold.svg#HelveticaLTStd-Bold') format('svg');
  font-weight: bold;
  font-style: normal;
  font-display: block; /* 临时修改测试 */
}

3. 验证Percy的字体资源访问权限

  • 确认字体文件路径绝对正确,保证Percy爬虫能通过测试环境域名拼接后访问到文件
  • 检查服务器是否有防盗链、IP白名单等限制,阻止Percy请求字体文件

4. 延长Percy快照等待时间

在cy.percySnapshot中添加配置,强制延长页面稳定等待时长:

cy.percySnapshot('Article page', {
  waitForTimeout: 5000 // 调整为5秒等待时间
});

5. 对齐测试环境浏览器版本

确保Cypress运行的浏览器与Percy使用的浏览器环境一致(如均为Chrome),避免因浏览器差异导致字体渲染不同。


内容的提问来源于stack exchange,提问作者Behzad Lashkari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:31:04