如何使用Java在Selenium WebDriver中执行鼠标悬停功能?

时间:2013-06-25 09:39:11

标签: java selenium selenium-webdriver mouseover

我想在下拉菜单中执行鼠标悬停功能。当我们将鼠标悬停在菜单上时,它会显示新选项。 我尝试使用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();

9 个答案:

答案 0 :(得分:98)

实际上不可能执行“鼠标悬停”操作,而是需要一次性链接您想要实现的所有操作。所以移动到显示其他元素的元素,然后在同一个链中,移动到现在显示的元素并单击它。

使用动作链时,你必须记住“像用户那样做”。

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

答案 1 :(得分:51)

尝试执行以下操作时,这些答案都不起作用:

  1. 将鼠标悬停在菜单项上。
  2. 找到悬停后仅可用的隐藏元素。
  3. 点击子菜单项。
  4. 如果你插入'表演'在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,我可以悬停然后点击。

答案 2 :(得分:24)

基于this 博文,我能够使用以下代码使用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);

答案 3 :(得分:9)

此代码非常有效:

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

鼠标悬停后,您可以继续在显示的信息上执行下一步操作

答案 4 :(得分:6)

检查此示例我们如何实现此目的。

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/

答案 5 :(得分:5)

我发现这个问题正在寻找一种方法来为我的Javascript测试做同样的事情,使用Protractor(一个jlen前端到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();

答案 6 :(得分:4)

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


}

}

答案 7 :(得分:2)

你可以尝试

select * from table1 where name like "%'%" OR name like '%"%';

如果您的网络有多个类别,请使用第一种方法。对于你想要的菜单,你只需要第二种方法。

答案 8 :(得分:0)

我试过了,它工作正常

action = ActionChains(driver)
element = driver.find_element_by_xpath("XPath_selector")
action.move_to_element(element).perform()