Spec-Zone.ru › Cypress

each

Итерируйтесь по структуре массива (массивы или объекты со свойством length).

Синтаксис

.each(callbackFn)

Использование

Правильное использование

cy.get('ul>li').each(() => {...}) // Iterate through each 'li'
cy.getCookies().each(() => {...}) // Iterate through each cookie

Неправильное использование

cy.each(() => {...})            // Errors, cannot be chained off 'cy'
cy.location().each(() => {...}) // Errors, 'location' doesn't yield an array

Аргументы

callbackFn (Функция)

Передайте функцию, которая вызывается со следующими аргументами:

  • value
  • index
  • collection

Возвращаемые значения

  • .each() возвращает тот же объект, который был получен от предыдущей команды.

Примеры

Элементы DOM

Итерируйтесь по массиву элементов DOM

cy.get('ul>li').each(($el, index, $list) => {
  // $el is a wrapped jQuery element
  if ($el.someMethod() === 'something') {
    // wrap this element so we can
    // use cypress commands on it
    cy.wrap($el).click()
  } else {
    // do something else
  }
})

Исходный массив всегда возвращается

Независимо от того, что возвращается в функции обратного вызова, .each() всегда возвращает исходный массив.

cy.get('li')
  .should('have.length', 3)
  .each(($li, index, $lis) => {
    return 'something else'
  })
  .then(($lis) => {
    expect($lis).to.have.length(3) // true
  })

Обещания

Обещания ожидают выполнения

Если ваша функция обратного вызова возвращает Promise, она будет ожидать её выполнения, прежде чем перейти к следующему элементу в коллекции.

cy.wrap([1, 2, 3]).each((num, i, array) => {
  return new Cypress.Promise((resolve) => {
    setTimeout(() => {
      resolve()
    }, num * 100)
  })
})

Примечания

Преждевременное возвращение

Преждевременно остановить each

Вы можете преждевременно остановить цикл .each() , вернув false в функции обратного вызова.

Правила

Требования

  • .each() требует привязки к предыдущей команде.

Утверждения

  • .each() выполнит только те утверждения, которые вы привязали один раз, и не будет повторять .

Таймауты

  • .each() может ожидать таймаут, ожидая выполнения обещанного значения.

Журнал команд

  • cy.each() не записывается в журнал команд

См. также

  • .spread()
  • .then()

© 2017 Cypress.io
Licensed under the MIT License.
https://docs.cypress.io/api/commands/each

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API