Skip to main content
Cypress应用

getCookie

通过名称获取浏览器cookie。

语法

cy.getCookie(name)
cy.getCookie(name, options)

用法

正确用法

cy.getCookie('auth_key') // 获取名为'auth_key'的cookie

参数

name (String)

要获取的cookie名称。必需。

options (Object)

传入选项对象以更改cy.getCookie()的默认行为。

选项默认值描述
domain当前URL的主机名从指定域名获取cookie
logtrue命令日志中显示该命令
timeoutresponseTimeout等待cy.getCookie()解析的超时时间,超过则超时

生成结果 了解主题管理

cy.getCookie()返回一个包含以下属性的cookie对象:

  • domain
  • expiry (如果指定)
  • hostOnly (如果指定)
  • httpOnly
  • name
  • path
  • sameSite (如果指定)
  • secure
  • value

cy.getCookie()不是查询命令。它不会重试或等待请求的cookie存在。

当找不到匹配名称的cookie时:

cy.getCookie()返回null

示例

会话ID

在此示例中,首次登录时,服务器会返回一个会话cookie。

// 假设我们刚刚登录
cy.contains('Login').click()
cy.url().should('include', 'profile')
// 重试直到找到value=189jd09su的cookie
// 或达到默认命令超时
cy.getCookie('session_id')
.should('have.property', 'value', '189jd09su')
.then((cookie) => {
// cookie是一个包含"domain"、"name"等属性的对象
})

你可以检查cookie是否存在而不比较其任何属性

cy.getCookie('my-session-cookie').should('exist')

如果需要cookie值,例如用于后续调用

let cookie

cy.getCookie('session_id')
.should('exist')
.then((c) => {
// 保存cookie以备后用
cookie = c
})

// 稍后,通过将其放在".then"中
// 确保仅在cookie设置后执行"cy.request"
cy.get('#submit')
.click()
.then(() => {
cy.request({
url: '/api/admin',
headers: {
'my-token-x': cookie.value,
},
})
})

使用cy.getCookie()测试登录

info

查看我们使用cy.getCookie()测试的示例配方: 使用HTML网页表单登录使用XHR网页表单登录使用单点登录

规则

要求 了解命令链

  • cy.getCookie()需要链式调用cy

断言 了解断言

  • cy.getCookie()只会运行一次你链式添加的断言,不会 重试

超时设置 了解超时机制

  • cy.getCookie()不应超时。
caution

由于cy.getCookie()是异步的,理论上在与Cypress内部自动化API通信时可能会超时。但实际上这种情况几乎不会发生。

命令日志

获取浏览器cookie并对对象进行断言

cy.getCookie('fakeCookie1').should('have.property', 'value', '123ABC')

以上命令将在命令日志中显示为:

命令日志 getcookie

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

控制台日志 getcookie

历史

版本变更
5.0.0移除experimentalGetCookiesSameSite并使sameSite属性始终可用。
4.3.0当配置值experimentalGetCookiesSameSitetrue时添加sameSite属性。

另请参阅