Java 如何在Firefox19中使用SeleniumWebDriver实现鼠标悬停?

Java 如何在Firefox19中使用SeleniumWebDriver实现鼠标悬停?,java,selenium-webdriver,mousehover,Java,Selenium Webdriver,Mousehover,我使用了selenium 2.31 我已经使用Actions类进行鼠标移动。我用它将鼠标移到菜单上,它的子菜单只出现了一小部分秒,这与旧版本的Firefox不同 由于这个问题,我无法使用driver.findElement选择子菜单,因为它会抛出一个异常元素,无法滚动到视图中 有什么解决方法吗?对于操作对象,您应该首先移动菜单标题,然后移动到弹出菜单项并单击它。别忘了调用操作。最后执行。下面是一些示例Java代码: Actions actions = new Actions(driver); W

我使用了selenium 2.31

我已经使用Actions类进行鼠标移动。我用它将鼠标移到菜单上,它的子菜单只出现了一小部分秒,这与旧版本的Firefox不同

由于这个问题,我无法使用driver.findElement选择子菜单,因为它会抛出一个异常元素,无法滚动到视图中


有什么解决方法吗?

对于操作对象,您应该首先移动菜单标题,然后移动到弹出菜单项并单击它。别忘了调用操作。最后执行。下面是一些示例Java代码:

Actions actions = new Actions(driver);
WebElement menuHoverLink = driver.findElement(By.linkText("Menu heading"));
actions.moveToElement(menuHoverLink);

WebElement subLink = driver.findElement(By.cssSelector("#headerMenu .subLink"));
actions.moveToElement(subLink);
actions.click();
actions.perform();

这个答案帮助我解决了问题

我的挑战是在菜单选项下找到一个链接。 直到我将鼠标悬停在菜单上,链接才可见


这对我来说至关重要的一点是,我发现除了在菜单上悬停之外,我还必须在链接上悬停才能与之交互

另一种方法是使用Selenium的JavaScript执行器强制显示元素的样式

这方面的一个例子是C语言中的这一行

//Use the Browser to change the display of the element to be shown
 (IJavaScriptExecutor)driver).ExecuteScript("document.getElementById('myId').stlye.display="block");

//navigate to your link that is now viewable 
driver.FindElement(By.Xpath('//LinkPath')).Click(); 
从那里,您可以找到元素的XPath,并使用selenium单击该元素。您也可以将其级联以查找主元素的子元素

//(IJavaScriptExecutor)ffbrowser).ExecuteScript("document.getElementById('myId').children[1].children[1].style.display='block'");
请注意,只有当鼠标悬停在上方时,悬停元素会更改显示样式时,才可能执行此操作

试试这段代码。。。 这是c夏普密码

//Webelement is the main menu Link
webElement = driver.FindElement(By.XPath("Your element xpath"));
Actions act = new Actions(driver);
        act.MoveToElement(webElement).Perform();//This opens menu list

        System.Threading.Thread.Sleep(5000);//This line will help you to hold menu 
 //This web element is the sub menu which is under main menu
        webElement = driver.FindElement(By.XPath("Sub menu path"));
        act.MoveToElement(webElement).Perform();//This opens menu list
        System.Threading.Thread.Sleep(5000);//Holds menu
    //This web element is the option you have to click
        webElement = driver.FindElement(By.XPath("Path"));
        webElement.Click();

如果您使用的是Ruby,这将非常有用

1.首先需要通过xpath或id查找元素

2.然后使用action.move_to.perform方法

代码如下:

    hover = WAIT.until{$driver.find_element(:xpath,"xpath")}
    driver.action.move_to(hover).perform

如果可能的话,您能给出您正在测试的应用程序的链接,以便我们可以调试该问题吗?您使用了什么语言?Java、C还是什么?这正是我需要的:。MoveToElementmenuElement.Perform equals.hover有什么方法可以让悬停保持特定的时间?在我的情况下,我可以悬停,但子菜单很快隐藏,然后web驱动程序无法找到该子菜单。@Help Hands-您可以使用ClickandHold谢谢。act.MoveToElementwebElement.Perform;在第一个顶部菜单上,打开隐藏菜单对我的案例至关重要。我在最后缺少了Perform,仅仅移动到lementwebelement是不够的。你想解释一下吗?它是干什么的?它与现有的公认答案有什么不同。顺便问一下,仙人掌告诉我它来自哪里?在问题中找不到它。
List<WebElement> list = driver.findElements(By.xpath("//a"));
        for (int i=0;i<list.size();i++){
        if(list.get(i).getText().equalsIgnoreCase("cacique intimates M"))
            {
    new Actions(driver).moveToElement(list.get(i)).click().build().perform();
    System.out.println("Clicked on Parent Category");
    new Actions(driver).moveToElement(list.get(i)).moveToElement(driver.findElement(By.linkText("SPECIALTY BRAS"))).click().build().perform();
        break;
    }                           
    }