【问题标题】:Firefox 12.0 and Selenium 2 : Native Events are not supportedFirefox 12.0 和 Selenium 2:不支持本机事件
【发布时间】:2012-05-25 08:16:49
【问题描述】:

在使用 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") 
}
browserName : firefox
nativeEvents : false
takesScreenshot : true
version : 12.0

但是在使用配置文件创建驱动程序时,我得到 nativeEvents = true :

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]

【问题讨论】:

    标签: firefox selenium automated-tests selenium-webdriver


    【解决方案1】:

    webdriver 2.21 尚不支持绝对原生事件。根据changelog,目前只有FF10和11实现了这个功能。

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

    更多堆栈跟踪可能会有所帮助。您在哪一行收到此错误?您是否尝试过将原生事件显式设置为 false?

    【讨论】:

    • - 谢谢,如果原生事件还没有为 FF12 做好准备,那么这可能可以解释大部分情况。
    • 扩展了堆栈跟踪,并检查了我不需要在我的 groovy 代码中添加 .build() ......这适用于 Chrome 浏览器。我将研究具体设置 NativeEvents。
    • 您可以尝试一些丑陋的解决方法。而不是只使用 dragAndDrop 您可以尝试将其拆分为更具体的操作 new Actions(driver).clickAndHold(element).moveByOffset(1, 1).release();偏移量可以通过对要与之交互的每个元素使用 getLocation() 和 getSize() 方法并进行简单的数学运算来计算。
    【解决方案2】:

    Selenium 2.29.0 发布时支持 FF18(用于原生事件)。 这是更新链接:http://selenium.googlecode.com/git/rb/CHANGES.

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

    【讨论】:

      【解决方案3】:

      Selenium 2.22.0 已经发布,更新日志显示它们现在支持 Firefox 12 中的原生事件。我已经对其进行了测试,它似乎运行良好。

      【讨论】:

        猜你喜欢
        • 2012-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-02
        • 1970-01-01
        相关资源
        最近更新 更多