Cypress: страница не загружается во втором блоке «это» для действия щелчка

#javascript #automation #mocha.js #cypress

#javascript #автоматизация #mocha.js #cypress

Вопрос:

Он отлично работает для того же события щелчка, если я закодировал в одном блоке «это», как показано ниже.

Рабочий код:

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

Не работает:

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

Ниже приведен мой фрагмент кода, первый блок «это» работает нормально после выполнения метода входа в систему. Затем, во-вторых, блокируется просто щелчок по нужному элементу, но страница никогда не загружается.

PS Если я написал код в одном блоке «это», страница загружается и работает нормально.

 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)
       
   })

}) 
 

Снимок экрана выполнения
Снимок экрана с фрагментом кода

Комментарии:

1. У вас есть before() или beforeEach() блок.

2. @AlapanDas У меня перед (() =>{ . Поскольку я хочу оставаться в системе и не нужно повторно запускать сценарий входа в систему в моем втором тесте.

3. @AlapanDas пробовал с Cypress. Cookies.preserveOnce(‘session_id’, ‘remember_token’) по-прежнему не загружает страницу. Если я закодировал то же самое с 1 блоком «это», он работает нормально.

4. Пожалуйста, добавьте часть кода для теста в следующий раз — ваш вопрос похож на пустую форму. Если она содержит какие-то личные данные — приложите усилия для редактирования данных, чтобы люди могли вам помочь

5. @RosenMihaylov Я обновил свой фрагмент кода выше. Пожалуйста, проверьте это.

Ответ №1:

Вы должны сохранить свои файлы cookie, beforeEach() чтобы убедиться, что вы остаетесь в системе, во всех it() блоках. Вы можете прочитать больше в cypress docs .

 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', () => {
    // ...
  })
})
 

Комментарии:

1. Пробовал с помощью описанных выше шагов. Все та же ошибка. Истекло время ожидания 60000мс для загрузки удаленной страницы. Ваша страница не запустила событие загрузки в течение 60000ms.

2. Вы заменили session_id и token фактическими значениями? Вы можете обратиться к этой статье для получения дополнительной информации о том, как получить файлы cookie для вашего приложения — thereluctanttester.com/2018/02/24 /…

3. Я пытаюсь передать токен в это. Но токен динамически изменяется через определенный промежуток времени. Обработает это и сообщит вам. Спасибо за ваше предложение.

Ответ №2:

Я видел такое поведение, когда первый it case запуск и не завершает какой-либо запрос xhr на сайте — и в результате cypress продолжает процесс во время запуска второго ит-обращения. Лучшее решение для чистого листа для каждого случая, который я нашел, — это разделить каждый случай в другом файле

Ответ №3:

Обновить:

Удалось решить эту проблему, сохранив идентификатор сеанса.

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