Reputation: 101
While testing to log in using 4 different users, I need to use 4 different assertions and each assertation should only be associated with its particular user.
Example.
In the below test I am getting an error as Cypress is looking for an error1 message for user 1 When the test runs with the first user.
it('Login with multiple users', () => {
cy.readFile('cypress/fixtures/userdata.json').then((users) => {
users.forEach((user) => {
cy.visit('/')
cy.get('[data-test="username"]').type(user.username)
cy.get('[data-test="password"]').type(user.password)
cy.get('[data-test="login-button"]').click()
cy.url('https://www.saucedemo.com/inventory.html')
cy.get('[data-test="error"]').should('have.text', user.error1)
cy.get('[data-test="error"]').should('have.text', user.error2)
cy.get('[data-test="error"]').should('have.text', user.error3)
})
})
})
Upvotes: 0
Views: 69
Reputation: 18624
In your JSON you can add an extra field errorMessage
and url
.
[
{
"id": "standard User",
"username": "standard_user",
"password": "secret_sauce",
"url": "https://www.saucedemo.com/inventory.html"
},
{
"id": "locked out user",
"username": "locked_out_user",
"password": "secret_sauce",
"errorMessage": "error 2"
},
{
"id": "Problem user",
"username": "problem_user",
"password": "secret_sauce",
"errorMessage": "error 3"
},
{
"id": "perfromance glitch user",
"username": "performance_glitch_user",
"password": "secret_sauce",
"errorMessage": "error 4"
},
{
"id": "Invalid User",
"username": "perform",
"password": "secret12",
"errorMessage": "error 5"
}
]
You test should be like this:
it('Login with multiple users', () => {
cy.readFile('users.json').then((users) => {
users.forEach((user) => {
cy.visit('/')
cy.get('[data-test="username"]').type(user.username)
cy.get('[data-test="password"]').type(user.password)
cy.get('[data-test="login-button"]').click()
if (user.username == 'standard_user') {
cy.url().should('eq', user.url)
} else {
cy.get('[data-test="error"]').should('have.text', user.errorMessage)
}
})
})
})
Upvotes: 2