Hvordan laste opp og laste ned en fil ved hjelp av Selenium

โšก Smart oppsummering

Last opp og last ned fil ved hjelp av Selenium WebDriver-arbeidsflyter er avhengige av innebygde sendKeys() for inndatafelt, AutoIt eller Robot for dialoger og CDP-kommandoer i Selenium 4 for รฅ angi sikre nedlastingsstier under automatiseringskjรธringer.

  • ๐Ÿ“ค Opplastingsmetode: Bruk sendKeys() pรฅ filinput-elementet for รฅ sende den absolutte filbanen uten รฅ klikke pรฅ Bla gjennom.
  • ๐Ÿ“ฅ Nedlastingssti: Konfigurer en egendefinert nedlastingskatalog via ChromeOptions eller CDP Page.setDownloadBehavior i Selenium 4.
  • ๐ŸชŸ Innfรธdte dialoger: Utlรธs AutoIt-skript eller java.awt.Robot nรฅr OS-filvelgeren blokkerer WebDriver fra รฅ samhandle.
  • ๐Ÿค– AI-hjelp: Generativ AI foreslรฅr selektorer, bygger testdatafiler og validerer integriteten til nedlastede filer automatisk.
  • ๐Ÿ›ก๏ธ Valideringssjekk: Bekreft at opplastingen er vellykket via svarmeldinger, og bekreft nedlastinger ved hjelp av filstรธrrelses- eller sjekksumsammenligning.

Hvordan laste opp og laste ned en fil ved hjelp av Selenium

Opplasting av filer i WebDriver gjรธres ganske enkelt ved รฅ bruke sendKeys()-metoden i filvalgfeltet for รฅ angi banen til filen som skal lastes opp. I denne veiledningen lรฆrer du hvordan du hรฅndterer filopplastinger og -nedlastinger ved hjelp av Selenium WebDriver.

Hvordan laste opp fil i Selenium

For denne delen vil vi bruke https://demo.guru99.com/test/upload/ som vรฅr testapplikasjon. Denne siden lar alle besรธkende enkelt laste opp filer uten at de trenger รฅ registrere seg.

Last opp fil i Selenium
Hรฅndter filopplasting popup i Selenium Webdriver

La oss si at vi รธnsker รฅ laste opp filen "C:\newhtml.html". Vรฅr WebDriver-kode skal vรฆre som den som vises nedenfor.

pakke nytt prosjekt;
importere org.openqa.selen.*;
importere org.openqa.selenium.firefox.FirefoxDrivere;
offentlig klasse PG9 {
offentlig statisk tomrom hoved(String[] argumenter) {
System.setProperty(ยซwebdriver.gecko.driverยป,ยซC:\\geckodriver.exeยป);
String baseUrl = ยซhttps://demo.guru99.com/test/upload/ยป;
webdriver sjรฅfรธr = nytt FirefoxSjรฅfรธr();

driver.get(baseUrl);
WebElement uploadElement = driver.findElement(Av.id(ยซopplastingsfil_0ยป));

// skriv inn filbanen i filvalgfeltet
uploadElement.sendKeys(ยซC:\\nyhtml.htmlยป);

// kryss av i boksen ยซJeg godtar tjenestevilkรฅreneยป
driver.finnElement(Av.id("vilkรฅr")).klikk();

// klikk pรฅ knappen ยซLast opp filยป
driver.finnElement(Etter.navn("sende")).klikk();
}
}

Etter รฅ ha kjรธrt dette skriptet, bรธr du vรฆre i stand til รฅ laste opp filen, og du bรธr fรฅ en melding som ligner pรฅ denne.

Last opp fil i Selenium

Husk fรธlgende to ting nรฅr du laster opp filer i WebDriver:

  1. Det er ikke nรธdvendig รฅ simulere klikket pรฅ ยซBla gjennomยป-knappen. WebDriver skriver automatisk inn filbanen i tekstboksen for filvalg. element.
  2. Nรฅr du angir filbanen i din Java IDE, bruk det riktige escape-tegnet for back-slash.

Last opp fil i Selenium

Hรฅndtering av opplastingsdialoger uten input med AutoIt

Nรฅr siden bruker en tilpasset Bla gjennom-knapp i stedet for en innebygd knapp elementet, sendKeys() fungerer ikke. I sรฅ fall kan du kalle et AutoIt-skript fra Selenium for รฅ skrive inn filbanen i OS-dialogboksen og trykk Enter.

Lagre skriptet nedenfor som upload.au3, kompiler den til upload.exe, og deretter kalle den opp fra Java etter รฅ ha klikket pรฅ Bla gjennom-knappen.

upload.au3 โ€“ venter pรฅ ร…pne-dialogen og skriver inn filbanen
VinnVentAktiv("ร…pen")
Sende(ยซC:\newhtml.htmlยป)
Sende("{Gร…}")

Fra Java, utlรธs hjelperen etter Bla gjennom-klikket:

driver.finnElement(Av.id(ยซBla gjennom Btnยป)).klikk();
Runtime.getRuntime().exec(ยซC:\\AutoIt\\upload.exeยป);

java.awt.Robot-klassen er en ren-Java alternativ nรฅr AutoIt ikke er tilgjengelig, selv om AutoIt er mer pรฅlitelig pรฅ Windows fordi den venter pรฅ dialogen etter tittel.

Hvordan laste ned en fil i Selenium Webdriver

WebDriver har ingen mulighet til รฅ fรฅ tilgang til nedlastingsdialogboksene presentert av nettlesere nรฅr du klikker pรฅ en nedlastingslenke eller -knapp. Imidlertid kan vi omgรฅ disse dialogboksene ved รฅ bruke et eget program kalt "wget".

Hva er Wget?

Wget er et lite og brukervennlig kommandolinjeprogram som brukes til รฅ automatisere nedlastinger. I utgangspunktet vil vi fรฅ tilgang til Wget fra WebDriver-skriptet vรฅrt for รฅ utfรธre nedlastingsprosessen.

Setter opp Wget

Trinn 1) I C Drive, opprett en ny mappe og navngi den som "Wget".

Last ned wget.exe herfra og plasser den i Wget-mappen du opprettet i trinnet ovenfor.

Setter opp Wget

Trinn 2) ร…pne Kjรธr ved รฅ trykke pรฅ Windows tast + ยซRยป; skriv inn ยซcmdยป og klikk OK.

Setter opp Wget

Skriv inn kommandoen ยซcd /ยป for รฅ flytte til rotkatalogen.

Setter opp Wget

Trinn 3) Skriv inn kommandoen for รฅ sjekke om det gitte oppsettet fungerer.

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

Setter opp Wget

Det ser ut til รฅ vรฆre et problem รฅ skrive inn i C-stasjonen.

Trinn 4) Du mรฅ feilsรธke wget-feilene i kommandolinjen fรธr du kjรธrer koden ved hjelp av Selenium WebDriver. Disse feilene vil vedvare i Eclipse og feilmeldingene vil ikke vรฆre like informative. Det er best รฅ fรธrst fรฅ wget til รฅ fungere ved hjelp av kommandolinjen. Hvis det fungerer i kommandolinjen, vil det definitivt fungere i Eclipse.

I vรฅrt eksempel, som vist i trinn 3, er det et problem med รฅ skrive til C-stasjonen. La oss endre nedlastingsstedet til D-stasjonen og sjekke resultatene.

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

Setter opp Wget

Messenger ble lastet ned.

Fรธr du gรฅr videre, ikke glem รฅ slette den nedlastede filen.

Bruker WebDriver og Wget

I det fรธlgende eksempelet vil vi bruke WebDriver og wget for รฅ laste ned en populรฆr chatprogramvare kalt Yahoo MessengerVรฅr base URL skal vรฆre https://demo.guru99.com/test/yahoo.html.

Bruker WebDriver og Wget

Trinn 1) Importer "java.io.IOException"-pakken fordi vi mรฅ fange et IOException senere i trinn 4.

Bruker WebDriver og Wget

Trinn 2) Bruk getAttribute() for รฅ hente ยซhrefยป-verdien til nedlastingslenken og lagre den som en strengvariabel. I dette tilfellet kalte vi variabelen ยซsourceLocationยป.

Bruker WebDriver og Wget

Trinn 3) Sett opp syntaksen for wget ved รฅ bruke fรธlgende kommando.

Bruker WebDriver og Wget

Trinn 4) Start nedlastingsprosessen ved รฅ ringe wget fra vรฅr WebDriver-kode.

Bruker WebDriver og Wget

For รฅ oppsummere det hele, kan WebDriver-koden din se ut som den som vises nedenfor.

pakke nytt prosjekt;
importere java.io.IOException;

importere org.openqa.selen.*;
importere org.openqa.selenium.firefox.FirefoxDrivere;
offentlig klasse PG8 {
offentlig statisk tomrom hoved(String[] argumenter) {

System.setProperty(ยซwebdriver.gecko.driverยป,ยซC:\\geckodriver.exeยป);
String baseUrl = ยซhttps://demo.guru99.com/test/yahoo.htmlยป;
webdriver sjรฅfรธr = nytt FirefoxSjรฅfรธr();

driver.get(baseUrl);
WebElement nedlastingsknapp = driver.finnElement(Av.id(ยซMessenger-nedlastingยป));
String kildePlasering = downloadButton.getAttribute(ยซhrefยป);
String wget_kommando = "cmd /c C:\\Wget\\wget.exe -PD: โ€“ingen-sjekk-sertifikat" + kildeSted;

prรธve {
Prosess exec = Runtime.getRuntime().exec(wget_command);
int exitVal = exec.waitFor();
System.out.println("Utgangsverdi:" + exitVal);
} รฅ fange (AvbruttUntak | IO Unntak f.eks.) {
System.out.println(ex.toString());
}
sjรฅfรธr.lukk();
}
}

Etter รฅ ha utfรธrt denne koden, kontroller D-stasjonen og kontroller at Yahoo Messenger installasjonsprogrammet ble lastet ned der.

Bruker WebDriver og Wget

Angi en tilpasset nedlastingssti med Selenium 4 CDP

Selenium 4 eksponerer Chrome DevTools-protokollen, som lar deg kontrollere nedlastingsatferden i nettleseren uten tredjepartsverktรธy. Kodeutdraget nedenfor peker alle nedlastinger til en egendefinert mappe og hopper over Lagre som-ledeteksten, slik at filene havner der testen forventer dem.

ChromeDriver sjรฅfรธr = nytt ChromeDriver();
kart<String,Objekt> parametere = nytt HashMap<>();
params.put("oppfรธrsel", "tillate");
params.put(ยซnedlastingsstiยป, ยซD:\\selen-nedlastingerยป);
driver.executeCdpCommand(ยซPage.setDownloadBehaviorยป, parametere);
sjรฅfรธr.get(ยซhttps://demo.guru99.com/test/yahoo.htmlยป);
driver.finnElement(Av.id(ยซMessenger-nedlastingยป)).klikk();

Du kan bekrefte nedlastingen ved รฅ avstemme mรฅlkatalogen for det forventede filnavnet og sjekke stรธrrelsen, noe som gjรธr testen deterministisk uten eksterne skript.

Spรธrsmรฅl og svar

Selenium kaller sendKeys() pรฅ element med den absolutte filbanen. Nettleseren fyller ut feltet direkte, sรฅ ingen OS-filvelger รฅpnes og det er ikke nรธdvendig รฅ klikke pรฅ Bla gjennom.

Nรฅr siden ikke viser en filinndata, bruk AutoIt pรฅ Windows eller java.awt.Robot-klassen. Disse verktรธyene skriver inn banen i den aktive OS-dialogboksen og trykker Enter nรฅr du har klikket pรฅ Bla gjennom-knappen.

Kall executeCdpCommand(โ€œPage.setDownloadBehaviorโ€, params) med virkemรฅten satt til allow og downloadPath satt til mappen din. Selenium 4 videresender kommandoen til Chrome DevTools, og Lagre som-ledeteksten hoppes over.

Ja. AI-assistenter leser opplastingsskjemaet ditt, foreslรฅr selektorer, genererer grensefiler som tomme, overdimensjonerte eller feil filtype-eksempler, og skriver sendKeys()-blokken. Dette forkorter oppsetttiden og avdekker kanttilfeller som menneskelige testere ofte overser.

AI verktรธy avspรธrre mรฅlmappen, sammenligne filstรธrrelse og sjekksum med forventede verdier, og flagge avvik. Visjonsmodeller kan til og med รฅpne PDF-er eller bilder og bekrefte at innhold samsvarer med lenkeetiketten, og dermed fjerne manuell gjennomgang fra regresjonskjรธringer.

Wget omgรฅr nettleseren fullstendig og lagrer filen direkte til disk via en kommandolinjeprosess. Det er nyttig pรฅ eldre operativsystemer. Selenium 2 eller 3 oppsett der nedlastingsinnstillingene for CDP og ChromeOptions ikke er tilgjengelige.

Oppsummer dette innlegget med: