Як передати та завантажити файл за допомогою 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 {
public static void головний(рядок[] аргументи) {
System.setProperty(«webdriver.gecko.driver»,«C:\\geckodriver.exe»);
рядок базоваUrl = «https://demo.guru99.com/test/upload/»;
веб-драйвер водій = new FirefoxВодій();
драйвер.get(базоваUrl);
Веб-елемент uploadElement = driver.findElement(By.id(«uploadfile_0»));
// введіть шлях до файлу в поле введення вибору файлу
uploadElement.sendKeys(«C:\\newhtml.html»);
// поставте прапорець «Я приймаю умови надання послуг»
driver.findElement(By.id(«терміни»)).клік();
// натискаємо кнопку «Завантажити файл»
driver.findElement(За.назвою("відіслати")).клік();
}
}
Після запуску цього сценарію ви зможете успішно завантажити файл і отримаєте подібне повідомлення.
Пам’ятайте про наступні дві речі під час завантаження файлів у WebDriver:
- Немає потреби імітувати натискання кнопки «Огляд». WebDriver автоматично вводить шлях до файлу в текстове поле вибору файлів елемент.
- Під час встановлення шляху до файлу у вашому Java IDE, використовуйте правильний escape-символ для зворотної косої риски.
Обробка діалогових вікон завантаження без вхідних даних за допомогою AutoIt
Коли на сторінці використовується власна кнопка «Огляд», а не нативна елемент, sendKeys() не працює. У такому випадку ви можете викликати скрипт AutoIt з Selenium введіть шлях до файлу в діалоговому вікні ОС і натисніть Enter.
Збережіть скрипт нижче як завантаження.au3, скомпілюйте його до upload.exe, а потім викликати його з Java після натискання кнопки «Огляд».
WinWaitActive("Відчинено")
Надіслати(«C:\newhtml.html»)
Надіслати(«{ВВЕДІТЬ}»)
З Java, запустіть помічник після кліку на кнопку «Огляд»:
Час виконання.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» і натисніть «ОК».
Введіть команду «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 {
public static void головний(рядок[] аргументи) {
System.setProperty(«webdriver.gecko.driver»,«C:\\geckodriver.exe»);
рядок базоваUrl = «https://demo.guru99.com/test/yahoo.html»;
веб-драйвер водій = new FirefoxВодій();
драйвер.get(базоваUrl);
Веб-елемент downloadButton = driver.findElement(By.id(«завантаження з месенджера»));
рядок sourceLocation = downloadButton.getAttribute(«href»);
рядок wget_command = «cmd /c C:\\Wget\\wget.exe -PD: –no-check-certificate» + Розташування джерела;
намагатися {
Процес exec = Runtime.getRuntime().exec(wget_command);
Int exitVal = exec.waitFor();
System.out.println («Вихідне значення:» + exitVal);
} зловити (Перерванеприйняття | IOException наприклад) {
System.out.println(наприклад, toString());
}
драйвер.close();
}
}
Після виконання цього коду перевірте свій диск D і переконайтеся, що Yahoo Messenger туди успішно завантажено інсталятор.
Налаштування власного шляху завантаження за допомогою Selenium 4 CDP
Selenium У версії 4 представлено протокол Chrome DevTools, який дозволяє керувати завантаженнями браузера без сторонніх інструментів. Наведений нижче фрагмент коду спрямовує всі завантаження до спеціальної папки та пропускає запит «Зберегти як», тому файли потрапляють туди, де їх очікує тест.
карта<рядок,Об'єкт> параметри = new ХешМап<>();
params.put(«поведінка», «дозволити»);
params.put(«Шлях завантаження», «D:\\selenium-завантаження»);
driver.executeCdpCommand(«Поведінка завантаження набору сторінок», параметри);
драйвер.get(«https://demo.guru99.com/test/yahoo.html»);
driver.findElement(By.id(«завантаження з месенджера»)).клік();
Ви можете перевірити завантаження, опитуючи цільовий каталог на наявність очікуваного імені файлу та перевіривши його розмір, що робить тест детермінованим без зовнішніх скриптів.












