【问题标题】:Compare two Session ID's in Cypress比较赛普拉斯中的两个会话 ID
【发布时间】:2022-10-01 09:43:08
【问题描述】:

我一般是自动化和编码的新手,我想通过以下步骤比较两个会话 ID 值:

  1. 登录后立即获取第一个值
  2. 刷新页面
  3. 获取第二个值并做出断言。

    我做了一个自定义命令以简化事情:

    Cypress.Commands.add(\'getSessionId\', () => {
    
        let sessionId
        cy.getCookie(\'development\')
        .its(\'value\').then(($value) => {
            sessionId = String($value)
        })    
    })
    

    我希望测试脚本看起来像这样:

    let firstSessionId = cy.getSessionId()
    
    cy.reload()
    
    let secondSessionId = cy.getSessionId()
    
    expect(firstSessionId).to.eq(secondSessionId)
    

    这有两个问题:

    1. 在这种情况下,我无法将值作为字符串访问
    2. 在获得 ID 之前预期会运行(我猜是因为 cypress 的异步特性?)

      我会很感激任何提示我做错了什么。谢谢

    标签: javascript session automated-tests cypress


    【解决方案1】:

    这是执行测试的最简单方法,在这种情况下不需要自定义命令。

    cy.getCookie('development').its('value')
      .then(sessionId1 => {
    
        cy.reload()
    
        cy.getCookie('development').its('value')
          .then(sessionId2 => {
            expect(sessionId1).to.eq(sessionId2)
          })
      })
    

    如果您出于其他原因需要自定义命令,

    Cypress.Commands.add('getSessionId', () => {
      cy.getCookie('development').its('value')    // last command is returned
    })
    
    cy.getSessionId().then(sessionId1 => {
    
      cy.reload()
    
      cy.getSessionId().then(sessionId2 => {
        expect(sessionId1).to.eq(sessionId2)
      })
    })
    

    【讨论】:

      【解决方案2】:

      您可以像这样从自定义命令返回值:

      Cypress.Commands.add('getSessionId', () => {
        cy.getCookie('development')
          .its('value')
          .then((val) => {
            return cy.wrap(val)
          })
      })
      

      然后在你的测试中,你可以这样做:

      //Get First session Id
      cy.getSessionId.then((sessionId1) => {
        cy.wrap(sessionId1).as('sessionId1')
      })
      
      //Refresh Page
      cy.reload()
      
      //Get Second session Id
      cy.getSessionId.then((sessionId2) => {
        cy.wrap(sessionId2).as('sessionId2')
      })
      
      //Assert both
      cy.get('@sessionId1').then((sessionId1) => {
        cy.get('@sessionId2').then((sessionId2) => {
          expect(sessionId1).to.eq(sessionId2)
        })
      })
      

      【讨论】:

      • 似乎没有必要使用 .then() 为 sessionID 创建别名。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-25
      • 1970-01-01
      • 1970-01-01
      • 2020-01-26
      • 2020-11-01
      • 1970-01-01
      相关资源
      最近更新 更多