Нужна помощь в избавлении от хардкода в автотестах
Тесты работают, но проверка дней выходные или нет, захардкожена в последней строчке("-3" чтобы брал только 3 элемента массива, исключая часы). Может быть есть другой способ как сделать это более правильно, прошу помощи т.к. знаний работы с "календарем" в jave недостаточно(
@Step("Шаг 5. Выполняем п.18 из ТК_А4 ")
public void checkProcessingDeadline() {
LocalDateTime deadlineDay = LocalDateTime.now();
adminPage = page(AdminPage.class);
viewingRequest = page(ViewingRequest.class);
ProductionCalendarPage productionCalendarPage = page(ProductionCalendarPage.class);
mainPage.getAllTab().hover();
mainPage.menuAppeals("Администрирование обращений").click();
while (!adminPage.verificationRules("Входящий звонок", "Приглашение", "Мероприятия").isDisplayed()) {
adminPage.getListViewNextButton().click();
}
adminPage.verificationRules("Входящий звонок", "Приглашение", "Мероприятия").click();
deadlineDay = deadlineDay.plusDays(adminPage.getProcessingTime());
mainPage.getAllTab().hover();
mainPage.menuAppeals("Производственный календарь").click();
productionCalendarPage.getDaysOrder().click();
productionCalendarPage.getFirstDay().click();
ArrayList<String> days = new ArrayList<>();
while (!productionCalendarPage.getLastPage().isDisplayed()) {
days.add(productionCalendarPage.getWeekend().getText());
productionCalendarPage.getNextPage().click();
}
while (days.contains(deadlineDay.format(DateTimeFormatter.ofPattern("dd.MM.yyyy")))
|| deadlineDay.getDayOfWeek().equals(DayOfWeek.SATURDAY)
|| deadlineDay.getDayOfWeek().equals(DayOfWeek.SUNDAY)) {
deadlineDay = deadlineDay.plusDays(1);
}
open(viewingRequestUrl);
String finalDeadLine = deadlineDay.format(DateTimeFormatter.ofPattern("dd.MM.yyyy HH"));
String expDeadLine = viewingRequest.processingeadline().getText();
Assert.assertEquals(finalDeadLine, expDeadLine.substring(0, expDeadLine.length() - 3));
}
Ответы (1 шт):
Автор решения: Roman Konoval
→ Ссылка
Лучше всего сравнивать не строки, а сами даты. Т.е. вместо перевода даты в строку, лучше наоборот строку перевести в дату. Для того чтоб сравнить их с точностью, скажем до часов, игнорируя минуты, нужно воспользоваться обрезанием с помощью метода truncateTo. Вот пример, который показывает и как парсить строку и как обрезать дату:
LocalDateTime deadlineDay = LocalDateTime.of(2021, 06, 02, 10, 02, 30);
String expDeadLineStr = "02.06.2021 10:45:33";
LocalDateTime expDeadLine = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss")
.parse(expDeadLineStr, LocalDateTime::from);
LocalDateTime truncatedExpDeadLine = expDeadLine.truncatedTo(ChronoUnit.HOURS);
LocalDateTime truncatedDeadlineDay = deadlineDay.truncatedTo(ChronoUnit.HOURS);
Assert.assertEquals(truncatedDeadlineDay, truncatedExpDeadLine);
