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

При клике на кнопку выпадает ошибка : ElementNotVisibleException

firebug
html-elements
webdriver
Теги: #<Tag:0x00007f7b6ab885e8> #<Tag:0x00007f7b6ab8feb0> #<Tag:0x00007f7b6ab8f988>

(Vladyslav Stuparenko) #1

Нужно кликнуть на кнопку , которая отображается при выпадании списка меню
Прописывал путь уже черз xpath ,css , id, всеравно выпадает ошибка element not visible
Есть подозрения что нужно использовать executor но как его применить я не разобрался
Можете помочь пожалуйста



(Руслан) #2

а другие локаторы что говорят?

пробуйте, так же нужно ожидание на появление элемента (кстати в первую очередь)


(rmerkushin) #3

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


(Andrew Zakordonets) #4

Если клик на “О Выставке” ведет на какую то страницу, то тогда нужно иммитировать mouseHover и тогда уже кликать по нужной вам ссылке. Если же никуда не ведет, то нужно сделать клик сначала на “О Выставке”, можно дополнительно проверить что следующая ссылка в меню видна и потом уже на нее кликать.


(Vladyslav Stuparenko) #5

О , ожидание есть . Я в основном тесте поставил на время вонючий thread.sleep между кликами
РЕБЯТА, вообщем я нашел решение , радуюсь как дурачок :

Actions builder = new Actions(driver);
builder.moveToElement(about).perform();
clickOnElement(place);

Но всеже я хочу узнать как использовать Javascriptexecutor
Напишите плиз кто шарит доступным языком


(Serhii Tanchenko) #6

Доступнее некуда :smile:


(Владимир Фролов) #7

Стандартный moveToElement из Actions не всегда подходит.
Бывает, что при движении мыши задеваются другие пункты меню и нужное подменю исчезает.
Для решения этой проблемы можно эмулировать MouseEvents для элемента.

    private WebElement mouseOver(WebElement element) {
    String code = "var fireOnThis = arguments[0];"
            + "var evObj = document.createEvent('MouseEvents');"
            + "evObj.initEvent( 'mouseover', true, true );"
            + "fireOnThis.dispatchEvent(evObj);";
    executeJavaScript(code, element);
    return element;
}