Как выполнить функцию 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();

Ответ 1

Невозможно выполнить действие "наведение мыши", вместо этого вам нужно связать все действия, которые вы хотите достичь за один раз. Итак, перейдите к элементу, который отображает остальные, затем в той же цепочке перейдите к открытому элементу и нажмите на него.

При использовании 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();

Ответ 2

Ни один из этих ответов не работает при попытке сделать следующее:

  • Наведите указатель мыши на элемент меню.
  • Найдите скрытый элемент, который ТОЛЬКО доступен после зависания.
  • Щелкните элемент подменю.

Если вы вставляете команду "выполнить" после 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, я могу навести курсор и затем щелкнуть.

Ответ 3

Основываясь на этом блоге, я смог вызвать зависание, используя следующий код с 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);

Ответ 4

Этот код работает отлично:

 Actions builder = new Actions(driver);
 WebElement element = driver.findElement(By.linkText("Put your text here"));
 builder.moveToElement(element).build().perform();

После наведения мыши вы можете продолжить выполнение следующего действия по обнаруженной информации.

Ответ 5

Посмотрите в этом примере, как мы могли бы это реализовать.

enter image description here

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/

Ответ 6

Я нашел этот вопрос в поисках способа сделать то же самое для моих тестов Javascript, используя Protractor (интерфейс javascript для Selenium.)

Мое решение с транспортиром 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();

Ответ 7

Пример программы для наведения мыши с помощью 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();
    }
}

Ответ 8

Вы можете попробовать:

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();

Если у вас есть случай, когда в Интернете есть много категорий, используйте первый метод. Для меню, которое вы хотели, вам просто нужен второй метод.