В Cypress aliase — это способ присвоить элементу,
запросу или функции удобное имя для дальнейшего использования в тестах.
Алиасы позволяют повысить читаемость кода, избежать повторного поиска
элементов на странице и упростить работу с асинхронностью.
Метод .as() используется для присвоения алиаса.
Например, если на странице есть кнопка отправки формы:
cy.get('button[type="submit"]').as('submitButton');
Теперь этот элемент можно использовать повторно, ссылаясь на алиас:
cy.get('@submitButton').click();
Ключевые моменты:
@ перед именем алиаса обязателен при
использовании.it).
Для использования между тестами необходимы другие подходы (например,
хранение в Cypress.env).Если в тесте требуется многократно взаимодействовать с одним и тем же
элементом, алиас позволяет избежать повторного вызова
cy.get():
cy.get('input[name="email"]').as('emailField');
cy.get('@emailField').type('user@example.com');
cy.get('@emailField').should('have.value', 'user@example.com');
Это упрощает поддержку тестов: при изменении селектора достаточно
обновить только строку с .get(), остальные ссылки через
алиас останутся рабочими.
Метод .as() применим не только к DOM-элементам, но и к
сетевым запросам. Например, для перехвата POST-запроса при отправке
формы:
cy.intercept('POST', '/api/login').as('loginRequest');
cy.get('button[type="submit"]').click();
cy.wait('@loginRequest').its('response.statusCode').should('eq', 200);
Преимущества использования алиаса для сетевых запросов:
Cypress поддерживает цепочку команд, где каждый вызов возвращает новый объект. Алиас можно присвоить на любом этапе цепочки:
cy.get('form').find('input[name="password"]').as('passwordField');
cy.get('@passwordField').type('Secret123!');
Такой подход позволяет присваивать алиасы именно нужному уровню вложенности элементов и сохраняет контекст поиска.
thisПри использовании функций function() вместо стрелочных
функций в тестах, алиасы становятся доступными через
this:
beforeEach(function() {
cy.get('input[name="username"]').as('usernameField');
});
it('вводит данные в поле username', function() {
this.usernameField.type('testuser'); // доступ через this
});
Особенности:
as(), автоматически
сохраняются в контексте this только при обычных функциях,
не стрелочных.this, поэтому
доступ через this невозможен.Если требуется многократное использование элемента в разных тестах,
алиасы можно создавать в beforeEach:
beforeEach(() => {
cy.visit('/login');
cy.get('input[name="username"]').as('usernameField');
cy.get('input[name="password"]').as('passwordField');
});
it('вводит логин и пароль', () => {
cy.get('@usernameField').type('user1');
cy.get('@passwordField').type('pass1');
});
it('проверяет, что поле username пустое по умолчанию', () => {
cy.get('@usernameField').should('have.value', '');
});
Это улучшает организацию тестов и уменьшает дублирование кода.
cy.get() или использовать
.should() для ожидания состояния.it) — их контекст ограничен циклом выполнения теста..as()cy.get('@alias') или через
this.alias при обычных функциях.Использование .as() является стандартной практикой для
организации Cypress-тестов, упрощает поддержку и делает сценарии более
предсказуемыми и понятными.