Как да качите и изтеглите файл с помощта на Selenium
⚡ Умно обобщение
Качване и изтегляне на файл с помощта на Selenium Работните процеси на WebDriver разчитат на вградената функция sendKeys() за полета за въвеждане, AutoIt или Robot за диалози и CDP команди в Selenium 4 за задаване на безопасни пътища за изтегляне по време на автоматизирани изпълнения.
Качването на файлове в WebDriver се извършва чрез използване на метода sendKeys() в полето за въвеждане на файл, за да се въведе пътя до файла, който ще бъде качен. В този урок ще научите как да се справяте с качването и изтеглянето на файлове, използвайки Selenium WebDriver.
Как да качите файл в Selenium
За този раздел ще използваме https://demo.guru99.com/test/upload/ като нашето тестово приложение. Този сайт позволява лесно на всеки посетител да качва файлове, без да е необходимо да се регистрира.

Да кажем, че искаме да качим файла „C:\newhtml.html“. Нашият код на WebDriver трябва да бъде като този, показан по-долу.
внос org.openqa.selenium.*;
внос org.openqa.selenium.firefox.FirefoxШофьори;
обществена класа PG9 {
публична статична празнота основен(Низ[] аргументи) {
System.setProperty(„webdriver.gecko.driver“,„C:\\geckodriver.exe“);
Низ базов URL адрес = „https://demo.guru99.com/test/upload/“;
уебдрайвер шофьор = на нови FirefoxШофьор();
драйвер.get(базовUrl);
УебЕлемент качванеЕлемент = driver.findElement(By.id(„uploadfile_0“));
// въведете пътя до файла в полето за въвеждане на файл
uploadElement.sendKeys(„C:\\новhtml.html“);
// поставете отметка в квадратчето „Приемам условията за ползване“
driver.findElement(By.id(„термини“)).щракване();
// щракнете върху бутона „Качване на файл“
driver.findElement(By.name(„изпрати“)).щракване();
}
}
След като стартирате този скрипт, трябва да можете да качите файла успешно и трябва да получите съобщение, подобно на това.
Запомнете следните две неща, когато качвате файлове в WebDriver:
- Няма нужда да се симулира щракването върху бутона „Преглед“. WebDriver автоматично въвежда пътя до файла в текстовото поле за избор на файл на елемент.
- Когато задавате пътя на файла във вашия Java IDE, използвайте правилния екраниращ знак за обратната наклонена черта.
Обработка на диалози за качване без входни данни с AutoIt
Когато страницата използва персонализиран бутон за преглед, а не оригинален бутон елемент, sendKeys() не работи. В този случай можете да извикате AutoIt скрипт от Selenium да въведете пътя до файла в диалоговия прозорец на операционната система и да натиснете Enter.
Запазете скрипта по-долу като качване.au3, компилирайте го в качване.exe, след което го извикайте от Java след като щракнете върху бутона „Преглед“.
WinWaitActive(„Отваряне“)
Изпрати(„C:\newhtml.html“)
Изпрати(„{ВЪВЕЖДАЙ}“)
От Java, задействайте помощника след щракване върху „Преглед“:
Runtime.getRuntime().exec(„C:\\AutoIt\\upload.exe“);
Класът java.awt.Robot е чисто-Java алтернатива, когато AutoIt не е наличен, въпреки че AutoIt е по-надежден на Windows защото чака диалоговия прозорец по заглавие.
Как да изтеглите файл в Selenium Уебдрайвер
WebDriver няма възможност за достъп до диалоговите прозорци за изтегляне представени от браузърите, когато щракнете върху връзка или бутон за изтегляне. Въпреки това можем да заобиколим тези диалогови прозорци с помощта на отделна програма, наречена „wget“.
Какво е Wget?
Wget е малка и лесна за използване програма от команден ред, използвана за автоматизиране на изтеглянията. По принцип ще имаме достъп до Wget от нашия скрипт WebDriver, за да извършим процеса на изтегляне.
Настройване на Wget
Стъпка 1) Във вашия C диск създайте нова папка и я наименувайте като „Wget“.
Изтеглете wget.exe оттук и го поставете в папката Wget, която създадохте в горната стъпка.
Стъпка 2) Отворете „Изпълнение“, като натиснете Windows клавиш + „R“; въведете „cmd“ и щракнете върху OK.
Въведете командата „cd /“, за да се преместите в главната директория.
Стъпка 3) Въведете командата, за да проверите дали дадената настройка работи.
Изглежда има проблем при запис в C устройство.
Стъпка 4) Трябва да отстраните грешките на wget в командния ред, преди да изпълните кода, използвайки Selenium WebDriver. Тези грешки ще се запазят в Eclipse и съобщенията за грешки няма да бъдат толкова информативни. Най-добре е първо да накарате wget да работи, използвайки командния ред. Ако работи в командния ред, определено ще работи и в Eclipse.
В нашия пример, както е показано в стъпка 3, има проблем със записа на C устройство. Нека променим мястото за изтегляне на D устройство и да проверим резултатите.
Messenger беше изтеглен успешно.
Преди да продължите, не забравяйте да изтриете изтегления файл.
Използване на WebDriver и Wget
В следващия пример ще използваме WebDriver и wget, за да изтеглим популярен софтуер за чат, наречен Yahoo MessengerНашата база URL ще бъде https://demo.guru99.com/test/yahoo.html.
Стъпка 1) Импортирайте пакета „java.io.IOException“, защото ще трябва да хванем IOException по-късно в стъпка 4.
Стъпка 2) Използвайте getAttribute(), за да получите стойността „href“ на връзката за изтегляне и да я запишете като променлива тип String. В този случай сме нарекли променливата „sourceLocation“.
Стъпка 3) Настройте синтаксиса за wget, като използвате следната команда.
Стъпка 4) Започнете процеса на изтегляне, като извикате wget от нашия код на WebDriver.
За да обобщим всичко, вашият WebDriver код може да изглежда като този, показан по-долу.
внос java.io.IOException;
внос org.openqa.selenium.*;
внос org.openqa.selenium.firefox.FirefoxШофьори;
обществена класа PG8 {
публична статична празнота основен(Низ[] аргументи) {
System.setProperty(„webdriver.gecko.driver“,„C:\\geckodriver.exe“);
Низ базов URL адрес = „https://demo.guru99.com/test/yahoo.html“;
уебдрайвер шофьор = на нови FirefoxШофьор();
драйвер.get(базовUrl);
УебЕлемент изтеглянеБутон = driver.findElement(By.id(„изтегляне от messenger“));
Низ МестоположениеНаИзточник = бутонЗаИзтегляне.getAttribute(„href“);
Низ wget_command = „cmd /c C:\\Wget\\wget.exe -PD: –no-check-certificate“ + източникМестоположение;
опитвам {
Процес exec = Runtime.getRuntime().exec(wget_command);
Int изходVal = exec.waitFor();
System.out.println(„Изходна стойност:“ + изходVal);
} улов (InterruptException | IOException напр.) {
System.out.println(напр.toString());
}
драйвер.затвори();
}
}
След като изпълните този код, проверете вашето D устройство и се уверете, че Yahoo Messenger инсталаторът беше изтеглен успешно там.
Задаване на персонализиран път за изтегляне с Selenium 4 CDP
Selenium Версия 4 предоставя протокола Chrome DevTools, който ви позволява да контролирате поведението на изтеглянето в браузъра без инструменти на трети страни. Фрагментът по-долу насочва всички изтегляния към персонализирана папка и пропуска подканата „Запиши като“, така че файловете да се намират там, където тестът ги очаква.
Карта<Низ,Обект> параметри = на нови HashMap<>();
params.put(„поведение“, "позволява");
params.put(„Път за изтегляне“, „D:\\selenium-downloads“);
драйвер.executeCdpCommand(„Поведение при изтегляне на страница“, параметри);
драйвер.get(„https://demo.guru99.com/test/yahoo.html“);
driver.findElement(By.id(„изтегляне от messenger“)).щракване();
Можете да проверите изтеглянето, като проверите целевата директория за очакваното име на файла и проверите неговия размер, което прави теста детерминистичен без външни скриптове.













