Cypress не может выбрать радио-кнопку

Вопрос или проблема

Я использую Cypress с TypeScript. Не удается щелкнуть/отметить радиокнопку в диалоговом окне

введите описание изображения здесь

HTML

<div _ngcontent-ng-c3278589420="" class="dialog-container"><div _ngcontent-ng-c3278589420="" class="content-container"><div _ngcontent-ng-c3278589420="" class="title">Изменить текущую последовательность остановок?</div><div _ngcontent-ng-c3278589420="" class="content"><span _ngcontent-ng-c3278589420="" class="supporting-text"> При добавлении новой остановки(ок) на существующий маршрут, вы хотите - </span><mat-radio-group _ngcontent-ng-c3278589420="" role="radiogroup" class="mat-mdc-radio-group radio-buttons"><mat-radio-button _ngcontent-ng-c3278589420="" value="1" ngdefaultcontrol="" class="mat-mdc-radio-button mat-accent ng-untouched ng-pristine ng-valid" id="mat-radio-38"><div mat-internal-form-field="" class="mdc-form-field mat-internal-form-field"><div class="mdc-radio"><div class="mat-mdc-radio-touch-target"></div><input type="radio" class="mdc-radio__native-control" id="mat-radio-38-input" name="mat-radio-group-36" value="1" tabindex="0"><div class="mdc-radio__background"><div class="mdc-radio__outer-circle"></div><div class="mdc-radio__inner-circle"></div></div><div mat-ripple="" class="mat-ripple mat-radio-ripple mat-mdc-focus-indicator"><div class="mat-ripple-element mat-radio-persistent-ripple"></div></div></div><label class="mdc-label" for="mat-radio-38-input"> Сохранить существующий номер последовательности текущих остановок. </label></div></mat-radio-button><mat-radio-button _ngcontent-ng-c3278589420="" value="2" ngdefaultcontrol="" class="mat-mdc-radio-button mat-accent ng-untouched ng-pristine ng-valid" id="mat-radio-39"><div mat-internal-form-field="" class="mdc-form-field mat-internal-form-field"><div class="mdc-radio"><div class="mat-mdc-radio-touch-target"></div><input type="radio" class="mdc-radio__native-control" id="mat-radio-39-input" name="mat-radio-group-36" value="2" tabindex="0"><div class="mdc-radio__background"><div class="mdc-radio__outer-circle"></div><div class="mdc-radio__inner-circle"></div></div><div mat-ripple="" class="mat-ripple mat-radio-ripple mat-mdc-focus-indicator"><div class="mat-ripple-element mat-radio-persistent-ripple"></div></div></div><label class="mdc-label" for="mat-radio-39-input"> Настроить последовательность текущих остановок </label></div></mat-radio-button></mat-radio-group></div></div><div _ngcontent-ng-c3278589420="" class="buttons"><div _ngcontent-ng-c3278589420="" class="green-text-btn">Отмена</div><div _ngcontent-ng-c3278589420="" class="orange-text-btn disabled-text-btn"> Добавить остановки </div></div></div>

Я попробовал способы ниже, но это не работает

  cy.get('mat-radio-group > mat-radio-button[value="1"] input[type="radio"]') 
                .find('input[type="radio"]') 
                .check({ force: true }); 
cy.get("mat-radio-group > mat-radio-button")
  .first()
  .check({ force: true }); 
cy.get('input[type="radio"][value="2"]')
  .first()
  .check({ force: true }); 
cy.get('input[type="radio"][value="2"]')
  .check({ force: true }); 
cy.get('[value="1"]')
  .first()
  .check({ force: true }); 

Я дождался достаточно времени. Я не могу его найти. Поэтому прошу помощи в нажатии радиокнопки

Ответ или решение

При работе с Cypress и TypeScript могут возникнуть трудности при выборе радиокнопки в диалоговом окне. Давайте подробно рассмотрим возможные причины проблемы и предложим решения.

Проблема

Вы пытаетесь выбрать радиокнопку в диалоговом окне с помощью Cypress, однако команды, которые вы использовали, не срабатывают. Это может произойти по нескольким причинам, включая скрытие элемента, наличие наложений или проблемы с доступностью.

Возможные причины

  1. Скрытие элементов: Радиокнопки могут быть не видны на экране или скрыты другими элементами, поскольку они находятся внутри диалогового окна.

  2. Асинхронность: Элементы могут загружаться асинхронно, и Cypress может пытаться получить доступ к ним до того, как они станут доступными.

  3. Неправильный селектор: Селектор может не указывать на правильный элемент.

  4. Индикаторы состояния: Некоторые элементы могут иметь состояние disabled, что может предотвратить их выбор.

Рекомендации по решению проблемы

  1. Убедитесь, что элемент виден:
    Используйте метод should('be.visible'), чтобы убедиться, что ваш элемент действительно доступен для взаимодействия:

    cy.get('mat-radio-group > mat-radio-button[value="1"]')
     .should('be.visible')
     .find('input[type="radio"]')
     .check({ force: true });
  2. Используйте wait или then:
    Иногда необходимо использовать принудительные задержки или методы управления асинхронными запросами. Избегайте использования статических wait-ов, если возможно, и лучше используйте .then() для ожидания загрузки:

    cy.get('mat-radio-group').then(($group) => {
     if ($group.length) {
       cy.get('input[type="radio"][value="1"]').check({ force: true });
     }
    });
  3. Проверка наличия и состояния кнопок:
    Убедитесь, что радиокнопки не находятся в состоянии disabled. Вы можете добавить проверку перед выполнением выбора:

    cy.get('input[type="radio"][value="1"]').should('not.be.disabled').check({ force: true });
  4. Использование более конкретных селекторов:
    Если селекторы не срабатывают, попробуйте использовать более конкретные селекторы для выбора элемента. Например, вы можете обращаться к элементам через их классы, атрибуты или вложенность:

    cy.get('mat-radio-button[id="mat-radio-38"]')
     .find('input[type="radio"]').check();
  5. Использование force:
    Если элементы по-прежнему нельзя выбрать, добавьте опцию { force: true }, чтобы игнорировать состояния видимости и интерактивности:

    cy.get('input[type="radio"][value="1"]').check({ force: true });

Заключение

Если описанные советы не помогают, рекомендуется проверить консоль на наличие ошибок или предупреждений, а также использовать инструменты отладки Cypress, чтобы увидеть состояние DOM и доступность вопросов. Вам также следует перепроверить сам HTML-код на наличие возможных изменений или ошибок в структуре, которые могут препятствовать выбору радиокнопок.

Используя эти методы, вы сможете успешно выбрать радиокнопку в диалоговом окне с помощью Cypress. Не забывайте также следить за обновлениями Cypress, так как иногда проблемы могут быть связаны с версиями библиотеки.

Оцените материал
Добавить комментарий

Капча загружается...