如何在Firefox 19中使用Selenium WebDriver进行鼠标悬停?

时间:2013-03-11 13:04:03

标签: java selenium-webdriver mousehover

我用过硒2.31。

我已将Actions类用于鼠标移动。使用这个我将鼠标移到一个菜单上,它的子菜单只出现了一小段时间,与旧版本的firefox不同。

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

有没有解决方案?

6 个答案:

答案 0 :(得分:32)

使用actions对象,您应首先移动菜单标题,然后移动到弹出菜单项并单击它。不要忘记最后致电actions.perform()。这是一些示例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();

答案 1 :(得分:3)

另一种方法是使用Selenium的JavaScript Executor来强制显示元素的样式。

这样的例子就是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'");

请注意,只有当悬停元素在悬停时更改显示样式时,才可以执行此操作。

答案 2 :(得分:2)

试试这段代码...... 这是一个尖锐的代码......

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

答案 3 :(得分:1)

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

1.首先,你需要通过xpath或id找到元素。

2.然后使用方法action.move_to()。perform。

以下是代码:

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

答案 4 :(得分:0)

这个答案有助于解决我的问题。

我的挑战是在菜单选项下找到一个链接。 直到我在菜单上盘旋时,链接才可见。

这对我来说至关重要的部分是发现除了悬停在菜单上之外,我接下来必须将鼠标悬停在链接上以便与其进行交互。

答案 5 :(得分:0)

setFrameOrigin