Firefox 12.0和Selenium 2:不支持本机事件

Firefox 12.0和Selenium 2:不支持本机事件,firefox,selenium,automated-tests,selenium-webdriver,Firefox,Selenium,Automated Tests,Selenium Webdriver,使用webdriver运行Selenium 2.21.0版本时,在Firefox 12.0上运行时出现以下错误: org.openqa.selenium.InvalidElementStateException: Cannot perform native interaction: Could not load native events component. Command duration or timeout: 20.08 seconds Build info: version: '2.2

使用webdriver运行Selenium 2.21.0版本时,在Firefox 12.0上运行时出现以下错误:

org.openqa.selenium.InvalidElementStateException: Cannot perform native interaction: Could not load native events component.
Command duration or timeout: 20.08 seconds
Build info: version: '2.2.1', revision: '16551', time: '2012-04-11 21:42:35'
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_26'
Driver info: driver.version: RemoteWebDriver
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:175)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:128)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:459)
    at org.openqa.selenium.remote.ExecuteMethod.execute(ExecuteMethod.java:47)
    at org.openqa.selenium.remote.RemoteMouse.mouseMove(RemoteMouse.java:89)
    at org.openqa.selenium.interactions.internal.MouseAction.moveToLocation(MouseAction.java:31)
    at org.openqa.selenium.interactions.ClickAndHoldAction.perform(ClickAndHoldAction.java:39)
    at org.openqa.selenium.interactions.CompositeAction.perform(CompositeAction.java:32)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoCachedMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:229)
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:52)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:40)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:117)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:121)
    at isishelper.ActionHelper.placement_placeSampleOnContainer(ActionHelper.groovy:195)
...
我在本例中的代码如下:

List sourceSamples = sourceTable.findElements((By.className("x-grid-row")))
List poolTargets = driver.findElements(By.className("pool-box"))
target = poolTargets[0]    
def source = sourceSamples[0]
// Then drag and drop the sample to target
(new Actions(driver)).dragAndDrop(source, target).perform()
我假设这是因为Selenium 2.21在Firefox 12.0之前发布而缺少的功能,而不是我设置驱动程序的错误

检查驱动程序属性:

driver.getCapabilities().asMap().each { 
             index, value -> println("$index : $value") 
}
但是,在使用配置文件创建驱动程序时,我得到nativeEvents=true:

profile.setEnableNativeEvents(true); 
println profile.getProperties()
driver = new FirefoxDriver(profile)

webdriver 2.21中肯定还不支持本机事件。据了解,目前只有FF10和11实现此功能

我不知道这是否与问题有关,但在代码的最后一行中,您不应该在调用perform()之前调用build()吗?(这必须在Java中完成)


更多的stacktrace可能会有所帮助。您在哪一行收到此错误?您是否尝试过将本机事件显式设置为false?

Selenium 2.22.0已经发布,并且变更日志说他们现在支持Firefox 12中的本机事件。我已经对它进行了测试,它似乎工作得很好。

Selenium 2.29.0发布时支持FF18(用于本机事件)。 以下是更新的链接:


可能正在更新到FF18,selenium webdriver(2.29.0)可能会对您有所帮助

-谢谢,如果本机事件没有为FF12做好准备,那么这可能可以解释大部分问题。扩展堆栈跟踪,并检查我是否不需要在groovy代码中添加.build()。。。这在Chrome浏览器上运行良好。我会专门研究设置NativeEvents。你可以尝试一些难看的解决方法。您可以尝试将其拆分为更具体的操作新操作(驱动程序),而不只是使用dragAndDrop;偏移量可以通过对每个要交互的元素使用getLocation()和getSize()方法并进行简单的数学运算来计算。
profile.setEnableNativeEvents(true); 
println profile.getProperties()
driver = new FirefoxDriver(profile)
[enableNativeEvents:true, 
class:class org.openqa.selenium.firefox.FirefoxProfile,
additionalPreferences:org.openqa.selenium.firefox.Preferences@82d37]