Раскрываем возможности Cypress: как возвращать значения из команд

Cypress — это популярная среда сквозного тестирования JavaScript, которая позволяет разработчикам писать надежные и эффективные тесты для веб-приложений. Хотя Cypress предоставляет богатый набор встроенных команд, иногда вам может потребоваться извлечь значение из команды и использовать его для дальнейших утверждений или действий. В этой статье мы рассмотрим различные методы возврата значений из команд Cypress, а также приведем практические примеры кода.

Метод 1: использование переменных
Один простой подход — сохранить значение в переменной в цепочке команд Cypress. Вот пример:

let valueToReturn;
cy.get('.element').then(($element) => {
  valueToReturn = $element.text();
});
// Access the value outside the command chain
cy.wrap(valueToReturn).should('contain', 'expectedValue');

Метод 2: использование псевдонимов
Cypress предоставляет псевдонимы для хранения значений и ссылки на них позже в тесте. Псевдонимы можно создавать с помощью ключевого слова as. Вот пример:

cy.get('.element').invoke('text').as('textValue');
// Access the value using the alias
cy.get('@textValue').should('contain', 'expectedValue');

Метод 3: использование пользовательских команд
Вы можете создавать собственные команды Cypress для инкапсуляции логики извлечения и возврата значений. Такой подход способствует повторному использованию и читабельности кода. Вот пример:

Cypress.Commands.add('getTextValue', () => {
  return cy.get('.element').invoke('text');
});
// Usage of the custom command
cy.getTextValue().then((textValue) => {
  expect(textValue).to.contain('expectedValue');
});

Метод 4: использование промисов и Async/Await
Команды Cypress возвращают обещания, поэтому вы можете использовать синтаксис async/await JavaScript для обработки асинхронных операций. Вот пример:

const getTextValue = () => {
  return new Cypress.Promise((resolve) => {
    cy.get('.element').invoke('text').then((textValue) => {
      resolve(textValue);
    });
  });
};
// Usage of the function with async/await
cy.wrap(await getTextValue()).should('contain', 'expectedValue');

Метод 5: использование журнала команд Cypress
Cypress предоставляет объект журнала команд, доступ к которому можно получить с помощью cy.log(). Вы можете записать значение и затем использовать его в тесте. Вот пример:

let valueToReturn;
cy.get('.element').then(($element) => {
  valueToReturn = $element.text();
  cy.log(valueToReturn);
});
// Access the value using command log
cy.get('.log').should('contain', 'expectedValue');

Возврат значений из команд Cypress необходим для создания комплексных тестов. В этой статье мы рассмотрели несколько методов достижения этой цели, включая использование переменных, псевдонимов, пользовательских команд, обещаний с async/await и журнала команд Cypress. Используя эти методы, вы можете повысить гибкость и эффективность тестов Cypress.