Выбор опций в select

В веб-тестировании элементы — это cy.select(). Он позволяет выбрать опцию по значению (value), тексту (label) или индексу.

Синтаксис:

cy.get('select#country').select('USA'); // по тексту
cy.get('select#country').select(['USA', 'Canada']); // несколько опций
cy.get('select#country').select('us'); // по значению атрибута value
cy.get('select#country').select(2); // по индексу (нумерация с 0)

Особенности:

  • Метод поддерживает множественный выбор, если генерируются динамически через JavaScript после загрузки страницы. В таких случаях важно убедиться, что элемент полностью отрендерен, прежде чем взаимодействовать с ним.

    Пример с ожиданием:

    cy.get('select#city', { timeout: 10000 }).should('be.visible');
    cy.get('select#city').select('Moscow');

    Советы:

    • Использовать { timeout: ... } для элементов, которые загружаются асинхронно.
    • Проверять наличие опций через .children('option'):
    cy.get('select#city').children('option').should('have.length.greaterThan', 0);

    Сложные случаи: кастомные селекты

    Многие современные UI-библиотеки (например, React Select, Ant Design) используют кастомные компоненты, которые выглядят как .

  • Для множественного выбора всегда проверять массив выбранных значений.
  • Для динамических или кастомных селектов использовать .click() и .contains().
  • Всегда проверять, что выбранная опция действительно активна (:selected или текст в DOM).