java selenium firefox geckodriver

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");



Es importante recordar que el controlador (archivo) debe tener permiso de ejecución (linux chmod + x geckodriver).

Para resumir:

  1. Descargar gecko driver
  2. Agregar permiso de ejecución
  3. Agregar propiedad del sistema:

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

  4. Instanciar y usar la clase

    WebDriver driver = new FirefoxDriver();

  5. Haz lo que quieras

  6. 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:

  1. Comprueba la última versión del binario WebDriver
  2. Descarga el binario WebDriver si no está presente en su sistema
  3. 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();

Puedes consultar la documentación completa desde aquí


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.