web-dev-qa-db-fra.com

Comment utiliser l'exécutable gecko avec Selenium

J'utilise Firefox 47.0 avec Selenium 2.53. Récemment, ils ont été un bogue entre Selenium et Firefox, ce qui rend le code ne fonctionne pas. Une des solutions consiste à utiliser le pilote Marionnette.

J'ai suivi les instructions de cette site utiliser ce nouveau pilote avec un RemotWebDriver mais je continue à avoir l'erreur:

WARN - Exception: Exception dans le thread "main" org.openqa.Selenium.WebDriverException: Le chemin d'accès à 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/jgraham/wires . La dernière version peut être téléchargée à partir de ....

Le code que j'ai essayé jusqu'à présent est très simple:

public class Test {
    static WebDriver driver;
    static Wait<WebDriver> wait;
    public static void main(String[] args) throws MalformedURLException {
        System.setProperty("webdriver.gecko.driver", "C:\\Selenium\\geckodriver.exe");
        DesiredCapabilities cap = DesiredCapabilities.firefox();
        cap.setCapability("marionette", true);
        cap.setBrowserName("firefox");
        driver = new RemoteWebDriver(new URL("http://192.168.117.135:5555/wd/hub"), cap);//true to enable the JS
        wait = new WebDriverWait(driver, 3000);
        final String url = "https://www.google.com/";

        JavascriptExecutor js = (JavascriptExecutor) driver;

        try {
            driver.navigate().to(url);
        } finally {
            driver.close();
        }
    }
}

Je suis sûr que le chemin d'accès à geckodriver.exe est correct et je ne vois pas où j'ai commis l'erreur.

EDIT 1: J'ai essayé le code suivant:

public class Test {
    static WebDriver driver;
    static Wait<WebDriver> wait;
    public static void main(String[] args) throws MalformedURLException {
        System.setProperty("webdriver.gecko.driver", "C:\\Selenium\\geckodriver.exe");

        driver = new MarionetteDriver();
        wait = new WebDriverWait(driver, 3000);
        final String url = "https://www.google.com/";

        JavascriptExecutor js = (JavascriptExecutor) driver;

        try {
            driver.navigate().to(url);
        } finally {
            driver.close();
        }
    }
}

et ça fonctionne, il semble que le problème vienne de RemoteWebDriver et du pilote gecko, vous avez des nouvelles à ce sujet?

38
Robert Reynolds

Selenium a récemment lancé Selenium 3 et si vous essayez d'utiliser la dernière version de Firefox, vous devez utiliser GeckoDriver:

System.setProperty("webdriver.gecko.driver","G:\\Selenium\\Firefox driver\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();

Vous pouvez consulter la documentation complète à partir d'ici

30
Mukesh otwani

Je suis également confronté au même problème et j'ai obtenu la résolution après une journée:

L'exception vient car le système a besoin de Geckodriver pour exécuter le scénario de test Selenium. Vous pouvez essayer ce code sous la méthode principale en Java

    System.setProperty("webdriver.gecko.driver","path of/geckodriver.exe");
    DesiredCapabilities capabilities=DesiredCapabilities.firefox();
    capabilities.setCapability("marionette", true);
    WebDriver driver = new FirefoxDriver(capabilities);

Pour plus d'informations Vous pouvez aller à ce https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/WebDriver .

S'il vous plaît laissez-moi savoir si le problème ne soit pas résolu.

12
Purendra Agrawal

Vous pouvez gérer le pilote Firefox automatiquement à l'aide de WebDriverManager .

Cette bibliothèque télécharge le fichier binaire approprié ( geckodriver ) de votre plate-forme (Mac, Windowns, Linux), puis exporte la valeur appropriée du fichier Java variable d’environnement ( webdriver.gecko.driver ).

Regardez un exemple complet en tant que scénario de test JUnit:

public class FirefoxTest {

  private WebDriver driver;

  @BeforeClass
  public static void setupClass() {
    WebDriverManager.firefoxdriver().setup();
  }

  @Before
  public void setupTest() {
    driver = new FirefoxDriver();
  }

  @After
  public void teardown() {
    if (driver != null) {
      driver.quit();
    }
  }

  @Test
  public void test() {
    // Your test code here
  }
}

Si vous utilisez Maven, vous devez mettre à votre pom.xml:

<dependency>
    <groupId>io.github.bonigarcia</groupId>
    <artifactId>webdrivermanager</artifactId>
    <version>3.6.2</version>
</dependency>

WebDriverManager fait de la magie pour vous:

  1. Il vérifie la dernière version du binaire WebDriver
  2. Il télécharge le binaire WebDriver s'il n'est pas présent sur votre système
  3. Il exporte les variables d’environnement WebDriver Java requises par Selenium.

Jusqu'à présent, WebDriverManager prend en charge Chrome, Opera, Internet Explorer, Microsoft Edge, PhantomJS et Firefox.

11
Boni García

Les solutions ci-dessus fonctionnent très bien pour les tests locaux et le lancement de navigateurs à partir du code Java. Si vous souhaitez activer votre grille Selenium ultérieurement, ce paramètre est indispensable pour indiquer le nœud distant). où trouver le geckodriver:

-Dwebdriver.gecko.driver="C:\geckodriver\geckodriver.exe"

Le nœud ne peut pas trouver le pilote gecko lorsqu'il est spécifié dans le code Automation Java.

Ainsi, la commande complète pour le nœud devrait être (en supposant que le nœud et le concentrateur à des fins de test résident sur le même ordinateur):

Java -Dwebdriver.gecko.driver="C:\geckodriver\geckodriver.exe" -jar Selenium-server-standalone-2.53.0.jar -role node -hub http://localhost:4444/grid/register

Et vous devriez vous attendre à voir dans le journal de noeud:

00:35:44.383 INFO - Launching a Selenium Grid node
Setting system property webdriver.gecko.driver to C:\geckodriver\geckodriver.exe
8

J'essaie de faire simple. Vous avez deux options lorsque vous utilisez Selenium 3+:

  • Mettez à niveau votre Firefox vers 47.0.1 ou une version ultérieure et utilisez le pilote par défaut geckodriver de Selenium3.

  • Ou désactivez l'utilisation de geckodriver en spécifiant marionette sur false et utilisez le pilote Firefox hérité. une commande simple pour exécuter Selenium est: Java -Dwebdriver.firefox.marionette=false -jar Selenium-server-standalone-3.0.1.jar. Vous pouvez également désactiver l'utilisation de geckodriver à partir d'autres commandes mentionnées dans d'autres réponses.

3
Moradnejad

Cela peut être dû au fait que le système ne peut pas trouver l'emplacement d'installation de firefox sur le chemin.

Essayez de suivre le code, ce qui devrait fonctionner.

System.setProperty("webdriver.firefox.bin","C:\\Program Files\\Mozilla Firefox\\firefox.exe"); 
System.setProperty("webdriver.gecko.driver","<location of geckodriver>\\geckodriver.exe");
2
ShiyamTJ

Vous devez spécifier la propriété système avec le chemin du fichier .exe lors du démarrage du nœud du serveur Selenium. Voir également la réponse acceptée à grille Selenium avec le pilote Chrome (WebDriverException: le chemin d'accès à l'exécutable du pilote doit être défini par la propriété système webdriver.chrome.driver)

2
Gecki

Je crée une simple application Java par archétype maven-archetype-quickstar , puis révise pom.xml:

<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>bar</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>bar</name>
    <description>bar</description>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.Selenium</groupId>
            <artifactId>Selenium-Java</artifactId>
            <version>3.0.0-beta3</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.Selenium</groupId>
            <artifactId>Selenium-server</artifactId>
            <version>3.0.0-beta3</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.Selenium</groupId>
            <artifactId>Selenium-api</artifactId>
            <version>3.0.0-beta3</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.Selenium</groupId>
            <artifactId>Selenium-firefox-driver</artifactId>
            <version>3.0.0-beta3</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>bar</finalName>
    </build>
</project>

et

package bar;

import Java.util.concurrent.TimeUnit;

import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.firefox.FirefoxDriver;

public class AppTest {

    /**
     * Web driver.
     */
    private static WebDriver driver = null;

    /**
     * Entry point.
     * 
     * @param args
     * @throws InterruptedException
     */
    public static void main(String[] args) throws InterruptedException {
        // Download "geckodriver.exe" from https://github.com/mozilla/geckodriver/releases
        System.setProperty("webdriver.gecko.driver","F:\\geckodriver.exe");
        driver = new FirefoxDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("http://localhost:8080/foo/");
        String sTitle = driver.getTitle();
        System.out.println(sTitle);
    }

}

Vous utilisez également sous Mac OS X, Linux: https://github.com/mozilla/geckodriver/releases

et

// On Mac OS X.
System.setProperty("webdriver.gecko.driver", "/Users/donhuvy/Downloads/geckodriver");
2
Do Nhu Vy

Il est important de se rappeler que le pilote (fichier) doit avoir une autorisation d'exécution (linux chmod + x geckodriver).

Pour résumer:

  1. Télécharger le pilote gecko
  2. Ajouter une autorisation d'exécution
  3. Ajouter une propriété système:

    System.setProperty("webdriver.gecko.driver", "FILE PATH");

  4. Instancier et utiliser la classe

    WebDriver driver = new FirefoxDriver();

  5. Fais ce que tu veux

  6. Fermer le pilote

    driver.close;

1
Carlos Caldas