Из-за чего не нажимается кнопка по методу click() в Selenide?
Ссылка скопирована
Привожу часть кода:
// Модальное окно подтверждение заказа private SelenideElement modalWindow = $(".Order_Modal__YZ-d3"); // Кнопка "Да" в модальном окне подтверждения заказа private SelenideElement yesButtonModalWindow = modalWindow.$(".Order_Buttons__1xGrp").$$(".Button_Button__ra12g").findBy(text("Да"));
Далее в методе теста:
modalWindow.shouldBe(enabled); yesButtonModalWindow.click();
Но кнопка не нажимается
По вводным: также проверял "достать" текст кнопки и он выводится корректно
По вводным: структуру html также прикладываю:
<div class="Order_Modal__YZ-d3"><div class="Order_ModalHeader__3FDaJ">Хотите оформить заказ?<br><div class="Order_Text__2broi"> </div></div><div class="Order_Buttons__1xGrp"><button class="Button_Button__ra12g Button_Middle__1CSJM Button_Inverted__3IF-i">Нет</button><button class="Button_Button__ra12g Button_Middle__1CSJM">Да</button></div></div>
По вводным: при этом кнопка меняет оформление, как будто курсор на неё наводится
Нужно решить такую задачу?
Заказать помощь
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Лучший ответ
1
Другие ответы (0)
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопроскомментарий
Вам также может быть интересно
печатные-платы
Как заставить запускаться программу M3.exe от компании Hanxing AOI в инспекционной машине на Windows 7 Pro?
1 ответ
VPN
Как правильно настроить vless для Android TV?
1 ответ
Pyrogram
Как правильно зарегистрировать юзер бота в Telegram?
1 ответ
linkedin
Из-за чего выкидывает из аккаунта LinkedIn?
1 ответ

В Selenide
click()может “не нажимать” кнопку даже при видимом hover-эффекте, если элемент найден, но фактически перекрыт, не находится в активном состоянии, модалка ещё анимируется или вы кликаете не тот экземпляр кнопки. ПроверкаmodalWindow.shouldBe(enabled)здесь слабая: модальное окно может быть enabled, но сама кнопка ещё не clickable.Сначала сделайте локатор проще и проверяйте именно кнопку:
SelenideElement yesButton = $(".Order_Modal__YZ-d3") .$$("button") .findBy(exactText("Да")); yesButton.shouldBe(visible, enabled).click();
Если классы CSS module генерируются, лучше не завязываться на полный набор классов. Ещё лучше — попросить разработчиков добавить стабильные атрибуты:
<button data-testid="confirm-order-yes">Да</button>
$("[data-testid='confirm-order-yes']") .shouldBe(visible, enabled) .click();
Если кнопка меняет оформление как при наведении, но действие не происходит, проверьте, нет ли overlay поверх кнопки. В браузере это часто видно через DevTools. В тесте можно временно проверить так:
Selenide.executeJavaScript( "return document.elementFromPoint(arguments[0], arguments[1]).outerHTML", yesButton.getLocation().getX() + 5, yesButton.getLocation().getY() + 5 );
Если возвращается не сама кнопка, значит клик перехватывает другой элемент. Тогда нужно ждать завершения анимации/исчезновения loader-а, а не насильно кликать JavaScript-ом.
Правильный тестовый шаг обычно выглядит так:
modalWindow.shouldBe(visible); yesButton.shouldBe(visible, enabled).scrollIntoView(true).click();
JavaScript click я бы использовал только как диагностический костыль:
executeJavaScript("arguments[0].click()", yesButton);
Если JS-click работает, а обычный click нет, проблема почти точно в перекрытии, анимации, координатах или состоянии UI. Исправлять лучше ожидания и локаторы, а не оставлять JS-click в стабильных автотестах.