В чем вы видите полезность вызова функции в кипарисе? - PullRequest
0 голосов
/ 06 февраля 2020

https://docs.cypress.io/api/commands/invoke.html#Function -с аргументами

cy
  .get('img').invoke('attr', 'src')
    .should('include', 'myLogo')

Я пытался понять, почему у нас есть функция invoke и как мы понимаем, что нам придется вызывать .invoke('attr','target') функция, а не .attr('target') функция

1 Ответ

0 голосов
/ 06 февраля 2020

Таким образом, команды 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')
...