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.

  • ๐Ÿ“ค Uploadmethode: Gebruik sendKeys() op het bestandsinvoerelement om het absolute bestandspad door te geven zonder op Bladeren te klikken.
  • ๐Ÿ“ฅ Downloadpad: Configureer een aangepaste downloadmap via ChromeOptions of CDP Page.setDownloadBehavior in Selenium 4.
  • ๐ŸชŸ Moedertaaldialogen: Activeer AutoIt-scripts of java.awt.Robot wanneer de bestandsselector van het besturingssysteem de interactie met WebDriver blokkeert.
  • ๐Ÿค– AI-assistentie: Generatieve AI suggereert selectiecriteria, bouwt testgegevensbestanden op en valideert automatisch de integriteit van gedownloade bestanden.
  • ๐Ÿ›ก๏ธ Validatiecontrole: Bevestig het succes van de upload via de reactieberichten en verifieer de downloads door de bestandsgrootte of de checksum te vergelijken.

Een bestand uploaden en downloaden met behulp van Selenium

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.

Bestand uploaden Selenium
Behandel de pop-up voor het uploaden van bestanden in Selenium Webstuurprogramma

Stel dat we het bestand โ€œC:\newhtml.htmlโ€ willen uploaden. Onze WebDriver-code zou eruit moeten zien zoals hieronder weergegeven.

pakket nieuw project;
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.

Bestand uploaden Selenium

Houd rekening met de volgende twee dingen wanneer u bestanden uploadt in WebDriver:

  1. 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.
  2. Bij het instellen van het bestandspad in uw Java IDE, gebruik het juiste escape-teken voor de back-slash.

Bestand uploaden Selenium

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.

; upload.au3 โ€“ wacht op het dialoogvenster 'Openen' en typt het bestandspad in.
WinWaitActive("Open")
Versturen(โ€œC:\newhtml.htmlโ€)
Versturen("{BINNENKOMEN}")

Vanaf JavaActiveer de helper na de klik op Bladeren:

driver.findElement(By.id(โ€œbrowseBtnโ€)).klik();
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.

Wget instellen

Stap 2) Open Run door op te drukken Windows Druk op de toets + "R"; typ "cmd" in en klik op OK.

Wget instellen

Typ het commando "cd /" in om naar de hoofdmap te gaan.

Wget instellen

Stap 3) Voer de opdracht in om te controleren of de opgegeven configuratie werkt.

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

Wget instellen

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.

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

Wget instellen

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.

Gebruik WebDriver en Wget

Stap 1) Importeer het pakket โ€œjava.io.IOExceptionโ€ omdat we later in stap 4 een IOException moeten opvangen.

Gebruik WebDriver en Wget

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.

Gebruik WebDriver en Wget

Stap 3) Stel de syntaxis voor wget in met behulp van de volgende opdracht.

Gebruik WebDriver en Wget

Stap 4) Start het downloadproces door wget aan te roepen vanuit onze WebDriver-code.

Gebruik WebDriver en Wget

Samenvattend kan uw WebDriver-code er uitzien zoals hieronder weergegeven.

pakket nieuw project;
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.

Gebruik WebDriver en Wget

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.

ChromeDriver bestuurder = nieuwe Chrome-stuurprogramma();
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.

Veelgestelde vragen

Selenium roept sendKeys() aan op de Een element met het absolute bestandspad. De browser vult het veld direct in, waardoor er geen bestandsselector van het besturingssysteem wordt geopend en er niet op 'Bladeren' hoeft te worden geklikt.

Als de pagina geen bestandsinvoerveld biedt, gebruik dan AutoIt. Windows of de klasse java.awt.Robot. Deze tools typen het pad in het dialoogvenster van het actieve besturingssysteem en drukken op Enter nadat op de knop Bladeren is geklikt.

Roep executeCdpCommand(โ€œPage.setDownloadBehaviorโ€, params) aan met behavior ingesteld op allow en downloadPath ingesteld op uw map. Selenium 4 stuurt de opdracht door naar Chrome DevTools en de prompt 'Opslaan als' wordt overgeslagen.

Ja. AI-assistenten lezen je uploadformulier, stellen selectors voor, genereren grensgevallen zoals lege, te grote of bestanden met een verkeerde extensie, en schrijven het sendKeys()-blok. Dit verkort de insteltijd en brengt uitzonderlijke gevallen aan het licht die menselijke testers vaak over het hoofd zien.

AI-hulpmiddelen De modellen controleren de doelfolder, vergelijken de bestandsgrootte en de checksum met de verwachte waarden en signaleren eventuele afwijkingen. Vision-modellen kunnen zelfs pdf's of afbeeldingen openen en bevestigen dat de inhoud overeenkomt met het linklabel, waardoor handmatige controle bij regressietests overbodig wordt.

Wget omzeilt de browser volledig en slaat het bestand rechtstreeks op de schijf op via een opdrachtregelproces. Het is handig op oudere systemen. Selenium 2 of 3 configuraties waarbij de downloadvoorkeuren van CDP en ChromeOptions niet beschikbaar zijn.

Vat dit bericht samen met: