Приветствую всех
- Есть сайт https://www.expedia.com/
- Есть поле ‘Departing’
- По клику на него открывается календарь
В учебных целях хочу проклацать каждое число, но не могу додуматься как правильно реализовать перебор этих чисел
Заранее спасибо )
Приветствую всех
В учебных целях хочу проклацать каждое число, но не могу додуматься как правильно реализовать перебор этих чисел
Заранее спасибо )
Сколько календарей не видел, всегда вводил данные напрямую в форму в автотестах. Смысл в проверке стандартных виджетов?
А так-то все вроде как очевидно
найти общий локатор для всех чисел месяца
вытянуть элементы через find_elements
перебрать элементы в цикле, кликая на каждый.
driver.findElement(By.id("package-departing-hp-package")).click();//Открываем календарь
List<WebElement> elements = driver.findElements(By.xpath("//button[@data-year]"));//Ищем все кликабельные элементы
for (int i = 0, elementsSize = elements.size(); i < elementsSize; i++) {
WebElement element = elements.get(i);
element.click(); //Кликаем по i-тому элементу
try {
Thread.sleep(2000); // Тут мне было лень писать нормальный wait :)
} catch (InterruptedException e) {
e.printStackTrace();
}
driver.findElement(By.id("package-departing-hp-package")).click(); //Открываем календарь
elements = driver.findElements(By.xpath("//button[@data-year]")); //Опять ищем все кликабельные элементы календаря, т.к. после предыдущего клика по дате DOM изменился.
}
Сделай отдельный класс Calendar. Там опиши кнопки “вперед” и “назад”, а также действие над кнопками. По клику на кнопку, которая открывает календарь - возвращай объект класса Calendar. Также опиши метод, который кликает на конкретную дату. На вход метод будет получать String day; String month;
Типо такого:
public Calendar clickDate(String day, String month){
String locator = String.format("//button[@data-day='%s'][@data-month='%s']",day, month);
click(By.xpath(locator));
return this;
}
В цикле вызывай метод и передавай значения.
идея правильная но после первого клика елементы в доме могут уже не находиться, нужно будет заново искать все с начала.
Абсолютно с вами согласен!
Именно поэтому в цикле выполняется “перепоиск” элементов: