Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

jQuery выбор даты от сегодняшнего дня плюс неделя, как реализовать?

selenium
Теги: #<Tag:0x00007f7b691e1e00>

(pauloo89) #1

Java selenium junit.
Сейчас я нашел вариант как кликать на сегодняшнюю дату, но не могу придумать как кликнуть(именно) кликнуть в календаре плюс неделя.
Я читал вариант http://barancev.github.io/how-to-set-datepicker-value/
но меня не устраивает что нужно открывать новую страницу, может кто делал чтобы передать дату от сегодняшней плюс неделя.


Как правильно заполненять инпут датой с появляющимся дейтпикером
(Sergey Korol) #2

О какой новой странице идет речь? В статье нет ни слова об этом. Там либо банально sendKeys отправляется, либо напрямую через jQuery.


(Eugene Moskalenko) #3

тоже не нашел никаких упоминаний про открывать новую страницу :slight_smile:

более надежно будет как в статье скорее всего, если кликать, то будет конечно больше похоже на человека, но тесты будут жутко не стабильными… сендКейс вообще наверное отпадает, как вариант, потому что все дизейбляд это поле…


(pauloo89) #4

Все верно нет там упоминаний, я не верно сделал.


(pauloo89) #5

да там нет упоминаний про новую страницу я не верно делал.


(pauloo89) #6

Этот способ не подходит так как мне нужно именно кликнуть, к сегодняшней дате плюс неделя.
Но я написал метод который кликает как нужно, сначала прибавляю к сегодняшней дате неделю, затем передаю ее числами, после того как ввел числа данное число обводится квадратиком, и в этот момент можно кликнуть как будто пользователь просто кликнул на нужное число. Его можно и с паре с методом из статьи использовать.

public void departureDateWeekClick(){
Date date = new Date();
date.setTime(date.getTime() + 604800000 );
int day = date.getDate();
String strDay = String.format("%02d", day);
int mouth = date.getMonth() + 1;
String strMouth = String.format("%02d",mouth);
int year = date.getYear() + 1900;
String strYear = String.valueOf(year);
departeDate.sendKeys(strDay,strMouth,strYear);
driver.findElement(By.cssSelector("[class=‘ui-state-default ui-state-active ui-state-hover’]")).click();
}


(Eugene Moskalenko) #7

А если надо будет добавить два дня или 8 дней или 15 дней, тоже конвертировать их в миллисекунды? Надо метод сделать наверное параметризированным, чтобы принимал значение в днях. :slight_smile:

и вот это космическое число “604800000” наверное стоит записать так - “7 * 24 * 60 * 60 * 1000”, код будет читаемей и дни вынести в константу, чтобы проще было менять дни в методе

day = 24 * 60 * 60 * 1000;

+ 7 * day

(pauloo89) #8

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


(pauloo89) #9

главное что получилось сделать выбор дней плюс вроде это стабильно не падает


(pauloo89) #10

как то так
public void departureDateDaysClick(int days){
Date date = new Date();

    date.setTime(date.getTime() + days*24*60*60*1000 );
    int day = date.getDate();
    String strDay = String.format("%02d", day);
    int mouth = date.getMonth() + 1;
    String strMouth = String.format("%02d",mouth);
    int year = date.getYear() + 1900;
    String strYear = String.valueOf(year);
    departeDate.sendKeys(strDay,strMouth,strYear);

    WebElement dateWeek = driver.findElement(By.cssSelector("[class='ui-state-default ui-state-active ui-state-hover']"));
    doubleClick(dateWeek);
}

(Sergey Korol) #11

Какие-то сложные у вас манипуляции. Или вы до сих пор на <= 7 java? Ибо в 8-ке все пишется в 1 строку:

LocalDate.now().plusWeeks(1);

П.С. В крайнем случае можно взять joda.time и достичь того же эффекта.


(pauloo89) #12

Так на строку поменьше и попонятней получилось, а может есть вариант сразу получать в нужном формате дату и чтобы String?
LocalDate date = LocalDate.now().plusDays(days);
int day = date.getDayOfMonth();
String strDay = String.format("%02d", day);
int mouth = date.getMonthValue();
String strMouth = String.format("%02d",mouth);
String year = String.valueOf(date.getYear());
departeDate.sendKeys(strDay,strMouth,year);
WebElement dateDays = driver.findElement(By.cssSelector("[class=‘ui-state-default ui-state-active ui-state-hover’]"));
doubleClick(dateDays);


(Sergey Korol) #13

Код когда будем учиться форматировать? Или шапка наверху просто так прикреплена? В следующий раз подобные темы будут сразу скрываться.

По теме, вопрос форматирования дат прекрасно освещен в официальных javadocs.

LocalDate.now().plusWeeks(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))

(pauloo89) #14

Спасибо, теперь всего строка.

    public void departureDateDaysClick(int days) {
            String date = LocalDate.now().plusDays(days).format(DateTimeFormatter.ofPattern("dd-MM-yyyy"));
            departeDate.sendKeys(date);
            WebElement dateWeek = driver.findElement(By.cssSelector("[class='ui-state-default ui-state-active ui-state-hover']"));
            doubleClick(dateWeek);
        }