Een bestand uploaden en downloaden met behulp van Selenium
โก Slimme samenvatting
Bestanden uploaden en downloaden met Selenium WebDriver-workflows maken gebruik van de native sendKeys()-functie voor invoervelden, AutoIt of Robot voor dialoogvensters en CDP-opdrachten in Selenium 4. Stel veilige downloadpaden in tijdens automatiseringsprocessen.
Het uploaden van bestanden in WebDriver is heel eenvoudig: gebruik de `sendKeys()`-methode op het `file-select`-invoerveld om het pad van het te uploaden bestand in te voeren. In deze handleiding leer je hoe je bestanden kunt uploaden en downloaden met WebDriver. Selenium Webstuurprogramma.
Hoe u een bestand uploadt Selenium
Voor dit gedeelte zullen we gebruiken https://demo.guru99.com/test/upload/ als onze testapplicatie. Op deze site kan elke bezoeker gemakkelijk bestanden uploaden zonder dat hij zich hoeft aan te melden.

Stel dat we het bestand โC:\newhtml.htmlโ willen uploaden. Onze WebDriver-code zou eruit moeten zien zoals hieronder weergegeven.
importeren org.openqa.selenium.*;
importeren org.openqa.selenium.firefox.FirefoxChauffeurs;
openbare klasse PG9 {
openbare statische leegte hoofd(Draad[] args) {
System.setProperty(โwebdriver.gecko.driverโ,โC:\\geckodriver.exeโ);
Draad basis-URL = โhttps://demo.guru99.com/test/upload/โ;
webdriver bestuurder = nieuwe FirefoxBestuurder();
driver.get(baseUrl);
WebElement uploadElement = driver.findElement(By.id(โuploadfile_0โ));
// Voer het bestandspad in het invoerveld voor bestandsselectie in.
uploadElement.sendKeys(โC:\\newhtml.htmlโ);
// Vink het vakje "Ik ga akkoord met de servicevoorwaarden" aan.
driver.findElement(By.id("voorwaarden")).klik();
// Klik op de knop "Bestand uploaden"
driver.findElement(By.name("versturen")).klik();
}
}
Nadat u dit script hebt uitgevoerd, zou u het bestand met succes moeten kunnen uploaden en zou u een soortgelijk bericht moeten krijgen.
Houd rekening met de volgende twee dingen wanneer u bestanden uploadt in WebDriver:
- Het is niet nodig om het klikken op de knop "Bladeren" te simuleren. WebDriver vult het bestandspad automatisch in het tekstvak voor bestandsselectie in. element.
- Bij het instellen van het bestandspad in uw Java IDE, gebruik het juiste escape-teken voor de back-slash.
Het afhandelen van uploaddialoogvensters zonder invoerveld met AutoIt.
Wanneer de pagina een aangepaste Bladeren-knop gebruikt in plaats van een standaardknop. Als de functie `sendKeys()` niet werkt, kunt u in dat geval een AutoIt-script aanroepen vanuit het element. Selenium Typ het bestandspad in het dialoogvenster van het besturingssysteem en druk op Enter.
Sla het onderstaande script op als upload.au3compileer het naar upload.exeroep het vervolgens aan vanuit Java na het klikken op de knop Bladeren.
WinWaitActive("Open")
Versturen(โC:\newhtml.htmlโ)
Versturen("{BINNENKOMEN}")
Vanaf JavaActiveer de helper na de klik op Bladeren:
Runtime.getRuntime().exec(โC:\\AutoIt\\upload.exeโ);
De klasse java.awt.Robot is een pure-Java alternatief wanneer AutoIt niet beschikbaar is, hoewel AutoIt betrouwbaarder is op Windows omdat het wacht op het dialoogvenster op basis van de titel.
Een bestand downloaden in Selenium Webstuurprogramma
WebDriver heeft geen mogelijkheid om toegang te krijgen tot de dialoogvensters Downloaden gepresenteerd door browsers wanneer u op een downloadlink of -knop klikt. We kunnen deze dialoogvensters echter omzeilen met een apart programma genaamd "wget".
Wat is Wget?
Wget is een klein en eenvoudig te gebruiken opdrachtregelprogramma dat wordt gebruikt om downloads te automatiseren. Kortom, we hebben toegang tot Wget vanuit ons WebDriver-script om het downloadproces uit te voeren.
Wget instellen
Stap 1) Maak in uw C-schijf een nieuwe map en noem deze "Wget".
Wget.exe downloaden vanaf hier en plaats het in de Wget-map die je in de vorige stap hebt aangemaakt.
Stap 2) Open Run door op te drukken Windows Druk op de toets + "R"; typ "cmd" in en klik op OK.
Typ het commando "cd /" in om naar de hoofdmap te gaan.
Stap 3) Voer de opdracht in om te controleren of de opgegeven configuratie werkt.
Er lijkt een probleem te zijn bij het schrijven naar de C-schijf.
Stap 4) Je moet de wget-fouten in de opdrachtregel debuggen voordat je de code uitvoert. Selenium WebDriver. Deze fouten blijven zich voordoen in Eclipse En de foutmeldingen zullen minder informatief zijn. Het is het beste om wget eerst via de commandoregel aan de praat te krijgen. Als het via de commandoregel werkt, werkt het zeker ook via de commandoregel. Eclipse.
In ons voorbeeld, zoals getoond in stap 3, is er een probleem met het schrijven naar de C-schijf. Laten we de downloadlocatie wijzigen naar de D-schijf en het resultaat controleren.
Messenger is succesvol gedownload.
Voordat u verdergaat, vergeet niet het gedownloade bestand te verwijderen.
Gebruik WebDriver en Wget
In het volgende voorbeeld gebruiken we WebDriver en wget om een โโpopulaire chatsoftware genaamd Yahoo te downloaden MessengerOnze basis URL zal zijn https://demo.guru99.com/test/yahoo.html.
Stap 1) Importeer het pakket โjava.io.IOExceptionโ omdat we later in stap 4 een IOException moeten opvangen.
Stap 2) Gebruik getAttribute() om de "href"-waarde van de downloadlink te verkrijgen en sla deze op als een String-variabele. In dit geval hebben we de variabele "sourceLocation" genoemd.
Stap 3) Stel de syntaxis voor wget in met behulp van de volgende opdracht.
Stap 4) Start het downloadproces door wget aan te roepen vanuit onze WebDriver-code.
Samenvattend kan uw WebDriver-code er uitzien zoals hieronder weergegeven.
importeren java.io.IOException;
importeren org.openqa.selenium.*;
importeren org.openqa.selenium.firefox.FirefoxChauffeurs;
openbare klasse PG8 {
openbare statische leegte hoofd(Draad[] args) {
System.setProperty(โwebdriver.gecko.driverโ,โC:\\geckodriver.exeโ);
Draad basis-URL = โhttps://demo.guru99.com/test/yahoo.htmlโ;
webdriver bestuurder = nieuwe FirefoxBestuurder();
driver.get(baseUrl);
WebElement downloadButton = driver.findElement(By.id(โmessenger-downloadโ));
Draad sourceLocation = downloadButton.getAttribute(โhrefโ);
Draad wget_command = โcmd /c C:\\Wget\\wget.exe -PD: โno-check-certificate โ + bronlocatie;
proberen {
Proces exec = Runtime.getRuntime().exec(wget_command);
int exitVal = exec.waitFor();
Systeem.uit.println(โUitgangswaarde: โ + exitVal);
} vangst (OnderbrokenUitzondering | IOUitzondering ex) {
System.out.println(ex.toString());
}
driver.close();
}
}
Nadat u deze code hebt uitgevoerd, controleert u uw D-schijf en verifieert u dat Yahoo Messenger installatieprogramma is daar succesvol gedownload.
Een aangepast downloadpad instellen met Selenium 4 CDP
Selenium Paragraaf 4 legt het Chrome DevTools-protocol bloot, waarmee je het downloadgedrag van de browser kunt beheren zonder tools van derden. Het onderstaande codefragment verwijst alle downloads naar een aangepaste map en slaat de prompt 'Opslaan als' over, zodat bestanden op de verwachte locatie terechtkomen.
Wereldmap<Draad,Object> parameters = nieuwe HashMap<>();
params.put("gedrag", "toestaan");
params.put(โdownloadPathโ, โD:\\selenium-downloadsโ);
driver.executeCdpCommand(โPage.setDownloadBehaviorโ, parameters);
driver.get(โhttps://demo.guru99.com/test/yahoo.htmlโ);
driver.findElement(By.id(โmessenger-downloadโ)).klik();
Je kunt de download verifiรซren door de doeldirectory te controleren op de verwachte bestandsnaam en de bestandsgrootte te bekijken. Dit maakt de test deterministisch zonder externe scripts.













