【问题标题】:Is geckodriver required for Selenium 3.7 and Firefox ESR 52.4.1?Selenium 3.7 和 Firefox ESR 52.4.1 是否需要 geckodriver?
【发布时间】:2018-04-21 11:14:04
【问题描述】:

我的理解是,当使用 NuGet 中的Selenium.WebDriver v3.7 时,我需要当前版本的 geckodriver 才能与 Firefox ESR v52.4.1 交互。然而,我已经设法让测试运行并成功通过 geckodriver 完全没有参与。

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

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. 如果是这样,您知道可能是哪个版本或何时发布?

谢谢!

【问题讨论】:

    标签: c# selenium firefox selenium-webdriver geckodriver


    【解决方案1】:

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

    据我了解,当您将 System.setProperty("webdriver.firefox.marionette", "false"); 设置为 false 或执行 FirefoxOptions options = new FirefoxOptions() .setLegacy(true); 时,这意味着它使用的是 Firefox 属性中所述的旧版扩展(不是木偶和壁虎)here

    不使用 gecko 就无法使用 Marionette(或者更确切地说,如果您想与基于 gecko 的浏览器交互,则必须使用 marionette )。 Marionette 里面有一个 gecko 组件,就是上面提到的 Marionette 服务器 here

    geckodriver 写在 github 上,提供了与Gecko browsers 通信的 API

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

    对于 selenium 3.0 及以后的木偶,默认启用,如 here 所述

    更多信息请参考this问题

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

    编辑:

    geckodriver 的source code 在 readme.md 中的不同位置说明了 geckodriver 的以下几点

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

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

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

    1. geckodriver 翻译 WebDriver [命令]、[响应]、 和 [错误] 到 [木偶协议],并充当之间的代理 [WebDriver] 和 [Marionette]

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

    所以,回答你的问题,这就是它的工作原理

    Selenium 语言绑定 reaches to -->geckodriver.exe finds -->系统 firefox 安装(不过可以更改)reaches to inbuilt --> marionette 客户端 reaches to --> marionette 服务器 reaches to --> 浏览器的壁虎引擎which inturn calls out --> 壁虎引擎中的element.js,interaction.js,action.js,evaluate.js 取决于绑定或客户端请求的内容。

    【讨论】:

    • 你最后分享的链接是一个真正的宝石!理解命名有助于我更好地理解逻辑架构。仍然不确定 geckodriver.exe 是否驱动 Marionette 服务器(在 Gecko 内部),或者 Marionette 是否调用 geckodriver.exe 而后者驱动 Gecko。另外,如果你也知道我的第二个问题的答案,那将是一个很大的帮助!
    • @Mark 我在上面进行了编辑以回答您的问题。希望有帮助
    猜你喜欢
    • 1970-01-01
    • 2021-04-15
    • 2019-06-30
    • 2013-09-09
    • 2018-07-11
    • 2017-09-25
    • 2019-06-13
    • 2020-09-20
    • 2017-08-03
    相关资源
    最近更新 更多