有没有办法在赛普拉斯的测试之间保持会话存储
Is there a way to keep session Storage between tests in Cypress
我目前正在开发一个将信息保存在会话存储中的应用程序。登录过程结束后,我看到会话存储被清除,DOM 刷新回登录屏幕。
我想在每个规范的测试之间保留会话存储,这样我就不必不断注销并重新登录以检查同一容器中的多个内容。
我当前的设置如下所示:
describe('Quickpanel', () => {
before(() => {
cy.visit(base_url, {onBeforeLoad: (window) => {
window.sessionStorage.setItem('someInfo',
`{"SubsId":${info[0]},"RId":${nfo[1]}}`)
window.sessionStorage.setItem('loc', `${info[2]}`)
}})
LoginPage
.login(login_username, login_password)
Navbar
.clickOnBookingsSubLink('Beta Calendar')
.verifyCalendarLoads()
.clickBookReservationButton()
.verifyQuickPanelIsOpen()
})
第一个测试运行良好,设置了正确的会话存储值,并使用提供的信息创建了其他值。当我移动到第二个“It()”时,会话存储消失了。
我也尝试在“beforeEach()”中设置会话存储项目,但出现同样的问题。
感谢任何帮助,谢谢:)
您可以使用 cy.session()
[Cypess docs] 来实现这一点。这是一个实验性的 API。因此,要使用它,请在 cypress.json
.
中将 experimentalSessionSupport
的标志设置为 true
cy.session()
命令是一个缓存 - 里面的任何东西都不会被多次调用。
您需要调用它 beforeEach()
测试不只是一次 before()
但设置函数只调用一次。
这是一个概念验证
Cypress.config('experimentalSessionSupport', true)
let sessionCallCount = 0;
Cypress.session.clearAllSavedSessions() // to avoid caching across browser reload
beforeEach(() => {
cy.session('mySession', () => {
cy.visit('https://example.com', {
onBeforeLoad: (window) => {
window.sessionStorage.setItem('myKey', 'someInfo')
sessionCallCount++
}
})
})
})
it('t1', () => {
cy.window().then(window => {
let data = window.sessionStorage.getItem('myKey')
expect(data).to.eq('someInfo')
expect(sessionCallCount).to.eq(1)
})
})
it('t2', () => {
cy.window().then(window => {
let data = window.sessionStorage.getItem('myKey')
expect(data).to.eq('someInfo')
expect(sessionCallCount).to.eq(1) // cached code is called only once
})
})
登录示例
Cypress.config('experimentalSessionSupport', true)
Cypress.session.clearAllSavedSessions() // to avoid caching across browser reload
beforeEach(() => {
cy.session('mySession', () => {
cy.visit('https://example.com', {
onBeforeLoad: (window) => {
cy.login(userName, password) // sets a cookie
}
})
})
})
it('t1', () => {
cy.visit('https://example.com') // uses cookie set by cy.login call
})
it('t2', () => {
cy.visit('https://example.com') // uses cookie preserved by cy.session cache
// so app sees logged-in state
// and does not redirect to login page
})
我目前正在开发一个将信息保存在会话存储中的应用程序。登录过程结束后,我看到会话存储被清除,DOM 刷新回登录屏幕。 我想在每个规范的测试之间保留会话存储,这样我就不必不断注销并重新登录以检查同一容器中的多个内容。
我当前的设置如下所示:
describe('Quickpanel', () => {
before(() => {
cy.visit(base_url, {onBeforeLoad: (window) => {
window.sessionStorage.setItem('someInfo',
`{"SubsId":${info[0]},"RId":${nfo[1]}}`)
window.sessionStorage.setItem('loc', `${info[2]}`)
}})
LoginPage
.login(login_username, login_password)
Navbar
.clickOnBookingsSubLink('Beta Calendar')
.verifyCalendarLoads()
.clickBookReservationButton()
.verifyQuickPanelIsOpen()
})
第一个测试运行良好,设置了正确的会话存储值,并使用提供的信息创建了其他值。当我移动到第二个“It()”时,会话存储消失了。 我也尝试在“beforeEach()”中设置会话存储项目,但出现同样的问题。
感谢任何帮助,谢谢:)
您可以使用 cy.session()
[Cypess docs] 来实现这一点。这是一个实验性的 API。因此,要使用它,请在 cypress.json
.
experimentalSessionSupport
的标志设置为 true
cy.session()
命令是一个缓存 - 里面的任何东西都不会被多次调用。
您需要调用它 beforeEach()
测试不只是一次 before()
但设置函数只调用一次。
这是一个概念验证
Cypress.config('experimentalSessionSupport', true)
let sessionCallCount = 0;
Cypress.session.clearAllSavedSessions() // to avoid caching across browser reload
beforeEach(() => {
cy.session('mySession', () => {
cy.visit('https://example.com', {
onBeforeLoad: (window) => {
window.sessionStorage.setItem('myKey', 'someInfo')
sessionCallCount++
}
})
})
})
it('t1', () => {
cy.window().then(window => {
let data = window.sessionStorage.getItem('myKey')
expect(data).to.eq('someInfo')
expect(sessionCallCount).to.eq(1)
})
})
it('t2', () => {
cy.window().then(window => {
let data = window.sessionStorage.getItem('myKey')
expect(data).to.eq('someInfo')
expect(sessionCallCount).to.eq(1) // cached code is called only once
})
})
登录示例
Cypress.config('experimentalSessionSupport', true)
Cypress.session.clearAllSavedSessions() // to avoid caching across browser reload
beforeEach(() => {
cy.session('mySession', () => {
cy.visit('https://example.com', {
onBeforeLoad: (window) => {
cy.login(userName, password) // sets a cookie
}
})
})
})
it('t1', () => {
cy.visit('https://example.com') // uses cookie set by cy.login call
})
it('t2', () => {
cy.visit('https://example.com') // uses cookie preserved by cy.session cache
// so app sees logged-in state
// and does not redirect to login page
})