Есть список даты и времени, например:
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());
}
Но есть проблема в формировании самого утверждения, что на самом деле периоды времени располагаются в порядке от большего к меньшему.
Подскажите пожалуйста по этому вопросу, может у кого есть практическое решение.
@ArfurNarf Разбор правильный, а использование чисел - нет. Разберите на LocalDateTime
объекты, как показано в ответе. Их можно сравнить с помощью isBefore()
или isAfter()
, что еще нагляднее.
Нужно ли учитывать летнее время (DST) и другие временные аномалии? Когда осенью часы поворачивают назад, может возникнуть какой-то забавный порядок времени, который все еще может согласовываться с убывающим порядком показаний часов.
Когда я делал это в прошлом, я обнаружил, что проще всего преобразовать строку даты и времени в фактический объект 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");
Вам нужно проанализировать даты, чтобы получить в каждом случае простое число (скажем, секунды с некоторой базовой даты). Тогда тривиально определить, упорядочены ли они. Для этого просто утверждаем в цикле, что N-й вход не меньше, чем N-1-й вход, уделяя должное внимание «первому» проходу цикла. Вам даже не нужно создавать список.