it-swarm.com.de

so ändern Sie den Speicherort für das Herunterladen von Dateien in Webdriver, während Sie den Chrome-Treiber/Firefox-Treiber verwenden

Ich versuche, ein Bild mithilfe der Option Speichern unter in einem bestimmten Ordner zu speichern. Ich habe einen Weg gefunden, mit dem ich mit der Option Speichern unter mit der rechten Maustaste auf das Bild klicken kann, das ich speichern möchte. Aber das Problem, bei dem ich festgefahren bin, ist das OS-Fenster, in dem Sie gefragt werden, wo die Datei gespeichert werden soll. Ich kann den gewünschten Speicherort nicht senden, weil ich nicht weiß, wie das geht. Ich habe die ähnlichen Fragen durchgegangen, die in diesem Forum gestellt wurden, aber bisher hat noch keiner von ihnen geholfen.

Code is-

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
   }
 }

This is the pop up window where I am stuck

17
Shantanu Nandan

Es gibt zwei Dinge, die im Code falsch laufen. 

Für Firefox: Sie müssen einstellen 

profile.setPreference("browser.download.dir", "C:\\Users\\Admin\\Desktop\\ScreenShot\\");

nicht zu 

profile.setPreference("browser.download.dir", "C:\\Users\\Admin\\Desktop\\ScreenShot\\pic.jpeg");

zweitens setzen Sie die Einstellung browser.download.folderlist . Dies ist browser.download.folderList (L-Caps in folderList).

Sobald Sie dies erreicht haben, können Sie Ihre Robot-Klasse verwenden, um die gewünschten Operationen auszufü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. :)

19
Vivek Singh

Ich habe viel Zeit damit verbracht zu untersuchen, wie man eine PDF-Datei im Firefox-Browser herunterladen kann, ohne dass das Popup-Fenster "Speichern unter" erscheint. Es könnte jemandem helfen.

Nach einigen lokalen Untersuchungen zum Herunterladen von pdf -Dateien in Firefox ohne Popup "Speichern unter" habe ich die erforderliche Mindesteinstellung im Firefox-Profil gefunden:

profile.setPreference("pdfjs.disabled", true);
profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf");

Natürlich können Sie noch weitere Einstellungen hinzufügen.

Es funktioniert in Firefox 45-46-Versionen.

2

Für Chrome Browser :

Sogar Sie können den Windows-Dialog (Save As Dialogue) mit dem folgenden Code-Snippet 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 Ansichts-Plugin PDF aktiviert ist und die PDF -Datei im Browser geöffnet wird, können Sie diese deaktivieren, damit der Download automatisch gestartet werden kann
  • Akzeptieren Sie ein beliebiges 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);
    
2
Muhammad

Sie haben Ihre eigene Frage teilweise beantwortet:

das Problem, bei dem ich festgefahren bin, ist das OS-Fenster

Selenium ist ein Browser Automation Tool - OS Fenster ist kein Browser! Sie müssen etwas anderes verwenden. Es gibt viele Optionen, je nach Ihren Bedürfnissen: Sikuli, Roboter, AutoIt, ...

0
SiKing

Verwenden Sie dieselbe Robot-Klasse und drücken Sie die Eingabetaste, um im Windows-Dialogfeld "Speichern" auszuwählen.

robo.keyPress (KeyEvent.VK_ENTER); robo.keyRelease (KeyEvent.VK_ENTER);

wenn Sie es umbenennen müssen, kopieren Sie den Dateinamen in die Zwischenablage und übergeben Sie ihn wie folgt

StringSelection file = new StringSelection("D:\\image.jpg");
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(file, null);

Robot rb = new Robot();

rb.setAutoDelay(2000); // Similar to thread.sleep

rb.keyPress(KeyEvent.VK_CONTROL);
rb.keyPress(KeyEvent.VK_V);

rb.keyRelease(KeyEvent.VK_CONTROL);
rb.keyRelease(KeyEvent.VK_V);

rb.setAutoDelay(2000);

rb.keyPress(KeyEvent.VK_ENTER);
rb.keyRelease(KeyEvent.VK_ENTER);
0
Thirumaran

Für Chrome wird es funktionieren 

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);
WebDriver driver = new ChromeDriver(options);
0
Bachan Joseph

Wahrscheinlich nicht die beste Lösung, aber Sie können versuchen, Sikuli Api zu verwenden, um das Speichern der aufgerufenen Box zu bestätigen.

Das Feld "Speichern unter" ist ein Betriebssystemfenster.

0
user1586480