2013-01-09 51 views
9

我Selenium测试使用的onMouseOver功能,如硒的webdriver和Firefox 18

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,还是我能够启用它们?如果没有,我的代码是否有替代实现?

我使用的是java 2.28.0的selenium。

+0

如果你完全卡住了,你可以暂时使用Sikuli。我个人更喜欢Selenium的“Actions”类,因为它更容易。 – djangofan

+0

任何有关Selenium 2.29或2.30是否解决此问题的消息? –

回答

1

Selenium Java 2.27提到已经添加了对FF17的原生支持。然而,在change logs中没有提到FF18对2.18的支持。所以它的webdriver不支持本地事件,而不是FF18不支持本地事件。您可以尝试降级到FF 17,并可能在一段时间内关闭自动更新。

1

回滚到FF17是一个临时工作,直到周围webdriver的版本支持FF18

FF17扩展支持版本的软件包 - http://www.mozilla.org/en-US/firefox/organizations/all.html

注意:如果你是苹果用户,你可以简单地重命名从当前FF 'FireFox'改为你的应用程序文件夹中的'FireFox18'。从上面的URL安装软件包,它应该创建一个名为'FireFox'的新应用程序,WebDriver将使用它。

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(); 
     } 
    }