73 votes

Selenium utilisant Java - Le chemin d'accès à l'exécutable du pilote doit être défini par la propriété système webdriver.gecko.driver.

J'essaie de lancer Mozilla mais j'obtiens toujours cette erreur :

Exception dans le thread "main" java.lang.IllegalStateException : Le chemin vers l'exécutable du pilote doit être défini par la propriété système webdriver.gecko.driver ; pour plus d'informations, voir https://github.com/mozilla/geckodriver . La dernière version peut être téléchargée à partir de https://github.com/mozilla/geckodriver/releases

J'utilise Selenium 3.0.01 Version bêta et Mozilla 45 . J'ai essayé avec Mozilla 47 aussi. mais toujours la même chose.

1 votes

Je pense que ce n'est pas un problème de duplication, il se produit avec selenium 3 et c'est un nouveau problème, la stacktrace est aussi différente. Merci :)

1 votes

Vous avez besoin de geckodriver pour lancer les tests Selenium 3 dans Firefox.

101voto

Saurabh Gaur Points 15926

El Selenium Les liaisons du client essaieront de localiser le geckodriver exécutable du système PATH . Vous devrez ajouter le répertoire contenant l'exécutable au chemin du système.

  • Sur Unix vous pouvez faire ce qui suit pour l'ajouter au chemin de recherche de votre système, si vous utilisez un shell compatible avec bash :

    export PATH=$PATH:/path/to/geckodriver
  • Sur Windows vous devez mettre à jour la variable système Path pour ajouter le chemin complet du répertoire de l'exécutable. Le principe est le même que sous Unix.

Toute la configuration ci-dessous pour lancer le dernier firefox en utilisant n'importe quel langage de programmation est applicable pour Selenium2 pour activer explicitement Marionette. Avec Selenium 3.0 et les versions ultérieures, vous ne devriez pas avoir à faire quoi que ce soit pour utiliser Marionette, car elle est activée par défaut.

Pour utiliser Marionette dans vos tests, vous devrez mettre à jour vos capacités souhaitées pour l'utiliser.

Java :

Comme l'exception dit clairement que vous devez télécharger le dernier geckodriver.exe de aquí et mettre en place le téléchargement geckodriver.exe le chemin où il existe dans votre ordinateur comme propriété du système avec avec la variable webdriver.gecko.driver avant d'initier le pilote de marionnette et de lancer firefox comme ci-dessous :-

//if you didn't update the Path system variable to add the full directory path to the executable as above mentioned then doing this directly through code
System.setProperty("webdriver.gecko.driver", "path/to/geckodriver.exe");

//Now you can Initialize marionette driver to launch firefox
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability("marionette", true);
WebDriver driver = new MarionetteDriver(capabilities); 

Et pour Selenium3 utiliser comme :-

WebDriver driver = new FirefoxDriver();

Si vous êtes toujours en difficulté, suivez ce lien qui vous aidera à résoudre votre problème.

.NET :

var driver = new FirefoxDriver(new FirefoxOptions());

Python :

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

caps = DesiredCapabilities.FIREFOX

# Tell the Python bindings to use Marionette.
# This will not be necessary in the future,
# when Selenium will auto-detect what remote end
# it is talking to.
caps["marionette"] = True

# Path to Firefox DevEdition or Nightly.
# Firefox 47 (stable) is currently not supported,
# and may give you a suboptimal experience.
#
# On Mac OS you must point to the binary executable
# inside the application package, such as
# /Applications/FirefoxNightly.app/Contents/MacOS/firefox-bin
caps["binary"] = "/usr/bin/firefox"

driver = webdriver.Firefox(capabilities=caps)

Ruby :

# Selenium 3 uses Marionette by default when firefox is specified
# Set Marionette in Selenium 2 by directly passing marionette: true
# You might need to specify an alternate path for the desired version of Firefox

Selenium::WebDriver::Firefox::Binary.path = "/path/to/firefox"
driver = Selenium::WebDriver.for :firefox, marionette: true

JavaScript (Node.js) :

const webdriver = require('selenium-webdriver');
const Capabilities = require('selenium-webdriver/lib/capabilities').Capabilities;

var capabilities = Capabilities.firefox();

// Tell the Node.js bindings to use Marionette.
// This will not be necessary in the future,
// when Selenium will auto-detect what remote end
// it is talking to.
capabilities.set('marionette', true);

var driver = new webdriver.Builder().withCapabilities(capabilities).build();

Utilisation de RemoteWebDriver

Si vous voulez utiliser RemoteWebDriver dans n'importe quelle langue, cela vous permettra d'utiliser Marionette en Selenium Grille.

Python :

caps = DesiredCapabilities.FIREFOX

# Tell the Python bindings to use Marionette.
# This will not be necessary in the future,
# when Selenium will auto-detect what remote end
# it is talking to.
caps["marionette"] = True

driver = webdriver.Firefox(capabilities=caps)

Ruby :

# Selenium 3 uses Marionette by default when firefox is specified
# Set Marionette in Selenium 2 by using the Capabilities class
# You might need to specify an alternate path for the desired version of Firefox

caps = Selenium::WebDriver::Remote::Capabilities.firefox marionette: true, firefox_binary: "/path/to/firefox"
driver = Selenium::WebDriver.for :remote, desired_capabilities: caps

Java :

DesiredCapabilities capabilities = DesiredCapabilities.firefox();

// Tell the Java bindings to use Marionette.
// This will not be necessary in the future,
// when Selenium will auto-detect what remote end
// it is talking to.
capabilities.setCapability("marionette", true);

WebDriver driver = new RemoteWebDriver(capabilities); 

.NET

DesiredCapabilities capabilities = DesiredCapabilities.Firefox();

// Tell the .NET bindings to use Marionette.
// This will not be necessary in the future,
// when Selenium will auto-detect what remote end
// it is talking to.
capabilities.SetCapability("marionette", true);

var driver = new RemoteWebDriver(capabilities); 

Note : Tout comme les autres pilotes disponibles pour Selenium auprès des autres fournisseurs de navigateurs, Mozilla a maintenant publié un exécutable qui s'exécutera en même temps que le navigateur. Suivez este pour plus de détails.

Vous pouvez télécharger le dernier exécutable de geckodriver pour supporter le dernier firefox à partir d'ici.

2 votes

Merci beaucoup. Cela fonctionne parfaitement. Mais juste pour information, qu'est-ce que ce geckodriver ? J'ai travaillé avec Selenium pendant un certain temps et je n'ai pas rencontré cela avant. Mais maintenant, j'ai récemment changé ma machine et j'ai eu cette erreur.

1 votes

@Reema Tout comme les autres pilotes disponibles pour Selenium auprès des autres fournisseurs de navigateurs, Mozilla a maintenant publié un exécutable qui s'exécutera en même temps que le navigateur. Jetez un coup d'oeil pour plus de détails developer.mozilla.org/fr/US/docs/Mozilla/QA/Marionette/

0 votes

Comment définir le chemin pour geckodriver pour toutes les plateformes ? Mon application Java est construite sur différents systèmes.

25voto

Kanth25 Points 151
  1. Téléchargez le pilote gecko depuis le site web seleniumhq (il est maintenant sur GitHub et vous pouvez le télécharger à l'adresse suivante Ici ) .
    1. Vous aurez un zip (ou tar.gz), alors extrayez-le.
    2. Après l'extraction, vous aurez le fichier geckodriver.exe (exécutable approprié sous linux).
    3. Créer un dossier dans C : nommé SeleniumGecko (ou approprié)
    4. Copier et coller geckodriver.exe dans SeleniumGecko
    5. Définissez le chemin pour le pilote gecko comme ci-dessous

.

System.setProperty("webdriver.gecko.driver","C:\\geckodriver-v0.10.0-win64\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();

0 votes

Il me manquait le chemin de ce pilote et maintenant il fonctionne bien.

3voto

Ripon Al Wasim Points 5161

Code Java de Selenium WebDriver :

Télécharger Gecko Driver à partir de https://github.com/mozilla/geckodriver/releases en fonction de votre plateforme. Extrayez-le dans un endroit de votre choix. Ecrivez le code suivant :

System.setProperty("webdriver.gecko.driver", "D:/geckodriver-v0.16.1-win64/geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.get("https://www.lynda.com/Selenium-tutorials/Mastering-Selenium-Testing-Tools/521207-2.html");

0 votes

L'emplacement peut varier d'une personne à l'autre. Je l'ai extrait sur le disque D

0voto

user198829 Points 16

Dans mon cas, je dois définir le chemin d'accès dans le fichier de propriétés, après plusieurs heures, je trouve le chemin :

fichier application.properties :

webdriver.gecko.driver="/lib/geckodriver-v0.26.0-win64/geckodriver.exe"

dans le code java :

private static final Logger log = Logger.getLogger(Login.class.getName());
private FirefoxDriver driver;
private FirefoxProfile firefoxProfile;
private final String BASE_URL = "https://www.myweb.com/";
private static final String RESOURCE_NAME = "main/resources/application.properties"; // could also be a constant
private Properties properties;

public Login() {
    init();
}

private void init() {
    properties = new Properties();
    try(InputStream resourceStream = getClass().getClassLoader().getResourceAsStream(RESOURCE_NAME)) {
        properties.load(resourceStream);
    } catch (IOException e) {
        System.err.println("Could not open Config file");
        log.log(Level.SEVERE, "Could not open Config file", e);
    }
    // open incognito tab by default
    firefoxProfile = new FirefoxProfile();
    firefoxProfile.setPreference("browser.privatebrowsing.autostart", true);
    // geckodriver driver path to run
    String gekoDriverPath = properties.getProperty("webdriver.gecko.driver");
    log.log(Level.INFO, gekoDriverPath);
    System.setProperty("webdriver.gecko.driver", System.getProperty("user.dir") + gekoDriverPath);
    log.log(Level.INFO, System.getProperty("webdriver.gecko.driver"));
    System.setProperty("webdriver.gecko.driver", System.getProperty("webdriver.gecko.driver").replace("\"", ""));
    if (driver == null) {
        driver = new FirefoxDriver();
    }

}

0voto

J'utilise depuis selenium-java-3.141.59 sous Windows 10 et j'ai résolu mon problème avec ce code :

System.setProperty("webdriver.gecko.driver", "C:\\gecko\\geckodriver.exe");
System.setProperty("webdriver.firefox.bin","C:\\Program Files\\Mozilla Firefox\\firefox.exe");
WebDriver driver = new FirefoxDriver();

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