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

Cypress问题:使用预设修改视口后viewportWidth/Height未更新

关于Cypress视口配置与当前视口获取的问题

你猜的完全没错!Cypress.config().viewportWidth确实是默认的全局配置值,不会被cy.viewport(preset)这个运行时操作动态更新。这个方法只是临时修改当前测试用例中的浏览器视口尺寸,并不会改动初始化时的全局配置对象,所以你前后log出来的数值都是默认的1000。

要获取当前实际生效的视口尺寸,有两种可靠的方法:

方法1:通过浏览器window对象获取(推荐)

cy.viewport()生效后,浏览器的实际视口会对应变化,我们可以直接读取浏览器窗口的innerWidth和innerHeight属性,这是最准确的方式:

cy.log("viewport before");
cy.log("" + Cypress.config().viewportWidth); // 输出默认值1000

cy.viewport(preset) // 比如传入'mobile'、'tablet'或自定义尺寸

// 等待视口生效后获取实际尺寸
cy.window().then(win => {
  cy.log(`当前视口宽度: ${win.innerWidth}`);
  cy.log(`当前视口高度: ${win.innerHeight}`);
});

方法2:使用Cypress内部状态(谨慎使用)

Cypress内部维护了当前测试的状态,其中包含了当前的视口信息,可以通过Cypress.state()获取,但要注意这是内部API,未来版本可能会有变动,所以优先推荐第一种方法:

cy.viewport(preset);
cy.log(`当前视口宽度: ${Cypress.state('viewportWidth')}`);
cy.log(`当前视口高度: ${Cypress.state('viewportHeight')}`);

另外要注意:cy.viewport()是异步命令,如果你在它之后直接同步调用Cypress.config(),会因为命令队列的执行顺序问题,导致还没等到视口修改完成就读取了值,这也是你之前看到数值没变化的原因之一。用cy.window().then()或者cy.then()包裹后续操作,能确保在视口修改完成后再执行获取逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 09:42:44