Як передати та завантажити файл за допомогою Selenium

⚡ Розумний підсумок

Завантаження та завантаження файлу за допомогою Selenium Робочі процеси WebDriver покладаються на власну функцію sendKeys() для полів введення, AutoIt або Robot для діалогових вікон та команди CDP у Selenium 4 для встановлення безпечних шляхів завантаження під час автоматизованих запусків.

  • 📤 Спосіб завантаження: Використовуйте sendKeys() для елемента вхідних даних файлу, щоб передати абсолютний шлях до файлу без натискання кнопки «Огляд».
  • 📥 Шлях завантаження: Налаштуйте власний каталог завантажень через ChromeOptions або CDP Page.setDownloadBehavior у Selenium 4.
  • 🪟 Рідні діалоги: Запускати скрипти AutoIt або java.awt.Robot, коли засіб вибору файлів ОС блокує взаємодію WebDriver.
  • 🤖 Допомога AI: Генеративний ШІ пропонує селектори, створює файли тестових даних та автоматично перевіряє цілісність завантажених файлів.
  • 🛡️ Перевірка валідації: Підтвердьте успішне завантаження за допомогою повідомлень-відповідей та перевірте завантаження, використовуючи порівняння розміру файлу або контрольної суми.

Як передати та завантажити файл за допомогою Selenium

Завантаження файлів у WebDriver здійснюється простим використанням методу sendKeys() у полі вибору файлу, щоб ввести шлях до файлу, який потрібно завантажити. У цьому посібнику ви дізнаєтеся, як обробляти завантаження та вивантаження файлів за допомогою Selenium WebDriver.

Як завантажити файл в Selenium

Для цього розділу ми будемо використовувати https://demo.guru99.com/test/upload/ як наш тестовий додаток. Цей сайт дозволяє будь-якому відвідувачу легко завантажувати файли, не вимагаючи від них реєстрації.

Завантажити файл в Selenium
Керуйте спливаючим вікном завантаження файлу Selenium Веб-драйвер

Скажімо, ми хочемо завантажити файл “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(За.назвою("відіслати")).клік();
}
}

Після запуску цього сценарію ви зможете успішно завантажити файл і отримаєте подібне повідомлення.

Завантажити файл в Selenium

Пам’ятайте про наступні дві речі під час завантаження файлів у WebDriver:

  1. Немає потреби імітувати натискання кнопки «Огляд». WebDriver автоматично вводить шлях до файлу в текстове поле вибору файлів елемент.
  2. Під час встановлення шляху до файлу у вашому Java IDE, використовуйте правильний escape-символ для зворотної косої риски.

Завантажити файл в Selenium

Обробка діалогових вікон завантаження без вхідних даних за допомогою AutoIt

Коли на сторінці використовується власна кнопка «Огляд», а не нативна елемент, sendKeys() не працює. У такому випадку ви можете викликати скрипт AutoIt з Selenium введіть шлях до файлу в діалоговому вікні ОС і натисніть Enter.

Збережіть скрипт нижче як завантаження.au3, скомпілюйте його до upload.exe, а потім викликати його з Java після натискання кнопки «Огляд».

; upload.au3 – очікує діалогового вікна «Відкрити» та вводить шлях до файлу
WinWaitActive("Відчинено")
Надіслати(«C:\newhtml.html»)
Надіслати(«{ВВЕДІТЬ}»)

З Java, запустіть помічник після кліку на кнопку «Огляд»:

driver.findElement(By.id(«Кнопка перегляду»)).клік();
Час виконання.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, яку ви створили на попередньому кроці.

Налаштування Wget

Крок 2) Відкрийте «Виконати», натиснувши Windows клавіша + «R»; введіть «cmd» і натисніть «ОК».

Налаштування Wget

Введіть команду «cd /», щоб перейти до кореневого каталогу.

Налаштування Wget

Крок 3) Введіть команду, щоб перевірити, чи працює задана конфігурація.

cmd /c C:\\Wget\\wget.exe -ПК: –no-check-certificate https://demo.guru99.com/selenium/msgr11us.exe

Налаштування Wget

Здається, виникла проблема із записом на диск C.

Крок 4) Вам потрібно налагодити помилки wget у командному рядку, перш ніж виконувати код за допомогою Selenium WebDriver. Ці помилки залишатимуться в Eclipse і повідомлення про помилки не будуть такими інформативними. Найкраще спочатку запустити wget за допомогою командного рядка. Якщо він працює в командному рядку, він точно працюватиме в Eclipse.

У нашому прикладі, як показано на кроці 3, виникла проблема із записом на диск C. Давайте змінимо місце завантаження на диск D та перевіримо результати.

cmd /c C:\\Wget\\wget.exe -PD: –без перевірки сертифіката https://demo.guru99.com/selenium/msgr11us.exe

Налаштування Wget

Messenger було успішно завантажено.

Перш ніж продовжити, не забудьте видалити завантажений файл.

Використання WebDriver і Wget

У наступному прикладі ми використаємо WebDriver і wget для завантаження популярного програмного забезпечення для чату під назвою Yahoo MessengerНаша база URL має бути https://demo.guru99.com/test/yahoo.html.

Використання WebDriver і Wget

Крок 1) Імпортуйте пакет «java.io.IOException», тому що нам доведеться перехопити IOException пізніше на кроці 4.

Використання WebDriver і Wget

Крок 2) Використайте getAttribute(), щоб отримати значення «href» посилання для завантаження та зберегти його як змінну типу String. У цьому випадку ми назвали змінну «sourceLocation».

Використання WebDriver і Wget

Крок 3) Налаштуйте синтаксис для wget за допомогою наступної команди.

Використання WebDriver і Wget

Крок 4) Розпочніть процес завантаження, викликавши wget із нашого коду WebDriver.

Використання WebDriver і Wget

Підводячи підсумок, ваш код 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 туди успішно завантажено інсталятор.

Використання WebDriver і Wget

Налаштування власного шляху завантаження за допомогою Selenium 4 CDP

Selenium У версії 4 представлено протокол Chrome DevTools, який дозволяє керувати завантаженнями браузера без сторонніх інструментів. Наведений нижче фрагмент коду спрямовує всі завантаження до спеціальної папки та пропускає запит «Зберегти як», тому файли потрапляють туди, де їх очікує тест.

Драйвер Chrome водій = new Драйвер Chrome();
карта<рядок,Об'єкт> параметри = new ХешМап<>();
params.put(«поведінка», «дозволити»);
params.put(«Шлях завантаження», «D:\\selenium-завантаження»);
driver.executeCdpCommand(«Поведінка завантаження набору сторінок», параметри);
драйвер.get(«https://demo.guru99.com/test/yahoo.html»);
driver.findElement(By.id(«завантаження з месенджера»)).клік();

Ви можете перевірити завантаження, опитуючи цільовий каталог на наявність очікуваного імені файлу та перевіривши його розмір, що робить тест детермінованим без зовнішніх скриптів.

Поширені запитання

Selenium викликає sendKeys() на елемент з абсолютним шляхом до файлу. Браузер заповнює поле безпосередньо, тому вибір файлів ОС не відкривається, і клік на кнопці «Огляд» не потрібен.

Коли сторінка не надає файловий вхід, використовуйте AutoIt. Windows або клас java.awt.Robot. Ці інструменти вводять шлях в активне діалогове вікно ОС і натискають Enter після натискання кнопки «Огляд».

Викличте executeCdpCommand(“Page.setDownloadBehavior”, params) із встановленим behavior на allow та downloadPath на вашу папку. Selenium 4 пересилає команду до Chrome DevTools, а запит «Зберегти як» пропускається.

Так. Помічники ШІ читають вашу форму завантаження, пропонують селектори, генерують граничні файли, такі як порожні, завеликі або зразки з неправильним розширенням, та записують блок sendKeys(). Це скорочує час налаштування та виявляє граничні випадки, які тестувальники-люди часто пропускають.

Інструменти AI опитувати цільову папку, порівнювати розмір файлу та контрольну суму з очікуваними значеннями, а також позначати невідповідності. Моделі візуального аналізу можуть навіть відкривати PDF-файли або зображення та перевіряти відповідність вмісту мітці посилання, що усуває ручну перевірку під час регресійних прогонів.

Wget повністю обходить браузер і зберігає файл безпосередньо на диск через командний рядок. Це корисно для застарілих версій. Selenium 2 або 3 налаштування, де налаштування завантаження CDP та ChromeOptions недоступні.

Підсумуйте цей пост за допомогою: