Автоматизируйте загрузку изображений с Selenium, но без AutoIt - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть нетрадиционная кнопка загрузки изображений на веб-сайте моей компании. Я хочу иметь автоматический способ загрузки изображения с помощью этой кнопки, но без необходимости использования такого инструмента, как 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, я не думаю, что смогу использовать функцию sendKeys() Selenium для ввода местоположения файла изображения на моем компьютере.

Есть ли какой-нибудь хак или обходной путь для загрузки изображения? Я рассматривал такие вещи, как перезапись функции onClick() для чтения из указанного местоположения (этот подход на самом деле не выглядит выполнимым) или, возможно, перехват события, которое открывает проводник файлов и попытка взломать мой путь оттуда, но это всего лишь неподдерживаемые и непроверенные подходы к решению проблемы.

Возможно ли сделать это в другом инструменте автоматизации браузера, например, в Microsoft Playwright?

1 Ответ

0 голосов
/ 21 февраля 2020

Используйте JACOB, он предоставляет java собственный интерфейс, где вы можете использовать функции AutoIt с селеном. Вот пример, который я использую в большинстве мест, таких как MSTeams, Slack for Automation [Upload Feature], он делает свою работу.

Список шагов, которые необходимо выполнить перед переходом к коду:

Шаг 1: Загрузите JACOB jar

Шаг 2: Зарегистрируйте библиотеки AutoIt COM, например, regsvr32 AutoItX3_x64.dll

Используйте их в своем коде

  • jacob.jar
  • AutoItX4 Java .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);
}}

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

...