我知道Selify中存在某种错误,会导致一次上传多个文件时遇到麻烦(我使用的是V4.4.0).当我try 这样做时,我可以上传第一个文件,但列表中的第二个文件将与第一个和第三个文件一起上传,以及第一个和第二个文件,结果是3x1文件,2x2文件,1x3文件.

每当我需要上传多个文件时,我会访问上传位置,上传第一个文件,保存,返回,然后再次访问并上传第二个文件,依此类推.但从技术上讲,它通过一次上传调用了几次方法.

现在我已经就位,这样的战术是不能 Select 的.我读到使用\n作为文件字符串的分隔符可能会有帮助,但它似乎对我不起作用.

如果只发送一个文件(filepaths是仅包含一个元素的列表),则可以很好地工作.

    public ApplyFilesPO uploadFile(@NotNull List<String> filepaths) {
        String filepath = String.join("\n", filepaths);
        uploadFilePO.uploadFile(filepath, fileInput, progressBar);
        return this; // doesn't work if list contains more than 1 element
    }

这是UploadFilePO#uploadFile(String, By, By)种方法:

    public void uploadFile(String filename, By input, By progressBar) {
        File file = new File(Objects
                .requireNonNull(getClass().getClassLoader().getResource(filename))
                .getFile());
        getExistingElement(input).sendKeys(file.toString());
        waitForElementToDisappear(progressBar);
    }

输入为2px x 0px元素,真实用户只需点击某个按钮即可打开 Select 文件窗口.

getExistingElement:

    protected final WebElement getExistingElement(By locator) {
        return wait.until(ExpectedConditions.presenceOfElementLocated(locator));
    }

waitForElementToDisappear(上传文件后立即显示进度条,上传后进度条消失,所以我添加了此方法以确保上传完成:

    protected final <T> void waitForElementToDisappear(T locator) {
        wait.until(isBy(locator)
                ? ExpectedConditions.invisibilityOfElementLocated((By) locator)
                : ExpectedConditions.invisibilityOf((WebElement) locator));
    }

推荐答案

我找到了我的问题的答案.必须为输入元素提供一个字符串,该字符串包含要上载的文件的绝对路径,并以"\n"连接.

这就是我现在使用的一段代码:

    public void uploadFiles(@NotNull List<String> filenames, By input, By progressBar) {
        String upload = String.join(" \n ", filenames
                .stream()
                .map(filename -> new File(Objects.requireNonNull(
                        getClass().getClassLoader().getResource(filename)).getFile()).getAbsolutePath())
                .toList());
        getExistingElement(input).sendKeys(upload);
        wait.until(ExpectedConditions.invisibilityOfAllElements(driver.findElements(progressBar)));
    }

Java相关问答推荐

基于仅存在于父级中的字段查询子文档?

具有默认分支的JUnit代码覆盖率切换声明

CriteriaQuery with max

H2弹簧靴试验跌落台

无法在WebSocket onMessage中捕获错误

如何创建一个2d自上而下的移动系统,其中移动,同时持有两个关键是可能的处理?

在运行MVN测试时,为什么构建失败,并显示了java.lang.ClassNotFoundException:java.net.http.HttpResponse?

暂停计时器

我正在try 跟踪数组中最大的两个数字

测试容器无法加载类路径初始化脚本

@Rollback @ Transmission在验收测试中不工作

Java构造函数分支

Spring-Boot Kafka应用程序到GraalVM本机映像-找不到org.apache.kafka.streams.processor.internals.DefaultKafkaClientSupplier

SpringBoot:在条件{Variable}.isBlank/{Variable}.isEmpty不起作用的情况下进行路径变量验证

将关闭拍卖的TimerService

在JDK Flight Recorder中只记录单个线程

如何使用jooq更新记录?

如何在Maven Central上部署?

JavaFX:为什么我的ComboBox添加了一个不必要的单元格的一部分?

一条Java记录可以保存多少个字段?