cypress默认会在每个test开始之前清空cookies,保证每个用例的独立和环境干净。
但是在一个js文件内有多个it用例的时候,就希望只登陆一次,可以保留cookies,后续可以重复使用。
官网上有以下两种方法,官网地址【https://docs.cypress.io/api/cypress-api/cookies.html#Syntax】
方法一:
To preserve cookies by its key, use Cypress.Cookies.preserveOnce()
.
cy.getCookie('fakeCookie').should('not.be.ok')
// preserving a cookie will not clear it when
// the next test starts
cy.setCookie('lastCookie', '789XYZ')
Cypress.Cookies.preserveOnce('lastCookie')
实例:
describe("登陆后访问首页",function() {
before( () => {
cy.login("z***","z*****")
})
beforeEach(() =>{
//cypress会在每个test前清空cookie,preserveOnce在多个test之间保留cookie
Cypress.Cookies.preserveOnce('zentaosid','windowWidth','windowHeight')
})
it("访问首页",() =>
{
cy.visit("/zentao/my/")
cy.url().should("include","/zentao/my/")
cy.title().should("contain","我的地盘")
})
it("访问产品页",() =>
{
cy.visit("/zentao/product/")
cy.url().should("include","/zentao/product/")
cy.title().should("contain","产品")
})
})
方法二:
To set defaults for all cookies, use Cypress.Cookies.default()
.
Cypress.Cookies.defaults({
preserve: 'session_id' #之前为whitelist白名单,5.0之后改为preserve
})
在cypress/support/index.js设置白名单可替代方法一中beforeEach内容代码,省去每一个test前的操作。
实例:
//from cypress/support/index.js
//在测试用例执行之前加载
Cypress.Cookies.defaults({
preserve: ['zentaosid','windowWidth','windowHeight']
})