viewport
控制应用程序屏幕的尺寸和方向。
您可以通过在Cypress配置中定义viewportWidth
和viewportHeight
来全局设置视口的宽度和高度。
语法
cy.viewport(width, height)
cy.viewport(preset, orientation)
cy.viewport(width, height, options)
cy.viewport(preset, orientation, options)
用法
正确用法
cy.viewport(550, 750) // 将视口设置为550px x 750px
cy.viewport('iphone-6') // 将视口设置为375px x 667px
参数
width (Number)
视口宽度(像素),必须为非负有限数。
height (Number)
视口高度(像素),必须为非负有限数。
preset (String)
预设尺寸来设置视口。支持以下选项:
预设 | 宽度 | 高度 |
---|---|---|
ipad-2 | 768 | 1024 |
ipad-mini | 768 | 1024 |
iphone-3 | 320 | 480 |
iphone-4 | 320 | 480 |
iphone-5 | 320 | 568 |
iphone-6 | 375 | 667 |
iphone-6+ | 414 | 736 |
iphone-7 | 375 | 667 |
iphone-8 | 375 | 667 |
iphone-x | 375 | 812 |
iphone-xr | 414 | 896 |
iphone-se2 | 375 | 667 |
macbook-11 | 1366 | 768 |
macbook-13 | 1280 | 800 |
macbook-15 | 1440 | 900 |
macbook-16 | 1536 | 960 |
samsung-note9 | 414 | 846 |
samsung-s10 | 360 | 760 |
orientation (String)
屏幕方向。_默认方向_为portrait
。传入landscape
会交换宽度/高度。
options (Object)
传入选项对象以更改cy.viewport()
的默认行为。
选项 | 默认值 | 描述 |
---|---|---|
log | true | 在命令日志中显示命令 |
生成结果
cy.viewport()
返回null
。
示例
宽度、高度
将视口调整为1024px x 768px
cy.viewport(1024, 768)
分别组织桌面和移动端测试
describe('导航菜单', () => {
context('720p分辨率', () => {
beforeEach(() => {
// 以720p显示器桌面浏览器运行这些测试
cy.viewport(1280, 720)
})
it('显示完整头部', () => {
cy.get('nav .desktop-menu').should('be.visible')
cy.get('nav .mobile-menu').should('not.be.visible')
})
})
context('iphone-5分辨率', () => {
beforeEach(() => {
// 以移动浏览器运行这些测试
cy.viewport('iphone-5')
})
it('点击显示移动菜单', () => {
cy.get('nav .desktop-menu').should('not.be.visible')
cy.get('nav .mobile-menu')
.should('be.visible')
.find('i.hamburger')
.click()
cy.get('ul.slideout-menu').should('be.visible')
})
})
})
动态测试多个视口
- 端到端测试
- 组件测试
const sizes = ['iphone-6', 'ipad-2', [1024, 768]]
describe('Logo', () => {
sizes.forEach((size) => {
it(`应在${size}屏幕上显示Logo`, () => {
if (Cypress._.isArray(size)) {
cy.viewport(size[0], size[1])
} else {
cy.viewport(size)
}
cy.visit('https://example.cypress.io')
cy.get('#logo').should('be.visible')
})
})
})
const sizes = ['iphone-6', 'ipad-2', [1024, 768]]
describe('Logo', () => {
sizes.forEach((size) => {
it(`应在${size}屏幕上显示Logo`, () => {
if (Cypress._.isArray(size)) {
cy.viewport(size[0], size[1])
} else {
cy.viewport(size)
}
cy.mount(<MyComponent />)
cy.get('#logo').should('be.visible')
})
})
})

预设
将视口调整为iPhone 6尺寸
cy.viewport('iphone-6') // 视口将变为414px x 736px
方向
将方向改为横屏
// 视口将变为736px x 414px
// 模拟用户横向持握iPhone
cy.viewport('iphone-6', 'landscape')
注意事项
devicePixelRatio
不支持devicePixelRatio
模拟
如果需要此功能,请关注#7075。
恢复
Cypress会在快照中恢复视口
当悬停在每个命令上时,Cypress会自动以命令运行时的视口尺寸显示快照。
默认值
默认尺寸
默认情况下,在未执行cy.viewport()
命令前,Cypress将宽度设为1000px
,高度设为660px
。
您可以通过在Cypress配置中添加以下内容来更改这些默认尺寸:
- cypress.config.js 文件
- cypress.config.ts 文件
const { defineConfig } = require('cypress')
module.exports = defineConfig({
viewportWidth: 1000,
viewportHeight: 660,
})
import { defineConfig } from 'cypress'
export default defineConfig({
viewportWidth: 1000,
viewportHeight: 660,
})
此外,Cypress会在每个测试之间自动将视口重置为默认尺寸。
缩放
自动缩放
默认情况下,如果屏幕不足以显示当前尺寸的所有像素,Cypress会在预览窗格中缩放并居中您的应用程序。
缩放不会影响应用程序的任何计算或行为(实际上应用程序甚至不会知道正在被缩放)。
这样做的好处是无论开发者的屏幕尺寸如何,测试都能一致地通过或失败。在CI
中测试也能一致运行,因为所有视口在不同机器上都是相同的。
通过Cypress.config()
重置视口
您可以通过在Cypress.config()中设置viewportHeight
或viewportWidth
的新值来更改剩余测试的视口高度和宽度。
Cypress.config('viewportWidth', 800)
Cypress.config('viewportWidth') // => 800
在测试配置中设置视口
您可以通过在测试配置中传入新的配置值来在测试套件或测试中配置视口高度和宽度。
这将在测试期间设置高度和宽度,完成后恢复为默认的viewportHeight
和viewportWidth
。
describe(
'中等尺寸屏幕的页面显示',
{
viewportHeight: 1000,
viewportWidth: 400,
},
() => {
it('不显示侧边栏', () => {
cy.get('#sidebar').should('not.be.visible')
})
it('显示汉堡菜单', () => {
cy.get('#header').find('i.menu').should('be.visible')
})
}
)
规则
要求
cy.viewport()
必须链接到cy
。
断言
cy.viewport()
不能链接任何断言。
超时设置
cy.viewport()
不会超时。
命令日志
更改视口尺寸以测试响应式导航
cy.get('#navbar').should('be.visible')
cy.viewport(320, 480)
// 由于屏幕较小,导航栏应折叠
cy.get('#navbar').should('not.be.visible')
cy.get('.navbar-toggle').should('be.visible')
cy.get('.navbar-toggle').click()
cy.get('.nav').find('a').should('be.visible')
以上命令将在命令日志中显示为:

当点击命令日志中的viewport
时,控制台会输出以下内容:

历史
版本 | 变更 |
---|---|
5.5.0 | 新增macbook-16 预设支持。 |
5.4.0 | 新增iphone-7 、iphone-8 和iphone-se2 预设支持。 |
3.8.0 | 移除最大视口尺寸限制并将最小视口尺寸降至0 。 |
3.5.0 | 新增iphone-xr 、iphone-x 、samsung-s10 和samsung-note9 预设支持 |
3.5.0 | 将最大视口尺寸增至4000 |
0.9.0 | 新增cy.viewport() 命令 |
另请参阅
- 阅读博客文章使用有意义的冒烟测试,我们在不同视口分辨率下运行相同测试
- 阅读博客文章生成高分辨率视频和截图,了解如何更改浏览器窗口尺寸以捕获更详细的截图和视频
- 配置
- Cypress.config()