Альтернатива {тайм-аут: 10000}

#javascript #timeout #cypress #wait

#javascript #тайм-аут #cypress #подождите

Вопрос:

Когда я нажимаю кнопку «Добавить в корзину», значение «2» не сохраняется и в моей корзине находится только один товар. Проблема в том, что Cypress работает слишком быстро. Потому что, когда я жду секунду между этими шагами, значение 2 будет сохранено.

 it('add two items to cart', function() {

    cy.get('.cx-counter-value', { timeout: 5000 })
      .clear()
      .type(2)
      .should('have.value', '2')

   // .wait(1000)

    cy.contains('Add to cart').click()
})
  

Существует ли альтернатива «{ timeout: 5000 }» для ожидания ожидаемого состояния?

Ответ №1:

В Cypress нет ожидаемых условий, подобных Selenium; вместо этого у него есть более продвинутые концепции использования Events / XHR и т.д.,

Например, в вашем случае, я предполагаю, что приложение должно выполнить вызов XHR, чтобы добавить 2 товара в корзину. Вероятно, вы можете дождаться успешного выполнения запроса XHR и подтвердить наличие 2 товаров в вашей корзине,

 // Wait for the route aliased as 'addToCart' to respond
// without changing or stubbing its response
cy.server()
cy.route('/cart/*').as('addToCart')
cy.visit('/cart/item/2')
cy.wait('@addToCart').then((xhr) => {
    cy.get('.cx-counter-value')
      .should('have.value', '2')
})  

Даже если это не XHR, просто посмотрите, запускаются ли какие-либо события, на которые вы можете положиться.

Ссылка:
https://docs.cypress.io/api/commands/wait.html#Alias