1

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

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

有人可以帮我从技术上理解:

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

1 回答 1

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,因此必须与他们联系以获取任何相关信息。

于 2013-11-12T12:43:26.577 回答