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?
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
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.
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:
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 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
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.
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");
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)
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");
Il est important de se rappeler que le pilote (fichier) doit avoir une autorisation d'exécution (linux chmod + x geckodriver).
Pour résumer:
Ajouter une propriété système:
System.setProperty("webdriver.gecko.driver", "FILE PATH");
Instancier et utiliser la classe
WebDriver driver = new FirefoxDriver();
Fais ce que tu veux
Fermer le pilote
driver.close;