Selenium Webdriver和Firefox 18

9

我的Selenium测试使用类似onMouseOver的功能,例如:

 List<WebElement> menuitems = getDriver().findElements(By.tagName("li"));
    Actions builder = new Actions(getDriver());
    WebElement menu = menuitems.get(2);
    getDriver().manage().timeouts().implicitlyWait(Constants.IMPLICITY_WAIT, TimeUnit.SECONDS);
    builder.moveToElement(menu).build().perform();

我正在使用 Firefox 驱动器。自从 Firefox 升级到 18 版本后,我的测试停止工作了。我知道这与原生事件的支持有关 - 但是版本 18 不支持原生事件,还是我能启用它们?如果不能,是否有任何可以替换实现我的代码的方法?
我正在使用 Selenium Java 2.28.0。

如果你完全卡住了,可以暂时使用Sikuli。但我个人更喜欢Selenium的“Actions”类,因为它更容易操作。 - djangofan
Selenium 2.29或2.30是否修复了这个问题? - Oliver Bock
5个回答

5

为了支持Firefox 18,我们需要使用selenium webdriver api 2.28.0.jar。


1
我的悬停在v28中出了问题。我现在使用以下的hoverOver方法,其中包含一个可选的javascript解决方案,它似乎可以正常工作。
    public void HoverOver(IWebElement elem, bool javascriptWorkaround = true)
    {
        if (javascriptWorkaround)
        {
                String code = "var fireOnThis = arguments[0];"
                    + "var evObj = document.createEvent('MouseEvents');"
                    + "evObj.initEvent( 'mouseover', true, true );"
                    + "fireOnThis.dispatchEvent(evObj);";
                ((IJavaScriptExecutor)driver).ExecuteScript(code, elem);
        }
        else
        {
            Actions builder = new Actions(driver);
            builder.MoveToElement(elem).Build().Perform();
        }
    }

1

回滚到FF17是一个临时解决方案,直到WebDriver版本支持FF18。

FF17扩展支持发布包-- http://www.mozilla.org/en-US/firefox/organizations/all.html

注意:如果您是Mac用户,可以将当前的FF从“FireFox”重命名为“FireFox18”放在应用程序文件夹中。安装上述URL中的软件包,这将创建一个名为“FireFox”的新应用程序,WebDriver将使用它。


1
Selenium Java 2.27提到已经添加了对FF17的本地支持。然而,在2.28的变更日志中没有提到对FF18的支持。因此,它的webdriver不支持本地事件,而FF18也不支持本地事件。您可以尝试降级到FF 17,并可能暂时关闭自动更新。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接