2012-05-23 16 views
5

Ich benutze Selen Webdriver, um einige Downloads mit Firefox zu tun. Im Moment wartet mein Skript nach dem Start des Downloads auf eine bestimmte Zeit und schließt dann das Firefox. Ich möchte wissen, ob es eine Möglichkeit gibt, Firefox so zu konfigurieren, dass Download-Completions automatisch geschlossen werden. Oder kann ich mit Selen-Webdriver prüfen, ob der Download abgeschlossen ist? Ich möchte kein Add-On verwenden, da es möglicherweise eine Abhängigkeit in meinem Skript hinzufügt. Ich kann wget/curl usw. nicht benutzen, um die Dateien herunterzuladen. Vielen Dank im Vorausschließen firefox automatisch, wenn der Download abgeschlossen ist

Antwort

2

Was Ignacio Contreras. Das Abrufen des Downloadpfads ist möglicherweise die beste (robusteste) Lösung.

Alternative # 1:

Verwenden Sie ein FirefoxProfile mit Download Statusbar Addon. Es hat eine praktische Option, "Download im Download-Manager fortsetzen, nachdem das Fenster geschlossen wurde" (oder etwas sehr ähnliches), so dass es Firefox im Hintergrund laufen lässt, bis der Download abgeschlossen ist.

Alternative # 2:

Laden Sie die Datei direkt this (oder anderes ähnliches WebDriver freundlichen Tool) ... oder this, wenn Sie können. Das wird Firefox komplett aus dem Prozess entfernen.

+0

Genau wie ein Datenpunkt verweist der Link zur Download-Statusleiste auf ein älteres Plugin. Bei der Installation von Symantec (weil ich nicht zu sehr darauf geachtet habe), läuft Symantec aus, weil seine Seite mit Adware beladen ist. Aktualisierter Link: https://addons.mozilla.org/en-us/firefox/addon/download-status-bar/ –

1

Ich bin mir nicht sicher, ob das funktionieren würde, aber haben Sie in Betracht gezogen, durch Firefox den Download-Standort zu erkunden? polling es, bis Sie sehen, dass der Download abgeschlossen ist.

Wenn ich nicht falsch liege, wenn die Datei heruntergeladen wurde, sollte es eine zusätzliche Datei mit der Erweiterung .part geben.

So etwas wie dieses (Pseudo-Code):

... 

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

Hoffe, dass es

sagte hilft
+0

Dank Ignacio. Das Problem ist jedoch, dass zu einem bestimmten Zeitpunkt mehrere Instanzen von Firefox ausgeführt werden können. Die mehreren Firefox-Instanzen können auf denselben Speicherort heruntergeladen werden. –

+0

Nun, Sie machen, dass jede dieser Instanzen den Download-Speicherort abfragt, um nach der .part-Datei ihrer jeweiligen Downloads zu suchen (wenn die Instanzen von getrennten Instanzen von laufendem Java-Code ausgelöst werden). Oder wenn alle von ihnen aus dem gleichen Programm ausgeführt werden, können Sie ein Array von Dateinamen erstellen, so dass Sie einen eindeutigen Abfragetreiber auslösen können, der jede Firefox-Instanz bei Bedarf schließt. –

2

Sie können Selen verwenden WebDriver API WebDriverWait Klasse, um die Abfrage mit dem folgenden Code zu tun:

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

Der obige Code prüft, ob Datei mit .part Erweiterung Programm ist für alle 10 Sekunden das Herunterladen, bis entweder Download abgeschlossen oder Zeitüberschreitung nach 3 Minuten.

Verwandte Themen