chrome selenium selenium-webdriver selenium-firefoxdriver geckodriver firefox-marionette

selenium - chrome - Diferencia entre webdriver.firefox.marionette y webdriver.gecko.driver



geckodriver selenium python (3)

Hasta la versión 45 (incluida 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.

Marionette 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.

El controlador Gecko (cables anteriormente denominados) es un servidor de aplicaciones que implementa el protocolo Selenium / WebDriver. Traduce los comandos Selenium y los reenvía al controlador Marionette .

Para el cliente Java, el comportamiento predeterminado es usar el controlador Gecko, pero puede anularse para usar la extensión heredada como un controlador con la propiedad webdriver.firefox.marionette :

System.setProperty("webdriver.firefox.marionette", "false");

o con la capacidad de marionette 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 las 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 la PATH entorno PATH o defina la ubicación en la propiedad webdriver.gecko.driver :

System.setProperty("webdriver.gecko.driver", "C://geckodriver.exe");

o inicie 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

Ahora estoy aprendiendo Selenium y he encontrado un problema.

Soy consciente de que Selenium admite la versión anterior de Firefox de forma predeterminada sin un controlador. Y para las versiones recientes de Firefox, tenemos que descargar el controlador y definirlo usando System.setProperty .

Según este link , para Firefox 45 y 46, el código de inicio del controlador podría verse así:

WebDriver driver = new FirefoxDriver();

Mi Firefox es la versión 45.5.1., Pero el código anterior todavía no funciona. Entonces, de acuerdo con este link , he agregado:

System.setProperty("webdriver.firefox.marionette","C://geckodriver.exe");

Y funcionó.

Entonces me di cuenta de que no había instalado geckodriver.exe en mi computadora. Para ver cómo va, he cambiado el código a continuación:

System.setProperty("webdriver.firefox.marionette","");

Aún funciona.

Entonces, aquí viene mi primer problema: ¿Qué pasó? Estoy seguro de que no existe geckodriver.exe en mi entorno. Si no se ha señalado ninguna ubicación, ¿por qué debería establecer una propiedad?

Además, he visto códigos como:

System.setProperty("webdriver.gecko.driver", "/tools/marionette/wires.exe");

Mi segunda pregunta es: ¿cuál es la diferencia entre webdriver.gecko.driver y webdriver.firefox.marionette o wires.exe y geckodriver.exe ?


Hasta que Firefox 47.x lanza 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 lanzó Firefox.

Por eso utilizamos:

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 con la documentación oficial de Mozilla en developer.mozilla.org . Marionette 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 lo tanto, 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 ''wires.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 al ejecutar nuestras pruebas. GeckoDriver a su vez iniciará el navegador Mozilla Firefox.

Estos extractos han sido extraídos de la respuesta épica de Jim Evan a la pregunta ¿Cuáles son los beneficios de usar Marionette FirefoxDriver en lugar del antiguo Selenium FirefoxDriver para un probador de Selenium? lo que nos proporciona una comprensión detallada de cómo GeckoDriver y Marionette entraron 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 las versiones recientes del navegador Firefox 53.x también.

Usecase 1:

En caso de utilizar los navegadores heredados Firefox 47.x, debe establecer explícitamente "marioneta" en falso 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 establecer "marioneta" en falso o si establece "marioneta" en verdadero, observará una IllegalStateException

Usecase 3:

En caso de utilizar los navegadores Firefox 53.x, puede optar por omitir la configuración de "marioneta" en verdadero de la siguiente manera, que mostrará los registros de información de Marionette INFO Listening on port 11105 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 mostrará también 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 el caso de usar los navegadores Firefox 53.x si establece forzosamente "marionette" en falso a través de la clase DesiredCapabilities, observará una excepción 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 los navegadores basados ​​en Gecko. Geckodriver proporciona la API HTTP descrita por el protocolo WebDriver para comunicarse con los navegadores Gecko, como la versión de Firefox superior a 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 FF), puede usar las siguientes capacidades:

DesiredCapabilities capabilities=DesiredCapabilities.firefox(); capabilities.setCapability("marionette", true); WebDriver driver = new FirefoxDriver(capabilities);