Проверка того, что дата и время в списке веб-элементов идут от старшего к младшему. Селен, Java

Есть список даты и времени, например:

06.04.2023 15:20,
06.04.2023 11:50,
03.04.2023 22:47,
29.03.2023 21:06,
29.03.2023 23:07,
27.03.2023 19:26.

При этом список может меняться, но на самом деле список всегда идет по убыванию. Мне нужно убедиться, что дата и время идут от наибольшего к наименьшему (поэтому требуется соответствующее утверждение).

Я прохожу веб-элементы через цикл for() и с помощью метода getText() получаю значения элементов.

@FindBy(css = "locator")
private List<WebElement> allDate;

Array List <String> justList = new ArrayList<>();
for(WebElement element : allDate) {
    justList.add(element.getText());
}

Но есть проблема в формировании самого утверждения, что на самом деле периоды времени располагаются в порядке от большего к меньшему.

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

Вам нужно проанализировать даты, чтобы получить в каждом случае простое число (скажем, секунды с некоторой базовой даты). Тогда тривиально определить, упорядочены ли они. Для этого просто утверждаем в цикле, что N-й вход не меньше, чем N-1-й вход, уделяя должное внимание «первому» проходу цикла. Вам даже не нужно создавать список.

Arfur Narf 16.04.2023 00:34

@ArfurNarf Разбор правильный, а использование чисел - нет. Разберите на LocalDateTime объекты, как показано в ответе. Их можно сравнить с помощью isBefore() или isAfter(), что еще нагляднее.

Ole V.V. 16.04.2023 09:24

Нужно ли учитывать летнее время (DST) и другие временные аномалии? Когда осенью часы поворачивают назад, может возникнуть какой-то забавный порядок времени, который все еще может согласовываться с убывающим порядком показаний часов.

Ole V.V. 16.04.2023 09:26
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда я делал это в прошлом, я обнаружил, что проще всего преобразовать строку даты и времени в фактический объект Java DateTime, скопировать список, отсортировать копию, а затем использовать Assert для сравнения несортированных и отсортированных списков. В данном случае я использую LocalDateTime. Если исходный список отсортирован правильно, он будет точно соответствовать отсортированному списку.

@FindBy(css = "locator")
private List<WebElement> allDateTimes;

// loop through each element, get text, and store it
List<String> dateTimeStrings = new ArrayList<>();
allDateTimes.forEach(e -> dateTimeStrings.add(e.getText()));

// declare a formatter that defines the expected datetime format
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm", Locale.ENGLISH);

// loop through each datetime String, convert to LocalDateTime, and store it
List<LocalDateTime> dateTimes = new ArrayList<>();
dateTimeStrings.forEach(dateTimeString -> dateTimes.add(LocalDateTime.parse(dateTimeString, formatter)));

// copy the LocalDateTime List and sort it
List<LocalDateTime> dateTimesSorted = new ArrayList<LocalDateTime>(dateTimes);
Collections.sort(dateTimesSorted, Collections.reverseOrder());

// Use TestNG assert to compare Lists
Assert.assertEquals(dateTimes, dateTimesSorted, "Verify that the datetimes on the page are sorted in descending order");

Другие вопросы по теме