我的理解是,当从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);
一些问题可以帮助我理解细节:
Selenium.WebDriver
使用Marionette协议直接与Firefox浏览器对话?谢谢!
答案 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的要点
geckodriver是使用W3C WebDriver兼容客户端进行交互的代理 基于Gecko的浏览器。
- 醇>
Selenium客户端绑定将获取 geckodriver 二进制可执行文件 来自[系统的
PATH
环境变量] [路径]3.由于geckodriver是一个完整的单独的HTTP服务器 远端 [WebDriver]的实现,可以避免使用 Selenium远程服务器
geckodriver翻译WebDriver [命令],[回复], 和[错误]到[Marionette协议],并作为之间的代理 [WebDriver]和[Marionette]
- 醇>
默认情况下,geckodriver会尝试查找 并使用Firefox的系统安装
所以,回答你的问题,这就是它的运作方式
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
取决于绑定或客户端请求的内容。