为什么Firefox需要GeckoDriver?

只是我今天有一个简单的问题:

我用这个代码创build了一个新的selenium项目:

FirefoxDriver driver = new FirefoxDriver(); //ChromeDriver driver = new ChromeDriver(); //InternetExplorerDriver driver = new InternetExplorerDriver(); 

随着Chrome和IE开箱即用,但与Firefox抛出:

geckodriver.exe文件不存在于当前目录或PATH环境variables的目录中。 驱动程序可以在https://github.com/mozilla/geckodriver/releases下载。

为什么只有Firefox才能下载/configuration这个驱动程序?

让我试着一一回答你的问题:

  1. Why Firefox requires GeckoDriver? – Mozila Firefox直到47.x版本,它是传统的浏览器,我们不需要壁虎驱动程序。 从版本47.x开始的Mozila Firefox随附了Marionette,它是Mozilla的Gecko引擎的自动化驱动程序。 它可以远程控制UI或Gecko平台的内部JavaScript,比如Firefox。

  2. With Chrome and IE works out of the box – 理想情况下,Chrome和IE都不应该工作。 但是,当您在Google Chrome和MS Internet Explorer或其他相关软件的安装/configuration过程中有意/无意地在环境variables中添加了二进制文件的位置时,这些二进制文件很容易被自动定位和使用。

  3. Why only for Firefox do we have to download/configure this driver? – 这不仅是Firefox,而且谷歌浏览器和MS Internet Explorer与Selenium 3.4.0一起使用,您需要从这里强制下载gecko驱动程序v0.16.0(或更高版本)或Chrome驱动程序或IEDriverServer,并将其保存在您的机器中。 将您的Mozila Firefox或Google Chrome或MS Internet Explorer升级到最新的稳定版本。 在你的代码中使用geckodriver / chromedriver / iedriver的绝对path,而System.setProperty如下:

     System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe"); 
  4. 有关GeckoDriver的更详细的讨论,你可以考虑看看这个讨论 。

让我知道这是否回答你的问题。

FireFox是Mozilla的基础,selenium需要驱动程序与基于壁虎的驱动程序接口 – 请参阅Geckodriver的README文件

你的陈述真的是不正确的,镀铬汽油也需要放在路上。 我认为你已经在之前设置了这个chromedriver,所以它似乎开箱即用。

geckodriver / chromedriver的path也可以在代码中设置

我们之所以需要这个,AFAIK自firefox> 47以来,firefox webdriver插件没有随浏览器一起发货,因此应该从geckodriver执行,而selenium3+

作为Firefox中的自动化驱动程序的Marionette支持自定义套接字协议,该协议与WebDriver规范不兼容。 因为这样的geckodriver需要被用作Selenium和Firefox之间的代理。 作为一个小的HTTP服务器实现,它接受符合WebDriver规范的命令,并将这些命令转发给Marionette。 同样的情况也适用于Marionette的响应,它们被转换回WebDriver兼容的HTTP响应。

随着即将在Firefox中集成Quantum(Rust组件),geckodriver在将来将不再需要,因为它将默认集成。