Selenium 3.7和Firefox ESR 52.4.1需要geckodriver吗?

时间:2017-11-08 16:47:50

标签: c# selenium firefox selenium-webdriver geckodriver

我的理解是,当从NuGet使用Selenium.WebDriver v3.7时,我需要当前版本的geckodriver才能与Firefox ESR v52.4.1进行交互。但是,我已经设法让测试运行并成功传递,而不需要 geckodriver。

我相信这是因为我在实例化RemoteWebDriver时启用了遗留实现选项,如下所示。

FirefoxOptions options = new FirefoxOptions
{
    UseLegacyImplementation = true,   // means that geckodriver is not required
    BrowserExecutableLocation = ...,  // ensures authorised Firefox version used
    Profile = ...                     // an instance of FirefoxProfile
};

RemoteWebDriver remoteWebDriver = new FirefoxDriver(options);

一些问题可以帮助我理解细节:

  1. 这是否意味着Selenium.WebDriver使用Marionette协议直接与Firefox浏览器对话?
  2. 如果是这样,这个设置是否依赖于当前与NuGet包一起分发的库,这些库可能(将会?)在即将发布的版本中被删除?
  3. 如果是这样,有什么想法可以发布或何时发布?
  4. 谢谢!

1 个答案:

答案 0 :(得分:1)

  

这是否意味着Selenium.WebDriver使用Marionette协议直接与Firefox浏览器对话?

根据我的理解,当您将System.setProperty("webdriver.firefox.marionette", "false");设置为false或执行FirefoxOptions options = new FirefoxOptions() .setLegacy(true);时,这意味着它正在使用旧版扩展程序(不是marionette和gecko),如firefox属性here中所述< / p>

如果不使用壁虎就不能使用木偶,因为木偶中有一个壁虎组件,就像提到的木偶服务器一样here

geckodriver因为它是在github上编写的,它提供了一个与Gecko browsers进行通信的API

  

此程序提供WebDriver协议描述的HTTP API   与Gecko浏览器进行通信

对于selenium 3.0以上marionette默认启用,如上所述here

有关详细信息,请参阅this问题

如果您有兴趣了解有关木偶客户 - 服务器 - 壁虎互动的更多信息,请查看here

修改

source code geckodriver状态下面有关于readme.md中不同位置的geckodriver的要点

  
      
  1. geckodriver是使用W3C WebDriver兼容客户端进行交互的代理   基于Gecko的浏览器。

  2.   
  3. Selenium客户端绑定将获取 geckodriver 二进制可执行文件   来自[系统的PATH环境变量] [路径]

  4.         

    3.由于geckodriver是一个完整的单独的HTTP服务器      远端      [WebDriver]的实现,可以避免使用     Selenium远程服务器

         
        
    1. geckodriver翻译WebDriver [命令],[回复],   和[错误]到[Marionette协议],并作为之间的代理   [WebDriver]和[Marionette]

    2.   
    3. 默认情况下,geckodriver会尝试查找   并使用Firefox的系统安装

    4.   

所以,回答你的问题,这就是它的运作方式

Selenium语言绑定reaches to - &gt; geckodriver.exe finds - &gt;系统firefox安装(虽然可以更改)reaches to inbuilt - &gt;木偶客户reaches to - &gt;木偶服务器reaches to - &gt;浏览器which inturn calls out的gecko引擎 - &gt; gecko引擎中的element.js,interaction.js,action.js,evaluate.js取决于绑定或客户端请求的内容。