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

如何使用Cypress和Applitools捕获滚动到视图中的元素?

解决Applitools未捕获滚动后视图的问题

问题原因

你之前尝试的eyes.check("test", Target.Region(By.id("scrollable_element")).fully())是Selenium/Appium环境下的Applitools API,但你当前使用的是Cypress集成的Applitools SDK,两者API不兼容,所以代码无效。另外,滚动后页面未稳定、Applitools截图时机过早也会导致只捕获顶部视图。

解决方案

针对Cypress环境,调整代码如下:

1. 确保滚动后页面稳定

在scrollIntoView后添加断言或等待,保证滚动完成且目标元素可见:

Then("user can view a {string}", (chart) => {
  cy.visit("/");
  cy.loginUser();
  cy.navigateToChartsPage();
  
  // 滚动到目标元素并等待元素可见,确保滚动状态稳定
  cy.contains("chart")
    .scrollIntoView({ behavior: 'instant', block: 'center' }) // 关闭平滑滚动避免延迟
    .should("be.visible");
  
  cy.eyesCheckWindow({
    tag: chart + " chart",
    waitBeforeScreenshot: 200 // 额外等待200ms,确保页面无动画干扰
  });
});

2. 捕获指定滚动区域(推荐)

如果需要捕获整个可滚动元素的内容,而非当前视口,可通过target: 'region'指定滚动元素的选择器:

Then("user can view a {string}", (chart) => {
  cy.visit("/");
  cy.loginUser();
  cy.navigateToChartsPage();
  
  // 滚动到目标元素所在的滚动容器
  cy.get("#scrollable-chart-container") // 替换为你的可滚动元素ID/选择器
    .scrollIntoView()
    .should("be.visible");
  
  cy.eyesCheckWindow({
    tag: chart + " chart",
    target: 'region',
    selector: {
      type: 'css',
      selector: '#scrollable-chart-container' // 与上方滚动容器一致
    },
    fully: true // 自动滚动捕获整个容器的所有内容
  });
});

3. 禁用Applitools自动滚动重置

若Applitools默认重置页面滚动,可在eyesCheckWindow中添加配置(部分场景适用):

cy.eyesCheckWindow({
  tag: chart + " chart",
  disableScrolling: true // 禁止Applitools在截图前重置滚动
});

关键注意点

  • 不要混用不同测试框架的Applitools API:Cypress用cy.eyesCheckWindow,Selenium用eyes.check。
  • 优先用Cypress断言(如should("be.visible"))替代固定等待,保证测试稳定性。
  • 若页面有滚动动画,需关闭平滑滚动(behavior: 'instant')或增加等待时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 14:55:10