简体   繁体   English

赛普拉斯:页面未在点击操作的第二个“it”块内加载

[英]Cypress: Page doesn't load within the second 'it' block for the click action

It works fine for the same click event if I've coded within the single 'it' block as below.如果我在下面的单个“it”块中进行了编码,那么对于相同的点击事件来说效果很好。

Working code:工作代码:

describe('Test Suite', () => {
    it('Test case 1', () => {
        //Test 1
        //Test 2
    })
})

Not working:不工作:

describe('Test Suite', () => {
    it('Test case 1', () => {
        //Test 1
    })
    it('Test case 2', () => {
        //Test 2
    })
})

Below is my code snippet, First 'it' block works fine after login method executes.下面是我的代码片段,第一个'it'块在登录方法执行后工作正常。 Then second it blocks just clicking the right element but the page never loads.然后它会阻止仅单击正确的元素,但页面永远不会加载。

PS If I written the code under the single 'it' block, Page loads and works fine. PS如果我在单个“it”块下编写代码,页面加载并正常工作。

describe('Fund Manager Suite', () => {

    //Checking Fund Manager page loading 
   before(() => {

    cy.visit('xxxxxxxxxxxxx')
    cy.login('xxxxx', 'xxxxx')

   })
   
   it('fund manager navigation works', () => {
    cy.location('pathname').should('equal', '/xxxxx')
    cy.get('#appSwitcher').click()

    cy.get('#appSwitcher > .dropdown > .dropdown-menu > :nth-child(2) > a').click()
    cy.location('pathname').should('equal', '/xxxxx')
    cy.get('.k-grid-table').find('tr').should('have.length', 5)
   })

   it('fund detail works', () => {
    cy.get('.product > :nth-child(2)').click()
    cy.location('pathname').should('equal', '/xxxxx')

    // Fund Detail - Search
    cy.get('#s2id_autogen31').type('Rach')
    cy.get('#select2-result-label-32').click()
    cy.get('#searchSubmit').click()
    cy.get('#DataTables_Table_0').find('tr').should('have.length', 10)
       
   })

}) 

Execution Screen shot Code snippet screen shot执行屏幕截图代码片段屏幕截图

You have to preserve your cookies in beforeEach() to make sure that you stay logged in, in all it() blocks.您必须在beforeEach()中保留您的 cookies 以确保您在所有it()块中保持登录状态。 You can read more in cypress docs .您可以在cypress 文档中阅读更多内容。

describe('Dashboard', () => {
  before(() => {
    // log in only once before any of the tests run.
    // your app will likely set some sort of session cookie.
    // you'll need to know the name of the cookie(s), which you can find
    // in your Resources -> Cookies panel in the Chrome Dev Tools.
    cy.login()
  })

  beforeEach(() => {
    // before each test, we can automatically preserve the
    // 'session_id' and 'remember_token' cookies. this means they
    // will not be cleared before the NEXT test starts.
    //
    // the name of your cookies will likely be different
    // this is an example
    Cypress.Cookies.preserveOnce('session_id', 'remember_token')
  })

  it('displays stats', () => {
    // ...
  })

  it('can do something', () => {
    // ...
  })

  it('opens a modal', () => {
    // ...
  })
})

Update:更新:

Able to resolve this issue by storing the session_id.可以通过存储 session_id 来解决这个问题。

Cypress.Cookies.defaults({
  preserve: "session_id"
})

I Have seen this kind of behavior, when the first it case start and doesn`t finish some xhr request in the site - and in result cypress continues the process during the start of the second it case.我见过这种行为,当第一个it case开始并且没有完成站点中的一些 xhr 请求时 - 结果赛普拉斯在第二个 it 案例开始期间继续该过程。 The best solution for clean slate for each case I had found is to separate every case in different file对于我发现的每个案例,最好的解决方案是将每个案例分开放在不同的文件中

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

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