Pregunta Diferencia entre webdriver.firefox.marionette y webdriver.gecko.driver


Ahora estoy aprendiendo selenio y he encontrado un problema.

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

De acuerdo a esto enlazar, para Firefox 45 y 46, el código del controlador de inicio podría verse así:

WebDriver driver = new FirefoxDriver();

Mi Firefox es la versión 45.5.1., Pero el código anterior aún no funciona. Entonces de acuerdo a esto enlazar, Yo he añadido

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 funciona, he cambiado al 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 geckodriver.exe existe en mi entorno. Si no se señaló ninguna ubicación, ¿por qué debería establecer la propiedad?

Además, he visto código 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.exey geckodriver.exe?


36
2018-04-07 08:07


origen


Respuestas:


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 sean 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 de Gecko (cables anteriormente nombrados) es un servidor de aplicaciones que implementa el protocolo Selenium / WebDriver. Traduce los comandos de Selenium y los envía al Conductor de marionetas.

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

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

o con el marionette capacidad a través 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 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

31
2018-05-10 18:17



Hasta que Firefox 47.x publique 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 lo tanto, nosotros 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, es para uso automatizado del navegador Mozilla Firefox.

Marioneta

De acuerdo a Documentación oficial de Mozilla en 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 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 debemos descargar dentro de nuestro sistema y mencionar su ubicación en nuestros scripts / programas mientras ejecutamos nuestras pruebas. GeckoDriver a su vez iniciará el navegador Mozilla Firefox.

Estos extractos han sido sacados de Jim Evanrespuesta épica a la pregunta ¿Cuáles son los beneficios de usar Marionette FirefoxDriver en lugar del viejo Selenium FirefoxDriver para un tester 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 Legacy Firefox 47.x y las versiones recientes del navegador Firefox 53.x también.

Usecase 1:

En caso de utilizar los navegadores heredados de 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");

Uso del caso 2:

En caso de utilizar los navegadores heredados de Firefox 47.x, si omite configurar "marioneta" en falso o si establece "marioneta" en verdadero, observará un IllegalStateException

Usecase 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 MARIONETTA INFO, p. 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");

Usecase 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 de MARNETY WARN, p. 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");

Usecase 5:

En caso de usar los navegadores Firefox 53.x si configuras forzosamente "marioneta" como falso a través de la clase DesiredCapabilities, observarás un UnreachableBrowserException.


24
2018-05-11 16:00



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 la API HTTP descrita por el protocolo WebDriver para comunicarse con los navegadores Gecko, como la versión 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 de FF), puede usar las siguientes capacidades:

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

4
2018-06-19 09:16