【问题标题】:Cypress : choose username and environment from a listCypress:从列表中选择用户名和环境
【发布时间】:2021-11-30 14:52:22
【问题描述】:

我有以下代码和想法,我想让它发挥作用,以便我可以使用 cy.login (live, username) 的功能登录测试:

Cypress.Commands.add("login", (env,username) => {
        env  = Cypress.env('staging')
        env = Cypress.env('live')
        username = Cypress.username('username1')
        username = Cypress.username('username2')
    cy.get('input[name="Parameter.UserName"]').type('username')
    cy.get('input[name="Parameter.Password"]').type('password1')
    cy.contains('Login').click()
})

当然我的代码不是函数式的,但我想了解这个想法以及如何编写它以便能够多次使用一个变量。

在 cypress.json 中

    {"env": {
        "staging": "https://staginglink",
        "live": "https://livelink"
      }}

  {"username": {
        "username1": "username": "username1", "password" : "password1" ,
        "username2": "username": "username2", "password" : "password2" ,
      }}

【问题讨论】:

    标签: javascript automation cypress


    【解决方案1】:

    从修复 cypress.json 开始

    {
      "env": {
        "links": {
          "staging": "https://staginglink",
          "live": "https://livelink"
        }
        "users": {
          "user1": {"username": "username1", "password" : "password1"},
          "user2": {"username": "username2", "password" : "password2"},
        }
    }
    

    使用字符串参数调用:

    cy.login('live', 'user2')  
    

    命令:

    Cypress.Commands.add("login", (requiredEnv, requiredUser) => {
    
      const links = Cypress.env('links');  // links section above
      const link = links[requiredEnv];     // if passed "live" or "staging", gives the
                                           // correct property of links section
      cy.visit(link)
    
      const users = Cypress.env('users');    // users section above
      const user = users[requiredUser];          
    
      const username = user.username;  // "user1" -> gives "username1"
                                       // "user2" -> gives "username2"
    
      const password = user.password;  // "user1" -> gives "password1"
                                       // "user2" -> gives "password2"
    
      cy.get('input[name="Parameter.UserName"]').type(username)  // don't put quotes around variable
      cy.get('input[name="Parameter.Password"]').type(password)  // don't put quotes around variable
      cy.contains('Login').click()
    })
    

    【讨论】:

      【解决方案2】:

      在您的Cypress.json 中,您可以这样排列您的数据:

      {
         "env":{
            "staging":"https://staginglink",
            "live":"https://livelink"
         },
         "users":{
            "user1":{
               "username":"username1",
               "password":"password1"
            },
            "user2":{
               "username":"username2",
               "password":"password2"
            }
         }
      }
      

      然后在您的测试中,您可以访问以下数据:

      Cypress.config('users').user1.username. //gets username1
      Cypress.env('staging'). //gets staging link
      

      您的自定义命令将如下所示:

      Cypress.Commands.add('login', (user, env) => {
        cy.visit(env)
        cy.get('input[name="Parameter.UserName"]').type(user.username)
        cy.get('input[name="Parameter.Password"]').type(user.password)
        cy.contains('Login').click()
      })
      

      从你的测试中你可以写出:

      cy.login(Cypress.config('users').user1, Cypress.env('staging'))
      cy.login(Cypress.config('users').user2, Cypress.env('live'))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-09
        • 1970-01-01
        相关资源
        最近更新 更多