Возможно ли в Cypress вернуть значение элемента и использовать его в следующем вызове get?

Рейтинг: 0Ответов: 1Опубликовано: 23.02.2023

Допустим нужно пройтись по элементам в таблице и сложить их значения через цикл get.each... далее это значение использовать в следующем вызове get... и сравнить его с другим , облазил статьи и так понимаю в асинхронном вызове это нереально сделать . но может что пропустил . вызвать get внутри цикла не вариант , т.к сравнивать будет элемент сразу с первой итерацией

Ответы

▲ 0Принят

Да, в Cypress можно получить значение элемента и использовать его в следующем вызове get. Для этого можно использовать функцию .then(), которая позволяет получить значение элемента и передать его в следующий вызов get.

Например, если нужно сложить значения всех элементов таблицы, можно использовать следующий код:

let sum = 0;

cy.get('table tr td')
  .each(($td) => {
    cy.wrap($td).invoke('text').then((text) => {
      sum += parseInt(text);
    });
  })
  .then(() => {
    cy.get('#total').should('have.text', sum.toString());
  });

В этом коде мы используем .each() для перебора всех элементов таблицы, затем для каждого элемента мы вызываем .invoke('text') чтобы получить текстовое значение элемента. Затем мы используем .then() чтобы сложить все значения элементов и передать их в вызов get('#total'), который проверяет, что итоговое значение суммы равно значению элемента с id="total".

Обратите внимание, что .then() выполняется после того, как все значения элементов были получены, поэтому это решение может быть не очень эффективным для больших таблиц. Если таблица очень большая, то лучше использовать цикл и сохранять значения элементов в массив, а затем использовать этот массив для сравнения с другим элементом.