自从升级到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异常,这显然是因为该子菜单不存在,并且我仍在尝试单击某些内容。

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

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

我使用的是硒2.31.0,由于Firefox 19的不兼容问题,我从2.28.0升级到了今天。

最佳答案

找到了一种解决方法,该方法将移至下一个子菜单,而不是使用其他人建议但对我不起作用的moveToElement(webelement)。对我有用的是使用方法moveByOffset(int x,int y)。因此,将鼠标悬停在将显示子菜单的链接上之后,我做了:

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


这似乎使我暂时无法解决问题,但是我仍然想知道其他人的想法。

10-05 23:37