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

Наведение курсора на элемент с помощью Javascript

selenium
webdriver
java
Теги: #<Tag:0x00007f7b705610b0> #<Tag:0x00007f7b70560f70> #<Tag:0x00007f7b70560e30>

(Alexey Bes) #1

Добрый день! Нужно навести курсор на элемент, для того, что бы появилось выпадающее меню. При использовании стандартных методов webdriver выдает ошибку Offset within element cannot be scrolled into view: (0, 0). Пробовал навести курсор на нижний правый угол выдает аналогичную ошибку. В интернете нашел скрипт для наведения курсора на элемент.
public void mouseOver(WebElement element) { String code = "var fireOnThis = arguments[0];" + "var evObj = document.createEvent('MouseEvents');" + "evObj.initEvent( 'mouseover', true, true );" + "fireOnThis.dispatchEvent(evObj);"; ((JavascriptExecutor)driver).executeScript(code, element); }
Но этим скриптом не получается навести курсор даже на те элементы на которые можно навести стандартными методами webdriver. Может кто-то знает еще какой-то скрипт или возможность осуществить наведение курсора?


(Dima Makieiev) #2

А стандартные методы это какие?
Я например часто пользуюсь:

Actions builder = new Actions(driver);

builder.moveToElement(someElment).build();

builder.perform();
Если это не помогает. То было бы может легче подсказать, если была бы часть кода страницы.


(Alexey Bes) #3

Да этим методы. Ну конкретно на этом элементе локатор которого вставляю в код все нормально вроде бы. А вообще код большой получается и CSS еще. Там на всем списке в CSS есть background: #353230 none repeat scroll 0 0; может из-за этого.
Если кто захочет посмотреть вот ссылка на сайт - http://aukro.ua/ надо навести на кнопку “мой aukro” в верхнем меню, что бы появился выпадающий список.


(Остап Олексин) #4

Может вы неправильный локатор используете? У мене вот так все работает :

WebElement element = driver.findElement(By.xpath(".//*[contains(@class, 'main-wrapper')]//li[@class='dropdown ma-layer']/a")); Actions actions = new Actions(driver); actions.moveToElement(element).perform();


(Alexey Bes) #5

Спасибо! Действительно, проблема была в локаторе. Хотя Firepath построил нормальный xpath. НУ на будущее учту, что могут быть нюансы.
Еще хотел один нубский вопрос задать вы не указали build() в строке actions.moveToElement(element).perform(); Я в документации почитал, так и не уяснил для себя в какой ситуации нужно использовать build() а в какой нет?


(Остап Олексин) #6

Метод perform() включает в себя метод build(), так что можете всегда использовать только perform().


(Alexey Bes) #7

Понятно спасибо!