1

我公司的网站上有一个非传统的图片上传按钮。我想要一种使用此按钮上传图像的自动方式,但不必使用 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?

4

2 回答 2

0

使用 JACOB 它提供了 java 本地接口,您可以在其中使用带有 selenium 的 AutoIt 功能 这里是一个示例,我在大多数地方都使用它,例如 MSTeams、Slack for Automation[Upload Feature] 它可以完成这项工作。

在跳转到代码之前您需要执行的步骤列表:

第 1 步:下载 JACOB jar

第 2 步:注册 AutoIt COM 库,例如 regsvr32 AutoItX3_x64.dll

在您的代码中使用这些

  • 雅各布.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);
}}

我希望这个对你有用。

于 2020-02-21T12:27:56.410 回答
0
于 2022-02-19T17:46:46.223 回答