如何鼠标悬停和保持

时间:2013-03-13 18:26:24

标签: java selenium selenium-webdriver

自从升级到firefox 19以后,我的测试突破了我需要将鼠标悬停在链接上以显示子菜单。在firefox 19之前,以下工作就像一个魅力:

    /*
    * Hover over column header
    */
    WebElement columnsRoot = driver.findElement(By.xpath(COLUMNS_ROOT_XPATH));
    WebElement firstColumn = columnsRoot.findElement(By.xpath("./td[1]/div"));
    Actions builder = new Actions(driver);
    builder.moveToElement(firstColumn).build().perform();

    /*
     * Click on dropdown button after it appears
     */
    WebElement dropdown = columnsRoot.findElement(By.xpath("./td[1]/div/a"));
    dropdown.click();
    Thread.sleep(500);

    /*
     * Hover over columns menu
     */
    String columnsMenuXpath = "(//div[@class=\" x-ignore x-menu x-component\"]//a)[3]";
    WebElement columnsMenu = driver.findElement(By.xpath(columnsMenuXpath));
    builder.moveToElement(columnsMenu).build().perform();

将鼠标悬停在上面的列菜单上后,子菜单会显示一列列表,我将迭代显示这些列。在我升级到Firefox 19后,最后一步中的子菜单只是暂时出现然后消失,导致一堆NoSuchElementException异常,显然是因为子菜单不存在而我仍然试图点击某些东西。

我在鼠标悬停在菜单上后尝试使用另一个操作移动到子菜单中的某个项目,希望这样可以保持子菜单打开但没有运气。

还有其他人遇到过这个问题吗?如果是这样,是否有解决方法或什么?

我正在使用selenium 2.31.0,由于与Firefox 19的不兼容问题,我从2.28.0升级到今天。

1 个答案:

答案 0 :(得分:1)

找到一个解决方法,那就是转移到下一个子菜单,但不是使用moveToElement(webelement),这是其他人建议但不适合我。对我有用的是使用方法moveByOffset(int x,int y)。因此,将鼠标悬停在显示我所做的子菜单的链接上后:

Actions movePointerRight = new Actions(driver);
movePointerRight.moveByOffset(100, 0).build().perform();

这似乎让我暂时解决了我的问题,但我仍然有兴趣了解其他人提出的问题。