Comment utiliser L'exécutable Gecko avec Selenium

J'utilise Firefox 47.0 avec du sélénium 2.53. Récemment, ils ont été un bug entre le sélénium et Firefox qui rend le code ne fonctionne pas. Une des solutions est d'utiliser le pilote de la Marionnette.

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

WARN-Exception: Exception in thread" main " org.openqa.nium.WebDriverException: Le chemin vers l'exécutable du pilote doit être défini par le webdriver.Gecko.propriété du système de pilote; 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:Seleniumgeckodriver.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 vers le geckodriver.exe est droit et je ne vois pas où j'ai fait 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:Seleniumgeckodriver.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 marche, il semble que le problème vient du conducteur Remoteweb et du gecko, quelqu'un a des nouvelles ?

32
demandé sur Ripon Al Wasim 2016-06-13 12:06:27

10 réponses

récemment Selenium a lancé Selenium 3 et si vous essayez D'utiliser la dernière version de Firefox alors 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 d'ici

29
répondu Mukesh otwani 2017-03-30 12:46:31

je suis également face à la même question et a obtenu la résolution après un jour:

l'exception est à venir parce que le système a besoin de Geckodriver pour exécuter le test au sélénium. 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 link.

s'il vous plaît faites-moi savoir si le problème n'est pas se régler.

11
répondu Purendra Agrawal 2016-08-05 03:51:20

vous pouvez gérer le pilote Firefox automatiquement en utilisant WebDriverManager .

cette bibliothèque télécharge le binaire approprié ( geckodriver ) pour votre plate-forme (Mac, Windowns, Linux) et exporte ensuite la valeur appropriée de la variable D'environnement Java requise ( webdriver.Gecko.le pilote ).

regardez un exemple complet comme un cas 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.0.0</version>
</dependency>

WebDriverManager fait de la magie pour vous:

  1. Il vérifie la version la plus récente de la WebDriver binaire
  2. il télécharge le WebDriver binaire si elle n'est pas présente sur votre système
  3. Il exporte la nécessaire WebDriver Java les variables d'environnement nécessaires par le Sélénium

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

10
répondu Boni García 2018-09-11 07:35:32

les solutions ci-dessus fonctionnent très bien pour les tests locaux et l'allumage des navigateurs à partir du code java.Si vous voulez activer votre grille de sélénium plus tard, alors ce paramètre est un must have pour dire au noeud distant où trouver le geckodriver:

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

le noeud ne trouve pas le pilote Gecko lorsqu'il est spécifié dans le code D'automatisation Java.

ainsi la commande complète pour le noeud devrait être (en supposant que le noeud et le hub à des fins d'essai sur la même machine):

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 des noeuds:

00:35:44.383 INFO - Launching a Selenium Grid node
Setting system property webdriver.gecko.driver to C:\geckodriver\geckodriver.exe
6
répondu George Papatheodorou 2017-03-10 17:04:42

j'essaie de faire simple. Vous avez deux options en utilisant le sélénium 3+:

  • mettez à jour votre Firefox à 47.0.1 ou plus et utilisez la valeur par défaut geckodriver de Selenium3.

  • Ou de désactiver à l'aide de geckodriver en spécifiant marionette pour de faux et utilisez L'ancien pilote Firefox. 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 d'autres commandes qui sont mentionnées dans d'autres réponses.

2
répondu ananda 2016-11-15 06:34:36

vous devez spécifier la propriété du système avec le chemin le .exe lors du démarrage du noeud du serveur Selenium. Voir aussi l'anwser accepté à grille de sélénium avec pilote Chrome (WebDriverException: le chemin vers le pilote exécutable doit être défini par le webdriver.chrome.pilote du système de la propriété)

1
répondu Gecki 2017-05-23 12:25:42

je crée une application Java simple par archetype maven-archetype-quickstar , puis réviser 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 aussi sur Mac OS X, Linux: https://github.com/mozilla/geckodriver/releases

et

// On Mac OS X.
System.setProperty("webdriver.gecko.driver", "/Users/donhuvy/Downloads/geckodriver");
1
répondu Do Nhu Vy 2016-09-24 02:18:36

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, 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");
1
répondu ShiyamTJ 2017-01-03 12:30:49

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

pour résumer:

  1. Télécharger gecko pilote
  2. ajouter autorisation d'exécution
  3. ajouter la propriété du système:

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

  4. Instantiate et utiliser la classe

    WebDriver driver = new FirefoxDriver();

  5. Faire ce que vous voulez

  6. fermer le conducteur

    driver.close;

0
répondu Carlos Caldas 2017-02-19 13:24:26

j'utilise la classe FirefoxOptions pour définir L'emplacement binaire avec Firefox 52.0, GeckoDriver v0.15.0 et le sélénium 3.3.1 comme mentionné dans cet article - http://www.automationtestinghub.com/selenium-3-0-launch-firefox-with-geckodriver /

le code java que j'ai utilisé -

FirefoxOptions options = new FirefoxOptions();
options.setBinary("C:\Program Files (x86)\Mozilla Firefox\firefox.exe"); //location of FF exe

FirefoxDriver driver = new FirefoxDriver(options);
driver.get("http://www.google.com");
-1
répondu Anish Pillai 2017-03-27 12:06:56