t.me/atinfo_chat Telegram группа по автоматизации тестирования

Подскажите как правильно реализовать проклацивание по календарю

webdriver
Теги: #<Tag:0x00007f9c5c8fcc58>

(Евгений Вакерин) #1

Приветствую всех

  1. Есть сайт https://www.expedia.com/
  2. Есть поле ‘Departing’
  3. По клику на него открывается календарь

В учебных целях хочу проклацать каждое число, но не могу додуматься как правильно реализовать перебор этих чисел

Заранее спасибо )


(Maxim Zaitsev) #2

Сколько календарей не видел, всегда вводил данные напрямую в форму в автотестах. Смысл в проверке стандартных виджетов?
А так-то все вроде как очевидно
найти общий локатор для всех чисел месяца
вытянуть элементы через find_elements
перебрать элементы в цикле, кликая на каждый.


(Юрій Ківшар) #3
        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 изменился.
        }

(Александр Викторович) #4

Сделай отдельный класс 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;

    }

В цикле вызывай метод и передавай значения.


(Funker) #5

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


(Юрій Ківшар) #6

Абсолютно с вами согласен! :slight_smile:
Именно поэтому в цикле выполняется “перепоиск” элементов: