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 ?
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();
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.
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:
- Il vérifie la version la plus récente de la WebDriver binaire
- il télécharge le WebDriver binaire si elle n'est pas présente sur votre système
- 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
.
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
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.
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é)
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");
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");
il est important de se rappeler que le pilote(fichier) doit avoir la permission d'exécution (linux chmod +x geckodriver).
pour résumer:
- Télécharger gecko pilote
- ajouter autorisation d'exécution
-
ajouter la propriété du système:
System.setProperty("webdriver.gecko.driver", "FILE PATH");
-
Instantiate et utiliser la classe
WebDriver driver = new FirefoxDriver();
-
Faire ce que vous voulez
-
fermer le conducteur
driver.close;
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");