2012-05-17 21 views
4

当使用webdriver的运行硒2.21.0构建,我得到的运行针对Firefox的12.0时,以下错误:火狐12.0和硒2:本地活动,不支持

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

我假设这是缺少的功能硒2.21是火狐12.0之前发布,而不是错误设置我的一部分的驱动程序?

检查驱动程序属性:

driver.getCapabilities().asMap().each { 
      index, value -> println("$index : $value") 
} 
browserName : firefox 
nativeEvents : false 
takesScreenshot : true 
version : 12.0 

但同时用配置文件创建司机我得到nativeEvents =真:

profile.setEnableNativeEvents(true); 
println profile.getProperties() 
driver = new FirefoxDriver(profile) 
[enableNativeEvents:true, 
class:class org.openqa.selenium.firefox.FirefoxProfile, 
additionalPreferences:[email protected]] 

回答

4

webdriver 2.21中尚未支持绝对本机事件。根据changelog只有FF10和11目前实现此功能。

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

更多堆栈跟踪可能会有所帮助。你在哪一行得到这个错误?你有没有尝试明确地设置本地事件为false?

+0

- 谢谢,如果本地事件没有准备好FF12那么这可能会解释大部分。 – theCesspit

+0

扩展堆栈跟踪,并检查我不需要在我的常规代码中添加.build()...这对Chrome浏览器很好。 我会着重介绍一下NativeEvents的具体设置。 – theCesspit

+0

你可以尝试一些丑陋的解决方法。新的动作(驱动程序).clickAndHold(element).moveByOffset(1,1).release();而不是仅使用dragAndDrop,您可以尝试将其拆分为更具体的动作 可以使用getLocation()和getSize()方法计算每个要与之交互的元素并进行简单的数学运算。 – JacekM

1

Selenium 2.22.0已经发布,并且更新日志表示他们现在支持Firefox 12中的本地事件。我已经测试了它,它似乎工作得很好。