很多时候,在Firefox上运行自动Selenium测试时,人们会遇到以下错误:
Selenium::WebDriver::Error::InvalidElementStateError: Cannot perform native interaction: Could not load native events component.`
有人可以帮助我从技术上理解:
在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)。其次,当Mozilla完成并发布FirefoxDriver2(也称为Marionette)时,此体系结构将完全改变。Marionette的发布时间表取决于Mozilla,因此您必须与他们联系以获取有关此信息。