Добрый день! Нужно навести курсор на элемент, для того, что бы появилось выпадающее меню. При использовании стандартных методов 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. Может кто-то знает еще какой-то скрипт или возможность осуществить наведение курсора?
А стандартные методы это какие?
Я например часто пользуюсь:
Actions builder = new Actions(driver);
builder.moveToElement(someElment).build();
builder.perform();
Если это не помогает. То было бы может легче подсказать, если была бы часть кода страницы.
Да этим методы. Ну конкретно на этом элементе локатор которого вставляю в код все нормально вроде бы. А вообще код большой получается и CSS еще. Там на всем списке в CSS есть background: #353230 none repeat scroll 0 0;
может из-за этого.
Если кто захочет посмотреть вот ссылка на сайт - http://aukro.ua/ надо навести на кнопку “мой aukro” в верхнем меню, что бы появился выпадающий список.
Может вы неправильный локатор используете? У мене вот так все работает :
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();
Спасибо! Действительно, проблема была в локаторе. Хотя Firepath построил нормальный xpath. НУ на будущее учту, что могут быть нюансы.
Еще хотел один нубский вопрос задать вы не указали build()
в строке actions.moveToElement(element).perform();
Я в документации почитал, так и не уяснил для себя в какой ситуации нужно использовать build()
а в какой нет?
Метод perform() включает в себя метод build(), так что можете всегда использовать только perform().
Понятно спасибо!