繁体   English   中英

有没有办法在赛普拉斯的测试之间保持会话存储

[英]Is there a way to keep session Storage between tests in Cypress

我目前正在开发一个将信息保存在会话存储中的应用程序。 在登录过程之后,我看到 Session Storage 被清除并且 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()命令是一个缓存——里面的任何东西都不会被多次调用。

您需要在 before() 测试before()调用它beforeEach()测试一次,但设置函数只调用一次。

这是一个概念验证

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
})

您可以使用cy.session()赛普拉斯文档来实现这一点。 这是一个实验性 API。 因此,要使用它,在您的cypress.json中将experimentalSessionSupport的标志设置为 true。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM