Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium webdriver.firefox.marionete和;webdriver.gecko.driver_Selenium_Selenium Webdriver_Selenium Firefoxdriver_Geckodriver_Firefox Marionette - Fatal编程技术网

Selenium webdriver.firefox.marionete和;webdriver.gecko.driver

Selenium webdriver.firefox.marionete和;webdriver.gecko.driver,selenium,selenium-webdriver,selenium-firefoxdriver,geckodriver,firefox-marionette,Selenium,Selenium Webdriver,Selenium Firefoxdriver,Geckodriver,Firefox Marionette,我现在正在学习Selenium,遇到了一个问题 我知道Selenium默认支持没有驱动程序的旧Firefox版本。对于最新版本的Firefox,我们必须下载驱动程序并使用System.setProperty定义它 据此,对于Firefox 45和46,启动驱动程序代码可能如下所示: WebDriver driver = new FirefoxDriver(); 我的Firefox是45.5.1版,但上面的代码仍然无法工作。因此,根据这一点,我补充说: System.setProperty(“w

我现在正在学习Selenium,遇到了一个问题

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

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

WebDriver driver = new FirefoxDriver();
我的Firefox是45.5.1版,但上面的代码仍然无法工作。因此,根据这一点,我补充说:

System.setProperty(“webdriver.firefox.marionete”,“C:\\geckodriver.exe”)

它成功了

然后我意识到我没有在我的电脑上安装
geckodriver.exe
。为了了解情况,我更改了以下代码:

System.setProperty("webdriver.firefox.marionette","");
它仍然有效

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

此外,我还看到了如下代码:

System.setProperty("webdriver.gecko.driver", "/tools/marionette/wires.exe");
我的第二个问题是
webdriver.gecko.driver
webdriver.firefox.marionete
wires.exe
geckodriver.exe

在版本45之前(推到版本47),用于自动化firefox的驱动程序是每个客户端附带的一个扩展。但是这个扩展被放弃了,可能是由于政策的改变,现在要求所有的扩展都由Mozilla签名

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

Gecko驱动程序(以前称为wires)是实现Selenium/WebDriver协议的应用服务器。 它转换Selenium命令并将其转发给木偶驱动程序

对于Java客户机,默认行为是使用Gecko驱动程序,但可以覆盖它,将旧版扩展用作具有
webdriver.firefox.marionette
属性的驱动程序:

System.setProperty(“webdriver.firefox.marionete”、“false”);
或者通过
FirefoxOptions
使用
木偶
功能:

FirefoxOptions=newfirefoxoptions()
.setLegacy(真);
WebDriver=newfirefoxdriver(选项);
//或者使用远程服务器
WebDriver driver=新的RemoteWebDriver(remoteUrl,options.toDesiredCapabilities());
或者直接使用
所需功能

DesiredCapabilities capa=DesiredCapabilities.firefox();
capa.设定能力(“木偶”,假);
WebDriver=新的FirefoxDriver(capa);
//或者使用远程服务器
WebDriver驱动程序=新的RemoteWebDriver(remoteUrl,capa);
要定义Gecko驱动程序的位置,请将驱动程序放在
路径
环境变量中的文件夹中,或在属性
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

在Firefox47.x发布之前,旧版驱动程序是作为Firefox扩展实现的。每当WebDriver启动Firefox时,此扩展都安装在驱动程序使用的配置文件中

因此,我们使用:

WebDriver driver =  new FirefoxDriver();
driver.navigate().to("https://gmail.com");
Firefox48禁用了浏览器扩展并引入了WebDriver。从那时起,Mozilla开发和维护的基于木偶网的解决方案是用于自动化Mozilla Firefox浏览器的

木偶 根据Mozilla的官方文档
木偶自动化驱动程序。它使用Firefox的远程协议来控制UI。木偶接受请求并在Gecko中执行它们。它也有一个客户。客户端向服务器发送指令,服务器在浏览器中执行指令

因此,我们开始使用木偶:

System.setProperty("webdriver.firefox.marionette","C:\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://gmail.com");
电线 有一些引用可以将可执行文件重命名为“wires.exe”并将其添加到您的路径中。因此,使用了以下内容:

System.setProperty("webdriver.firefox.marionette","C:\\wires.exe");
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://gmail.com");
壁虎河 GeckoDriver是我们需要在系统中下载的可执行文件,并在执行测试用例时在脚本/程序中提到它的位置。GeckoDriver将依次启动Mozilla Firefox浏览器

这些摘录摘自《吉姆·埃文》对这个问题的史诗般的回答,它为我们提供了对壁虎河和木偶如何付诸实施的详细理解

因此,我们开始使用geckodriver.exe:

System.setProperty("webdriver.gecko.driver", "C:\\geckodriver.exe");
WebDriver driver =  new FirefoxDriver();
driver.navigate().to("https://gmail.com");
现在,在当前场景中,您仍然可以选择通过旧式Firefox 47.x浏览器和最新的Firefox 53.x浏览器版本执行自动化

用例1: 在使用传统Firefox 47.x浏览器的情况下,您必须通过DesiredCapabilities类将“marionette”显式设置为false,如下所示:

DesiredCapabilities dc = DesiredCapabilities.firefox();
dc.setCapability("firefox_binary", "C:\\Program Files\\Mozilla Firefox47\\firefox.exe");
dc.setCapability("marionette", false);
WebDriver driver =  new FirefoxDriver(dc);
driver.navigate().to("https://gmail.com");
用例2: 在使用传统Firefox 47.x浏览器的情况下,如果您跳过将“木偶网”设置为false或将“木偶网”设置为true,您将观察到一个
IllegalStateException

用例3: 在使用Firefox 53.x浏览器的情况下,您可以选择跳过将“木偶网”设置为true,如下所示,这将显示木偶网信息日志,例如,在端口11105上侦听的木偶网信息:

System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
WebDriver driver =  new FirefoxDriver();
driver.navigate().to("https://gmail.com");
用例4: 在使用Firefox 53.x浏览器的情况下,您可以通过DesiredCapabilities类将“木偶网”显式设置为true,该类将显示木偶网警告日志,例如,
WARN TLS证书错误将在该会话中被忽略。

System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
DesiredCapabilities dc = DesiredCapabilities.firefox();
dc.setCapability("marionette", true);
WebDriver driver =  new FirefoxDriver(dc);
driver.navigate().to("https://gmail.com");
用例5: 如果使用
System.setProperty("webdriver.gecko.driver","path of/geckodriver.exe");
WebDriver driver = new FirefoxDriver();
DesiredCapabilities capabilities=DesiredCapabilities.firefox();
capabilities.setCapability("marionette", true);
WebDriver driver = new FirefoxDriver(capabilities);