Как выполнить функцию mouseover в Selenium WebDriver с помощью Java?
Я хочу сделать функцию мыши над раскрывающимся меню. Когда мы наводим курсор на меню, он отобразит новые параметры. Я попытался щелкнуть новые параметры, используя xpath. Но не можете напрямую щелкнуть меню. Итак, в качестве ручного способа я пытаюсь навести курсор на раскрывающееся меню, а затем нажимает новые параметры.
Actions action = new Actions(webdriver); WebElement we = webdriver.findElement(By.xpath("//html/body/div[13]/ul/li[4]/a")); action.moveToElement(we).build().perform();
- Всплывающие windows в seleniumе
- Как обрабатывать iframe в Selenium WebDriver с помощью java
- Случайный "Элемент больше не привязан к DOM" StaleElementReferenceException
- Замените неявное ожидание с явным ожиданием (selenium webdriver & java)
- Как использовать selenium webdriver на локальной (на моем компьютере) веб-странице вместо того, чтобы найти где-нибудь на www?
- В чем разница между .// и // * в XPath?
- Как разрешить исключение Stale? если элемент больше не привязан к DOM?
- Исключение в streamе «main» java.lang.NoClassDefFoundError: org / openqa / selenium / WebDriver
- Selenium WebDriver Как решить проблему исключения устаревших элементов?
- Как загрузить файл на событие click с помощью selenium?
- Разница между webdriver.firefox.marionette и webdriver.gecko.driver
- Использование protractorа с петлями
- Как перейти к новому окну браузера, который открывается после нажатия кнопки?
Невозможно выполнить действие «наведите курсор мыши», вместо этого вам нужно связать все действия, которые вы хотите добиться за один раз. Итак, перейдите к элементу, который отображает другие, затем в той же цепочке перейдите к открытому элементу и нажмите на него.
При использовании Action Chains вы должны помнить, что «делайте это, как пользователь».
Actions action = new Actions(webdriver); WebElement we = webdriver.findElement(By.xpath("html/body/div[13]/ul/li[4]/a")); action.moveToElement(we).moveToElement(webdriver.findElement(By.xpath("/expression-here"))).click().build().perform();
Ни один из этих ответов не работает при попытке сделать следующее:
- Наведите указатель мыши на элемент меню.
- Найдите скрытый элемент, который ТОЛЬКО доступен после зависания.
- Щелкните элемент подменю.
Если вы введете команду «выполнить» после MoveToElement, она перемещается к элементу, и элемент подменю отображается в течение короткого периода времени, но это не зависание. Скрытый элемент немедленно исчезает, прежде чем он может быть найден, что приведет к исключению ElementNotFoundException. Я попробовал две вещи:
Actions builder = new Actions(driver); builder.moveToElement(hoverElement).perform(); builder.moveToElement(clickElement).click().perform();
Это не сработало для меня. Следующие работали для меня:
Actions builder = new Actions(driver); builder.moveToElement(hoverElement).perform(); By locator = By.id("clickElementID"); driver.click(locator);
Используя действия для наведения и стандартный клик WebDriver, я могу навести курсор, а затем щелкнуть.
Основываясь на этом сообщении в блоге, я смог вызвать зависание, используя следующий код с Selenium 2 Webdriver:
String javaScript = "var evObj = document.createEvent('MouseEvents');" + "evObj.initMouseEvent(\"mouseover\",true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);" + "arguments[0].dispatchEvent(evObj);"; ((JavascriptExecutor)driver).executeScript(javaScript, webElement);
Этот код работает отлично:
Actions builder = new Actions(driver); WebElement element = driver.findElement(By.linkText("Put your text here")); builder.moveToElement(element).build().perform();
После нажатия мыши вы можете продолжить выполнение следующего действия по обнаруженной информации
Я нашел этот вопрос, ища способ сделать то же самое для своих тестов Javascript, используя Protractor (интерфейс javascript для Selenium.)
Мое решение с protractorом 1.2.0 и webdriver 2.1:
browser.actions() .mouseMove( element(by.css('.material-dialog-container')) ) .click() .perform();
Это также принимает смещение (я использую его для щелчка выше и слева от элемента 🙂
browser.actions() .mouseMove( element(by.css('.material-dialog-container')) , -20, -20 // pixel offset from top left ) .click() .perform();
Пример программы для наведения мыши с помощью Selenium java WebDriver:
public class Mhover { public static void main(String[] args){ WebDriver driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get("http://www.google.com"); WebElement ele = driver.findElement(By.id("gbqfba")); Actions action = new Actions(driver); action.moveToElement(ele).build().perform(); } }
Проверьте этот пример, как мы могли бы это реализовать.
public class HoverableDropdownTest { private WebDriver driver; private Actions action; Consumer < By > hover = (By by) - > { action.moveToElement(driver.findElement(by)) .perform(); }; @Test public void hoverTest() { driver.get("https://www.bootply.com/render/6FC76YQ4Nh"); hover.accept(By.linkText("Dropdown")); hover.accept(By.linkText("Dropdown Link 5")); hover.accept(By.linkText("Dropdown Submenu Link 5.4")); hover.accept(By.linkText("Dropdown Submenu Link 5.4.1")); } @BeforeTest public void setupDriver() { driver = new FirefoxDriver(); action = new Actions(driver); } @AfterTest public void teardownDriver() { driver.quit(); } }
Подробный ответ см. Здесь – http://www.testautomationguru.com/selenium-webdriver-automating-hoverable-multilevel-dropdowns/
Можешь попробовать
WebElement getmenu= driver.findElement(By.xpath("//*[@id='ui-id-2']/span[2]")); //xpath the parent Actions act = new Actions(driver); act.moveToElement(getmenu).perform(); Thread.sleep(3000); WebElement clickElement= driver.findElement(By.linkText("Sofa L"));//xpath the child act.moveToElement(clickElement).click().perform();
Если у вас есть случай, в Интернете есть много категорий, используйте первый метод. Для желаемого меню вам нужен только второй метод.