2012-05-23 15 views
5

Estoy usando selenium webdriver para realizar algunas descargas con Firefox. En este momento, mi script espera un momento específico después de que la descarga se haya iniciado y luego cierra el navegador. Quiero saber si hay una forma de configurar Firefox para cerrar automáticamente las finalizaciones de descarga. O usando Selenium webdriver, ¿puedo verificar si la descarga se ha completado? No quiero usar ningún complemento, ya que podría agregar dependencia en mi script. No puedo usar wget/curl, etc. para descargar los archivos. Gracias de antemanocerrar automáticamente Firefox cuando se complete la descarga

Respuesta

2

Lo dijo Ignacio Contreras. Sondear la ruta de descarga es posiblemente la mejor (la más robusta) solución.

Alternativa # 1:

Utilice un FirefoxProfile con Download Statusbar complemento. Tiene una opción práctica para "Continuar descargando en el Administrador de descargas después de que se ha cerrado la ventana" (o algo muy similar), de modo que mantendrá a Firefox ejecutándose en segundo plano hasta que la descarga haya finalizado.

Alternativa # 2:

Descargar el archivo directamente a través this (o cualquier otra herramienta similar WebDriver ambiente) ... o this, si es posible. Eso cortará totalmente a Firefox del proceso.

+0

Al igual que un punto de datos, el enlace a la barra de estado de descarga apunta a un complemento anterior. Al instalarlo (porque no estaba prestando demasiada atención), Symantec se asusta porque su página está cargada de adware. Enlace actualizado: https://addons.mozilla.org/en-us/firefox/addon/download-status-bar/ –

1

No estoy seguro si esto funcionaría, pero ¿ha considerado explorar a través de Firefox la ubicación de descarga? sondeándolo hasta que vea que la descarga se ha completado.

Si no me equivoco, cuando el archivo haya sido descargado, debe haber un archivo adicional con la extensión .part.

Algo como esto (pseudocódigo):

... 

WebDriver poller = new FirefoxDriver() 
poller.get("path to download folder"); 

while ("file with .part extension is present") { 
    // Wait/sleep some time 
    // Refresh poller 
} 

// close downloading firefox instance 
firefox.quit(); 
// close the polling instance 
poller.quit(); 

creo que sirve

+0

Gracias Ignacio. Pero el problema es que, en un momento dado, se pueden ejecutar varias instancias de Firefox. Las múltiples instancias de Firefox pueden descargarse en la misma ubicación. –

+0

bueno, haces que cada una de estas instancias sondee la ubicación de descarga buscando el archivo .part de sus respectivas descargas (si las instancias se lanzan desde instancias separadas de código de ejecución Java). O si todos se ejecutan desde el mismo programa, puede crear una matriz de nombres de archivos para que pueda lanzar un controlador de sondeo único que cierra cada instancia de Firefox cuando sea necesario. –

2

Puede utilizar la clase WebDriverWait de selenio WebDriver API para hacer el sondeo utilizando el siguiente código:

 (new WebDriverWait(driver, 180, 10)).until(new ExpectedCondition<Boolean>() { 
      public Boolean apply(WebDriver d) { 
       return !downloadedFilePart.exists(); 
      } 
     }); 

El anterior código comprueba archivo con .part programa de extensión se descarga por cada 10 segundos hasta que descarga completado o se agotó el tiempo de espera después de 3 minutos.

Cuestiones relacionadas