getCookies
获取当前域名或指定域名的浏览器 Cookie。
语法
cy.getCookies()
cy.getCookies(options)
用法
正确用法
cy.getCookies() // 获取当前域名的 Cookie
参数
options (Object)
传入一个选项对象来改变 cy.getCookies()
的默认行为。
选项 | 默认值 | 描述 |
---|---|---|
domain | 当前 URL 的主机名 | 从指定域名获取 Cookie |
log | true | 在命令日志中显示该命令 |
timeout | responseTimeout | 等待 cy.getCookies() 解析的超时时间,超过则超时 |
生成结果
cy.getCookies()
返回一个包含 Cookie 对象的数组。每个 Cookie 对象具有以下属性:
domain
: (String)expiry
: (Number) (如果指定)hostOnly
: (Boolean) (如果指定)httpOnly
: (Boolean)name
: (String)path
: (String)sameSite
: (String) (如果指定)secure
: (Boolean)value
: (String)
cy.getCookies()
不是查询操作。如果在初始执行后添加了更多 Cookie,它不会更新返回的列表。
示例
获取 Cookie
登录后获取 Cookie
在此示例中,首次登录时服务器会返回一个会话 Cookie。
// 假设我们刚刚登录
cy.contains('Login').click()
cy.url().should('include', 'profile')
cy.getCookies()
.should('have.length', 1)
.then((cookies) => {
expect(cookies[0]).to.have.property('name', 'session_id')
})
规则
要求
cy.getCookies()
需要链式调用cy
。
断言
cy.getCookies()
只会运行一次链式断言,不会重试。
超时设置
cy.getCookies()
不应该超时。
caution
由于 cy.getCookies()
是异步操作,理论上在与 Cypress 内部自动化 API 通信时可能会超时。但实际上几乎不会发生。
命令日志
获取浏览器 Cookie 并检查所有属性
cy.getCookies()
.should('have.length', 1)
.then((cookies) => {
expect(cookies[0]).to.have.property('name', 'fakeCookie1')
expect(cookies[0]).to.have.property('value', '123ABC')
expect(cookies[0]).to.have.property('domain')
expect(cookies[0]).to.have.property('httpOnly')
expect(cookies[0]).to.have.property('path')
expect(cookies[0]).to.have.property('secure')
})
以上命令将在命令日志中显示为:

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

历史版本
版本 | 变更 |
---|---|
5.0.0 | 移除了 experimentalGetCookiesSameSite 并使 sameSite 属性始终可用。 |
4.3.0 | 当配置项 experimentalGetCookiesSameSite 为 true 时,添加了 sameSite 属性。 |