LU *_*Cai 51 selenium selenium-firefoxdriver selenium-webdriver firefox-marionette geckodriver
我现在正在学习Selenium,遇到了一个问题.
我知道Selenium默认支持旧的Firefox版本,没有驱动程序.对于最新版本的Firefox,我们必须下载驱动程序并使用它来定义它System.setProperty.
根据此链接,对于Firefox 45和46,启动驱动程序代码可能如下所示:
WebDriver driver = new FirefoxDriver();
Run Code Online (Sandbox Code Playgroud)
我的Firefox版本为45.5.1.但是上面的代码仍然不起作用.所以根据这个链接,我添加了:
System.setProperty("webdriver.firefox.marionette","C:\\geckodriver.exe");
它奏效了.
然后我意识到我没有安装geckodriver.exe在我的电脑上.要了解它是如何进行的,我已经更改为以下代码:
System.setProperty("webdriver.firefox.marionette","");
Run Code Online (Sandbox Code Playgroud)
它仍然有效.
所以,这是我的第一个问题:发生了什么?我确信geckodriver.exe在我的环境中不存在.如果没有指出位置,那我为什么要设置属性?
另外,我见过的代码如下:
System.setProperty("webdriver.gecko.driver", "/tools/marionette/wires.exe");
Run Code Online (Sandbox Code Playgroud)
我的第二个问题是,是什么样的区别webdriver.gecko.driver 和webdriver.firefox.marionette或wires.exe和geckodriver.exe?
Flo*_* B. 42
最高版本45(推送到版本47),用于自动化Firefox的驱动程序是每个客户端附带的扩展.但是这个扩展被删除了,可能是由于策略的改变,现在要求所有扩展都由Mozilla签名.
Marionette是Firefox发布/附带的新驱动程序.该驱动程序具有自己的协议,与Selenium/WebDriver协议不直接兼容.
的壁虎驱动器(以前称为导线)是实施硒/ webdriver的协议的应用服务器.它翻译Selenium命令并将它们转发给Marionette驱动程序.
对于Java客户端,默认行为是使用Gecko驱动程序,但可以重写它以使用旧版扩展作为具有该webdriver.firefox.marionette属性的驱动程序:
System.setProperty("webdriver.firefox.marionette", "false");
Run Code Online (Sandbox Code Playgroud)
或通过以下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());
Run Code Online (Sandbox Code Playgroud)
或直接与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);
Run Code Online (Sandbox Code Playgroud)
要定义Gecko驱动程序的位置,请将驱动程序放在PATH环境变量中的文件夹中,或者在属性中定义位置webdriver.gecko.driver:
System.setProperty("webdriver.gecko.driver", "C:\\geckodriver.exe");
Run Code Online (Sandbox Code Playgroud)
或者使用命令行中指定的属性启动远程服务器:
java -Dwebdriver.gecko.driver="C:\\geckodriver.exe" -jar selenium-server-standalone-3.4.0.jar
Run Code Online (Sandbox Code Playgroud)
Deb*_*anB 29
直到Firefox 47.x版本,旧版驱动程序被实现为Firefox扩展.每当WebDriver启动Firefox时,此扩展都安装在驱动程序使用的配置文件中.
因此我们使用了:
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://gmail.com");
Run Code Online (Sandbox Code Playgroud)
Firefox 48禁用了浏览器扩展并引入了WebDriver.从那时起GeckoDriver,由Mozilla开发和维护的基于Marionette的解决方案将用于自动化Mozilla Firefox浏览器.
根据Mozilla在developer.mozilla.org上的官方文档.Marionette是自动化驱动程序.它使用Firefox的远程协议来控制UI.Marionette接受请求并在Gecko中执行它们.它也有一个客户.客户端向服务器发送指令,服务器在浏览器中执行指令.
因此我们开始使用Marionette:
System.setProperty("webdriver.firefox.marionette","C:\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://gmail.com");
Run Code Online (Sandbox Code Playgroud)
有一些引用将可执行文件重命名为'wires.exe'并将其添加到您的路径中.因此使用了以下内容:
System.setProperty("webdriver.firefox.marionette","C:\\wires.exe");
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://gmail.com");
Run Code Online (Sandbox Code Playgroud)
GeckoDriver是我们需要在我们的系统中下载的可执行文件,并在执行我们的测试用例时在我们的脚本/程序中提及它的位置.GeckoDriver将启动Mozilla Firefox浏览器.
这些摘录取自Jim Evan对问题的史诗回答.使用Marionette FirefoxDriver而不是旧的Selenium FirefoxDriver对Selenium测试仪有什么好处?这让我们详细了解了GeckoDriver和Marionette如何付诸实践.
因此我们开始使用geckodriver.exe:
System.setProperty("webdriver.gecko.driver", "C:\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://gmail.com");
Run Code Online (Sandbox Code Playgroud)
现在,在当前场景中,您仍然可以选择通过旧版Firefox 47.x浏览器和最近的Firefox 53.x浏览器版本来执行自动化.
如果使用旧版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");
Run Code Online (Sandbox Code Playgroud)
如果您使用旧版Firefox 47.x浏览器,如果您跳过将"marionette"设置为false或将"marionette"设置为true,您将观察到 IllegalStateException
如果使用Firefox 53.x浏览器,您可以选择跳过将"marionette"设置为true,如下所示,它将显示Marionette INFO日志,例如Marionette INFO Listening on port 11105:
System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://gmail.com");
Run Code Online (Sandbox Code Playgroud)
如果使用Firefox 53.x浏览器,您可以通过DesiredCapabilities类将"marionette"显式设置为true,该类将显示Marionette WARN日志,例如 WARN TLS certificate errors will be ignored for this session
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");
Run Code Online (Sandbox Code Playgroud)
如果您通过DesiredCapabilities类强制将"marionette"设置为false,则使用Firefox 53.x浏览器时,您将观察到UnreachableBrowserException.
小智 5
Marionette是最新Firefox版本附带的新驱动程序.
但是,Geckodriver是使用W3C WebDriver兼容客户端与基于Gecko的浏览器进行交互的代理.Geckodriver提供WebDriver协议描述的HTTP API,用于与Gecko浏览器进行通信,例如47以上的Firefox版本.
System.setProperty("webdriver.gecko.driver","path of/geckodriver.exe");
WebDriver driver = new FirefoxDriver();
Run Code Online (Sandbox Code Playgroud)
如果您仍然遇到问题(由于FF版本不兼容),您可以使用以下功能:
DesiredCapabilities capabilities=DesiredCapabilities.firefox();
capabilities.setCapability("marionette", true);
WebDriver driver = new FirefoxDriver(capabilities);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32663 次 |
| 最近记录: |