java - geckodriver
Cómo usar el ejecutable gecko con Selenium (10)
Estoy usando Firefox 47.0 con Selenium 2.53. Recientemente han sido un error entre Selenium y Firefox que hacen que el código no funcione. Una de las soluciones es usar el controlador Marionnette.
Seguí las instrucciones de este site para usar este nuevo controlador con un RemotWebDriver pero sigo teniendo el error:
WARN - Exception: excepción en el subproceso "main" org.openqa.selenium.WebDriverException: la propiedad del sistema webdriver.gecko.driver debe establecer la ruta al ejecutable del controlador; Para obtener más información, consulte https://github.com/jgraham/wires . La última versión se puede descargar desde ...
El código que he probado hasta ahora es muy 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();
}
}
}
Estoy seguro de que la ruta al geckodriver.exe es correcta y no veo dónde cometí el error.
EDITAR 1: probé el siguiente código:
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();
}
}
}
y está funcionando, parece que el problema proviene de RemoteWebDriver y el controlador gecko, ¿alguno de ustedes tiene noticias al respecto?
Creo una aplicación Java simple por archetype maven-archetype-quickstar , luego reviso 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>
y
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);
}
}
También lo usa en Mac OS X, Linux: github.com/mozilla/geckodriver/releases
y
// On Mac OS X.
System.setProperty("webdriver.gecko.driver", "/Users/donhuvy/Downloads/geckodriver");
Debe especificar la propiedad del sistema con la ruta del archivo .exe al iniciar el nodo del servidor Selenium. Consulte también la respuesta aceptada a la cuadrícula Selenium con el controlador de Chrome (WebDriverException: la ruta del ejecutable del controlador debe establecerse mediante la propiedad del sistema webdriver.chrome.driver)
Es importante recordar que el controlador (archivo) debe tener permiso de ejecución (linux chmod + x geckodriver).
Para resumir:
- Descargar gecko driver
- Agregar permiso de ejecución
-
Agregar propiedad del sistema:
System.setProperty("webdriver.gecko.driver", "FILE PATH");
-
Instanciar y usar la clase
WebDriver driver = new FirefoxDriver();
-
Haz lo que quieras
-
Cerrar el conductor
driver.close;
Esto puede deberse a que el sistema no puede encontrar la ubicación instalada de Firefox en la ruta.
Intenta seguir el código, que debería funcionar.
System.setProperty("webdriver.firefox.bin","C://Program Files//Mozilla Firefox//firefox.exe");
System.setProperty("webdriver.gecko.driver","<location of geckodriver>//geckodriver.exe");
Estoy usando la clase FirefoxOptions para establecer la ubicación binaria con Firefox 52.0, GeckoDriver v0.15.0 y Selenium 3.3.1 como se menciona en este artículo: http://www.automationtestinghub.com/selenium-3-0-launch-firefox-with-geckodriver/
El código de Java que usé
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");
Las soluciones anteriores funcionan bien para las pruebas locales y la activación de los navegadores desde el código java. Si desea activar su red de selenio más tarde, este parámetro es imprescindible para decirle al nodo remoto dónde encontrar el controlador geckodriver:
-Dwebdriver.gecko.driver="C:/geckodriver/geckodriver.exe"
El nodo no puede encontrar el controlador gecko cuando se especifica en el código Java de automatización.
Entonces, el comando completo para el nodo debería ser (suponiendo que el nodo y el concentrador para fines de prueba vivan en la misma máquina):
java -Dwebdriver.gecko.driver="C:/geckodriver/geckodriver.exe" -jar selenium-server-standalone-2.53.0.jar -role node -hub http://localhost:4444/grid/register
Y debe esperar ver en el registro de nodos:
00:35:44.383 INFO - Launching a Selenium Grid node
Setting system property webdriver.gecko.driver to C:/geckodriver/geckodriver.exe
Puede manejar el controlador de Firefox automáticamente usando WebDriverManager .
Esta biblioteca descarga el binario adecuado ( geckodriver ) para su plataforma (Mac, Windowns, Linux) y luego exporta el valor adecuado de la variable de entorno Java requerida ( webdriver.gecko.driver ).
Eche un vistazo a un ejemplo completo como un caso de prueba 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 está utilizando Maven, debe ponerlo en su
pom.xml
:
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>3.6.2</version>
</dependency>
WebDriverManager hace magia por ti:
- Comprueba la última versión del binario WebDriver
- Descarga el binario WebDriver si no está presente en su sistema
- Exporta las variables de entorno Java WebDriver necesarias que necesita Selenium
Hasta ahora, WebDriverManager es compatible con
Chrome
,
Opera
,
Internet Explorer
,
Microsoft Edge
,
PhantomJS
y
Firefox
.
Recientemente, Selenium ha lanzado Selenium 3 y si está intentando usar la última versión de Firefox, debe usar GeckoDriver:
System.setProperty("webdriver.gecko.driver","G://Selenium//Firefox driver//geckodriver.exe");
WebDriver driver = new FirefoxDriver();
También estoy enfrentando el mismo problema y obtuve la resolución después de un día:
La excepción viene porque el Sistema necesita Geckodriver para ejecutar el caso de prueba de Selenium. Puedes probar este código bajo el Método principal en Java
System.setProperty("webdriver.gecko.driver","path of/geckodriver.exe");
DesiredCapabilities capabilities=DesiredCapabilities.firefox();
capabilities.setCapability("marionette", true);
WebDriver driver = new FirefoxDriver(capabilities);
Para obtener más información, puede ir a este site enlace.
Avíseme si el problema no se resuelve.
Trato de hacerlo simple. Tiene dos opciones mientras usa Selenium 3+:
-
Actualice su Firefox a 47.0.1 o superior y use el geckodriver predeterminado de Selenium3.
-
O deshabilite el uso de geckodriver especificando
marionette
a falso y use el controlador heredado de Firefox. un comando simple para ejecutar selenium es:java -Dwebdriver.firefox.marionette=false -jar selenium-server-standalone-3.0.1.jar
. También puede deshabilitar el uso de geckodriver desde otros comandos que se mencionan en otras respuestas.