为什么Firefox需要GeckoDriver?

时间:2017-04-27 14:06:55

标签: c# selenium selenium-firefoxdriver geckodriver

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

我使用以下代码创建了一个新的selenium项目:

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

Chrome和IE开箱即用,但随着Firefox的推出:

  

当前目录或中的geckodriver.exe文件不存在   PATH环境变量上的目录。司机可以   已在https://github.com/mozilla/geckodriver/releases下载。

为什么只有Firefox我们必须下载/配置这个驱动程序?

4 个答案:

答案 0 :(得分:7)

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

  1. 为什么Firefox需要GeckoDriver? - 对于Mozila Firefox直到版本47.x它是旧版浏览器,我们不需要gecko驱动程序。 Mozila Firefox从版本47.x开始随附Marionette,它是Mozilla Gecko引擎的自动化驱动程序。它可以远程控制Gecko平台的UI或内部JavaScript,例如Firefox。

  2. Chrome和IE开箱即用 - 理想情况下Chrome和IE都不应该有效。但是,在安装/配置Google Chrome浏览器时,您已经/不知不觉地在环境变量中添加了二进制文件的位置。 MS Internet Explorer或其他相关软件,这些二进制文件很容易找到&自动使用。

  3. 为什么只有Firefox才能下载/配置此驱动程序? - 它不仅适用于Firefox,也适用于Google Chrome及其驱动程序。要使用Selenium 3.4.0的MS Internet Explorer,您需要从here或Chrome驱动程序或IEDriverServer强制下载gecko驱动程序v0.16.0(或更高版本)并将其保存在您的计算机中。将您的Mozila Firefox或Google Chrome或MS Internet Explorer升级到最新的稳定版本。在代码System.setProperty中使用geckodriver / chromedriver / iedriver的绝对路径,如下所示:

    System.setProperty("webdriver.gecko.driver",  "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
    
  4. 如果这回答了你的问题,请告诉我。

答案 1 :(得分:1)

FireFox是基于Mozilla的,而selenium需要驱动程序与基于gecko的驱动程序连接 - 请参阅geckodriver上的README文件

答案 2 :(得分:1)

你的陈述真的不对,chromedriver也需要被放在路上。我认为你之前已经设置了chromedriver所以它似乎开箱即用。

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

我们之所以需要这个,AFAIK自firefox> 47,firefox webdriver插件不随浏览器一起提供,因此应该从geckodriver和selenium 3 +执行

答案 3 :(得分:0)

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

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