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 |
log | true | 在命令 日志中显示该命令 |
timeout | responseTimeout | 等待cy.getCookie() 解析的超时时间,超过则超时 |
生成结果
cy.getCookie()
返回一个包含以下属性的cookie对象:
domain
expiry
(如果指定)hostOnly
(如果指定)httpOnly
name
path
sameSite
(如果指定)secure
value
cy.getCookie()
不是查询命令。它不会重试或等待请求的cookie存在。
当找不到匹配名称的cookie时:
cy.getCookie()
返回null
。
示例
会话ID
登录后获取session_id
cookie
在此示例中,首次登录时,服务器会返回一个会话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')
以上命令将在命令日志中显示为:
