Différence entre webdriver.Firefox.marionnettes & webdriver.Gecko.pilote

j'apprends maintenant le sélénium et j'ai rencontré un problème.

je suis conscient que Selenium supportait l'ancienne version de Firefox par défaut sans pilote. Et pour les versions récentes de Firefox, nous devons télécharger driver et le définir en utilisant System.setProperty .

selon ce lien , pour les Firefox 45 et 46, le code du pilote de démarrage pourrait ressembler à ceci:

WebDriver driver = new FirefoxDriver();

mon Firefox est la version 45.5.1., mais le code ci-dessus ne marchera pas. Donc, selon ce lien , j'ai ajouté

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

et ça a marché.

puis j'ai réalisé que je n'avais 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","");

ça marche toujours.

donc, voici mon premier problème: que s'est-il passé? Je suis sûr que non geckodriver.exe existe sur mon environnement. Si aucun endroit n'a été pointé, alors pourquoi devrais-je fixer la propriété?

aussi, j'ai vu le code comme

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

ma deuxième question Est de savoir quelle est la différence entre webdriver.gecko.driver et webdriver.firefox.marionette ou wires.exe et geckodriver.exe ?

39
demandé sur Ripon Al Wasim 2017-04-07 11:07:14

3 réponses

Jusqu'à la version 45 (poussée à la version 47), le pilote utilisé pour automatiser Firefox était une extension incluse avec chaque client. Mais cette extension a été abandonnée, probablement en raison du changement de politique qui exige désormais que toutes les extensions soient signées par Mozilla.

marionnette est le nouveau conducteur qui est expédié/inclus avec Firefox. Ce pilote possède son propre protocole qui n'est pas directement compatible avec le protocole Selenium/WebDriver.

le Gecko driver (précédemment appelé wires) est un serveur d'application implémentant le protocole Selenium/WebDriver. Il traduit les commandes de sélénium et les transmet au pilote de marionnette .

pour le client Java, le comportement par défaut est d'utiliser le pilote Gecko, mais il peut être dépassé pour utiliser l'extension legacy comme pilote avec la propriété webdriver.firefox.marionette :

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

ou avec la capacité marionette par 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 le 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 pilote Gecko, soit placer le pilote dans un dossier présent dans la variable d'environnement PATH , soit définir l'emplacement dans la propriété webdriver.gecko.driver :

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

ou lancer un serveur distant avec la propriété affecté à la ligne de commande:

java -Dwebdriver.gecko.driver="C:\geckodriver.exe" -jar selenium-server-standalone-3.4.0.jar
33
répondu Florent B. 2017-07-12 22:52:53

Jusqu'À Firefox 47.l'ancien pilote a été implémenté comme une extension de Firefox. Cette extension était installée dans le profil utilisé par le pilote chaque fois que WebDriver lançait Firefox.

nous avons donc utilisé:

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

Firefox 48 a désactivé l'extension du navigateur et introduit WebDriver. Depuis lors GeckoDriver la solution basée sur la Marionnette, développée et maintenue par Mozilla est destinée à l'automatisation de Mozilla Firefox Navigateur.

Marionnette

selon documentation officielle de Mozilla sur developer.mozilla.org . Marionnette est le Automation "Pilote de 1519220920" . Il utilise le protocole distant de Firefox qui peut contrôler L'interface utilisateur. Marionette accepte les requêtes et les exécute en Gecko. Il a aussi un client. Le client envoie instructions pour le serveur et le serveur exécute les instructions dans le navigateur.

nous avons donc commencé à utiliser 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 pour renommer le fichier exécutable en ‘wires.exe " et l'ajouter à votre chemin d'accès. En conséquence, la formule suivante a été utilisée:

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 dont nous avons besoin pour télécharger dans notre système et mentionner son emplacement dans nos scripts/programmes lors de l'exécution de nos bases de test. Geckodriver lancera à son tour le navigateur Mozilla Firefox.

ces extraits ont été extraits de Jim Evan réponse épique à la question Quels sont les avantages d'utiliser le FirefoxDriver Marionette au lieu de L'ancien FirefoxDriver sélénium pour un testeur de sélénium? qui nous fournit un compréhension détaillée de la façon dont GeckoDriver et marionnette est entré en pratique.

nous avons donc 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 encore l'option d'exécuter votre automatisation par le biais de L'héritage Firefox 47.x navigateur et récente de Firefox 53.le navigateur x se libère aussi.

cas d'utilisation 1:

en cas d'utilisation L'héritage Firefox 47.x navigateurs vous devez définir explicitement" marionette "à false par la classe désirée capabilities 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:

en cas d'utilisation de L'ancien Firefox 47.x navigateurs, Si vous sautez le réglage "marionette" à false ou si vous mettez "marionette" à true, vous observerez un IllegalStateException

cas d'utilisation 3:

en cas d'utilisation du Firefox 53.x navigateurs que vous pouvez choisir de sauter le réglage "marionette" à true comme suit qui montrera les journaux D'information de Marionette 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:

en cas d'utilisation du Firefox 53.x navigateurs vous pouvez définir explicitement "marionette" à true à travers la classe désirée capabilities qui affichera les journaux de bord de la Marionette, 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:

en cas d'utilisation du Firefox 53.x navigateurs Si vous définissez avec force "marionette" à false par L'intermédiaire de la classe Désiredcapabilities, vous observerez un UnreachableBrowserException .

26
répondu DebanjanB 2018-01-25 19:54:18

Marionette est le nouveau pilote qui est livré / inclus avec les dernières versions de Firefox.

cependant, Geckodriver est un Proxy pour utiliser des clients compatibles W3C WebDriver pour interagir avec des navigateurs basés sur Gecko. Geckodriver fournit L'API HTTP décrite par le protocole WebDriver pour communiquer avec les navigateurs Gecko, comme la version de Firefox ci-dessus 47.

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

si vous avez encore des problèmes (à cause de l'incompatibilité des versions FF) vous peut utiliser les capacités suivantes:

DesiredCapabilities capabilities=DesiredCapabilities.firefox();
capabilities.setCapability("marionette", true);
WebDriver driver = new FirefoxDriver(capabilities);
5
répondu satender 2018-01-26 13:04:53