50 votes

Différence entre webdriver.firefox.marionette et webdriver.gecko.driver

Je suis en train d'apprendre le Sélénium et ont rencontré un problème.

Je suis conscient que le Sélénium pris en charge vieille version de Firefox par défaut sans chauffeur. Et pour les versions récentes de Firefox, nous avons pour télécharger le pilote et le définir à l'aide de System.setProperty.

Selon ce lien, pour Firefox 45 et 46, start pilote de code pourrait ressembler à ceci:

WebDriver driver = new FirefoxDriver();

Mon Firefox est en version 45.5.1., mais le code ci-dessus ne fonctionne toujours pas. Donc d'après ce lien, j'ai ajouté:

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

Et cela a fonctionné.

Puis j'ai réalisé que je n'ai pas installé geckodriver.exe sur mon ordinateur. Pour voir comment ça se passe, j'ai changé le code ci-dessous:

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

Il fonctionne toujours.

Alors, voilà, mon premier problème: Ce qui s'est passé? Je suis sûr que personne n' geckodriver.exe qui existe dans mon environnement. Si aucun emplacement n'a été signalé, alors pourquoi devrais-je le mettre à la propriété?

Aussi, j'ai vu un code comme:

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

Ma deuxième question est que quelle est la différence entre webdriver.gecko.driver et webdriver.firefox.marionette ou wires.exeet geckodriver.exe?

42voto

Florent B. Points 8564

Jusqu'à la version 45 (poussé vers la version 47), le pilote utilisé pour automatiser Firefox est une extension inclus avec chaque client. Mais cette extension a été abandonné, probablement en raison du changement de politique qui exige maintenant que toutes les extensions à être signé par Mozilla.

La marionnette est le nouveau pilote qui est fourni/inclus avec Firefox. Ce pilote a son propre protocole qui n'est pas directement compatible avec le Sélénium/WebDriver protocole.

Le Gecko pilote (précédemment nommé fils) est un serveur d'application mise en œuvre du Sélénium/WebDriver protocole. Il traduit le Sélénium commandes et les transmet à la Marionnette pilote.

Pour le client Java, le comportement par défaut est d'utiliser le Gecko pilote, mais elle peut être remplacée pour utiliser l'héritage de l'extension en tant que pilote avec l' webdriver.firefox.marionette de la propriété:

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

ou avec l' marionette capacité par le biais FirefoxOptions :

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

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

ou directement avec l' 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);

Et pour définir l'emplacement du Gecko pilote, soit à la place du pilote dans un dossier présent dans l' PATH variable d'environnement, ou de définir l'emplacement de la propriété webdriver.gecko.driver:

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

ou de lancer un serveur distant avec les biens affectés à la ligne de commande:

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

28voto

New contributor Points 31198

Jusqu'Firefox 47.x libère le pilote a été mis en œuvre comme une extension de Firefox. Cette extension a été installée dans le profil utilisé par le pilote à chaque fois que WebDriver lancé Firefox.

Par conséquent, nous, nous avons utilisé:

WebDriver driver =  new FirefoxDriver();
driver.navigate().to("https://gmail.com");

Firefox 48 désactivé l'extension de navigateur et introduit WebDriver. Depuis lors, GeckoDriver la Marionnette à base de solution, développée et maintenue par Mozilla pour utiliser l'automatisation Navigateur Mozilla Firefox.

Marionnette

Selon Mozilla, la Documentation Officielle sur developer.mozilla.org. La marionnette est l' Automatisation du Pilote. Il utilise le protocole à distance de Firefox qui permet de contrôler l'INTERFACE utilisateur. Marionnette accepte les demandes et les exécute dans Gecko. Il ont aussi un client. Le client envoie des instructions au serveur et le serveur exécute les instructions dans le navigateur.

Donc nous avons commencé à utiliser de la Marionnette:

System.setProperty("webdriver.firefox.marionette","C:\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://gmail.com");

Fils

Il y a quelques références à renommer le fichier exécutable ‘wires.exe " et l'ajouter à votre chemin d'accès. Donc les suivants ont été utilisés:

System.setProperty("webdriver.firefox.marionette","C:\\wires.exe");
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://gmail.com");

GeckoDriver

GeckoDriver est le fichier exécutable que nous avons besoin de télécharger l'intérieur de notre système et de parler de son emplacement dans nos scripts/programmes lors de l'exécution de nos cas de tests. GeckoDriver à son tour, va démarrer le Navigateur Mozilla Firefox.

Ces extraits ont été prises hors de Jim Evan's epic réponse à la question Quels sont les avantages de l'utilisation de la Marionnette FirefoxDriver à la place de la vieille Sélénium FirefoxDriver pour une Sélénium testeur? ce qui nous donne une compréhension détaillée de la façon dont GeckoDriver et de la Marionnette est entré dans la pratique.

Donc nous avons commencé à utiliser geckodriver.exe:

System.setProperty("webdriver.gecko.driver", "C:\\geckodriver.exe");
WebDriver driver =  new FirefoxDriver();
driver.navigate().to("https://gmail.com");

Maintenant, dans le scénario actuel, vous avez la possibilité d'exécuter votre Automatisation par le biais de l'héritage Firefox 47.x navigateur et récente de Firefox 53.x les versions de navigateur.

Cas d'utilisation 1:

Dans le cas de l'utilisation de l'héritage Firefox 47.x des navigateurs, vous devez définir explicitement "marionnette" à false par DesiredCapabilities classe comme suit:

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");

Cas d'utilisation 2:

Dans le cas de l'utilisation de l'héritage Firefox 47.x navigateurs, si vous sautez le paramètre "marionnette" false ou si vous le réglez sur "marionnette" à true, vous pourrez observer une IllegalStateException

Cas d'utilisation 3:

Dans le cas de l'utilisation de Firefox 53.x des navigateurs, vous pouvez choisir d'ignorer le réglage de "marionnette" à vrai comme suit ce qui montre la Marionnette d'INFOS des journaux par exemple, 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");

Cas d'utilisation 4:

Dans le cas de l'utilisation de Firefox 53.x des navigateurs, vous pouvez définir explicitement les "marionnettes" à true par DesiredCapabilities classe qui va montrer la Marionnette AVERTIR les journaux ainsi par exemple, 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");

Cas d'utilisation 5:

Dans le cas de l'utilisation de Firefox 53.x navigateurs si vous avec force jeu de "marionnette" à false par DesiredCapabilities classe, vous allez observer une UnreachableBrowserException.

5voto

satender Points 1

La marionnette est le nouveau pilote qui est fourni/inclus avec les dernières versions de Firefox.

Cependant, Geckodriver est un Proxy pour l'utilisation du W3C WebDriver-compatible aux clients d'interagir avec les navigateurs basés sur Gecko. Geckodriver fournit une API HTTP décrit par le WebDriver protocole pour communiquer avec Gecko navigateurs, comme Firefox version 47.

System.setProperty("webdriver.gecko.driver","path of/geckodriver.exe");
WebDriver driver = new FirefoxDriver();

Si vous êtes l'obtention problèmes (en raison d'une incompatibilité de FF versions) vous pouvez utiliser les fonctionnalités suivantes:

DesiredCapabilities capabilities=DesiredCapabilities.firefox();
capabilities.setCapability("marionette", true);
WebDriver driver = new FirefoxDriver(capabilities);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X