Довольно часто в тестировании возникает ситуация, когда нужно проверить текст или кликнуть на элементе, который появляется после наведения курсора мыши на другой элемент (всплывающие подсказки, выпадающие меню, кнопки, меняющие текст или форму).
Собственно, стоит задача имитировать событие mouseover
над этим элементом. Для этого используется метод moveToElement
класса Actions, который входит в состав Advanced User Interactions API. API-интерфейс (в основном) завершен для имитации действий. Он полностью выполнен для HtmlUnit и Firefox, и сейчас в процессе выполнения для Opera и IE.
- void moveToElement(WebElement toElement) — перемещает курсор (из текущего положения) к центру элементу;
- void moveToElement(WebElement toElement, int xOffset, int yOffset) — перемещает курсор (из текущего положения) в координаты, рассчитанные от левого верхнего угла элемента с заданным смещением: (X координата элемента + xOffset, Y координата элемента + yOffset).
Действия мыши имеют контекст — текущее положение курсора. Таким образом, при установлении контекста для нескольких действий мыши (с использованием элемента в качестве параметра), первое действие будет выполнено относительно расположения элемента, который используется в качестве контекста, следующее действие будет относительно расположения указателя мыши в конце последнего действия, и т.д.
Пример наведения курсора на элемент:
import org.openqa.selenium.interactions.Actions; Actions actions = new Actions(driver); actions.moveToElement(element).build().perform();
WebDriver взаимодействие с пользователем имитирует либо вызовом Javascript события напрямую, либо позволяет браузеру генерировать Javascript событие (то есть native events).
В FirefoxDriver, native events могут быть включены или отключены в профиле Firefox.
FirefoxProfile profile = new FirefoxProfile(); profile.setEnableNativeEvents(true); FirefoxDriver driver = new FirefoxDriver(profile);
Альтернативный вариант вызова события mouseover
элемента — это использование Javascript:
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); }
Здравствуйте!
Подскажите, пожалуйста, начинающему.
Как указывать element в методе moveToElement ?
Здравствуйте, сначала Вам нужно найти элемент на странице
FirefoxDriver driver = new FirefoxDriver();
WebElement element = driver.findElement(By.id("target"));
потом уже использовать его в методе
Actions actions = new Actions(driver);
actions.moveToElement(element).build().perform();
Хорошо бы ещё парочку картинок приложить, а то не всегда понятно, что результат достигнут.
Добрый день! Подскажите пожалуйста, как можно проверить таг на ссылке, который появляется при наведении на неё мышкой.
Добрый день! У меня что-то не получилось навести курсор с помощью public void mouseOver(WebElement element) При наведении должно появиться выпадающее меню, а оно не появляется. Не подскажите почему так может быть?
Приветствую, помогите новичку, использую плагин FireFox Selenium IDE, некоторые поля имеют динамический id (обновляется при каждом запуске) — по этому пришлось цепляться к объектам по свойству «name» так как оно уникальное и статично. Вот те объекты к которым я цеплялся через «name», в них значения заносятся без проблем при прохождении теста, а после окончания, если навести мышь на объект значение пропадает. Как этого избежать