Не получается нажать на обьект, в випадающем окне.

Есть выпадающая дата.

Нажимаю на кнопку дата(все нормально) - выпадает календарь (В нем нажать не получаеться)Выдает эксепшен:

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")));

Xpath’ы точно верные? Пробовали WebdriverWait использовать?

  1. Кусок DOMа плиз.
  2. Вам принципиально нажимать на дейт пикер? - можно просто текстом передать нужную вам дату.

П.С. Ваш xpath выглядит ужасно, сделайте его более гибким и читабельным.

Согласен с @tkachenko_eugen - я тоже предпочитаю использовать ввод текстом, где это возможно, даже несмотря на наличие “выпадашек”. Если сильно надо тестировать “выпадашки” - под это пишутся отдельные тесты.

FirePath-ом (FireFind-ом) проверял xpath?

1)Завтра выложу кусок ДОМа
2)Да принципиально, так как нет возможности ввести дату, только выбор с выпадающего меню.
П.С. насчет xPath уже обсуждалось, проект gwt поэтому все динамическое и все атрибуты повторяются.

Да xPath проверял Fire-Pathom

Нет возможности ввести дату, только выбор с выпадающего меню.

xPath точно верный.Не пробовал.Можете обьяснить, как реализовать WebDriverWait

Вот недавно была тема.

Возможно как раз то что тебе пригодиться.
А с xpath действительно что-то думать нужно. Возможно стоит посмотреть в сторону Yandex HtmlElements с их блоками и представить данный календарик как блок…У меня был несколько другой календарь, но сути особо не меняет. Тут у тебя будут 2 блока календаря…посмотри может понравится.
Единственная проблема если используется Serenity - у меня их подружить не удалось :frowning:

Да кстати знаю отчего у тебя такой Exception может вылазить. Скорее всего у тебя на странице находится полей с таким xpath не одно, а столько, сколько календарей. так как findElement тебе вернет первый попавшийся элемент, удоворяющий условию то на 90% проблема в том что календарь, который в DOM выше по списку на момент клика скрыт (не видим, свойство display=false…), а клики по невидимым элементам не проходят…вот и такой Exception.
Соответственно решения возможные:

  1. искать циферки в календаре через findElements, а потом полученный лист перебирать, проверять на видимость и кликать по видимым, отвечающим параметрам даты;
  2. изменить xpath, чтобы он учитывал свойство календаря (скорее всего родительский div) у которого display=false и выбирало только тот календарь, у которого он не false итд…;
  3. представить календарь как кастомный веб элемент, искать его по xpath, а в нем реализовать методы кликанья по датам по относительному xpath к примеру:
By.xpath(".//td[text()='30'][@class='currentMonth']")

где 30 - дата, а curentMunth какой-то класс, отвечающий допустим за что-то :smile:
4) Сделать то-же что и в пункте 3, но используя блоки HTMLElements

Спасибо :blush:
Буду пробовать

4 Likes

Радикально :smile: а как оцените приведенный выше метод?

Интересно. Спасибо! Обязательно попробую!