Ya no necesitas investigar más por todo internet ya que llegaste al espacio adecuado, contamos con la respuesta que deseas sin complicarte.
Solución:
Hasta la versión 45 (empujada a la versión 47), el controlador utilizado para automatizar Firefox era una extensión incluida con cada cliente. Pero esta extensión se eliminó, probablemente debido al cambio de política que ahora requiere que todas las extensiones estén firmadas por Mozilla.
Marioneta es el nuevo controlador que se envía / incluye con Firefox. Este controlador tiene su propio protocolo que no es directamente compatible con el protocolo Selenium / WebDriver.
los Conductor gecko (anteriormente llamado cables) es un servidor de aplicaciones que implementa el protocolo Selenium / WebDriver. Traduce los comandos de Selenium y los reenvía al Conductor de marionetas.
Para el cliente Java, el comportamiento predeterminado es usar el controlador Gecko, pero se puede anular para usar la extensión heredada como controlador con el webdriver.firefox.marionette
propiedad:
System.setProperty("webdriver.firefox.marionette", "false");
o con el marionette
capacidad a través de FirefoxOptions
:
FirefoxOptions options = new FirefoxOptions()
.setLegacy(true);
WebDriver driver = new FirefoxDriver(options);
// or with a remote server
WebDriver driver = new RemoteWebDriver(remoteUrl, options.toDesiredCapabilities());
o directamente con el DesiredCapabilities
:
DesiredCapabilities capa = DesiredCapabilities.firefox();
capa.setCapability("marionette", false);
WebDriver driver = new FirefoxDriver(capa);
// or with a remote server
WebDriver driver = new RemoteWebDriver(remoteUrl, capa);
Y para definir la ubicación del controlador Gecko, coloque el controlador en una carpeta presente en el PATH
variable de entorno, o definir la ubicación en la propiedad webdriver.gecko.driver
:
System.setProperty("webdriver.gecko.driver", "C:\geckodriver.exe");
o lanzar un servidor remoto con la propiedad asignada en la línea de comando:
java -Dwebdriver.gecko.driver="C:\geckodriver.exe" -jar selenium-server-standalone-3.4.0.jar
Hasta el lanzamiento de Firefox 47.x, el controlador heredado se implementó como una extensión de Firefox. Esta extensión se instaló en el perfil utilizado por el controlador cada vez que WebDriver lanzaba Firefox.
Por eso usamos:
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://gmail.com");
Firefox 48 deshabilitó la extensión del navegador e introdujo WebDriver. Desde entonces GeckoDriver
la solución basada en Marionette, desarrollada y mantenida por Mozilla, se utiliza para automatizar el navegador Mozilla Firefox.
Marioneta
De acuerdo a Documentación oficial de Mozilla sobre developer.mozilla.org. Marioneta es el Controlador de automatización. Utiliza el protocolo remoto de Firefox que puede controlar la interfaz de usuario. Marionette acepta solicitudes y las ejecuta en Gecko. También tiene un cliente. El cliente envía instrucciones al servidor y el servidor ejecuta las instrucciones dentro del navegador.
Por eso comenzamos a usar Marionette:
System.setProperty("webdriver.firefox.marionette","C:\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://gmail.com");
Alambres
Hay algunas referencias para cambiar el nombre del archivo ejecutable a ‘wire.exe’ y agregarlo a su ruta. Por lo tanto, se utilizó lo siguiente:
System.setProperty("webdriver.firefox.marionette","C:\wires.exe");
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://gmail.com");
GeckoDriver
GeckoDriver es el archivo ejecutable que necesitamos descargar dentro de nuestro sistema y mencionar su ubicación en nuestros scripts / programas mientras ejecutamos nuestros casos de prueba. A su vez, GeckoDriver iniciará el navegador Mozilla Firefox.
Estos extractos se han extraído de Jim EvanÉpica respuesta a la pregunta. ¿Cuáles son los beneficios de usar Marionette FirefoxDriver en lugar del antiguo Selenium FirefoxDriver para un probador de Selenium? que nos proporciona una comprensión detallada de cómo GeckoDriver y Marioneta entró en práctica.
Por lo tanto, comenzamos a usar geckodriver.exe:
System.setProperty("webdriver.gecko.driver", "C:\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://gmail.com");
Ahora, en el escenario actual, todavía tiene la opción de ejecutar su Automatización a través del navegador heredado Firefox 47.x y también las versiones recientes del navegador Firefox 53.x.
Caso de uso 1:
En caso de utilizar los navegadores heredados Firefox 47.x, debe establecer explícitamente “marionette” en false a través de la clase DesiredCapabilities de la siguiente manera:
DesiredCapabilities dc = DesiredCapabilities.firefox();
dc.setCapability("firefox_binary", "C:\Program Files\Mozilla Firefox47\firefox.exe");
dc.setCapability("marionette", false);
WebDriver driver = new FirefoxDriver(dc);
driver.navigate().to("https://gmail.com");
Caso de uso 2:
En caso de utilizar los navegadores heredados Firefox 47.x, si omite la configuración de “marionette” en false o si estableces “marioneta” en true, observarás un IllegalStateException
Caso de uso 3:
En caso de utilizar los navegadores Firefox 53.x, puede optar por omitir la configuración de “marioneta” en true de la siguiente manera, que mostrará los registros de información de marionetas, por ejemplo Marionette INFO Listening on port 11105
:
System.setProperty("webdriver.gecko.driver", "C:\Utility\BrowserDrivers\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://gmail.com");
Caso de uso 4:
En caso de utilizar los navegadores Firefox 53.x, puede establecer explícitamente “marionette” en true a través de la clase DesiredCapabilities que también mostrará los registros WARN de Marionette, por ejemplo WARN TLS certificate errors will be ignored for this session
System.setProperty("webdriver.gecko.driver", "C:\Utility\BrowserDrivers\geckodriver.exe");
DesiredCapabilities dc = DesiredCapabilities.firefox();
dc.setCapability("marionette", true);
WebDriver driver = new FirefoxDriver(dc);
driver.navigate().to("https://gmail.com");
Caso de uso 5:
En caso de utilizar los navegadores Firefox 53.x, si establece “marionette” a la fuerza en false a través de la clase DesiredCapabilities observará una UnreachableBrowserException
.
Marionette es el nuevo controlador que se envía / incluye con las últimas versiones de Firefox.
Sin embargo, Geckodriver es un proxy para usar clientes compatibles con W3C WebDriver para interactuar con navegadores basados en Gecko. Geckodriver proporciona una API HTTP descrita por el protocolo WebDriver para comunicarse con los navegadores Gecko, como la versión de Firefox por encima de 47.
System.setProperty("webdriver.gecko.driver","path of/geckodriver.exe");
WebDriver driver = new FirefoxDriver();
Si aún tiene problemas (debido a la incompatibilidad de las versiones de FF), puede usar las siguientes capacidades:
DesiredCapabilities capabilities=DesiredCapabilities.firefox();
capabilities.setCapability("marionette", true);
WebDriver driver = new FirefoxDriver(capabilities);
Tienes la opción de estimular nuestra publicación añadiendo un comentario o valorándolo te damos la bienvenida.