Автоматизируйте загрузку изображений с помощью 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']);

Подробнее: https://playwright.dev/docs/input#upload-files

Используйте 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);
}}

Надеюсь, это сработает для вас.

Другие вопросы по тегам