使用Firefox和Selenium Webdriver了解“无法执行本机交互:无法加载本机事件组件”

时间:2013-11-12 06:42:24

标签: firefox selenium selenium-webdriver

很多时候,在Firefox上运行自动化Selenium测试时,人们会遇到以下错误:

Selenium::WebDriver::Error::InvalidElementStateError: Cannot perform native interaction: Could not load native events component.`

有人可以帮我理解技术:

  1. 导致此错误的原因是什么?
  2. 发布新的Selenium Webdriver版本如何解决?
  3. 为什么它只出现在Firefox上,而不是Chrome,IE?

1 个答案:

答案 0 :(得分:8)

默认情况下,在Windows上,Firefox驱动程序使用所谓的“本机事件”与元素进行交互。也就是说,使用操作系统级机制模拟鼠标和键盘交互,而不是使用JavaScript来模拟交互的更常见但可能有限且不太准确的使用。对于Firefox,这需要加载从C ++源代码编译的特定于操作系统的二进制库(Linux上的.so,Windows上的.dll)。这些二进制库必须链接到特定版本的Gecko SDK,这意味着它们只能由特定版本的Firefox加载和使用。

由于支持每个版本的Firefox都会大大增加驱动程序的负担,因此WebDriver团队会限制任何Selenium版本支持的版本数量。 Firefox目前的支持策略是支持当前的Firefox版本,即之前的Firefox版本,当前的Firefox扩展支持版本(ESR)以及之前的ESR版本。请注意,所有版本都是在Selenium项目发布之日计算的。

由于新的Firefox版本涉及新的SDK,因此Selenium项目必须编译新的本机事件组件以支持它,并使用这些组件发布新的Selenium版本。该项目试图尽可能地推出新版本的新版Firefox,但由于它是一个全志愿者项目,并且因为Mozilla可以(并且确实!)在没有警告的情况下将Gecko SDK从版本更改为版本, Selenium更新有时会延迟。

另外两点:首先,Firefox驱动程序架构在这方面是独一无二的,因此您不会在其他浏览器中看到此行为。需要注意的是,其他浏览器确实需要更新的驱动程序来处理更新的浏览器版本(参见chromedriver.exe)。其次,当FirefoxDriver2(也称为Marionette)由Mozilla完成并发布时,这种架构完全改变。发布Marionette的时间表取决于Mozilla,因此有必要与他们联系以获取有关该内容的任何信息。