Sådan uploader og downloader du en fil ved hjælp af Selenium

⚡ Smart opsummering

Upload og download fil ved hjælp af Selenium WebDriver-arbejdsgange er afhængige af native sendKeys() til inputfelter, AutoIt eller Robot til dialoger og CDP-kommandoer i Selenium 4 for at indstille sikre downloadstier under automatiseringskørsler.

  • 📤 Uploadmetode: Brug sendKeys() på filinputelementet til at overføre den absolutte filsti uden at klikke på Gennemse.
  • 📥 Downloadsti: Konfigurer en brugerdefineret downloadmappe via ChromeOptions eller CDP Page.setDownloadBehavior i Selenium 4.
  • 🪟 Indfødte dialoger: Udløs AutoIt-scripts eller java.awt.Robot, når OS-filvælgeren blokerer WebDriver fra at interagere.
  • 🤖 AI Assistance: Generativ AI foreslår selektorer, opbygger testdatafiler og validerer automatisk integriteten af ​​downloadede filer.
  • 🛡️ Valideringstjek: Bekræft uploaden via svarmeddelelser, og verificer downloads ved hjælp af filstørrelse eller sammenligning af checksum.

Sådan uploader og downloader du en fil ved hjælp af Selenium

Upload af filer i WebDriver gøres ved blot at bruge sendKeys()-metoden i filvalgsfeltet for at indtaste stien til den fil, der skal uploades. I denne vejledning lærer du, hvordan du håndterer filuploads og -downloads ved hjælp af Selenium WebDriver.

Sådan uploader du en fil Selenium

Til dette afsnit vil vi bruge https://demo.guru99.com/test/upload/ som vores testapplikation. Dette websted giver nemt enhver besøgende mulighed for at uploade filer uden at kræve, at de tilmelder sig.

Upload fil i Selenium
Håndter filupload popup i Selenium Webdriver

Lad os sige, at vi ønsker at uploade filen "C:\newhtml.html". Vores WebDriver-kode skal være som den, der er vist nedenfor.

pakke nyt projekt;
importere org.openqa.selen.*;
importere org.openqa.selenium.firefox.FirefoxChauffører;
offentlig klasse PG9 {
offentligt statisk tomrum hoved(String[] argumenter) {
System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
String baseUrl = “https://demo.guru99.com/test/upload/”;
webdriver chauffør = ny FirefoxChauffør();

driver.get(baseUrl);
WebElement uploadElement = driver.findElement(Af.id("uploadfil_0"));

// indtast filstien i inputfeltet til filvalg
uploadElement.sendKeys("C:\\nyhtml.html");

// marker afkrydsningsfeltet "Jeg accepterer servicevilkårene"
driver.findElement(By.id("betingelser")).klik();

// klik på knappen “Upload fil”
driver.findElement(Efter.navn("sende")).klik();
}
}

Efter at have kørt dette script, bør du være i stand til at uploade filen med succes, og du bør få en meddelelse, der ligner denne.

Upload fil i Selenium

Husk følgende to ting, når du uploader filer i WebDriver:

  1. Der er ingen grund til at simulere klikket på knappen "Gennemse". WebDriver indtaster automatisk filstien i tekstfeltet til filvalg. element.
  2. Når du indstiller filstien i din Java IDE, brug det korrekte escape-tegn til back-slash.

Upload fil i Selenium

Håndtering af uploaddialoger uden input med AutoIt

Når siden bruger en brugerdefineret browse-knap i stedet for en indbygget elementet, sendKeys() virker ikke. I så fald kan du kalde et AutoIt-script fra Selenium for at skrive filstien i OS-dialogboksen og trykke på Enter.

Gem scriptet nedenfor som upload.au3, kompiler den til upload.exe, og kald den derefter fra Java efter at have klikket på knappen Gennemse.

upload.au3 – venter på Åbn-dialogen og skriver filstien
WinWaitAktiv("Åben")
Sende("C:\newhtml.html")
Sende("{INDTAG}")

Fra Java, udløs hjælperen efter klikket på Gennemse:

driver.findElement(By.id("GennemseBtn")).klik();
Runtime.getRuntime().exec(“C:\\AutoIt\\upload.exe”);

java.awt.Robot-klassen er en ren-Java alternativ når AutoIt ikke er tilgængelig, selvom AutoIt er mere pålidelig på Windows fordi den venter på dialogen efter titel.

Sådan downloader du en fil i Selenium Webdriver

WebDriver har ingen mulighed for at få adgang til download-dialogboksene præsenteret af browsere, når du klikker på et downloadlink eller en knap. Vi kan dog omgå disse dialogbokse ved hjælp af et separat program kaldet "wget".

Hvad er Wget?

Wget er et lille og brugervenligt kommandolinjeprogram, der bruges til at automatisere downloads. Grundlæggende vil vi få adgang til Wget fra vores WebDriver-script for at udføre downloadprocessen.

Opsætning af Wget

Trin 1) I dit C-drev skal du oprette en ny mappe og navngive den som "Wget".

Download wget.exe herfra og placer den i den Wget-mappe, du oprettede i trinnet ovenfor.

Opsætning af Wget

Trin 2) Åbn Kør ved at trykke på Windows tast + “R”; skriv “cmd” og klik på OK.

Opsætning af Wget

Skriv kommandoen "cd /" for at flytte til rodmappen.

Opsætning af Wget

Trin 3) Indtast kommandoen for at kontrollere, om den givne opsætning fungerer.

cmd /c C:\\Wget\\wget.exe -PC: –no-check-certificate https://demo.guru99.com/selenium/msgr11us.exe

Opsætning af Wget

Der ser ud til at være et problem med at skrive ind i C-drevet.

Trin 4) Du skal fejlsøge wget-fejlene i kommandolinjen, før du udfører koden ved hjælp af Selenium WebDriver. Disse fejl vil fortsætte i Eclipse og fejlmeddelelserne vil ikke være lige så informative. Det er bedst først at få wget til at virke ved hjælp af kommandolinjen. Hvis det virker i kommandolinjen, vil det helt sikkert virke i Eclipse.

I vores eksempel, som vist i trin 3, er der et problem med at skrive til C-drevet. Lad os ændre downloadplaceringen til D-drevet og kontrollere resultaterne.

cmd /c C:\\Wget\\wget.exe -PD: –no-check-certificate https://demo.guru99.com/selenium/msgr11us.exe

Opsætning af Wget

Messenger blev downloadet.

Før du fortsætter, skal du ikke glemme at slette den downloadede fil.

Brug af WebDriver og Wget

I det følgende eksempel vil vi bruge WebDriver og wget til at downloade en populær chatsoftware kaldet Yahoo MessengerVores base URL skal være https://demo.guru99.com/test/yahoo.html.

Brug af WebDriver og Wget

Trin 1) Importer pakken "java.io.IOException", fordi vi bliver nødt til at fange en IOException senere i trin 4.

Brug af WebDriver og Wget

Trin 2) Brug getAttribute() til at hente "href"-værdien for downloadlinket og gemme den som en String-variabel. I dette tilfælde har vi kaldt variablen "sourceLocation".

Brug af WebDriver og Wget

Trin 3) Opsæt syntaksen for wget ved hjælp af følgende kommando.

Brug af WebDriver og Wget

Trin 4) Start downloadprocessen ved at ringe til wget fra vores WebDriver-kode.

Brug af WebDriver og Wget

For at opsummere det hele kan din WebDriver-kode se ud som den, der er vist nedenfor.

pakke nyt projekt;
importere java.io.IOException;

importere org.openqa.selen.*;
importere org.openqa.selenium.firefox.FirefoxChauffører;
offentlig klasse PG8 {
offentligt statisk tomrum hoved(String[] argumenter) {

System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
String baseUrl = “https://demo.guru99.com/test/yahoo.html”;
webdriver chauffør = ny FirefoxChauffør();

driver.get(baseUrl);
WebElement downloadButton = driver.findElement(Af.id("messenger-download"));
String kildePlacering = downloadButton.getAttribute("href");
String wget_kommando = "cmd /c C:\\Wget\\wget.exe -PD: –ingen-kontrol-certifikat" + kildePlacering;

prøv {
Proces exec = Runtime.getRuntime().exec(wget_command);
int exitVal = exec.waitFor();
System.out.println("Udgangsværdi:" + exitVærdi);
} fangst (Afbrudt undtagelse | IOUndtagelse f.eks.) {
System.out.println(ex.toString());
}
driver.luk();
}
}

Når du har udført denne kode, skal du kontrollere dit D-drev og kontrollere, at Yahoo Messenger installationsprogrammet blev downloadet der.

Brug af WebDriver og Wget

Indstilling af en brugerdefineret downloadsti med Selenium 4 CDP

Selenium 4 afslører Chrome DevTools-protokollen, som giver dig mulighed for at kontrollere browserens downloadadfærd uden tredjepartsværktøjer. Uddraget nedenfor peger alle downloads til en brugerdefineret mappe og springer prompten Gem som over, så filerne lander, hvor testen forventer dem.

ChromeDriver chauffør = ny ChromeDriver();
Kort<String,Object> parametre = ny HashMap<>();
params.put("opførsel", "give lov til");
params.put("Downloadsti", "D:\\selenium-downloads");
driver.executeCdpCommand("Page.setDownloadBehavior", parametre);
chauffør.get(“https://demo.guru99.com/test/yahoo.html”);
driver.findElement(By.id("messenger-download")).klik();

Du kan bekræfte downloadningen ved at afstemme målmappen for det forventede filnavn og kontrollere dens størrelse, hvilket gør testen deterministisk uden eksterne scripts.

Ofte Stillede Spørgsmål

Selenium kalder sendKeys() på element med den absolutte filsti. Browseren udfylder feltet direkte, så ingen OS-filvælger åbnes, og der er ikke behov for at klikke på Gennemse.

Når siden ikke viser et filinput, skal du bruge AutoIt på Windows eller java.awt.Robot-klassen. Disse værktøjer skriver stien i den aktive OS-dialogboks og trykker på Enter, når der er klikket på knappen Gennemse.

Kald executeCdpCommand(“Page.setDownloadBehavior”, params) med adfærd indstillet til allow og downloadPath indstillet til din mappe. Selenium 4 videresender kommandoen til Chrome DevTools, og prompten "Gem som" springes over.

Ja. AI-assistenter læser din uploadformular, foreslår selektorer, genererer grænsefiler som tomme, overdimensionerede eller eksempler med forkert filtypenavn og skriver sendKeys()-blokken. Dette forkorter opsætningstiden og afdækker edge-tilfælde, som menneskelige testere ofte overser.

AI værktøjer afspørg målmappen, sammenlign filstørrelse og kontrolsum med forventede værdier, og markér uoverensstemmelser. Visionmodeller kan endda åbne PDF'er eller billeder og bekræfte, at indhold matcher linketiketten, hvilket fjerner manuel gennemgang fra regressionskørsler.

Wget omgår browseren fuldstændigt og gemmer filen direkte på disken via en kommandolinjeproces. Det er nyttigt på ældre operativsystemer. Selenium 2 eller 3 opsætninger, hvor CDP- og ChromeOptions-downloadindstillinger ikke er tilgængelige.

Opsummer dette indlæg med: