#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