it-swarm.com.de

So laden Sie eine Datei herunter und speichern sie mit dem Selenium Webdriver am gewünschten Ort

Ich muss die folgende Aufgabe mit dem unten angegebenen Selenium Webdriver ausführen.

  1. Klicken Sie auf einen beliebigen Link/Button, der mit dem Herunterladen einer beliebigen Datei beginnt.
  2. Klicken Sie im Popup-Fenster auf "Speichern" (z. B. bei http://Selenium.googlecode.com/files/Selenium-server-standalone-2.33.0.jar ).
  3. Geben Sie den gewünschten Ort an, um die Datei zu speichern.

Kann jemand teilen, wie können wir dies mit Java implementieren?

27
Sankumarsingh

Sie können nicht auf das Dialogfeld "Speichern" zugreifen. Das wird vom Betriebssystem gesteuert. Das einzige, was Sie wirklich tun können, ist, den Standard-Download-Speicherort für den Browser festzulegen und das automatische Herunterladen der Dateien zuzulassen. Dann überprüfen Sie die Datei in Java.

Sie sollten diese Antwort von diese vorherige SO - Frage prüfen . Grundsätzlich fügen Sie beim Einrichten Ihres Firefox-Profils einen Aufruf hinzu, um für die Eigenschaft browser.helperApps.neverAsk.saveToDisk eine durch Kommas getrennte Liste von MIME-Typen festzulegen, die immer heruntergeladen werden soll:

firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk","text/csv");

Siehe diesen Mozilla KB FAQ Artikel über About: configs.

UPDATE Es sieht so aus, als ob dies jetzt möglich sein könnte sehen Sie diese Antwort in einer anderen Frage

22
Dirk

Das Dialogfeld "Abbrechen/Speichern" wird möglicherweise angezeigt, da Ihnen die Site einen anderen MIME-Typ sendet.

Überprüfen Sie den tatsächlichen Header-Inhalt. 

Verwenden Sie das in den Entwicklertools integrierte Firefox. Klicken Sie mit der rechten Maustaste, um den Element-/Download-Link Ihres Beitrags zu überprüfen, und werfen Sie einen Blick auf den Netzwerkmonitor, um den zurückgegebenen ContentType-Header-Wert zu sehen. 

 enter image description here

Stellen Sie Ihre Profileinstellungen entsprechend ein

 firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk",
                     "application/octet-stream,text/csv");

Ich erwartete "text/csv", bekam aber "application/octet-stream" Sobald dies der Liste der akzeptierten Typen hinzugefügt wurde, funktionierte alles wie erwartet, Keine Popups

8
Abelgo

Eine mögliche Lösung besteht darin, die URL für die Datei über Selenium zu erhalten, eine (Nicht-Selenium) -Verbindung herzustellen, die Cookies von Selenium in die Verbindung zu kopieren (falls erforderlich) und die Datei herunterzuladen. Die meisten Sprachen verfügen über APIs (oder Bibliotheken) zum Ausführen von HTTP-Anforderungen. Um dies beispielsweise in Java zu erreichen, können Sie URL.openConnection() verwenden:

String link = linkElement.getAttribute("href");
URL url = new URL(link);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("GET");

Sie müssen möglicherweise die Cookies von Selenium kopieren, um den Selenium-Benutzer zu imitieren (zum Beispiel, wenn Sie eine Website testen, die eine Anmeldung erfordert).

Set<Cookie> cookies = webDriver.manager().getCookies();
String cookieString = "";

for (Cookie cookie : cookies) {
    cookieString += cookie.getName() + "=" + cookie.getValue() + ";";
}

httpURLConnection.addRequestProperty("Cookie", cookieString);

Dann können Sie HttpURLConnection.getInputStream() verwenden, um den Dateiinhalt an Ihren bevorzugten Speicherort zu schreiben.

try (InputStream in = httpURLConnection.getInputStream()) {
    Files.copy(in, new File("/path/to/file.ext").toPath(),
        StandardCopyOption.REPLACE_EXISTING);
}

Obwohl diese Methode für verschiedene Programmiersprachen unterschiedlich ist, funktioniert für alle Browser gleich.

3
stiemannkj1

Ich denke, du suchst nach so etwas

//common to all the cases
FirefoxProfile prof = new FirefoxProfile();

//Case:1 - Use this case to set download this code to your browser's default location
//prof.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/Zip");

//Case:2 - Download file to Desktop
//prof.setPreference("browser.download.folderList", 0);
//prof.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/Zip");

//Case:3 - Download to custom folder path. Replace d:\\Selenium with your Download Location 
prof.setPreference("browser.download.dir","D:\\Selenium\\");
prof.setPreference("browser.download.folderList", 2);
prof.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/Zip");

//This will work for all cases mentioned above
WebDriver driver = new FirefoxDriver(prof);
driver.get("http://docs.seleniumhq.org/download/");
driver.findElement(By.xpath("//tr[1]/td[4]/a[text()='Download']")).click();
1
Deepak gupta

Für den Fall, dass Sie Java und Chromdriver verwenden, habe ich eine -Bibliothek entwickelt , die das Herunterladen wesentlich vereinfacht. 

Sie können Ihr Download-Verzeichnis in einer Codezeile festlegen und überprüfen, ob Ihre Datei erfolgreich heruntergeladen wurde:

@Test
void downloadAttachTest() throws InterruptedException {
    adamInternetPage.navigateToPage(driver);
    seleniumDownloadKPI.fileDownloadKPI(
            adamInternetPage.getFileDownloadLink(), "SpeedTest_16MB.dat");
    waitBeforeClosingBrowser();
}
0
AutomatedOwl

Sie können den folgenden Code verwenden, um die Datei am gewünschten Speicherort zu speichern.

package popups;

import Java.util.concurrent.TimeUnit;

import org.openqa.Selenium.By;
import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.firefox.FirefoxDriver;
import org.openqa.Selenium.firefox.FirefoxOptions;
import org.openqa.Selenium.firefox.FirefoxProfile;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

public class FileDownloadPopup 
{
    WebDriver driver;
    FirefoxProfile prof = new FirefoxProfile();
    FirefoxOptions options = new FirefoxOptions();

    @BeforeMethod
    public void setEnvi() 
    {
        System.setProperty("webdriver.gecko.driver", "E:\\Selenium Dependencies\\BrowserExecutables\\geckodriver_win64_v0.21.0.exe");
        prof.setPreference("browser.download.dir","E:\\Downloads");
        prof.setPreference("browser.download.folderList", 2);
        prof.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        options.setProfile(prof);
        driver = new FirefoxDriver(options);
        driver.get("http://file-examples.com/index.php/sample-documents-download/sample-xls-download/");
        driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
    }

    @Test
    public void FDPP()
    {
        driver.findElement(By.xpath("(//a[text()='Download sample xlsx file'])[1]")).click();
    }

    @AfterMethod
    public void closeEnvi()
    {
        driver.close();
    }

}
0
Madhusudan