使用WebDriver在基于CSS的菜单中选择一个选项

时间:2012-06-14 09:17:16

标签: java drop-down-menu selenium hover webdriver

我有一个简单的CSS-based dropdown menu,我试图点击Java Selenium(WebDriver)测试中的一个菜单项。

enter image description here

菜单(<ul>元素)和项目(<a>)都有ID,创建相应的WebElement对象的工作正常。我正在尝试使用以下代码点击其中一项:

   hoverOver(transfersMenu);
   transferLink.click();

hoverOver()我尝试了all three answers from this question,但没有一个可以使用。我一直在说:

org.openqa.selenium.ElementNotVisibleException: 
    Element is not currently visible and so may not be interacted with 
Command duration or timeout: 2.06 seconds

(我已经尝试在 transferLink.click()之前调用hoverOver() ,希望隐式等待可以使其正常工作,但是没有。)

知道如何进行悬停工作以便点击链接吗?

Selenium 2.21.0版。我正在使用Firefox 13.0在Linux(Ubuntu)上运行测试。一位同事刚刚尝试使用Windows(使用Firefox 12.0),但它也不适用于他。

更新:根据Slanec的评论提示以及these instructions,我在setEnableNativeEvents(true)上尝试了FirefoxProfile。起初失败了:

org.openqa.selenium.InvalidElementStateException: 
    Cannot perform native interaction: Could not load native events component.

...但在升级到Selenium 2.23.1 之后,我不再收到投诉。

但是,悬停不起作用(打开或关闭本机事件)。 : - /

3 个答案:

答案 0 :(得分:0)

我使用以下代码将鼠标悬停在菜单上1秒钟,然后点击链接,就像您正在使用的链接一样:

action = new SeleniumActionHelper(driver);

WebElement currentUser = findElementByLinkText("testing1");
action.mouseHover(currentUser);
Thread.sleep(1000);

值得注意的是,鼠标光标需要保留在浏览器窗口中以便悬停。如果鼠标光标在浏览器窗口之外,我会快速浏览菜单,但它不会保持可见

答案 1 :(得分:0)

试试这个例子:

WebElement menuHoverLink= driver.findElement(By.id("test"));
actions.moveToElement(menuHoverLink).perform();
driver.findElement(By.id("test")).click();
Thread.sleep(6000); 

答案 2 :(得分:0)

你如何运行测试类?我发现通过ANT运行WebDriver使得悬停操作变得不可能,而从命令行(TestNG JAR)或从Eclipse运行测试类的工作正常。