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

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

webdriver
java
Теги: #<Tag:0x00007f7b618b1b20> #<Tag:0x00007f7b618b19e0>

(Denis Vovchenko) #1

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

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

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

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

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


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

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


(Александр Таранков) #4

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

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


(Denis Vovchenko) #5

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

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


(Denis Vovchenko) #6

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


(Denis Vovchenko) #7

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


(Антон) #8

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


Возможно как раз то что тебе пригодиться.
А с 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


(Denis Vovchenko) #9

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


(barancev) #10

(Антон) #11

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


(Denis Vovchenko) #12

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