Автоматизируйте загрузку изображений с помощью Selenium, но без AutoIt
У меня есть нетрадиционная кнопка загрузки изображений на веб-сайте моей компании. Я хочу иметь автоматический способ загрузки изображения с помощью этой кнопки, но без использования такого инструмента, как AutoIt, для взаимодействия с проводником файлов.
Вот образец HTML этой кнопки:
<button ng-click="onClick()" ng-disabled="readOnly" accepted-types="image/*" on-files-selected="onFilesSelected" allow-multiple="true" readonly="readonly">Add images</button>
Это немного отличается от обычного input
элемент, например <input type="file">
, и он использует AngularJS. Поскольку это неinput
элемент, я не думаю, что могу использовать Selenium sendKeys()
функция для ввода местоположения файла изображения на моем компьютере.
Есть ли какой-нибудь способ или обходной путь для загрузки изображения? Я думал о перезаписиonClick()
функция для чтения из указанного места (этот подход на самом деле не кажется выполнимым) или, возможно, перехват события, которое открывает проводник файлов и пытается взломать мой путь оттуда, но все это просто неподдерживаемые и непроверенные подходы к решение проблемы.
Можно ли сделать это в другом инструменте автоматизации браузера, например Playwright от Microsoft?
2 ответа
С драматургом это возможно на 100% и намного проще, чем в Selenium.
// Select one file
await page.setInputFiles('input#upload', 'myfile.pdf');
// Select multiple files
await page.setInputFiles('input#upload', ['file1.txt', 'file2.txt']);
Используйте JACOB, он предоставляет собственный Java-интерфейс, в котором вы можете использовать функции AutoIt с селеном. Вот образец, который я использую в большинстве мест, таких как MSTeams,Slack для автоматизации [Функция загрузки], он выполняет свою работу.
Список шагов, которые необходимо выполнить перед переходом к коду:
Шаг 1. Загрузите JACOB jar
Шаг 2: Зарегистрируйте библиотеки AutoIt COM, например regsvr32 AutoItX3_x64.dll
Используйте их в своем коде
- jacob.jar
- AutoItX4Java.jar
- jacob-1.18-x64.dll
- jacob-1.18-x86.dll
Образец кода:
[Этот код взаимодействует с файловым проводником]
import com.jacob.com.LibraryLoader;
import autoitx4java.AutoItX;
public class Attachments {
public void uploadAttachments(){
File f = new File("Location");
File[] fil =f.listFiles();
//Upload Button Xpath
WebElement uploadFromComp = driver.findElement(By.xpath("//span[contains(text(),'Upload from my computer')]"));
uploadFromComp.click();
Thread.sleep(5000);
String jacobDllVersionToUse;
if (jvmBitVersion().contains("32")) {
jacobDllVersionToUse = "jacob-1.19-x86.dll";
} else {
jacobDllVersionToUse = "jacob-1.19-x64.dll";
}
File file1 = new File("registerAutoItDll", jacobDllVersionToUse);
System.setProperty(LibraryLoader.JACOB_DLL_PATH, file1.getAbsolutePath());
AutoItX x = new AutoItX();
x.winWaitActive("Open");
x.sleep(5000);
x.send(fil[j].getAbsolutePath());
x.send("{ENTER}", false);
}}
Надеюсь, это сработает для вас.