Таким образом, команды Cypress на самом деле не работают синхронно, как только они запускаются, чтобы увидеть, доступен ли элемент с этим селектором или нет, и мы хотим вызывать функцию .attr
только тогда, когда элемент доступен, поэтому ждать, пока элемент времени не станет доступным, и поэтому мы должны использовать функцию .invoke()
. Cypress использует jQuery под капотом, но создает оболочку Cypress над оболочкой jQuery, чтобы подождать период времени по умолчанию или пока элемент времени не станет доступным, в зависимости от того, что наступит раньше.
cy.get(selector)
Мы не можем вызывать jQuery функции, такие как .attr, в оболочках Cypress, поэтому для этого мы вызываем функцию invoke с именем функции jQuery. Однако если мы используем .then () в оболочке Cypress, то функция cb, переданная затем, будет выполняться при возврате предыдущей команды, таким образом, она становится своего рода синхронной, и мы теряем возможность повторного запуска cypress, и, таким образом, jQuery Команда может быть называется следующим образом
cy
.get('img').then(image => image.attr('src'invoke('attr', 'src')
.should('include', 'myLogo')