Нажимаю на кнопку дата(все нормально) - выпадает календарь (В нем нажать не получаеться)Выдает эксепшен:
org.openqa.selenium.ElementNotVisibleException: Cannot click on element
В доме они находяться в разных div ветках
Thread.sleep(3000);
Пробовал, не помогает.
Вот отрезок кода:
driver.findElement(By.id("CskoRegistryCoverLayout_DateFromBtn")).click(); - нажатие на меню даты
driver.findElement(By.xpath("//div[5]/div/table/tbody/tr/td[3]")).click(); - выбор даты(там где эксепшн)
Assert.assertTrue(isElementPresent(By.id("CskoRegistryCoverLayout_Grid")));
Согласен с @tkachenko_eugen - я тоже предпочитаю использовать ввод текстом, где это возможно, даже несмотря на наличие “выпадашек”. Если сильно надо тестировать “выпадашки” - под это пишутся отдельные тесты.
1)Завтра выложу кусок ДОМа
2)Да принципиально, так как нет возможности ввести дату, только выбор с выпадающего меню.
П.С. насчет xPath уже обсуждалось, проект gwt поэтому все динамическое и все атрибуты повторяются.
Возможно как раз то что тебе пригодиться.
А с xpath действительно что-то думать нужно. Возможно стоит посмотреть в сторону Yandex HtmlElements с их блоками и представить данный календарик как блок…У меня был несколько другой календарь, но сути особо не меняет. Тут у тебя будут 2 блока календаря…посмотри может понравится.
Единственная проблема если используется Serenity - у меня их подружить не удалось
Да кстати знаю отчего у тебя такой Exception может вылазить. Скорее всего у тебя на странице находится полей с таким xpath не одно, а столько, сколько календарей. так как findElement тебе вернет первый попавшийся элемент, удоворяющий условию то на 90% проблема в том что календарь, который в DOM выше по списку на момент клика скрыт (не видим, свойство display=false…), а клики по невидимым элементам не проходят…вот и такой Exception.
Соответственно решения возможные:
искать циферки в календаре через findElements, а потом полученный лист перебирать, проверять на видимость и кликать по видимым, отвечающим параметрам даты;
изменить xpath, чтобы он учитывал свойство календаря (скорее всего родительский div) у которого display=false и выбирало только тот календарь, у которого он не false итд…;
представить календарь как кастомный веб элемент, искать его по xpath, а в нем реализовать методы кликанья по датам по относительному xpath к примеру: