Cypress и условный оператор
Привет. Столкнулся с такой проблемой:
Есть веб приложение, в нём пользователи могут редактировать записи. Когда пользователь редактирует запись, она «блокируется» — и если другой пользователь пытается эту же запись отредактировать, появляется диалоговое окно с подтверждением того, что пользователь собирается «поломать» чужое редактирование.
То есть, при редактировании это диалоговое окно может появится, а может и нет. Поэтому, в скрипте нужно как то это отловить.
Пробовал такой костыль:
//if breaking lock dialog is shown
const $BreakLock = Cypress.$('.mat-dialog-actions');
if ($BreakLock) {
//confirm button click
cy.get('.mat-dialog-actions button').eq(1).click();
}
Но он почему-то не работает, если окошко не показывается — тест валится.
Из документации по Cypress не понятно толком, как быть в этой ситуации.
UPD. Решение было найдено. Гугл мне выдал эту страничку при поиске решения другой проблемы, поэтому напишу его сюда — возможно, кому-то пригодится.
cy.get('body').then((body) => {
if (body.find('mat-dialog-container').length > 0){
cy.xpath("//mat-dialog-container//*[text()='Yes']").click(); //нажимает Yes в появившемся окошке.
}
});
14 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівРешение нашлось, обновил описание.
Это должно быть 2 отдельных теста, что появится попап и что юзер может редактировать запись. Наличие If в тестах — плохая практика.
А по делу, сайпрес пытается обратиться к обьекту которого вероятнее всего нет вот и падает.
В селениуме это обыгрывается обычным findElements(locator).size() > 0; Скорей всего в сайперсе тоже есть какой-то аналог проверки на наличие элемента.
Да, на эту функциональность будут отдельные тесты. В данном случае, нужно отловить это окошко для тестирования других функций которые, работают в режиме редактирования записи.
Да, вот поэтому и спрашиваю, что есть подобного в кипарисе.
Скорее всего, дело в том, что условие срабатывает все время, так как вне зависимости от того, найден ли элемент на странице Cypress.$ создает объект.
А что именно пишет в логах?
Пишет — объект «.mat-dialog-actions» не найден. Так что да, вы правы насчет того, что условие срабатывает при любом варианте.
ваш тест стає недермінованим. Напишіть тест, де це вікно ТОЧНО з’являється або не з’являється
Да, так и рекомендует документация. Проблема в том, что кто-то может заблокировать запись, которая создана для теста.
Еще вариант — тест упал, и запись не сохранилась. Т.е. она остаётся заблокированной. И при следующем запуске теста, возникнет диалог подтверждения, хотя изначально, он не ожидается.
от. дані потрібно готувати динамічно для тесту. і видаляти після
Да, видимо придётся...
Спасибо за совет!
Cypress это диагноз само по себе.
Используй нормальные инструменты, основанные на селениуме.
ССЗБ.
Там не совсем от меня зависит... :(
А чем Cypress плох? Очень хорошо под CI заточен вроде. Код ± такой же, иногда короче. Установка — проще.
Ну я даже не знаю... например Всем.
Вместо того, чтобы писать что он не может, проще просто написать, что он может.
Мертворожденный продукт.
та нармальная тулза в своей нише вроде. Не без своих ограничений, но в целом ОК для функционального тестирования UI, особенно если есть возможность подправлять систему для тестабилити.
Из основных ограничений наверное поддержка браузеров, но это далеко не всегда критично и в крайнем случае можно допокрыть более универсальными тулзами.