.day - весь список дат; .day:not(.disabled) - весь список без задизейбленных; //*[contains(@class,'day') and not(contains(@class,'disabled'))][last()] - вообще вернет только последнюю дату, т.е. даже не нужно вытягивать весь список.
Я конечно не видел вашей полной верстки, но вариантов решения - масса. Не уверен, что все будет работать, ввиду древности xpath / css движков в драйвере, но при желании можно найти оптимальное решение.
Это Java 8 streams API. Вкратце: получение последнего элемента, трансформация оного в LocalDate, возврат текущей даты, если на предыдущих степах ничего не было найдено. Если не вкратце, то подойдет чтение любой статьи 2+ летней давности о “нововведениях” Java 8.
П.С. Правда я там по ходу дела забыл еще одну трансформацию: WebElement -> String через getText. Но считайте это псевдо-кодом. На практике там может что-то быть подкорректировано, ибо писал без IDE.
Вчера ваш вариант не смог запустить, реализовал вот так
public void checkDate(int days) throws Exception {
waitForAjaxToFinish();
int one = driver.findElements(By.cssSelector(".day:not(.disabled)")).size();
if (one != days)
throw new Exception();
}
Мой вариант ничего не ассертит. Он просто находит последнюю дату и преобразовывает ее к LocalDate. Тем не менее, я все равно не совсем понимаю вашей проблемы с ассертами. В чем именно загвоздка? Тут же элементарная проверка двух чисел на равенство.
@Step("Проверка максимально доступной даты")
public void checkDate(int expectedsDays) {
waitForAjaxToFinish();
int actualsDays = driver.findElements(By.cssSelector(".day:not(.disabled)")).size();
Assert.assertEquals(expectedsDays,actualsDays);