So ändern Sie den Speicherort für den Dateidownload in Webdriver, während Sie den Chrome-Treiber/Firefox-Treiber verwenden
Lesezeit: 5 Minuten
Shantanu Nandan
Ich versuche, ein Bild zu speichern, indem ich die Option “Speichern als” in einem bestimmten Ordner verwende. Ich habe eine Möglichkeit gefunden, mit der rechten Maustaste auf das Bild zu klicken, das ich mit der Option Speichern unter speichern möchte. Aber das Problem, bei dem ich feststecke, ist, dass ich nach dem Abrufen des Betriebssystemfensters, das fragt, wo die Datei gespeichert werden soll, nicht in der Lage bin, den gewünschten Speicherort zu senden, da ich nicht weiß, wie es geht. Ich bin die ähnlichen Fragen in diesem Forum durchgegangen, aber keine davon hat bisher geholfen.
Code ist-
Für Firefox-
public class practice {
public void pic() throws AWTException{
WebDriver driver;
//Proxy Setting
FirefoxProfile profile = new FirefoxProfile();
profile.setAssumeUntrustedCertificateIssuer(false);
profile.setEnableNativeEvents(false);
profile.setPreference("network.proxy.type", 1);
profile.setPreference("network.proxy.http", "localHost");
profile.setPreference("newtwork.proxy.http_port",3128);
//Download setting
profile.setPreference("browser.download.folderlist", 2);
profile.setPreference("browser.helperapps.neverAsk.saveToDisk","jpeg");
profile.setPreference("browser.download.dir", "C:\Users\Admin\Desktop\ScreenShot\pic.jpeg");
driver = new FirefoxDriver(profile);
driver.navigate().to("http://stackoverflow.com/users/2675355/shantanu");
driver.findElement(By.xpath("//*[@id='large-user-info']/div[1]/div[1]/a/div/img"));
Actions action = new Actions(driver);
action.moveToElement(driver.findElement(By.xpath("//*[@id='large-user-info']/div[1]/div[1]/a/div/img"))).perform();
action.contextClick().perform();
Robot robo = new Robot();
robo.keyPress(KeyEvent.VK_V);
robo.keyRelease(KeyEvent.VK_V);
// Here I am getting the os window but don't know how to send the desired location
}//method
}//class
Für Chrom-
public class practice {
public void s() throws AWTException{
WebDriver driver;
System.setProperty("webdriver.chrome.driver","C:\Users\Admin\Desktop\chromedriver.exe");
driver = new ChromeDriver();
driver.navigate().to("http://stackoverflow.com/users/2675355/shantanu");
driver.findElement(By.xpath("//*[@id='large-user-info']/div[1]/div[1]/a/div/img"));
Actions action = new Actions(driver);
action.moveToElement(driver.findElement(By.xpath("//*[@id='large-user-info']/div[1]/div[1]/a/div/img"))).perform();
action.contextClick().perform();
Robot robo = new Robot();
robo.keyPress(KeyEvent.VK_V);
robo.keyRelease(KeyEvent.VK_V);
// Here I am getting the os window but don't know how to send the desired location
}
}
zweitens legen Sie die Präferenz fest browser.download.folderlist, es ist browser.download.folderList (L-Kappen in Ordnerliste).
Sobald Sie beides erreicht haben, können Sie Ihre Roboterklasse verwenden, um die gewünschten Operationen durchzuführen.
Für Chromedriver ausprobieren mit:
String downloadFilepath = "/path/to/download";
HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
chromePrefs.put("profile.default_content_settings.popups", 0);
chromePrefs.put("download.default_directory", downloadFilepath);
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("prefs", chromePrefs);
DesiredCapabilities cap = DesiredCapabilities.chrome();
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
cap.setCapability(ChromeOptions.CAPABILITY, options);
WebDriver driver = new ChromeDriver(cap);
Hoffe das hilft. 🙂
Es funktioniert jetzt mit Firefox, aber wie geht das bei Verwendung des Chome-Treibers?
– Shantanu Nandan
8. Januar ’15 um 7:08
Kann ich dafür AutoIT verwenden? Ist es zwingend erforderlich, AutoIT mit TestNG zu verwenden oder kann ich es nur mit Selenium-Webtreiber verwenden?
– Shantanu Nandan
8. Januar ’15 um 8:38
AutoIT bis weit ist der beste Weg. Das Problem mit Robot ist, dass Sie Ihr System während der Ausführung einfrieren müssen. AutoIT behebt dieses Problem, aber während der Verwendung von AutoIT sollte das System nicht gesperrt werden.
– Vivek Singh
8. Januar ’15 um 8:41
und autoIt mit testng oder selenium webdriver? AutoIt wird als Process-Aufruf verwendet, hat also keine Beziehung zu Tests oder Selen.
– Vivek Singh
8. Januar ’15 um 8:44
Vielleicht möchten Sie File.separator für die Schrägstriche im Pfad verwenden?
– Simon Baars
11. Apr. ’17 um 11:45
Für Chrome-Browser:
Auch Sie können den Windows-Dialog (Speichern als Dialog) mit dem folgenden Code-Schnipsel deaktivieren. Sie müssen die folgenden Einstellungen in den Chromedriver-Einstellungen vornehmen:
Deaktivieren Sie die Download-Eingabeaufforderung, wenn sie angezeigt wird
Legen Sie das Standardverzeichnis zum Herunterladen der Datei fest
Wenn das PDF-Ansichts-Plugin aktiviert ist, das die PDF-Datei im Browser öffnet, können Sie dies deaktivieren, damit der Download automatisch starten kann
Akzeptieren Sie jedes Zertifikat im Browser
String downloadFilepath = "/path/to/download/directory/";
Map<String, Object> preferences = new Hashtable<String, Object>();
preferences.put("profile.default_content_settings.popups", 0);
preferences.put("download.prompt_for_download", "false");
preferences.put("download.default_directory", downloadFilepath);
// disable flash and the PDF viewer
preferences.put("plugins.plugins_disabled", new String[]{
"Adobe Flash Player", "Chrome PDF Viewer"});
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("prefs", preferences);
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
driver = new ChromeDriver(capabilities);
Yury Staravoitau
Ich habe viel Zeit damit verbracht, zu untersuchen, wie man eine PDF-Datei im Firefox-Browser herunterlädt, ohne dass das Popup-Erscheinen “Speichern unter” angezeigt wird. Es könnte jemandem helfen.
Nach einigen lokalen Recherchen, wie man herunterlädt pdf Datei in Firefox ohne Speichern unter-Popup habe ich die minimal erforderliche Einstellung im Firefox-Profil gefunden:
Natürlich können Sie einige zusätzliche Einstellungen hinzufügen.
Es funktioniert in Firefox 45-46-Versionen.
Sie haben Ihre Frage teilweise selbst beantwortet:
Das Problem, bei dem ich feststecke, ist, nachdem ich das Betriebssystemfenster erhalten habe
Selen ist ein Browser Automatisierungstool – os Fenster ist kein Browser! Sie müssen etwas anderes verwenden. Je nach Bedarf gibt es viele Möglichkeiten: Sikuli, Robot, AutoIt, …
Thirumaran
Verwenden Sie dieselbe Roboterklasse und drücken Sie die Eingabetaste, um im Windows-Dialogfeld “Speichern” auszuwählen.