1

自从升级到 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 升级到了今天。

4

1 回答 1

1

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

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

这似乎让我暂时摆脱了我的问题,但我仍然有兴趣知道其他人的想法。

于 2013-03-13T21:48:57.987 回答