当前位置: 首页 > 面试题库 >

webdriver.firefox.marionette和webdriver.gecko.driver之间的区别

尉迟华翰
2023-03-14
问题内容

我现在正在学习selenium,遇到了问题。

我知道Selenium默认不使用驱动程序就支持旧的Firefox版本。对于最新版本的Firefox,我们必须下载驱动程序并使用进行定义System.setProperty

根据此链接,对于Firefox 45和46,启动驱动程序代码如下所示:

WebDriver driver = new FirefoxDriver();

我的Firefox是45.5.1版,但上述代码仍然无法正常工作。因此,根据此链接,我添加了:

System.setProperty("webdriver.firefox.marionette","C:\\geckodriver.exe");

而且有效。

然后我意识到自己还没有安装geckodriver.exe计算机。要查看进展情况,我已更改为以下代码:

System.setProperty("webdriver.firefox.marionette","");

它仍然有效。

所以,这是我的第一个问题:发生了什么事?我确定geckodriver.exe在我的环境中不存在。如果未指定任何位置,那么为什么我必须设置属性?

另外,我看过类似的代码:

System.setProperty("webdriver.gecko.driver", "/tools/marionette/wires.exe");

我的第二个问题是webdriver.gecko.driver and
webdriver.firefox.marionettewires.exeand和有geckodriver.exe什么区别?


问题答案:

在版本45(推送到版本47)之前,用于自动执行Firefox的驱动程序是每个客户端附带的扩展。但是,此扩展名已被删除,可能是由于政策更改所致,该政策现在要求所有扩展名均由Mozilla签名。

Marionette 是Firefox随附/随附的新驱动程序。该驱动程序具有自己的协议,该协议与Selenium /
WebDriver协议不直接兼容。

壁虎驱动器 (以前称为导线)是实施硒/ webdriver的协议的应用服务器。它转换Selenium命令并将其转发给
Marionette驱动程序

对于Java客户端,默认行为是使用Gecko驱动程序,但是可以将其替换为使用旧扩展作为具有以下webdriver.firefox.marionette属性的驱动程序:

System.setProperty("webdriver.firefox.marionette", "false");

或具有以下marionette能力FirefoxOptions

FirefoxOptions options = new FirefoxOptions()
  .setLegacy(true);

WebDriver driver = new FirefoxDriver(options);
// or with a remote server
WebDriver driver = new RemoteWebDriver(remoteUrl, options.toDesiredCapabilities());

或直接与DesiredCapabilities

DesiredCapabilities capa = DesiredCapabilities.firefox();
capa.setCapability("marionette", false);

WebDriver driver = new FirefoxDriver(capa);
// or with a remote server
WebDriver driver = new RemoteWebDriver(remoteUrl, capa);

要定义Gecko驱动程序的位置,请将驱动程序放在PATH环境变量中存在的文件夹中,或者在属性中定义位置webdriver.gecko.driver

System.setProperty("webdriver.gecko.driver", "C:\\geckodriver.exe");

或使用在命令行中分配的属性启动远程服务器:

java -Dwebdriver.gecko.driver="C:\\geckodriver.exe" -jar selenium-server-standalone-3.4.0.jar


 类似资料:
  • 我现在学硒,遇到了一个问题。 我知道Selenium默认支持旧的Firefox版本,没有驱动程序。对于Firefox的最新版本,我们必须下载驱动程序并使用定义它。 根据此链接,对于Firefox45和46,启动驱动程序代码可能如下所示: 此外,我还看到过这样的代码: 我的第二个问题是和或者和之间有什么区别?

  • 问题内容: 我错放了太多次了,我想我一直忘记,因为我不知道两者之间的区别,只是一个给了我我期望的价值,而另一个却没有。 为什么是这样? 问题答案: 是的简写形式(尽管请注意,该表达式只会被计算一次。) 是的,即指定一元的到。 例子:

  • 问题内容: 因此,我有一段简单的代码可以打印出整数1-10: 然后,如果仅在第3行上更改一个运算符,它将打印出无限数量的1整数(我知道为什么会这样做)。为什么在运行第二个程序时没有出现语法错误?如果赋值运算符后面跟着一个加法运算符,它不会调用语法错误吗? 问题答案: 与相同, 只是意味着。

  • 问题内容: 有人可以解释一下 和 我不知道“确切”的含义 问题答案: 在这个例子中,什么都没有。当您具有多个具有相似名称的路径时,该参数将起作用: 例如,假设我们有一个显示用户列表的组件。我们还有一个用于创建用户的组件。的网址应嵌套在下。因此,我们的设置可能如下所示: 现在,这里的问题是,当我们转到路由器时,将通过所有定义的路由,并返回它找到的第一个匹配项。因此,在这种情况下,它将首先找到路线,然

  • 问题内容: 我很好奇printStackTrace()和toString()之间的区别是什么。乍一看,他们 似乎 做的完全相同。 码: 问题答案: 不,有重要区别!使用toString,您只有异常的类型和错误消息。使用printStackTrace()可以获得异常的整个堆栈跟踪,这对于调试非常有帮助。 System.out.println(toString())的示例: printStackTra