首页 > 解决方案 > Cypress before hook 在每个 it 语句之后重复

问题描述

我是赛普拉斯的新手,当使用 before 钩子转到 url 时,它完成了第一个 it 语句,然后它再次执行 before 钩子并执行第二个 it 语句,一旦执行 it 语句并停止,它应该执行 before 钩子。然而,这不是正在发生的事情,我需要帮助,看看我做错了什么。我的代码如下:

import { expect, assert, should } from 'chai';
import LoginPage from '../page-objects/LoginPage.spec'
import BeHomePage from '../page-objects/BeHomePage.spec'

    describe('create, edit, delete Survey', () => {

        before(function() {
            cy.visit(''); // see config json for base url
        })

        it('user can login to boardeffect', () => {          
            LoginPage.getLoginUserName().type(Cypress.env('username'));
            LoginPage.getLoginUserPassword().type(Cypress.env('password'));
            LoginPage.getSigninButton().click();
        })

        it('user can navigate to collaborate', () => {
            BeHomePage.getAutoBeWorkroom().should('be.visible');
            BeHomePage.getAutoBeWorkroom().click();
            BeHomePage.getCollaborate().should('be.visible');
            BeHomePage.getCollaborate().click();
           cy.wait(10000)
        })

    })

{
    "baseUrl": "https://automation-ozzie.boardeffect.com/login",
    "defaultCommandTimeout": 15000,
    
    "env": {
        "username": "steveSystem",
        "password": "Passw0rd"
      }

}

类 BeHomePage {

getAutoBeWorkroom() {
    return cy.get(':nth-child(7) > a')
}

getCollaborate(){
    return cy.get('.workroom-buttons > :nth-child(4) > a')
}

getNewSurvey(){
    return cy.get('btn btn-success')
}

} 导出默认新 BeHomePage();

如下图所示,一个 (it) 块中的所有代码都通过了,如图所示,但是 2 it 块中的代码如上所示失败。

在此处输入图像描述

标签: javascriptcypress

解决方案


您需要的额外步骤在文档Cookies - Preserve Once的本节中进行了讨论。

赛普拉斯会自动清除每个 cookie 之间的 cookie it(),但如果您添加

it('user can login to boardeffect', () => {          
  LoginPage.getLoginUserName().type(Cypress.env('username'));
  LoginPage.getLoginUserPassword().type(Cypress.env('password'));
  LoginPage.getSigninButton().click();

  // preserve the cookie set above for the next test
  Cypress.Cookies.preserveOnce('_boardeffect_session'); 
})

它将在后续it()部分中保留该 cookie 值。

打开浏览器开发工具,进入应用程序、Cookies、https://automation-ozzzie.boardeffect.com并观察没有preserveOnce()清除 cookie 值。


推荐阅读