Jak nahrát a stáhnout soubor pomocí Selenium
⚡ Chytré shrnutí
Nahrát a stáhnout soubor pomocí Selenium Pracovní postupy WebDriveru se spoléhají na nativní funkci sendKeys() pro vstupní pole, AutoIt nebo Robot pro dialogy a příkazy CDP v Selenium 4 pro nastavení bezpečných cest stahování během automatizovaných běhů.

Nahrávání souborů ve WebDriveru se provádí jednoduše pomocí metody sendKeys() v poli pro výběr souboru, kde se zadá cesta k souboru, který se má nahrát. V tomto tutoriálu se naučíte, jak pracovat s nahráváním a stahováním souborů pomocí... Selenium WebDriver.
Jak nahrát soubor do Selenium
Pro tuto sekci použijeme https://demo.guru99.com/test/upload/ jako naše testovací aplikace. Tato stránka snadno umožňuje každému návštěvníkovi nahrávat soubory bez nutnosti registrace.

Řekněme, že chceme nahrát soubor „C:\newhtml.html“. Náš kód WebDriver by měl být jako ten, který je zobrazen níže.
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxŘidiči;
veřejná třída PG9 {
veřejná statická prázdnota hlavní(Řetězec[] argumenty) {
System.setProperty(„webdriver.gecko.driver“,„C:\\geckodriver.exe“);
Řetězec základníUrl = „https://demo.guru99.com/test/upload/“;
webový ovladač řidič = nový FirefoxŘidič();
driver.get(základníUrl);
WebElement nahrátElement = driver.findElement(By.id(„uploadfile_0“));
// zadejte cestu k souboru do vstupního pole pro výběr souboru
uploadElement.sendKeys(„C:\\newhtml.html“);
// zaškrtněte políčko „Souhlasím s podmínkami služby“
driver.findElement(By.id("podmínky")).kliknout();
// klikneme na tlačítko „Nahrát soubor“
driver.findElement(Podle.name("poslat")).kliknout();
}
}
Po spuštění tohoto skriptu byste měli být schopni úspěšně nahrát soubor a měli byste dostat zprávu podobnou této.
Při nahrávání souborů do WebDriveru nezapomeňte na následující dvě věci:
- Není třeba simulovat kliknutí na tlačítko „Procházet“. WebDriver automaticky zadá cestu k souboru do textového pole pro výběr souboru v živel.
- Při nastavování cesty k souboru ve vašem Java IDE, použijte správný znak escape pro zpětné lomítko.
Zpracování dialogových oken pro nahrávání bez vstupu pomocí AutoIt
Když stránka používá vlastní tlačítko Procházet místo nativní ikony element, sendKeys() nefunguje. V takovém případě můžete zavolat skript AutoIt z Selenium zadejte cestu k souboru do dialogového okna operačního systému a stiskněte klávesu Enter.
Uložte níže uvedený skript jako upload.au3, zkompilujte to do upload.exe, poté jej vyvolejte z Java po kliknutí na tlačítko Procházet.
WinWaitActive("Otevřeno")
Poslat(„C:\newhtml.html“)
Poslat(„{ENTER}“)
od Java, spustí pomocníka po kliknutí na tlačítko Procházet:
Runtime.getRuntime().exec(„C:\\AutoIt\\upload.exe“);
Třída java.awt.Robot je čistě-Java alternativa, když AutoIt není k dispozici, ačkoli AutoIt je spolehlivější na Windows protože čeká na dialog podle názvu.
Jak stáhnout soubor v Selenium Webdriver
WebDriver nemá žádnou možnost přístupu k dialogovým oknům stahování zobrazí prohlížeče, když kliknete na odkaz nebo tlačítko ke stažení. Tato dialogová okna však můžeme obejít pomocí samostatného programu zvaného „wget“.
Co je Wget?
Wget je malý a snadno použitelný program příkazového řádku používaný k automatizaci stahování. V zásadě přistoupíme k Wgetu z našeho skriptu WebDriver, abychom provedli proces stahování.
Nastavení Wget
Krok 1) Na disku C vytvořte novou složku a pojmenujte ji jako „Wget“.
Stáhněte si wget.exe odtud a umístěte jej do složky Wget, kterou jste vytvořili v předchozím kroku.
Krok 2) Otevřete Spustit stisknutím Windows klávesa + „R“; zadejte „cmd“ a klikněte na OK.
Zadejte příkaz „cd /“ pro přechod do kořenového adresáře.
Krok 3) Zadejte příkaz pro kontrolu, zda dané nastavení funguje.
Zdá se, že došlo k problému se zápisem na jednotku C.
Krok 4) Před spuštěním kódu pomocí je třeba v příkazovém řádku ladit chyby wgetu. Selenium WebDriver. Tyto chyby budou přetrvávat v Eclipse a chybové zprávy nebudou tak informativní. Nejlepší je nejprve spustit wget pomocí příkazového řádku. Pokud to funguje v příkazovém řádku, bude to určitě fungovat i v Eclipse.
V našem příkladu, jak je znázorněno v kroku 3, je problém se zápisem na disk C. Změňme umístění stahování na disk D a podívejme se na výsledky.
Messenger byl úspěšně stažen.
Než budete pokračovat, nezapomeňte smazat stažený soubor.
Pomocí WebDriver a Wget
V následujícím příkladu použijeme WebDriver a wget ke stažení oblíbeného chatovacího softwaru s názvem Yahoo MessengerNaše základna URL bude https://demo.guru99.com/test/yahoo.html.
Krok 1) Importujte balíček „java.io.IOException“, protože později v kroku 4 budeme muset zachytit IOException.
Krok 2) Pomocí funkce getAttribute() získáte hodnotu „href“ odkazu ke stažení a uložíte ji jako proměnnou typu String. V tomto případě jsme proměnnou pojmenovali „sourceLocation“.
Krok 3) Nastavte syntaxi pro wget pomocí následujícího příkazu.
Krok 4) Spusťte proces stahování voláním wget z našeho kódu WebDriver.
Abych to všechno shrnul, váš kód WebDriver by mohl vypadat jako ten, který je zobrazen níže.
import java.io.IOException;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxŘidiči;
veřejná třída PG8 {
veřejná statická prázdnota hlavní(Řetězec[] argumenty) {
System.setProperty(„webdriver.gecko.driver“,„C:\\geckodriver.exe“);
Řetězec základníUrl = „https://demo.guru99.com/test/yahoo.html“;
webový ovladač řidič = nový FirefoxŘidič();
driver.get(základníUrl);
WebElement downloadButton = driver.findElement(By.id(„stažení z aplikace Messenger“));
Řetězec sourceLocation = downloadButton.getAttribute(„href“);
Řetězec wget_command = „cmd /c C:\\Wget\\wget.exe -PD: –no-check-certificate“ + zdrojUmístění;
vyzkoušet {
Proces exec = Runtime.getRuntime().exec(wget_command);
int exitVal = exec.waitFor();
System.out.println(„Výstupní hodnota:“ + exitVal);
} úlovek (Přerušená výjimka | IOException např.) {
System.out.println(např.toString());
}
řidič.close();
}
}
Po provedení tohoto kódu zkontrolujte svůj disk D a ověřte, že Yahoo Messenger tam byl úspěšně stažen instalační program.
Nastavení vlastní cesty pro stahování pomocí Selenium 4 CDP
Selenium Verze 4 zpřístupňuje protokol Chrome DevTools, který umožňuje ovládat chování stahování v prohlížeči bez nástrojů třetích stran. Následující úryvek kódu přesměruje všechna stahování do vlastní složky a přeskakuje výzvu Uložit jako, takže soubory se dostanou tam, kde je test očekává.
Mapa<Řetězec,Objekt> parametry = nový HashMap<>();
params.vložit("chování", "dovolit");
params.vložit(„Cesta ke stažení“, „D:\\selenium-downloads“);
ovladač.executeCdpCommand(„Chování při stahování stránky“, parametry);
ovladač.get(„https://demo.guru99.com/test/yahoo.html“);
driver.findElement(By.id(„stažení z aplikace Messenger“)).kliknout();
Stažení můžete ověřit dotazováním cílového adresáře na očekávaný název souboru a kontrolou jeho velikosti, což test činí deterministickým bez externích skriptů.












